mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-26 22:26:16 +00:00
Add in64BitMode/in32BitMode to the MMX/SSE2/AVX maskmovq/dq instructions. This way the asm parser will pick the right one based on the mode. Instruction selection already did the right thing based on the pointer size.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192266 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c52566d222
commit
b96a393b09
@ -772,6 +772,7 @@ class VRS2I<bits<8> o, Format F, dag outs, dag ins, string asm,
|
||||
//
|
||||
|
||||
// MMXI - MMX instructions with TB prefix.
|
||||
// MMXI32 - MMX instructions with TB prefix valid only in 32 bit mode.
|
||||
// MMXI64 - MMX instructions with TB prefix valid only in 64 bit mode.
|
||||
// MMX2I - MMX / SSE2 instructions with TB and OpSize prefixes.
|
||||
// MMXIi8 - MMX instructions with ImmT == Imm8 and TB prefix.
|
||||
@ -781,6 +782,9 @@ class VRS2I<bits<8> o, Format F, dag outs, dag ins, string asm,
|
||||
class MMXI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
||||
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
||||
: I<o, F, outs, ins, asm, pattern, itin>, TB, Requires<[HasMMX]>;
|
||||
class MMXI32<bits<8> o, Format F, dag outs, dag ins, string asm,
|
||||
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
||||
: I<o, F, outs, ins, asm, pattern, itin>, TB, Requires<[HasMMX,In32BitMode]>;
|
||||
class MMXI64<bits<8> o, Format F, dag outs, dag ins, string asm,
|
||||
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
||||
: I<o, F, outs, ins, asm, pattern, itin>, TB, Requires<[HasMMX,In64BitMode]>;
|
||||
|
@ -595,10 +595,10 @@ def : Pat<(x86mmx (MMX_X86movdq2q (loadv2i64 addr:$src))),
|
||||
// Misc.
|
||||
let SchedRW = [WriteShuffle] in {
|
||||
let Uses = [EDI] in
|
||||
def MMX_MASKMOVQ : MMXI<0xF7, MRMSrcReg, (outs), (ins VR64:$src, VR64:$mask),
|
||||
"maskmovq\t{$mask, $src|$src, $mask}",
|
||||
[(int_x86_mmx_maskmovq VR64:$src, VR64:$mask, EDI)],
|
||||
IIC_MMX_MASKMOV>;
|
||||
def MMX_MASKMOVQ : MMXI32<0xF7, MRMSrcReg, (outs), (ins VR64:$src, VR64:$mask),
|
||||
"maskmovq\t{$mask, $src|$src, $mask}",
|
||||
[(int_x86_mmx_maskmovq VR64:$src, VR64:$mask, EDI)],
|
||||
IIC_MMX_MASKMOV>;
|
||||
let Uses = [RDI] in
|
||||
def MMX_MASKMOVQ64: MMXI64<0xF7, MRMSrcReg, (outs), (ins VR64:$src, VR64:$mask),
|
||||
"maskmovq\t{$mask, $src|$src, $mask}",
|
||||
|
@ -4336,25 +4336,25 @@ def PMOVMSKBrr : PDI<0xD7, MRMSrcReg, (outs GR32:$dst), (ins VR128:$src),
|
||||
|
||||
let ExeDomain = SSEPackedInt, SchedRW = [WriteStore] in {
|
||||
|
||||
let Uses = [EDI] in
|
||||
let Uses = [EDI], Predicates = [HasAVX,In32BitMode] in
|
||||
def VMASKMOVDQU : VPDI<0xF7, MRMSrcReg, (outs),
|
||||
(ins VR128:$src, VR128:$mask),
|
||||
"maskmovdqu\t{$mask, $src|$src, $mask}",
|
||||
[(int_x86_sse2_maskmov_dqu VR128:$src, VR128:$mask, EDI)],
|
||||
IIC_SSE_MASKMOV>, VEX;
|
||||
let Uses = [RDI] in
|
||||
let Uses = [RDI], Predicates = [HasAVX,In64BitMode] in
|
||||
def VMASKMOVDQU64 : VPDI<0xF7, MRMSrcReg, (outs),
|
||||
(ins VR128:$src, VR128:$mask),
|
||||
"maskmovdqu\t{$mask, $src|$src, $mask}",
|
||||
[(int_x86_sse2_maskmov_dqu VR128:$src, VR128:$mask, RDI)],
|
||||
IIC_SSE_MASKMOV>, VEX;
|
||||
|
||||
let Uses = [EDI] in
|
||||
let Uses = [EDI], Predicates = [UseSSE2,In32BitMode] in
|
||||
def MASKMOVDQU : PDI<0xF7, MRMSrcReg, (outs), (ins VR128:$src, VR128:$mask),
|
||||
"maskmovdqu\t{$mask, $src|$src, $mask}",
|
||||
[(int_x86_sse2_maskmov_dqu VR128:$src, VR128:$mask, EDI)],
|
||||
IIC_SSE_MASKMOV>;
|
||||
let Uses = [RDI] in
|
||||
let Uses = [RDI], Predicates = [UseSSE2,In64BitMode] in
|
||||
def MASKMOVDQU64 : PDI<0xF7, MRMSrcReg, (outs), (ins VR128:$src, VR128:$mask),
|
||||
"maskmovdqu\t{$mask, $src|$src, $mask}",
|
||||
[(int_x86_sse2_maskmov_dqu VR128:$src, VR128:$mask, RDI)],
|
||||
|
@ -1,5 +1,7 @@
|
||||
; RUN: llc < %s -march=x86 -mattr=+sse2 | grep -i EDI
|
||||
; RUN: llc < %s -march=x86-64 -mattr=+sse2 | grep -i RDI
|
||||
; RUN: llc < %s -march=x86 -mattr=+sse2,-avx | grep -i EDI
|
||||
; RUN: llc < %s -march=x86-64 -mattr=+sse2,-avx | grep -i RDI
|
||||
; RUN: llc < %s -march=x86 -mattr=+avx | grep -i EDI
|
||||
; RUN: llc < %s -march=x86-64 -mattr=+avx | grep -i RDI
|
||||
; rdar://6573467
|
||||
|
||||
define void @test(<16 x i8> %a, <16 x i8> %b, i32 %dummy, i8* %c) nounwind {
|
||||
|
@ -1,5 +1,7 @@
|
||||
; RUN: llc < %s -march=x86 -mattr=+mmx,+ssse3 | FileCheck %s
|
||||
; RUN: llc < %s -march=x86 -mattr=+mmx,+ssse3,-avx | FileCheck %s
|
||||
; RUN: llc < %s -march=x86 -mattr=+avx | FileCheck %s
|
||||
; RUN: llc < %s -march=x86-64 -mattr=+mmx,+ssse3,-avx | FileCheck %s
|
||||
; RUN: llc < %s -march=x86-64 -mattr=+avx | FileCheck %s
|
||||
|
||||
declare x86_mmx @llvm.x86.ssse3.phadd.w(x86_mmx, x86_mmx) nounwind readnone
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user