Skip to content

Commit

Permalink
Merge pull request eclipse-omr#2488 from 0dvictor/avx
Browse files Browse the repository at this point in the history
 Introduce some instructions on X86
  • Loading branch information
0xdaryl authored May 10, 2018
2 parents 59efc79 + 387ca90 commit 248391b
Showing 1 changed file with 52 additions and 0 deletions.
52 changes: 52 additions & 0 deletions compiler/x/codegen/X86Ops.ins
Original file line number Diff line number Diff line change
Expand Up @@ -2038,6 +2038,14 @@ INSTRUCTION(MOVDQURegMem, movdqu,
BINARY(VEX_L128, VEX_vNONE, PREFIX_F3, REX__, ESCAPE_0F__, 0x6f, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_ModifiesTarget),
PROPERTY1(IA32OpProp1_XMMSource | IA32OpProp1_SourceIsMemRef | IA32OpProp1_XMMTarget)),
INSTRUCTION(VMOVDQURegReg, vmovdqu,
BINARY(VEX_L256, VEX_vNONE, PREFIX_F3, REX__, ESCAPE_0F__, 0x6f, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_ModifiesTarget | IA32OpProp_SourceRegisterInModRM),
PROPERTY1(IA32OpProp1_XMMSource | IA32OpProp1_XMMTarget)),
INSTRUCTION(VMOVDQURegMem, vmovdqu,
BINARY(VEX_L256, VEX_vNONE, PREFIX_F3, REX__, ESCAPE_0F__, 0x6f, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_ModifiesTarget),
PROPERTY1(IA32OpProp1_XMMSource | IA32OpProp1_SourceIsMemRef | IA32OpProp1_XMMTarget)),
INSTRUCTION(MOVDQUMemReg, movdqu,
BINARY(VEX_L128, VEX_vNONE, PREFIX_F3, REX__, ESCAPE_0F__, 0x7f, 0, ModRM_MR__, Immediate_0),
PROPERTY0(IA32OpProp_ModifiesTarget),
Expand Down Expand Up @@ -2466,14 +2474,42 @@ INSTRUCTION(PAUSE, pause,
BINARY(VEX_L___, VEX_vNONE, PREFIX_F3, REX__, ESCAPE_____, 0x90, 0, ModRM_NONE, Immediate_0),
PROPERTY0(0),
PROPERTY1(0)),
INSTRUCTION(PACKUSWBRegReg, packuswb,
BINARY(VEX_L128, VEX_vReg_, PREFIX_66, REX__, ESCAPE_0F__, 0x67, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_SourceRegisterInModRM),
PROPERTY1(IA32OpProp1_XMMSource | IA32OpProp1_XMMTarget)),
INSTRUCTION(PUNPCKHBWRegReg, punpckhbw,
BINARY(VEX_L128, VEX_vReg_, PREFIX_66, REX__, ESCAPE_0F__, 0x68, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_SourceRegisterInModRM),
PROPERTY1(IA32OpProp1_XMMSource | IA32OpProp1_XMMTarget)),
INSTRUCTION(PUNPCKLBWRegReg, punpcklbw,
BINARY(VEX_L128, VEX_vReg_, PREFIX_66, REX__, ESCAPE_0F__, 0x60, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_SourceRegisterInModRM),
PROPERTY1(IA32OpProp1_XMMSource | IA32OpProp1_XMMTarget)),
INSTRUCTION(PCMPEQBRegReg, pcmpeqb,
BINARY(VEX_L128, VEX_vReg_, PREFIX_66, REX__, ESCAPE_0F__, 0x74, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_SourceRegisterInModRM),
PROPERTY1(IA32OpProp1_XMMSource | IA32OpProp1_XMMTarget)),
INSTRUCTION(VPCMPEQBRegReg, vpcmpeqb,
BINARY(VEX_L256, VEX_vReg_, PREFIX_66, REX__, ESCAPE_0F__, 0x74, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_SourceRegisterInModRM),
PROPERTY1(IA32OpProp1_XMMSource | IA32OpProp1_XMMTarget)),
INSTRUCTION(VPCMPEQBRegMem, vpcmpeqb,
BINARY(VEX_L256, VEX_vReg_, PREFIX_66, REX__, ESCAPE_0F__, 0x74, 0, ModRM_RM__, Immediate_0),
PROPERTY0(0),
PROPERTY1(IA32OpProp1_XMMTarget | IA32OpProp1_SourceIsMemRef)),
INSTRUCTION(PCMPEQWRegReg, pcmpeqw,
BINARY(VEX_L128, VEX_vReg_, PREFIX_66, REX__, ESCAPE_0F__, 0x75, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_SourceRegisterInModRM),
PROPERTY1(IA32OpProp1_XMMSource | IA32OpProp1_XMMTarget)),
INSTRUCTION(VPCMPEQWRegReg, vpcmpeqw,
BINARY(VEX_L256, VEX_vReg_, PREFIX_66, REX__, ESCAPE_0F__, 0x75, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_SourceRegisterInModRM),
PROPERTY1(IA32OpProp1_XMMSource | IA32OpProp1_XMMTarget)),
INSTRUCTION(VPCMPEQWRegMem, vpcmpeqw,
BINARY(VEX_L256, VEX_vReg_, PREFIX_66, REX__, ESCAPE_0F__, 0x75, 0, ModRM_RM__, Immediate_0),
PROPERTY0(0),
PROPERTY1(IA32OpProp1_XMMTarget | IA32OpProp1_SourceIsMemRef)),
INSTRUCTION(PCMPGTBRegReg, pcmpgtb,
BINARY(VEX_L128, VEX_vReg_, PREFIX_66, REX__, ESCAPE_0F__, 0x64, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_SourceRegisterInModRM),
Expand All @@ -2486,14 +2522,26 @@ INSTRUCTION(PMOVMSKB4RegReg, pmovmskb,
BINARY(VEX_L128, VEX_vNONE, PREFIX_66, REX__, ESCAPE_0F__, 0xd7, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_SourceRegisterInModRM),
PROPERTY1(IA32OpProp1_XMMSource)),
INSTRUCTION(VPMOVMSKB4RegReg, vpmovmskb,
BINARY(VEX_L256, VEX_vNONE, PREFIX_66, REX__, ESCAPE_0F__, 0xd7, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_SourceRegisterInModRM),
PROPERTY1(IA32OpProp1_XMMSource)),
INSTRUCTION(PMOVZXBDRegReg, pmovzxbd,
BINARY(VEX_L128, VEX_vNONE, PREFIX_66, REX__, ESCAPE_0F38, 0x31, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_SourceRegisterInModRM),
PROPERTY1(IA32OpProp1_XMMSource | IA32OpProp1_XMMTarget)),
INSTRUCTION(PMOVZXBDRegMem, pmovzxbd,
BINARY(VEX_L128, VEX_vNONE, PREFIX_66, REX__, ESCAPE_0F38, 0x31, 0, ModRM_RM__, Immediate_0),
PROPERTY0(0),
PROPERTY1(IA32OpProp1_SourceIsMemRef | IA32OpProp1_XMMTarget)),
INSTRUCTION(PMOVZXWDRegReg, pmovzxwd,
BINARY(VEX_L128, VEX_vNONE, PREFIX_66, REX__, ESCAPE_0F38, 0x33, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_SourceRegisterInModRM),
PROPERTY1(IA32OpProp1_XMMSource | IA32OpProp1_XMMTarget)),
INSTRUCTION(PMOVZXWDRegMem, pmovzxwd,
BINARY(VEX_L128, VEX_vNONE, PREFIX_66, REX__, ESCAPE_0F38, 0x33, 0, ModRM_RM__, Immediate_0),
PROPERTY0(0),
PROPERTY1(IA32OpProp1_SourceIsMemRef | IA32OpProp1_XMMTarget)),
INSTRUCTION(PMULLDRegReg, pmulld,
BINARY(VEX_L128, VEX_vReg_, PREFIX_66, REX__, ESCAPE_0F38, 0x40, 0, ModRM_RM__, Immediate_0),
PROPERTY0(IA32OpProp_ModifiesTarget | IA32OpProp_SourceRegisterInModRM | IA32OpProp_UsesTarget),
Expand Down Expand Up @@ -3722,6 +3770,10 @@ INSTRUCTION(PSRLQRegImm1, psrlq,
BINARY(VEX_L128, VEX_vReg_, PREFIX_66, REX__, ESCAPE_0F__, 0x73, 2, ModRM_EXT_, Immediate_1),
PROPERTY0(IA32OpProp_ModifiesTarget | IA32OpProp_ByteImmediate | IA32OpProp_DoubleFP | IA32OpProp_TargetRegisterInModRM | IA32OpProp_UsesTarget),
PROPERTY1(IA32OpProp1_XMMSource | IA32OpProp1_XMMTarget)),
INSTRUCTION(VPERM2I128RegRegImm1, vperm2i128 ,
BINARY(VEX_L256, VEX_vReg_, PREFIX_66, REX__, ESCAPE_0F3A, 0x46, 0, ModRM_RM__, Immediate_1),
PROPERTY0(IA32OpProp_ModifiesTarget | IA32OpProp_ByteImmediate | IA32OpProp_SourceRegisterInModRM | IA32OpProp_UsesTarget),
PROPERTY1(IA32OpProp1_XMMSource | IA32OpProp1_XMMTarget)),

// OpCodes beyond this point are pseudo instructions; they are for OMR internal usage only.
INSTRUCTION(FENCE, Fence, // Address of binary is to be written to specified data address, SymbolReference controls code motion across fence
Expand Down

0 comments on commit 248391b

Please sign in to comment.