summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJukka Ojanen <jukka.ojanen@linkotec.net>2014-11-09 13:52:52 +0200
committerJukka Ojanen <jukka.ojanen@linkotec.net>2014-11-09 13:52:52 +0200
commitf342eb3215720f9c2fe621e3445484d55c00ff3d (patch)
treeea5080fa4a92bb07153d7ba58e732b1bc794966b
parent89560561f49db1b5ed838b934256a2e38566da88 (diff)
downloadffts-f342eb3215720f9c2fe621e3445484d55c00ff3d.zip
ffts-f342eb3215720f9c2fe621e3445484d55c00ff3d.tar.gz
Added x64_sse_movaps_memindex_reg and x64_sse_movaps_reg_memindex
-rw-r--r--x64/x64-codegen.h44
1 files changed, 39 insertions, 5 deletions
diff --git a/x64/x64-codegen.h b/x64/x64-codegen.h
index 3fb7104..0fbffbe 100644
--- a/x64/x64-codegen.h
+++ b/x64/x64-codegen.h
@@ -209,6 +209,9 @@ typedef union {
x86_membase_emit ((inst),(reg)&0x7, (basereg)&0x7, (disp)); \
} while (0)
+#define x64_memindex_emit(inst, reg, basereg, disp, indexreg, shift) \
+ x86_memindex_emit((inst), ((reg) & 0x7), ((basereg) & 0x7), (disp), ((indexreg) & 0x7), (shift))
+
#define x64_alu_reg_imm_size_body(inst,opc,reg,imm,size) \
do { \
if (x86_is_imm8((imm))) { \
@@ -950,6 +953,16 @@ typedef union {
x64_codegen_post(inst); \
} while (0)
+#define emit_sse_memindex_reg_op2(inst, basereg, disp, indexreg, shift, reg, op1, op2) \
+ do { \
+ x64_codegen_pre(inst); \
+ x64_emit_rex (inst, 0, (reg), (indexreg), (basereg)); \
+ *(inst)++ = (unsigned char)(op1); \
+ *(inst)++ = (unsigned char)(op2); \
+ x64_memindex_emit((inst), (reg), (basereg), (disp), (indexreg), (shift)); \
+ x64_codegen_post(inst); \
+ } while(0)
+
#define emit_sse_reg_membase_op2(inst,dreg,basereg,disp,op1,op2) do { \
x64_codegen_pre(inst); \
x64_emit_rex ((inst), 0, (dreg), 0, (basereg) == X64_RIP ? 0 : (basereg)); \
@@ -959,6 +972,16 @@ typedef union {
x64_codegen_post(inst); \
} while (0)
+#define emit_sse_reg_memindex_op2(inst, dreg, basereg, disp, indexreg, shift, op1, op2) \
+ do { \
+ x64_codegen_pre(inst); \
+ x64_emit_rex (inst, 0, (dreg), (indexreg), (basereg) == X64_RIP ? 0 : (basereg)); \
+ *(inst)++ = (unsigned char)(op1); \
+ *(inst)++ = (unsigned char)(op2); \
+ x64_memindex_emit((inst), (dreg), (basereg), (disp), (indexreg), (shift)); \
+ x64_codegen_post(inst); \
+ } while(0)
+
/* Three opcode SSE defines */
#define emit_opcode3(inst,op1,op2,op3) do { \
@@ -1391,15 +1414,26 @@ typedef union {
#define x64_sse_movups_reg_membase(inst, dreg, basereg, disp) emit_sse_reg_membase_op2((inst), (dreg), (basereg), (disp), 0x0f, 0x10)
-#define x64_sse_movaps_membase_reg(inst, basereg, disp, reg) emit_sse_membase_reg_op2((inst), (basereg), (disp), (reg), 0x0f, 0x29)
+#define x64_sse_movaps_membase_reg(inst, basereg, disp, reg) \
+ emit_sse_membase_reg_op2((inst), (basereg), (disp), (reg), 0x0f, 0x29)
+
+#define x64_sse_movaps_memindex_reg(inst, basereg, disp, indexreg, shift, reg) \
+ emit_sse_memindex_reg_op2((inst), (basereg), (disp), (indexreg), (shift), (reg), 0x0f, 0x29);
+
+#define x64_sse_movaps_reg_membase(inst, dreg, basereg, disp) \
+ emit_sse_reg_membase_op2((inst), (dreg), (basereg), (disp), 0x0f, 0x28)
-#define x64_sse_movaps_reg_membase(inst, dreg, basereg, disp) emit_sse_reg_membase_op2((inst), (dreg), (basereg), (disp), 0x0f, 0x28)
+#define x64_sse_movaps_reg_memindex(inst, dreg, basereg, disp, indexreg, shift) \
+ emit_sse_reg_memindex_op2((inst), (dreg), (basereg), (disp), (indexreg), (shift), 0x0f, 0x28);
-#define x64_sse_movaps_reg_reg(inst, dreg, reg) emit_sse_reg_reg_op2((inst), (dreg), (reg), 0x0f, 0x28)
+#define x64_sse_movaps_reg_reg(inst, dreg, reg) \
+ emit_sse_reg_reg_op2((inst), (dreg), (reg), 0x0f, 0x28)
-#define x64_sse_movntps_reg_membase(inst, dreg, basereg, disp) emit_sse_reg_membase_op2((inst), (dreg), (basereg), (disp), 0x0f, 0x2b)
+#define x64_sse_movntps_reg_membase(inst, dreg, basereg, disp) \
+ emit_sse_reg_membase_op2((inst), (dreg), (basereg), (disp), 0x0f, 0x2b)
-#define x64_sse_prefetch_reg_membase(inst, arg, basereg, disp) emit_sse_reg_membase_op2((inst), (arg), (basereg), (disp), 0x0f, 0x18)
+#define x64_sse_prefetch_reg_membase(inst, arg, basereg, disp) \
+ emit_sse_reg_membase_op2((inst), (arg), (basereg), (disp), 0x0f, 0x18)
#define x64_sse_movdqa_membase_reg(inst, basereg, disp, reg) \
emit_sse_membase_reg((inst), (basereg), (disp), (reg), 0x66, 0x0f, 0x7f)
OpenPOWER on IntegriCloud