File: incdec_alt.c

package info (click to toggle)
valgrind 1%3A3.12.0~svn20160714-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 120,428 kB
  • ctags: 70,855
  • sloc: ansic: 674,645; exp: 26,134; xml: 21,574; asm: 7,570; cpp: 7,567; makefile: 7,380; sh: 6,188; perl: 5,855; haskell: 195
file content (69 lines) | stat: -rw-r--r-- 1,138 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

/* A test of the alternative (redundant) encodings for {inc,dec}{w,l}. */

#include "tests/asm.h"
#include <stdio.h>

int r1,r2,r3,r4,r5,r6,r7,r8,a1,a2;

extern void foo ( void );
asm("\n"
VG_SYM(foo) ":\n"
"\tpushl $0\n"
"\tpopfl\n"
"\tmovl " VG_SYM(a1) ",%eax\n"
"\tmovl " VG_SYM(a2) ",%edx\n"

/* inc %eax */
"\t.byte 0xFF\n"
"\t.byte 0xC0\n"

"\tmovl %eax," VG_SYM(r1) "\n"
"\tpushfl\n"
"\tpopl " VG_SYM(r2) "\n"

/* inc %dx */
"\t.byte 0x66\n"
"\t.byte 0xFF\n"
"\t.byte 0xC2\n"

"\tmovl %edx," VG_SYM(r3) "\n"
"\tpushfl\n"
"\tpopl " VG_SYM(r4) "\n"

/* dec %edx */
"\t.byte 0xFF\n"
"\t.byte 0xCA\n"

"\tmovl %edx," VG_SYM(r5) "\n"
"\tpushfl\n"
"\tpopl " VG_SYM(r6) "\n"

/* dec %ax */
"\t.byte 0x66\n"
"\t.byte 0xFF\n"
"\t.byte 0xC8\n"

"\tmovl %eax," VG_SYM(r7) "\n"
"\tpushfl\n"
"\tpopl " VG_SYM(r8) "\n"

"\tret\n"
);

int main ( void )
{
  a1 = 0x77777777;
  a2 = 0x88888888;
  r1=r2=r3=r4=r5=r6=r7=r8=0;
  foo();
  printf("0x%08x\n",r1);
  printf("0x%08x\n",r2);
  printf("0x%08x\n",r3);
  printf("0x%08x\n",r4);
  printf("0x%08x\n",r5);
  printf("0x%08x\n",r6);
  printf("0x%08x\n",r7);
  printf("0x%08x\n",r8);
  return 0;
}