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