2 #define exec_op glue(exec_, OP)
3 #define exec_opl glue(glue(exec_, OP), l)
4 #define exec_opw glue(glue(exec_, OP), w)
5 #define exec_opb glue(glue(exec_, OP), b)
7 #define EXECOP2(size, res, s1, flags) \
10 stringify(OP) size " %" size "2, %" size "0\n\t" \
13 : "=q" (res), "=g" (flags)\
14 : "q" (s1), "0" (res), "1" (flags));
16 #define EXECOP1(size, res, flags) \
19 stringify(OP) size " %" size "0\n\t" \
22 : "=q" (res), "=g" (flags)\
23 : "0" (res), "1" (flags));
26 void exec_opl(int s0, int s1, int iflags)
31 EXECOP1("", res, flags);
32 printf("%-10s A=%08x R=%08x CCIN=%04x CC=%04x\n",
33 stringify(OP) "l", s0, res, iflags, flags & CC_MASK);
36 void exec_opw(int s0, int s1, int iflags)
41 EXECOP1("w", res, flags);
42 printf("%-10s A=%08x R=%08x CCIN=%04x CC=%04x\n",
43 stringify(OP) "w", s0, res, iflags, flags & CC_MASK);
46 void exec_opb(int s0, int s1, int iflags)
51 EXECOP1("b", res, flags);
52 printf("%-10s A=%08x R=%08x CCIN=%04x CC=%04x\n",
53 stringify(OP) "b", s0, res, iflags, flags & CC_MASK);
56 void exec_opl(int s0, int s1, int iflags)
61 EXECOP2("", res, s1, flags);
62 printf("%-10s A=%08x B=%08x R=%08x CCIN=%04x CC=%04x\n",
63 stringify(OP) "l", s0, s1, res, iflags, flags & CC_MASK);
66 void exec_opw(int s0, int s1, int iflags)
71 EXECOP2("w", res, s1, flags);
72 printf("%-10s A=%08x B=%08x R=%08x CCIN=%04x CC=%04x\n",
73 stringify(OP) "w", s0, s1, res, iflags, flags & CC_MASK);
76 void exec_opb(int s0, int s1, int iflags)
81 EXECOP2("b", res, s1, flags);
82 printf("%-10s A=%08x B=%08x R=%08x CCIN=%04x CC=%04x\n",
83 stringify(OP) "b", s0, s1, res, iflags, flags & CC_MASK);
87 void exec_op(int s0, int s1)
93 exec_opl(s0, s1, CC_C);
94 exec_opw(s0, s1, CC_C);
95 exec_opb(s0, s1, CC_C);
99 void glue(test_, OP)(void)
101 exec_op(0x12345678, 0x812FADA);
102 exec_op(0x12341, 0x12341);
103 exec_op(0x12341, -0x12341);
104 exec_op(0xffffffff, 0);
105 exec_op(0xffffffff, -1);
106 exec_op(0xffffffff, 1);
107 exec_op(0xffffffff, 2);
108 exec_op(0x7fffffff, 0);
109 exec_op(0x7fffffff, 1);
110 exec_op(0x7fffffff, -1);
111 exec_op(0x80000000, -1);
112 exec_op(0x80000000, 1);
113 exec_op(0x80000000, -2);
114 exec_op(0x12347fff, 0);
115 exec_op(0x12347fff, 1);
116 exec_op(0x12347fff, -1);
117 exec_op(0x12348000, -1);
118 exec_op(0x12348000, 1);
119 exec_op(0x12348000, -2);
120 exec_op(0x12347f7f, 0);
121 exec_op(0x12347f7f, 1);
122 exec_op(0x12347f7f, -1);
123 exec_op(0x12348080, -1);
124 exec_op(0x12348080, 1);
125 exec_op(0x12348080, -2);
128 void *glue(_test_, OP) __init_call = glue(test_, OP);