OSDN Git Service

Convert pand/por/pxor to use multiclass
authorChris Lattner <sabre@nondot.org>
Sat, 7 Oct 2006 19:37:30 +0000 (19:37 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 7 Oct 2006 19:37:30 +0000 (19:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30811 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrSSE.td

index 7a3c655..5684384 100644 (file)
@@ -1403,32 +1403,11 @@ def PSRLDQri : PDIi8<0x73, MRM3r, (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
 }
 
 // Logical
-let isTwoAddress = 1 in {
-let isCommutable = 1 in {
-def PANDrr : PDI<0xDB, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-                 "pand {$src2, $dst|$dst, $src2}",
-                 [(set VR128:$dst, (v2i64 (and VR128:$src1, VR128:$src2)))]>;
-def PORrr  : PDI<0xEB, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-                 "por {$src2, $dst|$dst, $src2}",
-                 [(set VR128:$dst, (v2i64 (or VR128:$src1, VR128:$src2)))]>;
-def PXORrr : PDI<0xEF, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-                 "pxor {$src2, $dst|$dst, $src2}",
-                 [(set VR128:$dst, (v2i64 (xor VR128:$src1, VR128:$src2)))]>;
-}
-
-def PANDrm : PDI<0xDB, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
-                 "pand {$src2, $dst|$dst, $src2}",
-                 [(set VR128:$dst, (v2i64 (and VR128:$src1,
-                                           (load addr:$src2))))]>;
-def PORrm  : PDI<0xEB, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
-                 "por {$src2, $dst|$dst, $src2}",
-                 [(set VR128:$dst, (v2i64 (or VR128:$src1,
-                                           (load addr:$src2))))]>;
-def PXORrm : PDI<0xEF, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
-                 "pxor {$src2, $dst|$dst, $src2}",
-                 [(set VR128:$dst, (v2i64 (xor VR128:$src1,
-                                           (load addr:$src2))))]>;
+defm PAND : PDI_binop_rm_v2i64<0xDB, "pand", and, 1>;
+defm POR  : PDI_binop_rm_v2i64<0xEB, "por" , or , 1>;
+defm PXOR : PDI_binop_rm_v2i64<0xEF, "pxor", xor, 1>;
 
+let isTwoAddress = 1 in {
 def PANDNrr : PDI<0xDF, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
                   "pandn {$src2, $dst|$dst, $src2}",
                   [(set VR128:$dst, (v2i64 (and (vnot VR128:$src1),