summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>2010-07-13 02:38:35 +0000
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>2010-07-13 02:38:35 +0000
commitfd920fa59a7ac65fdd5f97da4e07e63b3922d30a (patch)
tree758a8202693db2261c2d506bff5bb6a16c8683e1
parent6991623dd7b8a096ccddbaedd9de3f515bacb1e2 (diff)
downloadllvm-fd920fa59a7ac65fdd5f97da4e07e63b3922d30a.tar.gz
llvm-fd920fa59a7ac65fdd5f97da4e07e63b3922d30a.tar.bz2
llvm-fd920fa59a7ac65fdd5f97da4e07e63b3922d30a.tar.xz
Add AVX 256-bit packed logical forms
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108224 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/X86/X86InstrSSE.td19
-rw-r--r--test/MC/AsmParser/X86/x86_32-encoding.s64
-rw-r--r--test/MC/AsmParser/X86/x86_64-encoding.s64
3 files changed, 147 insertions, 0 deletions
diff --git a/lib/Target/X86/X86InstrSSE.td b/lib/Target/X86/X86InstrSSE.td
index 96a82f3252..ab0005b31b 100644
--- a/lib/Target/X86/X86InstrSSE.td
+++ b/lib/Target/X86/X86InstrSSE.td
@@ -1422,6 +1422,25 @@ multiclass sse12_fp_packed_logical<bits<8> opc, string OpcodeStr,
}
}
+/// sse12_fp_packed_logical_y - AVX 256-bit SSE 1 & 2 logical ops forms
+///
+let isAsmParserOnly = 1 in {
+multiclass sse12_fp_packed_logical_y<bits<8> opc, string OpcodeStr> {
+ defm PSY : sse12_fp_packed_logical_rm<opc, VR256, SSEPackedSingle,
+ !strconcat(OpcodeStr, "ps"), f256mem, [], [], 0>, VEX_4V;
+
+ defm PDY : sse12_fp_packed_logical_rm<opc, VR256, SSEPackedDouble,
+ !strconcat(OpcodeStr, "pd"), f256mem, [], [], 0>, OpSize, VEX_4V;
+}
+}
+
+// AVX 256-bit packed logical ops forms
+defm VAND : sse12_fp_packed_logical_y<0x54, "and">;
+defm VOR : sse12_fp_packed_logical_y<0x56, "or">;
+defm VXOR : sse12_fp_packed_logical_y<0x57, "xor">;
+let isCommutable = 0 in
+ defm VANDN : sse12_fp_packed_logical_y<0x55, "andn">;
+
defm AND : sse12_fp_packed_logical<0x54, "and", and>;
defm OR : sse12_fp_packed_logical<0x56, "or", or>;
defm XOR : sse12_fp_packed_logical<0x57, "xor", xor>;
diff --git a/test/MC/AsmParser/X86/x86_32-encoding.s b/test/MC/AsmParser/X86/x86_32-encoding.s
index 177b2a37d0..ea4a36e5e1 100644
--- a/test/MC/AsmParser/X86/x86_32-encoding.s
+++ b/test/MC/AsmParser/X86/x86_32-encoding.s
@@ -12534,3 +12534,67 @@
// CHECK: encoding: [0xc5,0xfc,0x53,0x10]
vrcpps (%eax), %ymm2
+// CHECK: vandps %ymm2, %ymm4, %ymm6
+// CHECK: encoding: [0xc5,0xdc,0x54,0xf2]
+ vandps %ymm2, %ymm4, %ymm6
+
+// CHECK: vandpd %ymm2, %ymm4, %ymm6
+// CHECK: encoding: [0xc5,0xdd,0x54,0xf2]
+ vandpd %ymm2, %ymm4, %ymm6
+
+// CHECK: vandps -4(%ebx,%ecx,8), %ymm2, %ymm5
+// CHECK: encoding: [0xc5,0xec,0x54,0x6c,0xcb,0xfc]
+ vandps -4(%ebx,%ecx,8), %ymm2, %ymm5
+
+// CHECK: vandpd -4(%ebx,%ecx,8), %ymm2, %ymm5
+// CHECK: encoding: [0xc5,0xed,0x54,0x6c,0xcb,0xfc]
+ vandpd -4(%ebx,%ecx,8), %ymm2, %ymm5
+
+// CHECK: vorps %ymm2, %ymm4, %ymm6
+// CHECK: encoding: [0xc5,0xdc,0x56,0xf2]
+ vorps %ymm2, %ymm4, %ymm6
+
+// CHECK: vorpd %ymm2, %ymm4, %ymm6
+// CHECK: encoding: [0xc5,0xdd,0x56,0xf2]
+ vorpd %ymm2, %ymm4, %ymm6
+
+// CHECK: vorps -4(%ebx,%ecx,8), %ymm2, %ymm5
+// CHECK: encoding: [0xc5,0xec,0x56,0x6c,0xcb,0xfc]
+ vorps -4(%ebx,%ecx,8), %ymm2, %ymm5
+
+// CHECK: vorpd -4(%ebx,%ecx,8), %ymm2, %ymm5
+// CHECK: encoding: [0xc5,0xed,0x56,0x6c,0xcb,0xfc]
+ vorpd -4(%ebx,%ecx,8), %ymm2, %ymm5
+
+// CHECK: vxorps %ymm2, %ymm4, %ymm6
+// CHECK: encoding: [0xc5,0xdc,0x57,0xf2]
+ vxorps %ymm2, %ymm4, %ymm6
+
+// CHECK: vxorpd %ymm2, %ymm4, %ymm6
+// CHECK: encoding: [0xc5,0xdd,0x57,0xf2]
+ vxorpd %ymm2, %ymm4, %ymm6
+
+// CHECK: vxorps -4(%ebx,%ecx,8), %ymm2, %ymm5
+// CHECK: encoding: [0xc5,0xec,0x57,0x6c,0xcb,0xfc]
+ vxorps -4(%ebx,%ecx,8), %ymm2, %ymm5
+
+// CHECK: vxorpd -4(%ebx,%ecx,8), %ymm2, %ymm5
+// CHECK: encoding: [0xc5,0xed,0x57,0x6c,0xcb,0xfc]
+ vxorpd -4(%ebx,%ecx,8), %ymm2, %ymm5
+
+// CHECK: vandnps %ymm2, %ymm4, %ymm6
+// CHECK: encoding: [0xc5,0xdc,0x55,0xf2]
+ vandnps %ymm2, %ymm4, %ymm6
+
+// CHECK: vandnpd %ymm2, %ymm4, %ymm6
+// CHECK: encoding: [0xc5,0xdd,0x55,0xf2]
+ vandnpd %ymm2, %ymm4, %ymm6
+
+// CHECK: vandnps -4(%ebx,%ecx,8), %ymm2, %ymm5
+// CHECK: encoding: [0xc5,0xec,0x55,0x6c,0xcb,0xfc]
+ vandnps -4(%ebx,%ecx,8), %ymm2, %ymm5
+
+// CHECK: vandnpd -4(%ebx,%ecx,8), %ymm2, %ymm5
+// CHECK: encoding: [0xc5,0xed,0x55,0x6c,0xcb,0xfc]
+ vandnpd -4(%ebx,%ecx,8), %ymm2, %ymm5
+
diff --git a/test/MC/AsmParser/X86/x86_64-encoding.s b/test/MC/AsmParser/X86/x86_64-encoding.s
index 1504f6b0ab..4efcbc7882 100644
--- a/test/MC/AsmParser/X86/x86_64-encoding.s
+++ b/test/MC/AsmParser/X86/x86_64-encoding.s
@@ -2608,3 +2608,67 @@ pshufb CPI1_0(%rip), %xmm1
// CHECK: encoding: [0xc5,0x7c,0x53,0x20]
vrcpps (%rax), %ymm12
+// CHECK: vandps %ymm12, %ymm14, %ymm11
+// CHECK: encoding: [0xc4,0x41,0x0c,0x54,0xdc]
+ vandps %ymm12, %ymm14, %ymm11
+
+// CHECK: vandpd %ymm12, %ymm14, %ymm11
+// CHECK: encoding: [0xc4,0x41,0x0d,0x54,0xdc]
+ vandpd %ymm12, %ymm14, %ymm11
+
+// CHECK: vandps -4(%rbx,%rcx,8), %ymm12, %ymm10
+// CHECK: encoding: [0xc5,0x1c,0x54,0x54,0xcb,0xfc]
+ vandps -4(%rbx,%rcx,8), %ymm12, %ymm10
+
+// CHECK: vandpd -4(%rbx,%rcx,8), %ymm12, %ymm10
+// CHECK: encoding: [0xc5,0x1d,0x54,0x54,0xcb,0xfc]
+ vandpd -4(%rbx,%rcx,8), %ymm12, %ymm10
+
+// CHECK: vorps %ymm12, %ymm14, %ymm11
+// CHECK: encoding: [0xc4,0x41,0x0c,0x56,0xdc]
+ vorps %ymm12, %ymm14, %ymm11
+
+// CHECK: vorpd %ymm12, %ymm14, %ymm11
+// CHECK: encoding: [0xc4,0x41,0x0d,0x56,0xdc]
+ vorpd %ymm12, %ymm14, %ymm11
+
+// CHECK: vorps -4(%rbx,%rcx,8), %ymm12, %ymm10
+// CHECK: encoding: [0xc5,0x1c,0x56,0x54,0xcb,0xfc]
+ vorps -4(%rbx,%rcx,8), %ymm12, %ymm10
+
+// CHECK: vorpd -4(%rbx,%rcx,8), %ymm12, %ymm10
+// CHECK: encoding: [0xc5,0x1d,0x56,0x54,0xcb,0xfc]
+ vorpd -4(%rbx,%rcx,8), %ymm12, %ymm10
+
+// CHECK: vxorps %ymm12, %ymm14, %ymm11
+// CHECK: encoding: [0xc4,0x41,0x0c,0x57,0xdc]
+ vxorps %ymm12, %ymm14, %ymm11
+
+// CHECK: vxorpd %ymm12, %ymm14, %ymm11
+// CHECK: encoding: [0xc4,0x41,0x0d,0x57,0xdc]
+ vxorpd %ymm12, %ymm14, %ymm11
+
+// CHECK: vxorps -4(%rbx,%rcx,8), %ymm12, %ymm10
+// CHECK: encoding: [0xc5,0x1c,0x57,0x54,0xcb,0xfc]
+ vxorps -4(%rbx,%rcx,8), %ymm12, %ymm10
+
+// CHECK: vxorpd -4(%rbx,%rcx,8), %ymm12, %ymm10
+// CHECK: encoding: [0xc5,0x1d,0x57,0x54,0xcb,0xfc]
+ vxorpd -4(%rbx,%rcx,8), %ymm12, %ymm10
+
+// CHECK: vandnps %ymm12, %ymm14, %ymm11
+// CHECK: encoding: [0xc4,0x41,0x0c,0x55,0xdc]
+ vandnps %ymm12, %ymm14, %ymm11
+
+// CHECK: vandnpd %ymm12, %ymm14, %ymm11
+// CHECK: encoding: [0xc4,0x41,0x0d,0x55,0xdc]
+ vandnpd %ymm12, %ymm14, %ymm11
+
+// CHECK: vandnps -4(%rbx,%rcx,8), %ymm12, %ymm10
+// CHECK: encoding: [0xc5,0x1c,0x55,0x54,0xcb,0xfc]
+ vandnps -4(%rbx,%rcx,8), %ymm12, %ymm10
+
+// CHECK: vandnpd -4(%rbx,%rcx,8), %ymm12, %ymm10
+// CHECK: encoding: [0xc5,0x1d,0x55,0x54,0xcb,0xfc]
+ vandnpd -4(%rbx,%rcx,8), %ymm12, %ymm10
+