[PATCH] [AArch64 NEON]Fix a assertion failure when disassemble SHLL instruction.

Tim Northover t.p.northover at gmail.com
Wed Nov 27 02:00:33 PST 2013


  Hi Kevin,

  This needs a test, and...


================
Comment at: lib/Target/AArch64/AArch64InstrNEON.td:7853
@@ -7852,36 +7852,3 @@
 multiclass NeonI_2VMisc_SHIFT<string asmop, bit U, bits<5> opcode> {
-  def 8b8h : NeonI_2VMisc<0b0, U, 0b00, opcode,
-                          (outs VPR128:$Rd),
-                          (ins VPR64:$Rn, uimm_exact8:$Imm),
-                          asmop # "\t$Rd.8h, $Rn.8b, $Imm",
-                          [], NoItinerary>;
-
-  def 4h4s : NeonI_2VMisc<0b0, U, 0b01, opcode,
-                          (outs VPR128:$Rd),
-                          (ins VPR64:$Rn, uimm_exact16:$Imm),
-                          asmop # "\t$Rd.4s, $Rn.4h, $Imm",
-                          [], NoItinerary>;
-
-  def 2s2d : NeonI_2VMisc<0b0, U, 0b10, opcode,
-                          (outs VPR128:$Rd),
-                          (ins VPR64:$Rn, uimm_exact32:$Imm),
-                          asmop # "\t$Rd.2d, $Rn.2s, $Imm",
-                          [], NoItinerary>;
-
-  def 16b8h : NeonI_2VMisc<0b1, U, 0b00, opcode,
-                          (outs VPR128:$Rd),
-                          (ins VPR128:$Rn, uimm_exact8:$Imm),
-                          asmop # "2\t$Rd.8h, $Rn.16b, $Imm",
-                          [], NoItinerary>;
-
-  def 8h4s : NeonI_2VMisc<0b1, U, 0b01, opcode,
-                          (outs VPR128:$Rd),
-                          (ins VPR128:$Rn, uimm_exact16:$Imm),
-                          asmop # "2\t$Rd.4s, $Rn.8h, $Imm",
-                          [], NoItinerary>;
-
-  def 4s2d : NeonI_2VMisc<0b1, U, 0b10, opcode,
-                          (outs VPR128:$Rd),
-                          (ins VPR128:$Rn, uimm_exact32:$Imm),
-                          asmop # "2\t$Rd.2d, $Rn.4s, $Imm",
-                          [], NoItinerary>;
+  let DecoderMethod = "DecodeSHLLInstruction" in {
+    def 8b8h : NeonI_2VMisc<0b0, U, 0b00, opcode,
----------------
As far as I can see the only difference is the shift amount gets added as "size" rather than "1". If so, this should be a DecoderMethod on uimm_exactN rather than the instructions. Instruction Decoders are a last resort for truly bizarre situations.


http://llvm-reviews.chandlerc.com/D2278



More information about the llvm-commits mailing list