From: David Schleef Date: Wed, 3 Nov 2010 17:54:00 +0000 (+0100) Subject: sse: more conversion to sysinsn X-Git-Tag: orc-0.4.12~47 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1abb06dd87a4de7d9cc8e1a818370a120d4c3745;p=platform%2Fupstream%2Forc.git sse: more conversion to sysinsn --- diff --git a/orc/orcsse.c b/orc/orcsse.c index 241aa2b..0c4f766 100644 --- a/orc/orcsse.c +++ b/orc/orcsse.c @@ -39,24 +39,6 @@ orc_x86_get_regname_sse(int i) } -#if 0 -void -orc_sse_emit_pextrw_memoffset (OrcCompiler *p, int imm, int src, - int offset, int dest) -{ - ORC_ASM_CODE(p," pextrw $%d, %%%s, %d(%%%s)\n", imm, - orc_x86_get_regname_sse(src), - offset, orc_x86_get_regname_ptr (p, dest)); - *p->codeptr++ = 0x66; - orc_x86_emit_rex (p, 0, src, 0, dest); - *p->codeptr++ = 0x0f; - *p->codeptr++ = 0x3a; - *p->codeptr++ = 0x15; - orc_x86_emit_modrm_memoffset_old (p, src, offset, dest); - *p->codeptr++ = imm; -} -#endif - void orc_x86_emit_mov_memoffset_sse (OrcCompiler *compiler, int size, int offset, int reg1, int reg2, int is_aligned) @@ -94,48 +76,26 @@ orc_x86_emit_mov_memindex_sse (OrcCompiler *compiler, int size, int offset, { switch (size) { case 4: - ORC_ASM_CODE(compiler," movd %d(%%%s,%%%s,%d), %%%s\n", offset, - orc_x86_get_regname_ptr(compiler, reg1), - orc_x86_get_regname_ptr(compiler, regindex), 1<codeptr++ = 0x66; - orc_x86_emit_rex(compiler, 0, reg2, 0, reg1); - *compiler->codeptr++ = 0x0f; - *compiler->codeptr++ = 0x6e; + orc_sse_emit_movd_load_memindex (compiler, offset, + reg1, regindex, shift, reg2); break; case 8: - ORC_ASM_CODE(compiler," movq %d(%%%s,%%%s,%d), %%%s\n", offset, orc_x86_get_regname_ptr(compiler, reg1), - orc_x86_get_regname_ptr(compiler, regindex), 1<codeptr++ = 0xf3; - orc_x86_emit_rex(compiler, 0, reg2, 0, reg1); - *compiler->codeptr++ = 0x0f; - *compiler->codeptr++ = 0x7e; + orc_sse_emit_movq_load_memindex (compiler, offset, + reg1, regindex, shift, reg2); break; case 16: if (is_aligned) { - ORC_ASM_CODE(compiler," movdqa %d(%%%s,%%%s,%d), %%%s\n", offset, orc_x86_get_regname_ptr(compiler, reg1), - orc_x86_get_regname_ptr(compiler, regindex), 1<codeptr++ = 0x66; - orc_x86_emit_rex(compiler, 0, reg2, 0, reg1); - *compiler->codeptr++ = 0x0f; - *compiler->codeptr++ = 0x6f; + orc_sse_emit_movdqa_load_memindex (compiler, offset, + reg1, regindex, shift, reg2); } else { - ORC_ASM_CODE(compiler," movdqu %d(%%%s,%%%s,%d), %%%s\n", offset, orc_x86_get_regname_ptr(compiler, reg1), - orc_x86_get_regname_ptr(compiler, regindex), 1<codeptr++ = 0xf3; - orc_x86_emit_rex(compiler, 0, reg2, 0, reg1); - *compiler->codeptr++ = 0x0f; - *compiler->codeptr++ = 0x6f; + orc_sse_emit_movdqu_load_memindex (compiler, offset, + reg1, regindex, shift, reg2); } break; default: ORC_COMPILER_ERROR(compiler, "bad size"); break; } - orc_x86_emit_modrm_memindex (compiler, reg2, offset, reg1, regindex, shift); } void @@ -174,38 +134,16 @@ void orc_x86_emit_mov_sse_reg_reg (OrcCompiler *compiler, int reg1, int reg2) } orc_sse_emit_movdqu (compiler, offset, reg1, reg2); -#if 0 - ORC_ASM_CODE(compiler," movdqa %%%s, %%%s\n", orc_x86_get_regname_sse(reg1), - orc_x86_get_regname_sse(reg2)); - - *compiler->codeptr++ = 0x66; - orc_x86_emit_rex(compiler, 0, reg2, 0, reg1); - *compiler->codeptr++ = 0x0f; - *compiler->codeptr++ = 0x6f; - orc_x86_emit_modrm_reg (compiler, reg1, reg2); -#endif } void orc_x86_emit_mov_reg_sse (OrcCompiler *compiler, int reg1, int reg2) { - ORC_ASM_CODE(compiler," movd %%%s, %%%s\n", orc_x86_get_regname(reg1), - orc_x86_get_regname_sse(reg2)); - *compiler->codeptr++ = 0x66; - orc_x86_emit_rex(compiler, 0, reg2, 0, reg1); - *compiler->codeptr++ = 0x0f; - *compiler->codeptr++ = 0x6e; - orc_x86_emit_modrm_reg (compiler, reg1, reg2); + orc_sse_emit_movd_load_register (compiler, reg1, reg2); } void orc_x86_emit_mov_sse_reg (OrcCompiler *compiler, int reg1, int reg2) { - ORC_ASM_CODE(compiler," movd %%%s, %%%s\n", orc_x86_get_regname_sse(reg1), - orc_x86_get_regname(reg2)); - *compiler->codeptr++ = 0x66; - orc_x86_emit_rex(compiler, 0, reg1, 0, reg2); - *compiler->codeptr++ = 0x0f; - *compiler->codeptr++ = 0x7e; - orc_x86_emit_modrm_reg (compiler, reg2, reg1); + orc_sse_emit_movd_store_register (compiler, reg1, reg2); } void @@ -213,13 +151,9 @@ orc_sse_set_mxcsr (OrcCompiler *compiler) { int value; - ORC_ASM_CODE(compiler," stmxcsr %d(%%%s)\n", + orc_sse_emit_sysinsn_load_memoffset (compiler, ORC_X86_stmxcsr, 0, (int)ORC_STRUCT_OFFSET(OrcExecutor,params[ORC_VAR_A4]), - orc_x86_get_regname_ptr(compiler, compiler->exec_reg)); - *compiler->codeptr++ = 0x0f; - *compiler->codeptr++ = 0xae; - orc_x86_emit_modrm_memoffset_old (compiler, 3, - (int)ORC_STRUCT_OFFSET(OrcExecutor,params[ORC_VAR_A4]), compiler->exec_reg); + compiler->exec_reg, -1); orc_x86_emit_mov_memoffset_reg (compiler, 4, (int)ORC_STRUCT_OFFSET(OrcExecutor,params[ORC_VAR_A4]), @@ -244,24 +178,16 @@ orc_sse_set_mxcsr (OrcCompiler *compiler) (int)ORC_STRUCT_OFFSET(OrcExecutor,params[ORC_VAR_A4]), compiler->exec_reg); - ORC_ASM_CODE(compiler," ldmxcsr %d(%%%s)\n", + orc_sse_emit_sysinsn_load_memoffset (compiler, ORC_X86_ldmxcsr, 0, (int)ORC_STRUCT_OFFSET(OrcExecutor,params[ORC_VAR_A4]), - orc_x86_get_regname_ptr(compiler, compiler->exec_reg)); - *compiler->codeptr++ = 0x0f; - *compiler->codeptr++ = 0xae; - orc_x86_emit_modrm_memoffset_old (compiler, 2, - (int)ORC_STRUCT_OFFSET(OrcExecutor,params[ORC_VAR_A4]), compiler->exec_reg); + compiler->exec_reg, -1); } void orc_sse_restore_mxcsr (OrcCompiler *compiler) { - ORC_ASM_CODE(compiler," ldmxcsr %d(%%%s)\n", - (int)ORC_STRUCT_OFFSET(OrcExecutor,params[ORC_VAR_C1]), - orc_x86_get_regname_ptr(compiler, compiler->exec_reg)); - *compiler->codeptr++ = 0x0f; - *compiler->codeptr++ = 0xae; - orc_x86_emit_modrm_memoffset_old (compiler, 2, - (int)ORC_STRUCT_OFFSET(OrcExecutor,params[ORC_VAR_C1]), compiler->exec_reg); + orc_sse_emit_sysinsn_load_memoffset (compiler, ORC_X86_ldmxcsr, 0, + (int)ORC_STRUCT_OFFSET(OrcExecutor,params[ORC_VAR_A4]), + compiler->exec_reg, -1); } diff --git a/orc/orcsse.h b/orc/orcsse.h index def5688..7c5d451 100644 --- a/orc/orcsse.h +++ b/orc/orcsse.h @@ -72,6 +72,10 @@ void orc_sse_emit_sysinsn_load_memoffset (OrcCompiler *p, int index, int offset, int src, int dest, int imm); void orc_sse_emit_sysinsn_store_memoffset (OrcCompiler *p, int index, int src, int offset, int dest, int imm); +void orc_sse_emit_sysinsn_load_memindex (OrcCompiler *p, int index, int imm, + int offset, int src, int src_index, int shift, int dest); +void orc_sse_emit_sysinsn_load_register (OrcCompiler *p, int index, int imm, + int src, int dest); unsigned int orc_sse_get_cpu_flags (void); diff --git a/orc/orcx86.c b/orc/orcx86.c index 0c1f9d7..214f464 100644 --- a/orc/orcx86.c +++ b/orc/orcx86.c @@ -216,6 +216,26 @@ void orc_x86_emit_modrm_memindex (OrcCompiler *compiler, int reg1, int offset, } } +void orc_x86_emit_modrm_memindex2 (OrcCompiler *compiler, int offset, + int src, int src_index, int shift, int dest) +{ + if (offset == 0) { + *compiler->codeptr++ = X86_MODRM(0, 4, dest); + *compiler->codeptr++ = X86_SIB(shift, src_index, src); + } else if (offset >= -128 && offset < 128) { + *compiler->codeptr++ = X86_MODRM(1, 4, dest); + *compiler->codeptr++ = X86_SIB(shift, src_index, src); + *compiler->codeptr++ = (offset & 0xff); + } else { + *compiler->codeptr++ = X86_MODRM(2, 4, dest); + *compiler->codeptr++ = X86_SIB(shift, src_index, src); + *compiler->codeptr++ = (offset & 0xff); + *compiler->codeptr++ = ((offset>>8) & 0xff); + *compiler->codeptr++ = ((offset>>16) & 0xff); + *compiler->codeptr++ = ((offset>>24) & 0xff); + } +} + void orc_x86_emit_modrm_reg (OrcCompiler *compiler, int reg1, int reg2) { diff --git a/orc/orcx86.h b/orc/orcx86.h index e478e26..cdd0a60 100644 --- a/orc/orcx86.h +++ b/orc/orcx86.h @@ -97,6 +97,8 @@ void orc_x86_emit_modrm_memoffset (OrcCompiler *compiler, int offset, int reg1, void orc_x86_emit_modrm_reg (OrcCompiler *compiler, int reg1, int reg2); void orc_x86_emit_modrm_memindex (OrcCompiler *compiler, int reg1, int offset, int reg2, int regindex, int shift); +void orc_x86_emit_modrm_memindex2 (OrcCompiler *compiler, int offset, + int src, int src_index, int shift, int dest); void orc_x86_do_fixups (OrcCompiler *compiler); diff --git a/orc/orcx86insn.c b/orc/orcx86insn.c index 917dd72..d471b7a 100644 --- a/orc/orcx86insn.c +++ b/orc/orcx86insn.c @@ -152,17 +152,19 @@ static const OrcSysOpcode orc_x86_opcodes[] = { { "pshufhw", ORC_X86_INSN_TYPE_SDI, 0, 0xf30f70 }, { "palignr", ORC_X86_INSN_TYPE_SDI, 0, 0x660f3a0f }, { "pinsrw", ORC_X86_INSN_TYPE_SDI, 0, 0x660fc4 }, - { "movd", ORC_X86_INSN_TYPE_SD, 0, 0x660f6e }, + { "movd", ORC_X86_INSN_TYPE_ED, 0, 0x660f6e }, { "movq", ORC_X86_INSN_TYPE_SD, 0, 0xf30f7e }, { "movdqa", ORC_X86_INSN_TYPE_SD, 0, 0x660f6f }, { "movdqu", ORC_X86_INSN_TYPE_SD, 0, 0xf30f6f }, { "movhps", ORC_X86_INSN_TYPE_SD, 0, 0x0f16 }, { "pextrw", ORC_X86_INSN_TYPE_SDI_REV, 0, 0x660f3a15 }, - { "movd", ORC_X86_INSN_TYPE_SD_REV, 0, 0x660f7e }, + { "movd", ORC_X86_INSN_TYPE_ED_REV, 0, 0x660f7e }, { "movq", ORC_X86_INSN_TYPE_SD_REV, 0, 0x660fd6 }, { "movdqa", ORC_X86_INSN_TYPE_SD_REV, 0, 0x660f7f }, { "movdqu", ORC_X86_INSN_TYPE_SD_REV, 0, 0xf30f7f }, { "movntdq", ORC_X86_INSN_TYPE_SD_REV, 0, 0x660fe7 }, + { "ldmxcsr", ORC_X86_INSN_TYPE_MEM, 0, 0x0fae, 2 }, + { "stmxcsr", ORC_X86_INSN_TYPE_MEM, 0, 0x0fae, 3 }, }; @@ -180,6 +182,16 @@ orc_sse_emit_sysinsn (OrcCompiler *p, int index, int imm, int src, int dest) orc_x86_get_regname_sse(src), orc_x86_get_regname_sse(dest)); break; + case ORC_X86_INSN_TYPE_ED: + ORC_ASM_CODE(p," %s %%%s, %%%s\n", opcode->name, + orc_x86_get_regname(src), + orc_x86_get_regname_sse(dest)); + break; + case ORC_X86_INSN_TYPE_ED_REV: + ORC_ASM_CODE(p," %s %%%s, %%%s\n", opcode->name, + orc_x86_get_regname_sse(src), + orc_x86_get_regname(dest)); + break; case ORC_X86_INSN_TYPE_SHIFTIMM: ORC_ASM_CODE(p," %s $%d, %%%s\n", opcode->name, imm, @@ -191,6 +203,7 @@ orc_sse_emit_sysinsn (OrcCompiler *p, int index, int imm, int src, int dest) orc_x86_get_regname_sse(src), orc_x86_get_regname_sse(dest)); break; + case ORC_X86_INSN_TYPE_MEM: default: ORC_ASSERT(0); break; @@ -214,10 +227,14 @@ orc_sse_emit_sysinsn (OrcCompiler *p, int index, int imm, int src, int dest) } switch (opcode->type) { + case ORC_X86_INSN_TYPE_ED: case ORC_X86_INSN_TYPE_SD: - case ORC_X86_INSN_TYPE_SD_REV: orc_x86_emit_modrm_reg (p, src, dest); break; + case ORC_X86_INSN_TYPE_SD_REV: + case ORC_X86_INSN_TYPE_ED_REV: + orc_x86_emit_modrm_reg (p, dest, src); + break; case ORC_X86_INSN_TYPE_SHIFTIMM: orc_x86_emit_modrm_reg (p, dest, opcode->code2); *p->codeptr++ = imm; @@ -230,6 +247,7 @@ orc_sse_emit_sysinsn (OrcCompiler *p, int index, int imm, int src, int dest) orc_x86_emit_modrm_reg (p, src, dest); *p->codeptr++ = opcode->code2; break; + case ORC_X86_INSN_TYPE_MEM: default: ORC_ASSERT(0); break; @@ -247,6 +265,8 @@ orc_sse_emit_sysinsn_load_memoffset (OrcCompiler *p, int index, int imm, int off case ORC_X86_INSN_TYPE_SD: case ORC_X86_INSN_TYPE_SD_REV: case ORC_X86_INSN_TYPE_SD2: + case ORC_X86_INSN_TYPE_ED: + case ORC_X86_INSN_TYPE_ED_REV: ORC_ASM_CODE(p," %s %d(%%%s), %%%s\n", opcode->name, offset, orc_x86_get_regname_ptr(p, src), @@ -259,6 +279,11 @@ orc_sse_emit_sysinsn_load_memoffset (OrcCompiler *p, int index, int imm, int off orc_x86_get_regname_ptr(p, src), orc_x86_get_regname_sse(dest)); break; + case ORC_X86_INSN_TYPE_MEM: + ORC_ASM_CODE(p," %s %d(%%%s)\n", opcode->name, + offset, + orc_x86_get_regname_ptr(p, src)); + break; default: ORC_ASSERT(0); break; @@ -283,6 +308,7 @@ orc_sse_emit_sysinsn_load_memoffset (OrcCompiler *p, int index, int imm, int off switch (opcode->type) { case ORC_X86_INSN_TYPE_SD: + case ORC_X86_INSN_TYPE_ED: orc_x86_emit_modrm_memoffset (p, offset, src, dest); break; case ORC_X86_INSN_TYPE_SDI: @@ -294,12 +320,16 @@ orc_sse_emit_sysinsn_load_memoffset (OrcCompiler *p, int index, int imm, int off *p->codeptr++ = imm; break; case ORC_X86_INSN_TYPE_SD_REV: + case ORC_X86_INSN_TYPE_ED_REV: orc_x86_emit_modrm_memoffset (p, offset, dest, src); break; case ORC_X86_INSN_TYPE_SD2: orc_x86_emit_modrm_memoffset (p, offset, src, dest); *p->codeptr++ = opcode->code2; break; + case ORC_X86_INSN_TYPE_MEM: + orc_x86_emit_modrm_memoffset (p, offset, src, opcode->code2); + break; default: ORC_ASSERT(0); break; @@ -316,6 +346,7 @@ orc_sse_emit_sysinsn_store_memoffset (OrcCompiler *p, int index, int imm, int of case ORC_X86_INSN_TYPE_SD: case ORC_X86_INSN_TYPE_SD_REV: case ORC_X86_INSN_TYPE_SD2: + case ORC_X86_INSN_TYPE_ED_REV: ORC_ASM_CODE(p," %s %%%s, %d(%%%s)\n", opcode->name, orc_x86_get_regname_sse(src), offset, @@ -328,6 +359,7 @@ orc_sse_emit_sysinsn_store_memoffset (OrcCompiler *p, int index, int imm, int of offset, orc_x86_get_regname_ptr(p, dest)); break; + case ORC_X86_INSN_TYPE_ED: default: ORC_ASSERT(0); break; @@ -363,12 +395,90 @@ orc_sse_emit_sysinsn_store_memoffset (OrcCompiler *p, int index, int imm, int of *p->codeptr++ = imm; break; case ORC_X86_INSN_TYPE_SD_REV: + case ORC_X86_INSN_TYPE_ED_REV: orc_x86_emit_modrm_memoffset (p, offset, dest, src); break; case ORC_X86_INSN_TYPE_SD2: orc_x86_emit_modrm_memoffset (p, offset, src, dest); *p->codeptr++ = opcode->code2; break; + case ORC_X86_INSN_TYPE_ED: + default: + ORC_ASSERT(0); + break; + } +} + +void +orc_sse_emit_sysinsn_load_memindex (OrcCompiler *p, int index, int imm, + int offset, int src, int src_index, int shift, int dest) +{ + const OrcSysOpcode *opcode = orc_x86_opcodes + index; + + switch (opcode->type) { + case ORC_X86_INSN_TYPE_SD: + case ORC_X86_INSN_TYPE_SD_REV: + case ORC_X86_INSN_TYPE_SD2: + case ORC_X86_INSN_TYPE_ED: + case ORC_X86_INSN_TYPE_ED_REV: + ORC_ASM_CODE(p," %s %d(%%%s,%%%s,%d), %%%s\n", opcode->name, + offset, + orc_x86_get_regname_ptr(p, src), + orc_x86_get_regname_ptr(p, src_index), 1<name, + imm, offset, + orc_x86_get_regname_ptr(p, src), + orc_x86_get_regname_ptr(p, src_index), 1<code != 0); + if (opcode->code & 0xff000000) { + *p->codeptr++ = (opcode->code >> 24) & 0xff; + orc_x86_emit_rex (p, 0, dest, 0, src); + *p->codeptr++ = (opcode->code >> 16) & 0xff; + *p->codeptr++ = (opcode->code >> 8) & 0xff; + *p->codeptr++ = (opcode->code >> 0) & 0xff; + } else if (opcode->code & 0xff0000) { + *p->codeptr++ = (opcode->code >> 16) & 0xff; + orc_x86_emit_rex (p, 0, dest, 0, src); + *p->codeptr++ = (opcode->code >> 8) & 0xff; + *p->codeptr++ = (opcode->code >> 0) & 0xff; + } else { + *p->codeptr++ = (opcode->code >> 8) & 0xff; + orc_x86_emit_rex (p, 0, dest, 0, src); + *p->codeptr++ = (opcode->code >> 0) & 0xff; + } + + switch (opcode->type) { + case ORC_X86_INSN_TYPE_SD: + case ORC_X86_INSN_TYPE_ED: + case ORC_X86_INSN_TYPE_ED_REV: + orc_x86_emit_modrm_memindex2 (p, offset, src, src_index, shift, dest); + break; + case ORC_X86_INSN_TYPE_SDI: + orc_x86_emit_modrm_memindex2 (p, offset, src, src_index, shift, dest); + *p->codeptr++ = imm; + break; + case ORC_X86_INSN_TYPE_SDI_REV: + orc_x86_emit_modrm_memindex2 (p, offset, dest, src_index, shift, src); + *p->codeptr++ = imm; + break; + case ORC_X86_INSN_TYPE_SD_REV: + orc_x86_emit_modrm_memindex2 (p, offset, dest, src_index, shift, src); + break; + case ORC_X86_INSN_TYPE_SD2: + orc_x86_emit_modrm_memindex2 (p, offset, src, src_index, shift, dest); + *p->codeptr++ = opcode->code2; + break; default: ORC_ASSERT(0); break; diff --git a/orc/orcx86insn.h b/orc/orcx86insn.h index 812031e..5c830c6 100644 --- a/orc/orcx86insn.h +++ b/orc/orcx86insn.h @@ -8,7 +8,10 @@ enum { ORC_X86_INSN_TYPE_SD2, ORC_X86_INSN_TYPE_SDI, ORC_X86_INSN_TYPE_SDI_REV, - ORC_X86_INSN_TYPE_SD_REV + ORC_X86_INSN_TYPE_SD_REV, + ORC_X86_INSN_TYPE_ED, + ORC_X86_INSN_TYPE_ED_REV, + ORC_X86_INSN_TYPE_MEM }; enum { @@ -166,6 +169,8 @@ enum { ORC_X86_movdqa_store, ORC_X86_movdqu_store, ORC_X86_movntdq_store, + ORC_X86_ldmxcsr, + ORC_X86_stmxcsr, }; @@ -328,5 +333,27 @@ enum { #define orc_sse_emit_movdqu_store_memoffset(p,a,offset,b) orc_sse_emit_sysinsn_store_memoffset(p, ORC_X86_movdqu_store, 0, a, offset, b) #define orc_sse_emit_movntdq_store_memoffset(p,a,offset,b) orc_sse_emit_sysinsn_store_memoffset(p, ORC_X86_movntdq_store, 0, a, offset, b) +#define orc_sse_emit_pinsrw_memindex(p,imm,offset,a,a_index,shift,b) orc_sse_emit_sysinsn_load_memindex(p, ORC_X86_pinsrw, imm, offset, a, a_index, shift, b) +#define orc_sse_emit_movd_load_memindex(p,offset,a,a_index,shift,b) orc_sse_emit_sysinsn_load_memindex(p, ORC_X86_movd_load, 0, offset, a, a_index, shift, b) +#define orc_sse_emit_movq_load_memindex(p,offset,a,a_index,shift,b) orc_sse_emit_sysinsn_load_memindex(p, ORC_X86_movq_load, 0, offset, a, a_index, shift, b) +#define orc_sse_emit_movdqa_load_memindex(p,offset,a,a_index,shift,b) orc_sse_emit_sysinsn_load_memindex(p, ORC_X86_movdqa_load, 0, offset, a, a_index, shift, b) +#define orc_sse_emit_movdqu_load_memindex(p,offset,a,a_index,shift,b) orc_sse_emit_sysinsn_load_memindex(p, ORC_X86_movdqu_load, 0, offset, a, a_index, shift, b) +#define orc_sse_emit_movhps_load_memindex(p,offset,a,a_index,shift,b) orc_sse_emit_sysinsn_load_memindex(p, ORC_X86_movhps_load, 0, offset, a, a_index, shift, b) + +#define orc_sse_emit_pextrw_memindex(p,imm,a,offset,b,b_index,shift) orc_sse_emit_sysinsn_store_memindex(p, ORC_X86_pextrw, imm, a, offset, b, b_index, shift) +#define orc_sse_emit_movd_store_memindex(p,a,offset,b,b_index,shift) orc_sse_emit_sysinsn_store_memindex(p, ORC_X86_movd_store, 0, a, offset, b, b_index, shift) +#define orc_sse_emit_movq_store_memindex(p,a,offset,b,b_index,shift) orc_sse_emit_sysinsn_store_memindex(p, ORC_X86_movq_store, 0, a, offset, b, b_index, shift) +#define orc_sse_emit_movdqa_store_memindex(p,a,offset,b,b_index,shift) orc_sse_emit_sysinsn_store_memindex(p, ORC_X86_movdqa_store, 0, a, offset, b, b_index, shift) +#define orc_sse_emit_movdqu_store_memindex(p,a,offset,b,b_index,shift) orc_sse_emit_sysinsn_store_memindex(p, ORC_X86_movdqu_store, 0, a, offset, b, b_index, shift) +#define orc_sse_emit_movntdq_store_memindex(p,a,offset,b,b_index,shift) orc_sse_emit_sysinsn_store_memindex(p, ORC_X86_movntdq_store, 0, a, offset, b, b_index, shift) + +#define orc_sse_emit_pinsrw_register(p,imm,a,b) orc_sse_emit_sysinsn(p, ORC_X86_pinsrw, imm, a, b) +#define orc_sse_emit_movd_load_register(p,a,b) orc_sse_emit_sysinsn(p, ORC_X86_movd_load, 0, a, b) +#define orc_sse_emit_movq_load_register(p,a,b) orc_sse_emit_sysinsn(p, ORC_X86_movq_load, 0, a, b) + +#define orc_sse_emit_pextrw_register(p,imm,a,b) orc_sse_emit_sysinsn(p, ORC_X86_pextrw, imm, a, b) +#define orc_sse_emit_movd_store_register(p,a,b) orc_sse_emit_sysinsn(p, ORC_X86_movd_store, 0, a, b) +#define orc_sse_emit_movq_store_register(p,a,b) orc_sse_emit_sysinsn(p, ORC_X86_movq_store, 0, a, b) + #endif