mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
PowerPC: Fix encoding of rldimi and rldcl instructions
When testing the asm parser, I noticed wrong encodings for the above instructions (wrong operand name in rldimi, wrong form and sub-opcode for rldcl). Tests will be added together with the asm parser. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180606 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8ade909308
commit
1adc97c901
@ -526,14 +526,14 @@ defm MULLD : XOForm_1r<31, 233, 0, (outs G8RC:$rT), (ins G8RC:$rA, G8RC:$rB),
|
||||
let neverHasSideEffects = 1 in {
|
||||
let isCommutable = 1 in {
|
||||
defm RLDIMI : MDForm_1r<30, 3, (outs G8RC:$rA),
|
||||
(ins G8RC:$rSi, G8RC:$rS, u6imm:$SH, u6imm:$MB),
|
||||
"rldimi", "$rA, $rS, $SH, $MB", IntRotateDI,
|
||||
(ins G8RC:$rSi, G8RC:$rS, u6imm:$SH, u6imm:$MBE),
|
||||
"rldimi", "$rA, $rS, $SH, $MBE", IntRotateDI,
|
||||
[]>, isPPC64, RegConstraint<"$rSi = $rA">,
|
||||
NoEncode<"$rSi">;
|
||||
}
|
||||
|
||||
// Rotate instructions.
|
||||
defm RLDCL : MDForm_1r<30, 0,
|
||||
defm RLDCL : MDSForm_1r<30, 8,
|
||||
(outs G8RC:$rA), (ins G8RC:$rS, GPRC:$rB, u6imm:$MBE),
|
||||
"rldcl", "$rA, $rS, $rB, $MBE", IntRotateD,
|
||||
[]>, isPPC64;
|
||||
|
@ -855,6 +855,25 @@ class MDForm_1<bits<6> opcode, bits<3> xo, dag OOL, dag IOL, string asmstr,
|
||||
let Inst{31} = RC;
|
||||
}
|
||||
|
||||
class MDSForm_1<bits<6> opcode, bits<4> xo, dag OOL, dag IOL, string asmstr,
|
||||
InstrItinClass itin, list<dag> pattern>
|
||||
: I<opcode, OOL, IOL, asmstr, itin> {
|
||||
bits<5> RA;
|
||||
bits<5> RS;
|
||||
bits<5> RB;
|
||||
bits<6> MBE;
|
||||
|
||||
let Pattern = pattern;
|
||||
|
||||
bit RC = 0; // set by isDOT
|
||||
|
||||
let Inst{6-10} = RS;
|
||||
let Inst{11-15} = RA;
|
||||
let Inst{16-20} = RB;
|
||||
let Inst{21-26} = MBE{4,3,2,1,0,5};
|
||||
let Inst{27-30} = xo;
|
||||
let Inst{31} = RC;
|
||||
}
|
||||
|
||||
|
||||
// E-1 VA-Form
|
||||
|
@ -587,6 +587,20 @@ multiclass MDForm_1r<bits<6> opcode, bits<3> xo, dag OOL, dag IOL,
|
||||
}
|
||||
}
|
||||
|
||||
multiclass MDSForm_1r<bits<6> opcode, bits<4> xo, dag OOL, dag IOL,
|
||||
string asmbase, string asmstr, InstrItinClass itin,
|
||||
list<dag> pattern> {
|
||||
let BaseName = asmbase in {
|
||||
def NAME : MDSForm_1<opcode, xo, OOL, IOL,
|
||||
!strconcat(asmbase, !strconcat(" ", asmstr)), itin,
|
||||
pattern>, RecFormRel;
|
||||
let Defs = [CR0] in
|
||||
def o : MDSForm_1<opcode, xo, OOL, IOL,
|
||||
!strconcat(asmbase, !strconcat(". ", asmstr)), itin,
|
||||
[]>, isDOT, RecFormRel;
|
||||
}
|
||||
}
|
||||
|
||||
multiclass XSForm_1rc<bits<6> opcode, bits<9> xo, dag OOL, dag IOL,
|
||||
string asmbase, string asmstr, InstrItinClass itin,
|
||||
list<dag> pattern> {
|
||||
|
Loading…
Reference in New Issue
Block a user