Add AVX only vzeroall and vzeroupper instructions
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Wed, 21 Jul 2010 08:56:24 +0000 (08:56 +0000)
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Wed, 21 Jul 2010 08:56:24 +0000 (08:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109002 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrSSE.td
lib/Target/X86/X86MCCodeEmitter.cpp
test/MC/AsmParser/X86/x86_32-encoding.s

index 76bc0ff48254793f19a823314c9e04b48edc236a..121406c47f88f1e1f32e772deff41e4ff39793b4 100644 (file)
@@ -5076,4 +5076,10 @@ def VPERM2F128rm : AVXAIi8<0x06, MRMSrcMem, (outs VR256:$dst),
           "vperm2f128\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
           []>, VEX_4V;
 
+// Zero All YMM registers
+def VZEROALL : I<0x77, RawFrm, (outs), (ins), "vzeroall", []>, VEX, VEX_L;
+
+// Zero Upper bits of YMM registers
+def VZEROUPPER : I<0x77, RawFrm, (outs), (ins), "vzeroupper", []>, VEX;
+
 } // isAsmParserOnly
index 230c9d041807182a4ee86c6a61ad7d3a14422645..b39fce1f79c17b54af9d98a6493a84d89eeb4449 100644 (file)
@@ -514,7 +514,10 @@ void X86MCCodeEmitter::EmitVEXOpcodePrefix(uint64_t TSFlags, unsigned &CurByte,
         VEX_X = 0x0;
     }
     break;
-  default: // MRMDestReg, MRM0r-MRM7r
+  default: // MRMDestReg, MRM0r-MRM7r, RawFrm
+    if (!MI.getNumOperands())
+      break;
+
     if (MI.getOperand(CurOp).isReg() &&
         X86InstrInfo::isX86_64ExtendedReg(MI.getOperand(CurOp).getReg()))
       VEX_B = 0;
@@ -530,7 +533,6 @@ void X86MCCodeEmitter::EmitVEXOpcodePrefix(uint64_t TSFlags, unsigned &CurByte,
         VEX_R = 0x0;
     }
     break;
-    assert(0 && "Not implemented!");
   }
 
   // Emit segment override opcode prefix as needed.
index 8c62260c3f0be56da93e59af46133b6ab202e518..130f39ff33c5cc9afca3922208eb3d251ed09ade 100644 (file)
 // CHECK: encoding: [0xc4,0xe3,0x55,0x06,0x08,0x07]
           vperm2f128  $7, (%eax), %ymm5, %ymm1
 
+// CHECK: vzeroall
+// CHECK: encoding: [0xc5,0xfc,0x77]
+          vzeroall
+
+// CHECK: vzeroupper
+// CHECK: encoding: [0xc5,0xf8,0x77]
+          vzeroupper
+