1
2/* A test of the alternative (redundant) encodings for {inc,dec}{w,l}. */
3
4#include "tests/asm.h"
5#include <stdio.h>
6
7int r1,r2,r3,r4,r5,r6,r7,r8,a1,a2;
8
9extern void foo ( void );
10asm("\n"
11VG_SYM(foo) ":\n"
12"\tpushl $0\n"
13"\tpopfl\n"
14"\tmovl " VG_SYM(a1) ",%eax\n"
15"\tmovl " VG_SYM(a2) ",%edx\n"
16
17/* inc %eax */
18"\t.byte 0xFF\n"
19"\t.byte 0xC0\n"
20
21"\tmovl %eax," VG_SYM(r1) "\n"
22"\tpushfl\n"
23"\tpopl " VG_SYM(r2) "\n"
24
25/* inc %dx */
26"\t.byte 0x66\n"
27"\t.byte 0xFF\n"
28"\t.byte 0xC2\n"
29
30"\tmovl %edx," VG_SYM(r3) "\n"
31"\tpushfl\n"
32"\tpopl " VG_SYM(r4) "\n"
33
34/* dec %edx */
35"\t.byte 0xFF\n"
36"\t.byte 0xCA\n"
37
38"\tmovl %edx," VG_SYM(r5) "\n"
39"\tpushfl\n"
40"\tpopl " VG_SYM(r6) "\n"
41
42/* dec %ax */
43"\t.byte 0x66\n"
44"\t.byte 0xFF\n"
45"\t.byte 0xC8\n"
46
47"\tmovl %eax," VG_SYM(r7) "\n"
48"\tpushfl\n"
49"\tpopl " VG_SYM(r8) "\n"
50
51"\tret\n"
52);
53
54int main ( void )
55{
56  a1 = 0x77777777;
57  a2 = 0x88888888;
58  r1=r2=r3=r4=r5=r6=r7=r8=0;
59  foo();
60  printf("0x%08x\n",r1);
61  printf("0x%08x\n",r2);
62  printf("0x%08x\n",r3);
63  printf("0x%08x\n",r4);
64  printf("0x%08x\n",r5);
65  printf("0x%08x\n",r6);
66  printf("0x%08x\n",r7);
67  printf("0x%08x\n",r8);
68  return 0;
69}
70