mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-10 02:36:06 +00:00
Mark some instructions as CodeGenOnly since they aren't needed by the assembler or disassembler. Disassembler already filtered them, but asm parser still had them in its tables.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192271 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b96a393b09
commit
442b23a817
@ -4385,6 +4385,7 @@ def VMOV64toPQIrr : VRS2I<0x6E, MRMSrcReg, (outs VR128:$dst), (ins GR64:$src),
|
||||
[(set VR128:$dst,
|
||||
(v2i64 (scalar_to_vector GR64:$src)))],
|
||||
IIC_SSE_MOVDQ>, VEX, Sched<[WriteMove]>;
|
||||
let isCodeGenOnly = 1 in
|
||||
def VMOV64toSDrr : VRS2I<0x6E, MRMSrcReg, (outs FR64:$dst), (ins GR64:$src),
|
||||
"movq\t{$src, $dst|$dst, $src}",
|
||||
[(set FR64:$dst, (bitconvert GR64:$src))],
|
||||
@ -4405,6 +4406,7 @@ def MOV64toPQIrr : RS2I<0x6E, MRMSrcReg, (outs VR128:$dst), (ins GR64:$src),
|
||||
[(set VR128:$dst,
|
||||
(v2i64 (scalar_to_vector GR64:$src)))],
|
||||
IIC_SSE_MOVDQ>, Sched<[WriteMove]>;
|
||||
let isCodeGenOnly = 1 in
|
||||
def MOV64toSDrr : RS2I<0x6E, MRMSrcReg, (outs FR64:$dst), (ins GR64:$src),
|
||||
"mov{d|q}\t{$src, $dst|$dst, $src}",
|
||||
[(set FR64:$dst, (bitconvert GR64:$src))],
|
||||
@ -4413,25 +4415,27 @@ def MOV64toSDrr : RS2I<0x6E, MRMSrcReg, (outs FR64:$dst), (ins GR64:$src),
|
||||
//===---------------------------------------------------------------------===//
|
||||
// Move Int Doubleword to Single Scalar
|
||||
//
|
||||
def VMOVDI2SSrr : VS2I<0x6E, MRMSrcReg, (outs FR32:$dst), (ins GR32:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(set FR32:$dst, (bitconvert GR32:$src))],
|
||||
IIC_SSE_MOVDQ>, VEX, Sched<[WriteMove]>;
|
||||
let isCodeGenOnly = 1 in {
|
||||
def VMOVDI2SSrr : VS2I<0x6E, MRMSrcReg, (outs FR32:$dst), (ins GR32:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(set FR32:$dst, (bitconvert GR32:$src))],
|
||||
IIC_SSE_MOVDQ>, VEX, Sched<[WriteMove]>;
|
||||
|
||||
def VMOVDI2SSrm : VS2I<0x6E, MRMSrcMem, (outs FR32:$dst), (ins i32mem:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(set FR32:$dst, (bitconvert (loadi32 addr:$src)))],
|
||||
IIC_SSE_MOVDQ>,
|
||||
VEX, Sched<[WriteLoad]>;
|
||||
def MOVDI2SSrr : S2I<0x6E, MRMSrcReg, (outs FR32:$dst), (ins GR32:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(set FR32:$dst, (bitconvert GR32:$src))],
|
||||
IIC_SSE_MOVDQ>, Sched<[WriteMove]>;
|
||||
def VMOVDI2SSrm : VS2I<0x6E, MRMSrcMem, (outs FR32:$dst), (ins i32mem:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(set FR32:$dst, (bitconvert (loadi32 addr:$src)))],
|
||||
IIC_SSE_MOVDQ>,
|
||||
VEX, Sched<[WriteLoad]>;
|
||||
def MOVDI2SSrr : S2I<0x6E, MRMSrcReg, (outs FR32:$dst), (ins GR32:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(set FR32:$dst, (bitconvert GR32:$src))],
|
||||
IIC_SSE_MOVDQ>, Sched<[WriteMove]>;
|
||||
|
||||
def MOVDI2SSrm : S2I<0x6E, MRMSrcMem, (outs FR32:$dst), (ins i32mem:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(set FR32:$dst, (bitconvert (loadi32 addr:$src)))],
|
||||
IIC_SSE_MOVDQ>, Sched<[WriteLoad]>;
|
||||
def MOVDI2SSrm : S2I<0x6E, MRMSrcMem, (outs FR32:$dst), (ins i32mem:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(set FR32:$dst, (bitconvert (loadi32 addr:$src)))],
|
||||
IIC_SSE_MOVDQ>, Sched<[WriteLoad]>;
|
||||
}
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
// Move Packed Doubleword Int to Packed Double Int
|
||||
@ -4491,57 +4495,61 @@ def MOVPQIto64rr : RS2I<0x7E, MRMDestReg, (outs GR64:$dst), (ins VR128:$src),
|
||||
//===---------------------------------------------------------------------===//
|
||||
// Bitcast FR64 <-> GR64
|
||||
//
|
||||
let Predicates = [UseAVX] in
|
||||
def VMOV64toSDrm : VS2SI<0x7E, MRMSrcMem, (outs FR64:$dst), (ins i64mem:$src),
|
||||
"vmovq\t{$src, $dst|$dst, $src}",
|
||||
[(set FR64:$dst, (bitconvert (loadi64 addr:$src)))]>,
|
||||
VEX, Sched<[WriteLoad]>;
|
||||
def VMOVSDto64rr : VRS2I<0x7E, MRMDestReg, (outs GR64:$dst), (ins FR64:$src),
|
||||
let isCodeGenOnly = 1 in {
|
||||
let Predicates = [UseAVX] in
|
||||
def VMOV64toSDrm : VS2SI<0x7E, MRMSrcMem, (outs FR64:$dst), (ins i64mem:$src),
|
||||
"movq\t{$src, $dst|$dst, $src}",
|
||||
[(set FR64:$dst, (bitconvert (loadi64 addr:$src)))]>,
|
||||
VEX, Sched<[WriteLoad]>;
|
||||
def VMOVSDto64rr : VRS2I<0x7E, MRMDestReg, (outs GR64:$dst), (ins FR64:$src),
|
||||
"movq\t{$src, $dst|$dst, $src}",
|
||||
[(set GR64:$dst, (bitconvert FR64:$src))],
|
||||
IIC_SSE_MOVDQ>, VEX, Sched<[WriteMove]>;
|
||||
def VMOVSDto64mr : VRS2I<0x7E, MRMDestMem, (outs), (ins i64mem:$dst, FR64:$src),
|
||||
"movq\t{$src, $dst|$dst, $src}",
|
||||
[(store (i64 (bitconvert FR64:$src)), addr:$dst)],
|
||||
IIC_SSE_MOVDQ>, VEX, Sched<[WriteStore]>;
|
||||
|
||||
def MOV64toSDrm : S2SI<0x7E, MRMSrcMem, (outs FR64:$dst), (ins i64mem:$src),
|
||||
"movq\t{$src, $dst|$dst, $src}",
|
||||
[(set FR64:$dst, (bitconvert (loadi64 addr:$src)))],
|
||||
IIC_SSE_MOVDQ>, Sched<[WriteLoad]>;
|
||||
def MOVSDto64rr : RS2I<0x7E, MRMDestReg, (outs GR64:$dst), (ins FR64:$src),
|
||||
"mov{d|q}\t{$src, $dst|$dst, $src}",
|
||||
[(set GR64:$dst, (bitconvert FR64:$src))],
|
||||
IIC_SSE_MOVDQ>, VEX, Sched<[WriteMove]>;
|
||||
def VMOVSDto64mr : VRS2I<0x7E, MRMDestMem, (outs), (ins i64mem:$dst, FR64:$src),
|
||||
IIC_SSE_MOVD_ToGP>, Sched<[WriteMove]>;
|
||||
def MOVSDto64mr : RS2I<0x7E, MRMDestMem, (outs), (ins i64mem:$dst, FR64:$src),
|
||||
"movq\t{$src, $dst|$dst, $src}",
|
||||
[(store (i64 (bitconvert FR64:$src)), addr:$dst)],
|
||||
IIC_SSE_MOVDQ>, VEX, Sched<[WriteStore]>;
|
||||
|
||||
def MOV64toSDrm : S2SI<0x7E, MRMSrcMem, (outs FR64:$dst), (ins i64mem:$src),
|
||||
"movq\t{$src, $dst|$dst, $src}",
|
||||
[(set FR64:$dst, (bitconvert (loadi64 addr:$src)))],
|
||||
IIC_SSE_MOVDQ>, Sched<[WriteLoad]>;
|
||||
def MOVSDto64rr : RS2I<0x7E, MRMDestReg, (outs GR64:$dst), (ins FR64:$src),
|
||||
"mov{d|q}\t{$src, $dst|$dst, $src}",
|
||||
[(set GR64:$dst, (bitconvert FR64:$src))],
|
||||
IIC_SSE_MOVD_ToGP>, Sched<[WriteMove]>;
|
||||
def MOVSDto64mr : RS2I<0x7E, MRMDestMem, (outs), (ins i64mem:$dst, FR64:$src),
|
||||
"movq\t{$src, $dst|$dst, $src}",
|
||||
[(store (i64 (bitconvert FR64:$src)), addr:$dst)],
|
||||
IIC_SSE_MOVDQ>, Sched<[WriteStore]>;
|
||||
IIC_SSE_MOVDQ>, Sched<[WriteStore]>;
|
||||
}
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
// Move Scalar Single to Double Int
|
||||
//
|
||||
def VMOVSS2DIrr : VS2I<0x7E, MRMDestReg, (outs GR32:$dst), (ins FR32:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(set GR32:$dst, (bitconvert FR32:$src))],
|
||||
IIC_SSE_MOVD_ToGP>, VEX, Sched<[WriteMove]>;
|
||||
def VMOVSS2DImr : VS2I<0x7E, MRMDestMem, (outs), (ins i32mem:$dst, FR32:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(store (i32 (bitconvert FR32:$src)), addr:$dst)],
|
||||
IIC_SSE_MOVDQ>, VEX, Sched<[WriteStore]>;
|
||||
def MOVSS2DIrr : S2I<0x7E, MRMDestReg, (outs GR32:$dst), (ins FR32:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(set GR32:$dst, (bitconvert FR32:$src))],
|
||||
IIC_SSE_MOVD_ToGP>, Sched<[WriteMove]>;
|
||||
def MOVSS2DImr : S2I<0x7E, MRMDestMem, (outs), (ins i32mem:$dst, FR32:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(store (i32 (bitconvert FR32:$src)), addr:$dst)],
|
||||
IIC_SSE_MOVDQ>, Sched<[WriteStore]>;
|
||||
let isCodeGenOnly = 1 in {
|
||||
def VMOVSS2DIrr : VS2I<0x7E, MRMDestReg, (outs GR32:$dst), (ins FR32:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(set GR32:$dst, (bitconvert FR32:$src))],
|
||||
IIC_SSE_MOVD_ToGP>, VEX, Sched<[WriteMove]>;
|
||||
def VMOVSS2DImr : VS2I<0x7E, MRMDestMem, (outs), (ins i32mem:$dst, FR32:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(store (i32 (bitconvert FR32:$src)), addr:$dst)],
|
||||
IIC_SSE_MOVDQ>, VEX, Sched<[WriteStore]>;
|
||||
def MOVSS2DIrr : S2I<0x7E, MRMDestReg, (outs GR32:$dst), (ins FR32:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(set GR32:$dst, (bitconvert FR32:$src))],
|
||||
IIC_SSE_MOVD_ToGP>, Sched<[WriteMove]>;
|
||||
def MOVSS2DImr : S2I<0x7E, MRMDestMem, (outs), (ins i32mem:$dst, FR32:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(store (i32 (bitconvert FR32:$src)), addr:$dst)],
|
||||
IIC_SSE_MOVDQ>, Sched<[WriteStore]>;
|
||||
}
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
// Patterns and instructions to describe movd/movq to XMM register zero-extends
|
||||
//
|
||||
let SchedRW = [WriteMove] in {
|
||||
let isCodeGenOnly = 1, SchedRW = [WriteMove] in {
|
||||
let AddedComplexity = 15 in {
|
||||
def VMOVZDI2PDIrr : VS2I<0x6E, MRMSrcReg, (outs VR128:$dst), (ins GR32:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
@ -4567,9 +4575,9 @@ def MOVZQI2PQIrr : RS2I<0x6E, MRMSrcReg, (outs VR128:$dst), (ins GR64:$src),
|
||||
(v2i64 (scalar_to_vector GR64:$src)))))],
|
||||
IIC_SSE_MOVDQ>;
|
||||
}
|
||||
} // SchedRW
|
||||
} // isCodeGenOnly, SchedRW
|
||||
|
||||
let AddedComplexity = 20, SchedRW = [WriteLoad] in {
|
||||
let isCodeGenOnly = 1, AddedComplexity = 20, SchedRW = [WriteLoad] in {
|
||||
def VMOVZDI2PDIrm : VS2I<0x6E, MRMSrcMem, (outs VR128:$dst), (ins i32mem:$src),
|
||||
"movd\t{$src, $dst|$dst, $src}",
|
||||
[(set VR128:$dst,
|
||||
@ -4582,7 +4590,7 @@ def MOVZDI2PDIrm : S2I<0x6E, MRMSrcMem, (outs VR128:$dst), (ins i32mem:$src),
|
||||
(v4i32 (X86vzmovl (v4i32 (scalar_to_vector
|
||||
(loadi32 addr:$src))))))],
|
||||
IIC_SSE_MOVDQ>;
|
||||
} // AddedComplexity, SchedRW
|
||||
} // isCodeGenOnly, AddedComplexity, SchedRW
|
||||
|
||||
let Predicates = [UseAVX] in {
|
||||
// AVX 128-bit movd/movq instruction write zeros in the high 128-bit part.
|
||||
@ -4671,7 +4679,7 @@ def MOVLQ128mr : S2I<0xD6, MRMDestMem, (outs), (ins i64mem:$dst, VR128:$src),
|
||||
[(int_x86_sse2_storel_dq addr:$dst, VR128:$src)],
|
||||
IIC_SSE_MOVDQ>, Sched<[WriteStore]>;
|
||||
|
||||
let AddedComplexity = 20 in
|
||||
let isCodeGenOnly = 1, AddedComplexity = 20 in {
|
||||
def VMOVZQI2PQIrm : I<0x7E, MRMSrcMem, (outs VR128:$dst), (ins i64mem:$src),
|
||||
"vmovq\t{$src, $dst|$dst, $src}",
|
||||
[(set VR128:$dst,
|
||||
@ -4680,7 +4688,6 @@ def VMOVZQI2PQIrm : I<0x7E, MRMSrcMem, (outs VR128:$dst), (ins i64mem:$src),
|
||||
IIC_SSE_MOVDQ>,
|
||||
XS, VEX, Requires<[UseAVX]>, Sched<[WriteLoad]>;
|
||||
|
||||
let AddedComplexity = 20 in
|
||||
def MOVZQI2PQIrm : I<0x7E, MRMSrcMem, (outs VR128:$dst), (ins i64mem:$src),
|
||||
"movq\t{$src, $dst|$dst, $src}",
|
||||
[(set VR128:$dst,
|
||||
@ -4688,6 +4695,7 @@ def MOVZQI2PQIrm : I<0x7E, MRMSrcMem, (outs VR128:$dst), (ins i64mem:$src),
|
||||
(loadi64 addr:$src))))))],
|
||||
IIC_SSE_MOVDQ>,
|
||||
XS, Requires<[UseSSE2]>, Sched<[WriteLoad]>;
|
||||
}
|
||||
|
||||
let Predicates = [UseAVX], AddedComplexity = 20 in {
|
||||
def : Pat<(v2i64 (X86vzmovl (bc_v2i64 (loadv4f32 addr:$src)))),
|
||||
@ -4728,7 +4736,7 @@ def MOVZPQILo2PQIrr : I<0x7E, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
|
||||
XS, Requires<[UseSSE2]>;
|
||||
} // SchedRW
|
||||
|
||||
let SchedRW = [WriteVecLogicLd] in {
|
||||
let isCodeGenOnly = 1, SchedRW = [WriteVecLogicLd] in {
|
||||
let AddedComplexity = 20 in
|
||||
def VMOVZPQILo2PQIrm : I<0x7E, MRMSrcMem, (outs VR128:$dst), (ins i128mem:$src),
|
||||
"vmovq\t{$src, $dst|$dst, $src}",
|
||||
@ -4744,7 +4752,7 @@ def MOVZPQILo2PQIrm : I<0x7E, MRMSrcMem, (outs VR128:$dst), (ins i128mem:$src),
|
||||
IIC_SSE_MOVDQ>,
|
||||
XS, Requires<[UseSSE2]>;
|
||||
}
|
||||
} // SchedRW
|
||||
} // isCodeGenOnly, SchedRW
|
||||
|
||||
let AddedComplexity = 20 in {
|
||||
let Predicates = [UseAVX] in {
|
||||
|
Loading…
x
Reference in New Issue
Block a user