Index: llvm/trunk/lib/Target/AArch64/AArch64InstrFormats.td =================================================================== --- llvm/trunk/lib/Target/AArch64/AArch64InstrFormats.td +++ llvm/trunk/lib/Target/AArch64/AArch64InstrFormats.td @@ -4401,7 +4401,7 @@ //--- let mayLoad = 0, mayStore = 0, hasSideEffects = 0 in -class BaseSingleOperandFPData opcode, RegisterClass regtype, +class BaseSingleOperandFPData opcode, RegisterClass regtype, ValueType vt, string asm, SDPatternOperator node> : I<(outs regtype:$Rd), (ins regtype:$Rn), asm, "\t$Rd, $Rn", "", [(set (vt regtype:$Rd), (node (vt regtype:$Rn)))]>, @@ -4409,8 +4409,8 @@ bits<5> Rd; bits<5> Rn; let Inst{31-24} = 0b00011110; - let Inst{21-19} = 0b100; - let Inst{18-15} = opcode; + let Inst{21} = 0b1; + let Inst{20-15} = opcode; let Inst{14-10} = 0b10000; let Inst{9-5} = Rn; let Inst{4-0} = Rd; @@ -4418,16 +4418,17 @@ multiclass SingleOperandFPData opcode, string asm, SDPatternOperator node = null_frag> { - def Hr : BaseSingleOperandFPData { + + def Hr : BaseSingleOperandFPData<{0b00,opcode}, FPR16, f16, asm, node> { let Inst{23-22} = 0b11; // 16-bit size flag let Predicates = [HasFullFP16]; } - def Sr : BaseSingleOperandFPData { + def Sr : BaseSingleOperandFPData<{0b00,opcode}, FPR32, f32, asm, node> { let Inst{23-22} = 0b00; // 32-bit size flag } - def Dr : BaseSingleOperandFPData { + def Dr : BaseSingleOperandFPData<{0b00,opcode}, FPR64, f64, asm, node> { let Inst{23-22} = 0b01; // 64-bit size flag } }