1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00

[AArch64] Refactor instructions that write PSTATE (NFCI)

Reuse some code in preparation for the v8.5A XAFlag/AXFlag instructions,
which shares part of the encoding of the MSR-immediate.

Patch by Pablo Barrio!

Differential revision: https://reviews.llvm.org/D52472

llvm-svn: 343113
This commit is contained in:
Oliver Stannard 2018-09-26 14:42:59 +00:00
parent adcedeea67
commit b7590e3407

View File

@ -1173,16 +1173,23 @@ def pstatefield4_op : Operand<i32> {
let PrintMethod = "printSystemPStateField";
}
// Instructions to modify PSTATE, no input reg
let Defs = [NZCV] in
class PstateWriteSimple<dag iops, string asm, string operands>
: SimpleSystemI<0, iops, asm, operands> {
let Inst{20-19} = 0b00;
let Inst{15-12} = 0b0100;
}
class MSRpstateImm0_15
: SimpleSystemI<0, (ins pstatefield4_op:$pstatefield, imm0_15:$imm),
"msr", "\t$pstatefield, $imm">,
: PstateWriteSimple<(ins pstatefield4_op:$pstatefield, imm0_15:$imm), "msr",
"\t$pstatefield, $imm">,
Sched<[WriteSys]> {
bits<6> pstatefield;
bits<4> imm;
let Inst{20-19} = 0b00;
let Inst{18-16} = pstatefield{5-3};
let Inst{15-12} = 0b0100;
let Inst{11-8} = imm;
let Inst{7-5} = pstatefield{2-0};
@ -1201,16 +1208,15 @@ def pstatefield1_op : Operand<i32> {
let PrintMethod = "printSystemPStateField";
}
let Defs = [NZCV] in
class MSRpstateImm0_1
: SimpleSystemI<0, (ins pstatefield1_op:$pstatefield, imm0_1:$imm),
"msr", "\t$pstatefield, $imm">,
: PstateWriteSimple<(ins pstatefield1_op:$pstatefield, imm0_1:$imm), "msr",
"\t$pstatefield, $imm">,
Sched<[WriteSys]> {
bits<6> pstatefield;
bit imm;
let Inst{20-19} = 0b00;
let Inst{18-16} = pstatefield{5-3};
let Inst{15-9} = 0b0100000;
let Inst{11-9} = 0b000;
let Inst{8} = imm;
let Inst{7-5} = pstatefield{2-0};