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
);