93 |
{ |
{ |
94 |
int cf, pf, af, zf, sf, of; |
int cf, pf, af, zf, sf, of; |
95 |
int src1, src2; |
int src1, src2; |
96 |
src1 = CC_SRC; |
src1 = CC_DST + CC_SRC; |
97 |
src2 = CC_SRC - CC_DST; |
src2 = CC_SRC; |
98 |
cf = (DATA_TYPE)src1 < (DATA_TYPE)src2; |
cf = (DATA_TYPE)src1 < (DATA_TYPE)src2; |
99 |
pf = parity_table[(uint8_t)CC_DST]; |
pf = parity_table[(uint8_t)CC_DST]; |
100 |
af = (CC_DST ^ src1 ^ src2) & 0x10; |
af = (CC_DST ^ src1 ^ src2) & 0x10; |
107 |
static int glue(compute_c_sub, SUFFIX)(void) |
static int glue(compute_c_sub, SUFFIX)(void) |
108 |
{ |
{ |
109 |
int src1, src2, cf; |
int src1, src2, cf; |
110 |
src1 = CC_SRC; |
src1 = CC_DST + CC_SRC; |
111 |
src2 = CC_SRC - CC_DST; |
src2 = CC_SRC; |
112 |
cf = (DATA_TYPE)src1 < (DATA_TYPE)src2; |
cf = (DATA_TYPE)src1 < (DATA_TYPE)src2; |
113 |
return cf; |
return cf; |
114 |
} |
} |
117 |
{ |
{ |
118 |
int cf, pf, af, zf, sf, of; |
int cf, pf, af, zf, sf, of; |
119 |
int src1, src2; |
int src1, src2; |
120 |
src1 = CC_SRC; |
src1 = CC_DST + CC_SRC + 1; |
121 |
src2 = CC_SRC - CC_DST - 1; |
src2 = CC_SRC; |
122 |
cf = (DATA_TYPE)src1 <= (DATA_TYPE)src2; |
cf = (DATA_TYPE)src1 <= (DATA_TYPE)src2; |
123 |
pf = parity_table[(uint8_t)CC_DST]; |
pf = parity_table[(uint8_t)CC_DST]; |
124 |
af = (CC_DST ^ src1 ^ src2) & 0x10; |
af = (CC_DST ^ src1 ^ src2) & 0x10; |
131 |
static int glue(compute_c_sbb, SUFFIX)(void) |
static int glue(compute_c_sbb, SUFFIX)(void) |
132 |
{ |
{ |
133 |
int src1, src2, cf; |
int src1, src2, cf; |
134 |
src1 = CC_SRC; |
src1 = CC_DST + CC_SRC + 1; |
135 |
src2 = CC_SRC - CC_DST - 1; |
src2 = CC_SRC; |
136 |
cf = (DATA_TYPE)src1 <= (DATA_TYPE)src2; |
cf = (DATA_TYPE)src1 <= (DATA_TYPE)src2; |
137 |
return cf; |
return cf; |
138 |
} |
} |
234 |
void OPPROTO glue(op_jb_sub, SUFFIX)(void) |
void OPPROTO glue(op_jb_sub, SUFFIX)(void) |
235 |
{ |
{ |
236 |
int src1, src2; |
int src1, src2; |
237 |
src1 = CC_SRC; |
src1 = CC_DST + CC_SRC; |
238 |
src2 = CC_SRC - CC_DST; |
src2 = CC_SRC; |
239 |
|
|
240 |
if ((DATA_TYPE)src1 < (DATA_TYPE)src2) |
if ((DATA_TYPE)src1 < (DATA_TYPE)src2) |
241 |
JUMP_TB(PARAM1, 0, PARAM2); |
JUMP_TB(PARAM1, 0, PARAM2); |
256 |
void OPPROTO glue(op_jbe_sub, SUFFIX)(void) |
void OPPROTO glue(op_jbe_sub, SUFFIX)(void) |
257 |
{ |
{ |
258 |
int src1, src2; |
int src1, src2; |
259 |
src1 = CC_SRC; |
src1 = CC_DST + CC_SRC; |
260 |
src2 = CC_SRC - CC_DST; |
src2 = CC_SRC; |
261 |
|
|
262 |
if ((DATA_TYPE)src1 <= (DATA_TYPE)src2) |
if ((DATA_TYPE)src1 <= (DATA_TYPE)src2) |
263 |
JUMP_TB(PARAM1, 0, PARAM2); |
JUMP_TB(PARAM1, 0, PARAM2); |
278 |
void OPPROTO glue(op_jl_sub, SUFFIX)(void) |
void OPPROTO glue(op_jl_sub, SUFFIX)(void) |
279 |
{ |
{ |
280 |
int src1, src2; |
int src1, src2; |
281 |
src1 = CC_SRC; |
src1 = CC_DST + CC_SRC; |
282 |
src2 = CC_SRC - CC_DST; |
src2 = CC_SRC; |
283 |
|
|
284 |
if ((DATA_STYPE)src1 < (DATA_STYPE)src2) |
if ((DATA_STYPE)src1 < (DATA_STYPE)src2) |
285 |
JUMP_TB(PARAM1, 0, PARAM2); |
JUMP_TB(PARAM1, 0, PARAM2); |
291 |
void OPPROTO glue(op_jle_sub, SUFFIX)(void) |
void OPPROTO glue(op_jle_sub, SUFFIX)(void) |
292 |
{ |
{ |
293 |
int src1, src2; |
int src1, src2; |
294 |
src1 = CC_SRC; |
src1 = CC_DST + CC_SRC; |
295 |
src2 = CC_SRC - CC_DST; |
src2 = CC_SRC; |
296 |
|
|
297 |
if ((DATA_STYPE)src1 <= (DATA_STYPE)src2) |
if ((DATA_STYPE)src1 <= (DATA_STYPE)src2) |
298 |
JUMP_TB(PARAM1, 0, PARAM2); |
JUMP_TB(PARAM1, 0, PARAM2); |
361 |
void OPPROTO glue(op_setb_T0_sub, SUFFIX)(void) |
void OPPROTO glue(op_setb_T0_sub, SUFFIX)(void) |
362 |
{ |
{ |
363 |
int src1, src2; |
int src1, src2; |
364 |
src1 = CC_SRC; |
src1 = CC_DST + CC_SRC; |
365 |
src2 = CC_SRC - CC_DST; |
src2 = CC_SRC; |
366 |
|
|
367 |
T0 = ((DATA_TYPE)src1 < (DATA_TYPE)src2); |
T0 = ((DATA_TYPE)src1 < (DATA_TYPE)src2); |
368 |
} |
} |
375 |
void OPPROTO glue(op_setbe_T0_sub, SUFFIX)(void) |
void OPPROTO glue(op_setbe_T0_sub, SUFFIX)(void) |
376 |
{ |
{ |
377 |
int src1, src2; |
int src1, src2; |
378 |
src1 = CC_SRC; |
src1 = CC_DST + CC_SRC; |
379 |
src2 = CC_SRC - CC_DST; |
src2 = CC_SRC; |
380 |
|
|
381 |
T0 = ((DATA_TYPE)src1 <= (DATA_TYPE)src2); |
T0 = ((DATA_TYPE)src1 <= (DATA_TYPE)src2); |
382 |
} |
} |
389 |
void OPPROTO glue(op_setl_T0_sub, SUFFIX)(void) |
void OPPROTO glue(op_setl_T0_sub, SUFFIX)(void) |
390 |
{ |
{ |
391 |
int src1, src2; |
int src1, src2; |
392 |
src1 = CC_SRC; |
src1 = CC_DST + CC_SRC; |
393 |
src2 = CC_SRC - CC_DST; |
src2 = CC_SRC; |
394 |
|
|
395 |
T0 = ((DATA_STYPE)src1 < (DATA_STYPE)src2); |
T0 = ((DATA_STYPE)src1 < (DATA_STYPE)src2); |
396 |
} |
} |
398 |
void OPPROTO glue(op_setle_T0_sub, SUFFIX)(void) |
void OPPROTO glue(op_setle_T0_sub, SUFFIX)(void) |
399 |
{ |
{ |
400 |
int src1, src2; |
int src1, src2; |
401 |
src1 = CC_SRC; |
src1 = CC_DST + CC_SRC; |
402 |
src2 = CC_SRC - CC_DST; |
src2 = CC_SRC; |
403 |
|
|
404 |
T0 = ((DATA_STYPE)src1 <= (DATA_STYPE)src2); |
T0 = ((DATA_STYPE)src1 <= (DATA_STYPE)src2); |
405 |
} |
} |
714 |
{ |
{ |
715 |
int cf; |
int cf; |
716 |
cf = cc_table[CC_OP].compute_c(); |
cf = cc_table[CC_OP].compute_c(); |
|
CC_SRC = T0; |
|
717 |
T0 = T0 + T1 + cf; |
T0 = T0 + T1 + cf; |
|
CC_DST = T0; |
|
718 |
CC_OP = CC_OP_ADDB + SHIFT + cf * 3; |
CC_OP = CC_OP_ADDB + SHIFT + cf * 3; |
719 |
} |
} |
720 |
|
|
722 |
{ |
{ |
723 |
int cf; |
int cf; |
724 |
cf = cc_table[CC_OP].compute_c(); |
cf = cc_table[CC_OP].compute_c(); |
|
CC_SRC = T0; |
|
725 |
T0 = T0 - T1 - cf; |
T0 = T0 - T1 - cf; |
|
CC_DST = T0; |
|
726 |
CC_OP = CC_OP_SUBB + SHIFT + cf * 3; |
CC_OP = CC_OP_SUBB + SHIFT + cf * 3; |
727 |
} |
} |
728 |
|
|
729 |
void OPPROTO glue(glue(op_cmpxchg, SUFFIX), _T0_T1_EAX_cc)(void) |
void OPPROTO glue(glue(op_cmpxchg, SUFFIX), _T0_T1_EAX_cc)(void) |
730 |
{ |
{ |
731 |
CC_SRC = EAX; |
CC_SRC = T0; |
732 |
CC_DST = EAX - T0; |
CC_DST = EAX - T0; |
733 |
if ((DATA_TYPE)CC_DST == 0) { |
if ((DATA_TYPE)CC_DST == 0) { |
734 |
T0 = T1; |
T0 = T1; |