summaryrefslogtreecommitdiff
path: root/gen_x86.c
diff options
context:
space:
mode:
authorMike Pavone <pavone@retrodev.com>2012-12-31 20:09:09 -0800
committerMike Pavone <pavone@retrodev.com>2012-12-31 20:09:09 -0800
commit3650cd8a6c31904714a01b45c3408d8303de8727 (patch)
tree4f134159b45a8ccd9ff8a52e44bd1dd35189c7c2 /gen_x86.c
parent1fb2ab20f93add38a432403b38fe18f6c9e9ec76 (diff)
Implement most of the "X" instructions
Diffstat (limited to 'gen_x86.c')
-rw-r--r--gen_x86.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/gen_x86.c b/gen_x86.c
index bd4c2a4..ee0114d 100644
--- a/gen_x86.c
+++ b/gen_x86.c
@@ -654,6 +654,31 @@ uint8_t * add_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst,
return x86_rrdisp8_sizedir(out, OP_ADD, dst, src_base, disp, size, BIT_DIR);
}
+uint8_t * adc_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size)
+{
+ return x86_rr_sizedir(out, OP_ADC, src, dst, size);
+}
+
+uint8_t * adc_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size)
+{
+ return x86_ir(out, OP_IMMED_ARITH, OP_EX_ADCI, OP_ADC, val, dst, size);
+}
+
+uint8_t * adc_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size)
+{
+ return x86_irdisp8(out, OP_IMMED_ARITH, OP_EX_ADCI, val, dst_base, disp, size);
+}
+
+uint8_t * adc_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size)
+{
+ return x86_rrdisp8_sizedir(out, OP_ADC, src, dst_base, disp, size, 0);
+}
+
+uint8_t * adc_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size)
+{
+ return x86_rrdisp8_sizedir(out, OP_ADC, dst, src_base, disp, size, BIT_DIR);
+}
+
uint8_t * or_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size)
{
return x86_rr_sizedir(out, OP_OR, src, dst, size);
@@ -753,6 +778,31 @@ uint8_t * sub_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst,
return x86_rrdisp8_sizedir(out, OP_SUB, dst, src_base, disp, size, BIT_DIR);
}
+uint8_t * sbb_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size)
+{
+ return x86_rr_sizedir(out, OP_SBB, src, dst, size);
+}
+
+uint8_t * sbb_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size)
+{
+ return x86_ir(out, OP_IMMED_ARITH, OP_EX_SBBI, OP_SBB, val, dst, size);
+}
+
+uint8_t * sbb_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size)
+{
+ return x86_irdisp8(out, OP_IMMED_ARITH, OP_EX_SBBI, val, dst_base, disp, size);
+}
+
+uint8_t * sbb_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size)
+{
+ return x86_rrdisp8_sizedir(out, OP_SBB, src, dst_base, disp, size, 0);
+}
+
+uint8_t * sbb_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size)
+{
+ return x86_rrdisp8_sizedir(out, OP_SBB, dst, src_base, disp, size, BIT_DIR);
+}
+
uint8_t * cmp_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size)
{
return x86_rr_sizedir(out, OP_CMP, src, dst, size);