comparison gen_x86.c @ 194:811163790e6c

Implement ABCD an SBCD. Fix BTEST with register source.
author Mike Pavone <pavone@retrodev.com>
date Wed, 16 Jan 2013 22:40:56 -0800
parents 6b593ea0ed90
children c82f65a87a53
comparison
equal deleted inserted replaced
193:c66e4636f991 194:811163790e6c
126 } 126 }
127 if (size == SZ_B && dst >= RSP && dst <= RDI) { 127 if (size == SZ_B && dst >= RSP && dst <= RDI) {
128 opcode |= BIT_DIR; 128 opcode |= BIT_DIR;
129 tmp = dst; 129 tmp = dst;
130 dst = src; 130 dst = src;
131 src = dst; 131 src = tmp;
132 } 132 }
133 if (size == SZ_Q || src >= R8 || dst >= R8 || (size == SZ_B && src >= RSP && src <= RDI)) { 133 if (size == SZ_Q || src >= R8 || dst >= R8 || (size == SZ_B && src >= RSP && src <= RDI)) {
134 *out = PRE_REX; 134 *out = PRE_REX;
135 if (size == SZ_Q) { 135 if (size == SZ_Q) {
136 *out |= REX_QUAD; 136 *out |= REX_QUAD;
1376 return bit_irdisp8(out, OP_EX_BT, val, dst_base, dst_disp, size); 1376 return bit_irdisp8(out, OP_EX_BT, val, dst_base, dst_disp, size);
1377 } 1377 }
1378 1378
1379 uint8_t * bts_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size) 1379 uint8_t * bts_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size)
1380 { 1380 {
1381 return bit_rr(out, OP2_BT, src, dst, size); 1381 return bit_rr(out, OP2_BTS, src, dst, size);
1382 } 1382 }
1383 1383
1384 uint8_t * bts_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t dst_disp, uint8_t size) 1384 uint8_t * bts_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t dst_disp, uint8_t size)
1385 { 1385 {
1386 return bit_rrdisp8(out, OP2_BT, src, dst_base, dst_disp, size); 1386 return bit_rrdisp8(out, OP2_BTS, src, dst_base, dst_disp, size);
1387 } 1387 }
1388 1388
1389 uint8_t * bts_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size) 1389 uint8_t * bts_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size)
1390 { 1390 {
1391 return bit_ir(out, OP_EX_BTS, val, dst, size); 1391 return bit_ir(out, OP_EX_BTS, val, dst, size);