[AArch64] Merge 32- and 64-bit ALUOps (#3802)
Combine the two opcodes into one and pass and add an OperandSize field to these instructions, as well as an ISLE helper to perform the conversion from Type. This saves us from having having to write ISLE helpers to select the correct opcode, based on type, and reduces the amount of code needed for emission. Copyright (c) 2022, Arm Limited.
This commit is contained in:
@@ -67,7 +67,8 @@ pub fn mem_finalize(
|
||||
// is a valid base (for SPOffset) which we must handle here.
|
||||
// Also, SP needs to be the first arg, not second.
|
||||
let add_inst = Inst::AluRRRExtend {
|
||||
alu_op: ALUOp::Add64,
|
||||
alu_op: ALUOp::Add,
|
||||
size: OperandSize::Size64,
|
||||
rd: tmp,
|
||||
rn: basereg,
|
||||
rm: tmp.to_reg(),
|
||||
@@ -682,52 +683,48 @@ impl MachInstEmit for Inst {
|
||||
let mut start_off = sink.cur_offset();
|
||||
|
||||
match self {
|
||||
&Inst::AluRRR { alu_op, rd, rn, rm } => {
|
||||
&Inst::AluRRR {
|
||||
alu_op,
|
||||
size,
|
||||
rd,
|
||||
rn,
|
||||
rm,
|
||||
} => {
|
||||
debug_assert!(match alu_op {
|
||||
ALUOp::SDiv | ALUOp::UDiv | ALUOp::SMulH | ALUOp::UMulH =>
|
||||
size == OperandSize::Size64,
|
||||
_ => true,
|
||||
});
|
||||
let top11 = match alu_op {
|
||||
ALUOp::Add32 => 0b00001011_000,
|
||||
ALUOp::Add64 => 0b10001011_000,
|
||||
ALUOp::Adc32 => 0b00011010_000,
|
||||
ALUOp::Adc64 => 0b10011010_000,
|
||||
ALUOp::AdcS32 => 0b00111010_000,
|
||||
ALUOp::AdcS64 => 0b10111010_000,
|
||||
ALUOp::Sub32 => 0b01001011_000,
|
||||
ALUOp::Sub64 => 0b11001011_000,
|
||||
ALUOp::Sbc32 => 0b01011010_000,
|
||||
ALUOp::Sbc64 => 0b11011010_000,
|
||||
ALUOp::SbcS32 => 0b01111010_000,
|
||||
ALUOp::SbcS64 => 0b11111010_000,
|
||||
ALUOp::Orr32 => 0b00101010_000,
|
||||
ALUOp::Orr64 => 0b10101010_000,
|
||||
ALUOp::And32 => 0b00001010_000,
|
||||
ALUOp::And64 => 0b10001010_000,
|
||||
ALUOp::AndS32 => 0b01101010_000,
|
||||
ALUOp::AndS64 => 0b11101010_000,
|
||||
ALUOp::Eor32 => 0b01001010_000,
|
||||
ALUOp::Eor64 => 0b11001010_000,
|
||||
ALUOp::OrrNot32 => 0b00101010_001,
|
||||
ALUOp::OrrNot64 => 0b10101010_001,
|
||||
ALUOp::AndNot32 => 0b00001010_001,
|
||||
ALUOp::AndNot64 => 0b10001010_001,
|
||||
ALUOp::EorNot32 => 0b01001010_001,
|
||||
ALUOp::EorNot64 => 0b11001010_001,
|
||||
ALUOp::AddS32 => 0b00101011_000,
|
||||
ALUOp::AddS64 => 0b10101011_000,
|
||||
ALUOp::SubS32 => 0b01101011_000,
|
||||
ALUOp::SubS64 => 0b11101011_000,
|
||||
ALUOp::SDiv64 => 0b10011010_110,
|
||||
ALUOp::UDiv64 => 0b10011010_110,
|
||||
ALUOp::RotR32 | ALUOp::Lsr32 | ALUOp::Asr32 | ALUOp::Lsl32 => 0b00011010_110,
|
||||
ALUOp::RotR64 | ALUOp::Lsr64 | ALUOp::Asr64 | ALUOp::Lsl64 => 0b10011010_110,
|
||||
ALUOp::Add => 0b00001011_000,
|
||||
ALUOp::Adc => 0b00011010_000,
|
||||
ALUOp::AdcS => 0b00111010_000,
|
||||
ALUOp::Sub => 0b01001011_000,
|
||||
ALUOp::Sbc => 0b01011010_000,
|
||||
ALUOp::SbcS => 0b01111010_000,
|
||||
ALUOp::Orr => 0b00101010_000,
|
||||
ALUOp::And => 0b00001010_000,
|
||||
ALUOp::AndS => 0b01101010_000,
|
||||
ALUOp::Eor => 0b01001010_000,
|
||||
ALUOp::OrrNot => 0b00101010_001,
|
||||
ALUOp::AndNot => 0b00001010_001,
|
||||
ALUOp::EorNot => 0b01001010_001,
|
||||
ALUOp::AddS => 0b00101011_000,
|
||||
ALUOp::SubS => 0b01101011_000,
|
||||
ALUOp::SDiv => 0b10011010_110,
|
||||
ALUOp::UDiv => 0b10011010_110,
|
||||
ALUOp::RotR | ALUOp::Lsr | ALUOp::Asr | ALUOp::Lsl => 0b00011010_110,
|
||||
ALUOp::SMulH => 0b10011011_010,
|
||||
ALUOp::UMulH => 0b10011011_110,
|
||||
};
|
||||
let top11 = top11 | size.sf_bit() << 10;
|
||||
let bit15_10 = match alu_op {
|
||||
ALUOp::SDiv64 => 0b000011,
|
||||
ALUOp::UDiv64 => 0b000010,
|
||||
ALUOp::RotR32 | ALUOp::RotR64 => 0b001011,
|
||||
ALUOp::Lsr32 | ALUOp::Lsr64 => 0b001001,
|
||||
ALUOp::Asr32 | ALUOp::Asr64 => 0b001010,
|
||||
ALUOp::Lsl32 | ALUOp::Lsl64 => 0b001000,
|
||||
ALUOp::SDiv => 0b000011,
|
||||
ALUOp::UDiv => 0b000010,
|
||||
ALUOp::RotR => 0b001011,
|
||||
ALUOp::Lsr => 0b001001,
|
||||
ALUOp::Asr => 0b001010,
|
||||
ALUOp::Lsl => 0b001000,
|
||||
ALUOp::SMulH | ALUOp::UMulH => 0b011111,
|
||||
_ => 0b000000,
|
||||
};
|
||||
@@ -755,21 +752,19 @@ impl MachInstEmit for Inst {
|
||||
}
|
||||
&Inst::AluRRImm12 {
|
||||
alu_op,
|
||||
size,
|
||||
rd,
|
||||
rn,
|
||||
ref imm12,
|
||||
} => {
|
||||
let top8 = match alu_op {
|
||||
ALUOp::Add32 => 0b000_10001,
|
||||
ALUOp::Add64 => 0b100_10001,
|
||||
ALUOp::Sub32 => 0b010_10001,
|
||||
ALUOp::Sub64 => 0b110_10001,
|
||||
ALUOp::AddS32 => 0b001_10001,
|
||||
ALUOp::AddS64 => 0b101_10001,
|
||||
ALUOp::SubS32 => 0b011_10001,
|
||||
ALUOp::SubS64 => 0b111_10001,
|
||||
ALUOp::Add => 0b000_10001,
|
||||
ALUOp::Sub => 0b010_10001,
|
||||
ALUOp::AddS => 0b001_10001,
|
||||
ALUOp::SubS => 0b011_10001,
|
||||
_ => unimplemented!("{:?}", alu_op),
|
||||
};
|
||||
let top8 = top8 | size.sf_bit() << 7;
|
||||
sink.put4(enc_arith_rr_imm12(
|
||||
top8,
|
||||
imm12.shift_bits(),
|
||||
@@ -780,57 +775,53 @@ impl MachInstEmit for Inst {
|
||||
}
|
||||
&Inst::AluRRImmLogic {
|
||||
alu_op,
|
||||
size,
|
||||
rd,
|
||||
rn,
|
||||
ref imml,
|
||||
} => {
|
||||
let (top9, inv) = match alu_op {
|
||||
ALUOp::Orr32 => (0b001_100100, false),
|
||||
ALUOp::Orr64 => (0b101_100100, false),
|
||||
ALUOp::And32 => (0b000_100100, false),
|
||||
ALUOp::And64 => (0b100_100100, false),
|
||||
ALUOp::AndS32 => (0b011_100100, false),
|
||||
ALUOp::AndS64 => (0b111_100100, false),
|
||||
ALUOp::Eor32 => (0b010_100100, false),
|
||||
ALUOp::Eor64 => (0b110_100100, false),
|
||||
ALUOp::OrrNot32 => (0b001_100100, true),
|
||||
ALUOp::OrrNot64 => (0b101_100100, true),
|
||||
ALUOp::AndNot32 => (0b000_100100, true),
|
||||
ALUOp::AndNot64 => (0b100_100100, true),
|
||||
ALUOp::EorNot32 => (0b010_100100, true),
|
||||
ALUOp::EorNot64 => (0b110_100100, true),
|
||||
ALUOp::Orr => (0b001_100100, false),
|
||||
ALUOp::And => (0b000_100100, false),
|
||||
ALUOp::AndS => (0b011_100100, false),
|
||||
ALUOp::Eor => (0b010_100100, false),
|
||||
ALUOp::OrrNot => (0b001_100100, true),
|
||||
ALUOp::AndNot => (0b000_100100, true),
|
||||
ALUOp::EorNot => (0b010_100100, true),
|
||||
_ => unimplemented!("{:?}", alu_op),
|
||||
};
|
||||
let top9 = top9 | size.sf_bit() << 8;
|
||||
let imml = if inv { imml.invert() } else { imml.clone() };
|
||||
sink.put4(enc_arith_rr_imml(top9, imml.enc_bits(), rn, rd));
|
||||
}
|
||||
|
||||
&Inst::AluRRImmShift {
|
||||
alu_op,
|
||||
size,
|
||||
rd,
|
||||
rn,
|
||||
ref immshift,
|
||||
} => {
|
||||
let amt = immshift.value();
|
||||
let (top10, immr, imms) = match alu_op {
|
||||
ALUOp::RotR32 => (0b0001001110, machreg_to_gpr(rn), u32::from(amt)),
|
||||
ALUOp::RotR64 => (0b1001001111, machreg_to_gpr(rn), u32::from(amt)),
|
||||
ALUOp::Lsr32 => (0b0101001100, u32::from(amt), 0b011111),
|
||||
ALUOp::Lsr64 => (0b1101001101, u32::from(amt), 0b111111),
|
||||
ALUOp::Asr32 => (0b0001001100, u32::from(amt), 0b011111),
|
||||
ALUOp::Asr64 => (0b1001001101, u32::from(amt), 0b111111),
|
||||
ALUOp::Lsl32 => (
|
||||
0b0101001100,
|
||||
u32::from((32 - amt) % 32),
|
||||
u32::from(31 - amt),
|
||||
),
|
||||
ALUOp::Lsl64 => (
|
||||
0b1101001101,
|
||||
u32::from((64 - amt) % 64),
|
||||
u32::from(63 - amt),
|
||||
),
|
||||
ALUOp::RotR => (0b0001001110, machreg_to_gpr(rn), u32::from(amt)),
|
||||
ALUOp::Lsr => (0b0101001100, u32::from(amt), 0b011111),
|
||||
ALUOp::Asr => (0b0001001100, u32::from(amt), 0b011111),
|
||||
ALUOp::Lsl => {
|
||||
let bits = if size.is64() { 64 } else { 32 };
|
||||
(
|
||||
0b0101001100,
|
||||
u32::from((bits - amt) % bits),
|
||||
u32::from(bits - 1 - amt),
|
||||
)
|
||||
}
|
||||
_ => unimplemented!("{:?}", alu_op),
|
||||
};
|
||||
let top10 = top10 | size.sf_bit() << 9 | size.sf_bit();
|
||||
let imms = match alu_op {
|
||||
ALUOp::Lsr | ALUOp::Asr => imms | size.sf_bit() << 5,
|
||||
_ => imms,
|
||||
};
|
||||
sink.put4(
|
||||
(top10 << 22)
|
||||
| (immr << 16)
|
||||
@@ -842,36 +833,27 @@ impl MachInstEmit for Inst {
|
||||
|
||||
&Inst::AluRRRShift {
|
||||
alu_op,
|
||||
size,
|
||||
rd,
|
||||
rn,
|
||||
rm,
|
||||
ref shiftop,
|
||||
} => {
|
||||
let top11: u32 = match alu_op {
|
||||
ALUOp::Add32 => 0b000_01011000,
|
||||
ALUOp::Add64 => 0b100_01011000,
|
||||
ALUOp::AddS32 => 0b001_01011000,
|
||||
ALUOp::AddS64 => 0b101_01011000,
|
||||
ALUOp::Sub32 => 0b010_01011000,
|
||||
ALUOp::Sub64 => 0b110_01011000,
|
||||
ALUOp::SubS32 => 0b011_01011000,
|
||||
ALUOp::SubS64 => 0b111_01011000,
|
||||
ALUOp::Orr32 => 0b001_01010000,
|
||||
ALUOp::Orr64 => 0b101_01010000,
|
||||
ALUOp::And32 => 0b000_01010000,
|
||||
ALUOp::And64 => 0b100_01010000,
|
||||
ALUOp::AndS32 => 0b011_01010000,
|
||||
ALUOp::AndS64 => 0b111_01010000,
|
||||
ALUOp::Eor32 => 0b010_01010000,
|
||||
ALUOp::Eor64 => 0b110_01010000,
|
||||
ALUOp::OrrNot32 => 0b001_01010001,
|
||||
ALUOp::OrrNot64 => 0b101_01010001,
|
||||
ALUOp::EorNot32 => 0b010_01010001,
|
||||
ALUOp::EorNot64 => 0b110_01010001,
|
||||
ALUOp::AndNot32 => 0b000_01010001,
|
||||
ALUOp::AndNot64 => 0b100_01010001,
|
||||
ALUOp::Add => 0b000_01011000,
|
||||
ALUOp::AddS => 0b001_01011000,
|
||||
ALUOp::Sub => 0b010_01011000,
|
||||
ALUOp::SubS => 0b011_01011000,
|
||||
ALUOp::Orr => 0b001_01010000,
|
||||
ALUOp::And => 0b000_01010000,
|
||||
ALUOp::AndS => 0b011_01010000,
|
||||
ALUOp::Eor => 0b010_01010000,
|
||||
ALUOp::OrrNot => 0b001_01010001,
|
||||
ALUOp::EorNot => 0b010_01010001,
|
||||
ALUOp::AndNot => 0b000_01010001,
|
||||
_ => unimplemented!("{:?}", alu_op),
|
||||
};
|
||||
let top11 = top11 | size.sf_bit() << 10;
|
||||
let top11 = top11 | (u32::from(shiftop.op().bits()) << 1);
|
||||
let bits_15_10 = u32::from(shiftop.amt().value());
|
||||
sink.put4(enc_arith_rrr(top11, bits_15_10, rd, rn, rm));
|
||||
@@ -879,22 +861,20 @@ impl MachInstEmit for Inst {
|
||||
|
||||
&Inst::AluRRRExtend {
|
||||
alu_op,
|
||||
size,
|
||||
rd,
|
||||
rn,
|
||||
rm,
|
||||
extendop,
|
||||
} => {
|
||||
let top11: u32 = match alu_op {
|
||||
ALUOp::Add32 => 0b00001011001,
|
||||
ALUOp::Add64 => 0b10001011001,
|
||||
ALUOp::Sub32 => 0b01001011001,
|
||||
ALUOp::Sub64 => 0b11001011001,
|
||||
ALUOp::AddS32 => 0b00101011001,
|
||||
ALUOp::AddS64 => 0b10101011001,
|
||||
ALUOp::SubS32 => 0b01101011001,
|
||||
ALUOp::SubS64 => 0b11101011001,
|
||||
ALUOp::Add => 0b00001011001,
|
||||
ALUOp::Sub => 0b01001011001,
|
||||
ALUOp::AddS => 0b00101011001,
|
||||
ALUOp::SubS => 0b01101011001,
|
||||
_ => unimplemented!("{:?}", alu_op),
|
||||
};
|
||||
let top11 = top11 | size.sf_bit() << 10;
|
||||
let bits_15_10 = u32::from(extendop.bits()) << 3;
|
||||
sink.put4(enc_arith_rrr(top11, bits_15_10, rd, rn, rm));
|
||||
}
|
||||
@@ -1394,7 +1374,8 @@ impl MachInstEmit for Inst {
|
||||
// mvn x28, x28
|
||||
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::And64,
|
||||
alu_op: ALUOp::And,
|
||||
size: OperandSize::Size64,
|
||||
rd: x28wr,
|
||||
rn: x27,
|
||||
rm: x26,
|
||||
@@ -1402,7 +1383,8 @@ impl MachInstEmit for Inst {
|
||||
.emit(sink, emit_info, state);
|
||||
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::OrrNot64,
|
||||
alu_op: ALUOp::OrrNot,
|
||||
size: OperandSize::Size64,
|
||||
rd: x28wr,
|
||||
rn: xzr,
|
||||
rm: x28,
|
||||
@@ -1425,11 +1407,8 @@ impl MachInstEmit for Inst {
|
||||
};
|
||||
|
||||
Inst::AluRRR {
|
||||
alu_op: if ty == I64 {
|
||||
ALUOp::SubS64
|
||||
} else {
|
||||
ALUOp::SubS32
|
||||
},
|
||||
alu_op: ALUOp::SubS,
|
||||
size: OperandSize::from_ty(ty),
|
||||
rd: writable_zero_reg(),
|
||||
rn: x27,
|
||||
rm: x26,
|
||||
@@ -1447,11 +1426,11 @@ impl MachInstEmit for Inst {
|
||||
_ => {
|
||||
// add/sub/and/orr/eor x28, x27, x26
|
||||
let alu_op = match op {
|
||||
AtomicRmwOp::Add => ALUOp::Add64,
|
||||
AtomicRmwOp::Sub => ALUOp::Sub64,
|
||||
AtomicRmwOp::And => ALUOp::And64,
|
||||
AtomicRmwOp::Or => ALUOp::Orr64,
|
||||
AtomicRmwOp::Xor => ALUOp::Eor64,
|
||||
AtomicRmwOp::Add => ALUOp::Add,
|
||||
AtomicRmwOp::Sub => ALUOp::Sub,
|
||||
AtomicRmwOp::And => ALUOp::And,
|
||||
AtomicRmwOp::Or => ALUOp::Orr,
|
||||
AtomicRmwOp::Xor => ALUOp::Eor,
|
||||
AtomicRmwOp::Nand
|
||||
| AtomicRmwOp::Umin
|
||||
| AtomicRmwOp::Umax
|
||||
@@ -1462,6 +1441,7 @@ impl MachInstEmit for Inst {
|
||||
|
||||
Inst::AluRRR {
|
||||
alu_op,
|
||||
size: OperandSize::Size64,
|
||||
rd: x28wr,
|
||||
rn: x27,
|
||||
rm: x26,
|
||||
@@ -2478,7 +2458,8 @@ impl MachInstEmit for Inst {
|
||||
// than AND on smaller cores.
|
||||
let imml = ImmLogic::maybe_from_u64(1, I32).unwrap();
|
||||
Inst::AluRRImmLogic {
|
||||
alu_op: ALUOp::And32,
|
||||
alu_op: ALUOp::And,
|
||||
size: OperandSize::Size32,
|
||||
rd,
|
||||
rn,
|
||||
imml,
|
||||
@@ -2655,7 +2636,8 @@ impl MachInstEmit for Inst {
|
||||
inst.emit(sink, emit_info, state);
|
||||
// Add base of jump table to jump-table-sourced block offset
|
||||
let inst = Inst::AluRRR {
|
||||
alu_op: ALUOp::Add64,
|
||||
alu_op: ALUOp::Add,
|
||||
size: OperandSize::Size64,
|
||||
rd: rtmp1,
|
||||
rn: rtmp1.to_reg(),
|
||||
rm: rtmp2.to_reg(),
|
||||
@@ -2731,15 +2713,12 @@ impl MachInstEmit for Inst {
|
||||
} else {
|
||||
offset as u64
|
||||
};
|
||||
let alu_op = if offset < 0 {
|
||||
ALUOp::Sub64
|
||||
} else {
|
||||
ALUOp::Add64
|
||||
};
|
||||
let alu_op = if offset < 0 { ALUOp::Sub } else { ALUOp::Add };
|
||||
|
||||
if let Some((idx, extendop)) = index_reg {
|
||||
let add = Inst::AluRRRExtend {
|
||||
alu_op: ALUOp::Add64,
|
||||
alu_op: ALUOp::Add,
|
||||
size: OperandSize::Size64,
|
||||
rd,
|
||||
rn: reg,
|
||||
rm: idx,
|
||||
@@ -2756,6 +2735,7 @@ impl MachInstEmit for Inst {
|
||||
} else if let Some(imm12) = Imm12::maybe_from_u64(abs_offset) {
|
||||
let add = Inst::AluRRImm12 {
|
||||
alu_op,
|
||||
size: OperandSize::Size64,
|
||||
rd,
|
||||
rn: reg,
|
||||
imm12,
|
||||
@@ -2775,6 +2755,7 @@ impl MachInstEmit for Inst {
|
||||
}
|
||||
let add = Inst::AluRRR {
|
||||
alu_op,
|
||||
size: OperandSize::Size64,
|
||||
rd,
|
||||
rn: reg,
|
||||
rm: tmp.to_reg(),
|
||||
|
||||
@@ -32,7 +32,8 @@ fn test_aarch64_binemit() {
|
||||
insns.push((Inst::Nop4, "1F2003D5", "nop"));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Add32,
|
||||
alu_op: ALUOp::Add,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -42,7 +43,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Add64,
|
||||
alu_op: ALUOp::Add,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -52,7 +54,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Adc32,
|
||||
alu_op: ALUOp::Adc,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -62,7 +65,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Adc64,
|
||||
alu_op: ALUOp::Adc,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -72,7 +76,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::AdcS32,
|
||||
alu_op: ALUOp::AdcS,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -82,7 +87,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::AdcS64,
|
||||
alu_op: ALUOp::AdcS,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -92,7 +98,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Sub32,
|
||||
alu_op: ALUOp::Sub,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -102,7 +109,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Sub64,
|
||||
alu_op: ALUOp::Sub,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -112,7 +120,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Sbc32,
|
||||
alu_op: ALUOp::Sbc,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -122,7 +131,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Sbc64,
|
||||
alu_op: ALUOp::Sbc,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -132,7 +142,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::SbcS32,
|
||||
alu_op: ALUOp::SbcS,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -142,7 +153,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::SbcS64,
|
||||
alu_op: ALUOp::SbcS,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -153,7 +165,8 @@ fn test_aarch64_binemit() {
|
||||
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Orr32,
|
||||
alu_op: ALUOp::Orr,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -163,7 +176,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Orr64,
|
||||
alu_op: ALUOp::Orr,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -173,7 +187,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::And32,
|
||||
alu_op: ALUOp::And,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -183,7 +198,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::And64,
|
||||
alu_op: ALUOp::And,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -193,7 +209,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::AndS32,
|
||||
alu_op: ALUOp::AndS,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -203,7 +220,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::AndS64,
|
||||
alu_op: ALUOp::AndS,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -213,7 +231,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::SubS32,
|
||||
alu_op: ALUOp::SubS,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_zero_reg(),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -224,7 +243,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::SubS32,
|
||||
alu_op: ALUOp::SubS,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -234,7 +254,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::SubS64,
|
||||
alu_op: ALUOp::SubS,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -244,7 +265,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::AddS32,
|
||||
alu_op: ALUOp::AddS,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -254,7 +276,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::AddS64,
|
||||
alu_op: ALUOp::AddS,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -264,7 +287,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImm12 {
|
||||
alu_op: ALUOp::AddS64,
|
||||
alu_op: ALUOp::AddS,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_zero_reg(),
|
||||
rn: xreg(5),
|
||||
imm12: Imm12::maybe_from_u64(1).unwrap(),
|
||||
@@ -275,7 +299,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::SDiv64,
|
||||
alu_op: ALUOp::SDiv,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -285,7 +310,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::UDiv64,
|
||||
alu_op: ALUOp::UDiv,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -296,7 +322,8 @@ fn test_aarch64_binemit() {
|
||||
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Eor32,
|
||||
alu_op: ALUOp::Eor,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -306,7 +333,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Eor64,
|
||||
alu_op: ALUOp::Eor,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -316,7 +344,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::AndNot32,
|
||||
alu_op: ALUOp::AndNot,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -326,7 +355,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::AndNot64,
|
||||
alu_op: ALUOp::AndNot,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -336,7 +366,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::OrrNot32,
|
||||
alu_op: ALUOp::OrrNot,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -346,7 +377,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::OrrNot64,
|
||||
alu_op: ALUOp::OrrNot,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -356,7 +388,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::EorNot32,
|
||||
alu_op: ALUOp::EorNot,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -366,7 +399,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::EorNot64,
|
||||
alu_op: ALUOp::EorNot,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -377,7 +411,8 @@ fn test_aarch64_binemit() {
|
||||
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::RotR32,
|
||||
alu_op: ALUOp::RotR,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -387,7 +422,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::RotR64,
|
||||
alu_op: ALUOp::RotR,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -397,7 +433,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Lsr32,
|
||||
alu_op: ALUOp::Lsr,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -407,7 +444,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Lsr64,
|
||||
alu_op: ALUOp::Lsr,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -417,7 +455,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Asr32,
|
||||
alu_op: ALUOp::Asr,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -427,7 +466,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Asr64,
|
||||
alu_op: ALUOp::Asr,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -437,7 +477,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Lsl32,
|
||||
alu_op: ALUOp::Lsl,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -447,7 +488,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::Lsl64,
|
||||
alu_op: ALUOp::Lsl,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
rm: xreg(6),
|
||||
@@ -458,7 +500,8 @@ fn test_aarch64_binemit() {
|
||||
|
||||
insns.push((
|
||||
Inst::AluRRImm12 {
|
||||
alu_op: ALUOp::Add32,
|
||||
alu_op: ALUOp::Add,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(7),
|
||||
rn: xreg(8),
|
||||
imm12: Imm12 {
|
||||
@@ -471,7 +514,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImm12 {
|
||||
alu_op: ALUOp::Add32,
|
||||
alu_op: ALUOp::Add,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(7),
|
||||
rn: xreg(8),
|
||||
imm12: Imm12 {
|
||||
@@ -484,7 +528,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImm12 {
|
||||
alu_op: ALUOp::Add64,
|
||||
alu_op: ALUOp::Add,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(7),
|
||||
rn: xreg(8),
|
||||
imm12: Imm12 {
|
||||
@@ -497,7 +542,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImm12 {
|
||||
alu_op: ALUOp::Sub32,
|
||||
alu_op: ALUOp::Sub,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(7),
|
||||
rn: xreg(8),
|
||||
imm12: Imm12 {
|
||||
@@ -510,7 +556,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImm12 {
|
||||
alu_op: ALUOp::Sub64,
|
||||
alu_op: ALUOp::Sub,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(7),
|
||||
rn: xreg(8),
|
||||
imm12: Imm12 {
|
||||
@@ -523,7 +570,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImm12 {
|
||||
alu_op: ALUOp::SubS32,
|
||||
alu_op: ALUOp::SubS,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(7),
|
||||
rn: xreg(8),
|
||||
imm12: Imm12 {
|
||||
@@ -536,7 +584,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImm12 {
|
||||
alu_op: ALUOp::SubS64,
|
||||
alu_op: ALUOp::SubS,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(7),
|
||||
rn: xreg(8),
|
||||
imm12: Imm12 {
|
||||
@@ -550,7 +599,8 @@ fn test_aarch64_binemit() {
|
||||
|
||||
insns.push((
|
||||
Inst::AluRRRExtend {
|
||||
alu_op: ALUOp::Add32,
|
||||
alu_op: ALUOp::Add,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(7),
|
||||
rn: xreg(8),
|
||||
rm: xreg(9),
|
||||
@@ -562,7 +612,8 @@ fn test_aarch64_binemit() {
|
||||
|
||||
insns.push((
|
||||
Inst::AluRRRExtend {
|
||||
alu_op: ALUOp::Add64,
|
||||
alu_op: ALUOp::Add,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(15),
|
||||
rn: xreg(16),
|
||||
rm: xreg(17),
|
||||
@@ -574,7 +625,8 @@ fn test_aarch64_binemit() {
|
||||
|
||||
insns.push((
|
||||
Inst::AluRRRExtend {
|
||||
alu_op: ALUOp::Sub32,
|
||||
alu_op: ALUOp::Sub,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -586,7 +638,8 @@ fn test_aarch64_binemit() {
|
||||
|
||||
insns.push((
|
||||
Inst::AluRRRExtend {
|
||||
alu_op: ALUOp::Sub64,
|
||||
alu_op: ALUOp::Sub,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(20),
|
||||
rn: xreg(21),
|
||||
rm: xreg(22),
|
||||
@@ -598,7 +651,8 @@ fn test_aarch64_binemit() {
|
||||
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::Add32,
|
||||
alu_op: ALUOp::Add,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -612,7 +666,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::Add64,
|
||||
alu_op: ALUOp::Add,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -626,7 +681,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::Sub32,
|
||||
alu_op: ALUOp::Sub,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -640,7 +696,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::Sub64,
|
||||
alu_op: ALUOp::Sub,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -654,7 +711,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::Orr32,
|
||||
alu_op: ALUOp::Orr,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -668,7 +726,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::Orr64,
|
||||
alu_op: ALUOp::Orr,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -682,7 +741,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::And32,
|
||||
alu_op: ALUOp::And,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -696,7 +756,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::And64,
|
||||
alu_op: ALUOp::And,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -710,7 +771,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::AndS32,
|
||||
alu_op: ALUOp::AndS,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -724,7 +786,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::AndS64,
|
||||
alu_op: ALUOp::AndS,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -738,7 +801,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::Eor32,
|
||||
alu_op: ALUOp::Eor,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -752,7 +816,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::Eor64,
|
||||
alu_op: ALUOp::Eor,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -766,7 +831,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::OrrNot32,
|
||||
alu_op: ALUOp::OrrNot,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -780,7 +846,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::OrrNot64,
|
||||
alu_op: ALUOp::OrrNot,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -794,7 +861,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::AndNot32,
|
||||
alu_op: ALUOp::AndNot,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -808,7 +876,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::AndNot64,
|
||||
alu_op: ALUOp::AndNot,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -822,7 +891,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::EorNot32,
|
||||
alu_op: ALUOp::EorNot,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -836,7 +906,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::EorNot64,
|
||||
alu_op: ALUOp::EorNot,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -850,7 +921,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::AddS32,
|
||||
alu_op: ALUOp::AddS,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -864,7 +936,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::AddS64,
|
||||
alu_op: ALUOp::AddS,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -878,7 +951,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::SubS32,
|
||||
alu_op: ALUOp::SubS,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -892,7 +966,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRRShift {
|
||||
alu_op: ALUOp::SubS64,
|
||||
alu_op: ALUOp::SubS,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
rm: xreg(12),
|
||||
@@ -907,7 +982,8 @@ fn test_aarch64_binemit() {
|
||||
|
||||
insns.push((
|
||||
Inst::AluRRRExtend {
|
||||
alu_op: ALUOp::SubS64,
|
||||
alu_op: ALUOp::SubS,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_zero_reg(),
|
||||
rn: stack_reg(),
|
||||
rm: xreg(12),
|
||||
@@ -964,6 +1040,7 @@ fn test_aarch64_binemit() {
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::SMulH,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -974,6 +1051,7 @@ fn test_aarch64_binemit() {
|
||||
insns.push((
|
||||
Inst::AluRRR {
|
||||
alu_op: ALUOp::UMulH,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(2),
|
||||
rm: xreg(3),
|
||||
@@ -984,7 +1062,8 @@ fn test_aarch64_binemit() {
|
||||
|
||||
insns.push((
|
||||
Inst::AluRRImmShift {
|
||||
alu_op: ALUOp::RotR32,
|
||||
alu_op: ALUOp::RotR,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(20),
|
||||
rn: xreg(21),
|
||||
immshift: ImmShift::maybe_from_u64(19).unwrap(),
|
||||
@@ -994,7 +1073,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmShift {
|
||||
alu_op: ALUOp::RotR64,
|
||||
alu_op: ALUOp::RotR,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(20),
|
||||
rn: xreg(21),
|
||||
immshift: ImmShift::maybe_from_u64(42).unwrap(),
|
||||
@@ -1004,7 +1084,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmShift {
|
||||
alu_op: ALUOp::Lsr32,
|
||||
alu_op: ALUOp::Lsr,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
immshift: ImmShift::maybe_from_u64(13).unwrap(),
|
||||
@@ -1014,7 +1095,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmShift {
|
||||
alu_op: ALUOp::Lsr64,
|
||||
alu_op: ALUOp::Lsr,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
immshift: ImmShift::maybe_from_u64(57).unwrap(),
|
||||
@@ -1024,7 +1106,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmShift {
|
||||
alu_op: ALUOp::Asr32,
|
||||
alu_op: ALUOp::Asr,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
immshift: ImmShift::maybe_from_u64(7).unwrap(),
|
||||
@@ -1034,7 +1117,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmShift {
|
||||
alu_op: ALUOp::Asr64,
|
||||
alu_op: ALUOp::Asr,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
immshift: ImmShift::maybe_from_u64(35).unwrap(),
|
||||
@@ -1044,7 +1128,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmShift {
|
||||
alu_op: ALUOp::Lsl32,
|
||||
alu_op: ALUOp::Lsl,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(8),
|
||||
rn: xreg(9),
|
||||
immshift: ImmShift::maybe_from_u64(24).unwrap(),
|
||||
@@ -1054,7 +1139,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmShift {
|
||||
alu_op: ALUOp::Lsl64,
|
||||
alu_op: ALUOp::Lsl,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(8),
|
||||
rn: xreg(9),
|
||||
immshift: ImmShift::maybe_from_u64(63).unwrap(),
|
||||
@@ -1064,7 +1150,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmShift {
|
||||
alu_op: ALUOp::Lsl32,
|
||||
alu_op: ALUOp::Lsl,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
immshift: ImmShift::maybe_from_u64(0).unwrap(),
|
||||
@@ -1074,7 +1161,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmShift {
|
||||
alu_op: ALUOp::Lsl64,
|
||||
alu_op: ALUOp::Lsl,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(11),
|
||||
immshift: ImmShift::maybe_from_u64(0).unwrap(),
|
||||
@@ -1085,7 +1173,8 @@ fn test_aarch64_binemit() {
|
||||
|
||||
insns.push((
|
||||
Inst::AluRRImmLogic {
|
||||
alu_op: ALUOp::And32,
|
||||
alu_op: ALUOp::And,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(21),
|
||||
rn: xreg(27),
|
||||
imml: ImmLogic::maybe_from_u64(0x80003fff, I32).unwrap(),
|
||||
@@ -1095,7 +1184,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmLogic {
|
||||
alu_op: ALUOp::And64,
|
||||
alu_op: ALUOp::And,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(7),
|
||||
rn: xreg(6),
|
||||
imml: ImmLogic::maybe_from_u64(0x3fff80003fff800, I64).unwrap(),
|
||||
@@ -1105,7 +1195,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmLogic {
|
||||
alu_op: ALUOp::AndS32,
|
||||
alu_op: ALUOp::AndS,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(21),
|
||||
rn: xreg(27),
|
||||
imml: ImmLogic::maybe_from_u64(0x80003fff, I32).unwrap(),
|
||||
@@ -1115,7 +1206,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmLogic {
|
||||
alu_op: ALUOp::AndS64,
|
||||
alu_op: ALUOp::AndS,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(7),
|
||||
rn: xreg(6),
|
||||
imml: ImmLogic::maybe_from_u64(0x3fff80003fff800, I64).unwrap(),
|
||||
@@ -1125,7 +1217,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmLogic {
|
||||
alu_op: ALUOp::Orr32,
|
||||
alu_op: ALUOp::Orr,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(5),
|
||||
imml: ImmLogic::maybe_from_u64(0x100000, I32).unwrap(),
|
||||
@@ -1135,7 +1228,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmLogic {
|
||||
alu_op: ALUOp::Orr64,
|
||||
alu_op: ALUOp::Orr,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(4),
|
||||
rn: xreg(5),
|
||||
imml: ImmLogic::maybe_from_u64(0x8181818181818181, I64).unwrap(),
|
||||
@@ -1145,7 +1239,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmLogic {
|
||||
alu_op: ALUOp::Eor32,
|
||||
alu_op: ALUOp::Eor,
|
||||
size: OperandSize::Size32,
|
||||
rd: writable_xreg(1),
|
||||
rn: xreg(5),
|
||||
imml: ImmLogic::maybe_from_u64(0x00007fff, I32).unwrap(),
|
||||
@@ -1155,7 +1250,8 @@ fn test_aarch64_binemit() {
|
||||
));
|
||||
insns.push((
|
||||
Inst::AluRRImmLogic {
|
||||
alu_op: ALUOp::Eor64,
|
||||
alu_op: ALUOp::Eor,
|
||||
size: OperandSize::Size64,
|
||||
rd: writable_xreg(10),
|
||||
rn: xreg(8),
|
||||
imml: ImmLogic::maybe_from_u64(0x8181818181818181, I64).unwrap(),
|
||||
|
||||
@@ -168,7 +168,8 @@ impl Inst {
|
||||
} else if let Some(imml) = ImmLogic::maybe_from_u64(value, I64) {
|
||||
// Weird logical-instruction immediate in ORI using zero register
|
||||
smallvec![Inst::AluRRImmLogic {
|
||||
alu_op: ALUOp::Orr64,
|
||||
alu_op: ALUOp::Orr,
|
||||
size: OperandSize::Size64,
|
||||
rd,
|
||||
rn: zero_reg(),
|
||||
imml,
|
||||
@@ -2097,58 +2098,45 @@ impl PrettyPrint for Inst {
|
||||
|
||||
impl Inst {
|
||||
fn print_with_state(&self, mb_rru: Option<&RealRegUniverse>, state: &mut EmitState) -> String {
|
||||
fn op_name_size(alu_op: ALUOp) -> (&'static str, OperandSize) {
|
||||
fn op_name(alu_op: ALUOp) -> &'static str {
|
||||
match alu_op {
|
||||
ALUOp::Add32 => ("add", OperandSize::Size32),
|
||||
ALUOp::Add64 => ("add", OperandSize::Size64),
|
||||
ALUOp::Sub32 => ("sub", OperandSize::Size32),
|
||||
ALUOp::Sub64 => ("sub", OperandSize::Size64),
|
||||
ALUOp::Orr32 => ("orr", OperandSize::Size32),
|
||||
ALUOp::Orr64 => ("orr", OperandSize::Size64),
|
||||
ALUOp::And32 => ("and", OperandSize::Size32),
|
||||
ALUOp::And64 => ("and", OperandSize::Size64),
|
||||
ALUOp::AndS32 => ("ands", OperandSize::Size32),
|
||||
ALUOp::AndS64 => ("ands", OperandSize::Size64),
|
||||
ALUOp::Eor32 => ("eor", OperandSize::Size32),
|
||||
ALUOp::Eor64 => ("eor", OperandSize::Size64),
|
||||
ALUOp::AddS32 => ("adds", OperandSize::Size32),
|
||||
ALUOp::AddS64 => ("adds", OperandSize::Size64),
|
||||
ALUOp::SubS32 => ("subs", OperandSize::Size32),
|
||||
ALUOp::SubS64 => ("subs", OperandSize::Size64),
|
||||
ALUOp::SMulH => ("smulh", OperandSize::Size64),
|
||||
ALUOp::UMulH => ("umulh", OperandSize::Size64),
|
||||
ALUOp::SDiv64 => ("sdiv", OperandSize::Size64),
|
||||
ALUOp::UDiv64 => ("udiv", OperandSize::Size64),
|
||||
ALUOp::AndNot32 => ("bic", OperandSize::Size32),
|
||||
ALUOp::AndNot64 => ("bic", OperandSize::Size64),
|
||||
ALUOp::OrrNot32 => ("orn", OperandSize::Size32),
|
||||
ALUOp::OrrNot64 => ("orn", OperandSize::Size64),
|
||||
ALUOp::EorNot32 => ("eon", OperandSize::Size32),
|
||||
ALUOp::EorNot64 => ("eon", OperandSize::Size64),
|
||||
ALUOp::RotR32 => ("ror", OperandSize::Size32),
|
||||
ALUOp::RotR64 => ("ror", OperandSize::Size64),
|
||||
ALUOp::Lsr32 => ("lsr", OperandSize::Size32),
|
||||
ALUOp::Lsr64 => ("lsr", OperandSize::Size64),
|
||||
ALUOp::Asr32 => ("asr", OperandSize::Size32),
|
||||
ALUOp::Asr64 => ("asr", OperandSize::Size64),
|
||||
ALUOp::Lsl32 => ("lsl", OperandSize::Size32),
|
||||
ALUOp::Lsl64 => ("lsl", OperandSize::Size64),
|
||||
ALUOp::Adc32 => ("adc", OperandSize::Size32),
|
||||
ALUOp::Adc64 => ("adc", OperandSize::Size64),
|
||||
ALUOp::AdcS32 => ("adcs", OperandSize::Size32),
|
||||
ALUOp::AdcS64 => ("adcs", OperandSize::Size64),
|
||||
ALUOp::Sbc32 => ("sbc", OperandSize::Size32),
|
||||
ALUOp::Sbc64 => ("sbc", OperandSize::Size64),
|
||||
ALUOp::SbcS32 => ("sbcs", OperandSize::Size32),
|
||||
ALUOp::SbcS64 => ("sbcs", OperandSize::Size64),
|
||||
ALUOp::Add => "add",
|
||||
ALUOp::Sub => "sub",
|
||||
ALUOp::Orr => "orr",
|
||||
ALUOp::And => "and",
|
||||
ALUOp::AndS => "ands",
|
||||
ALUOp::Eor => "eor",
|
||||
ALUOp::AddS => "adds",
|
||||
ALUOp::SubS => "subs",
|
||||
ALUOp::SMulH => "smulh",
|
||||
ALUOp::UMulH => "umulh",
|
||||
ALUOp::SDiv => "sdiv",
|
||||
ALUOp::UDiv => "udiv",
|
||||
ALUOp::AndNot => "bic",
|
||||
ALUOp::OrrNot => "orn",
|
||||
ALUOp::EorNot => "eon",
|
||||
ALUOp::RotR => "ror",
|
||||
ALUOp::Lsr => "lsr",
|
||||
ALUOp::Asr => "asr",
|
||||
ALUOp::Lsl => "lsl",
|
||||
ALUOp::Adc => "adc",
|
||||
ALUOp::AdcS => "adcs",
|
||||
ALUOp::Sbc => "sbc",
|
||||
ALUOp::SbcS => "sbcs",
|
||||
}
|
||||
}
|
||||
|
||||
match self {
|
||||
&Inst::Nop0 => "nop-zero-len".to_string(),
|
||||
&Inst::Nop4 => "nop".to_string(),
|
||||
&Inst::AluRRR { alu_op, rd, rn, rm } => {
|
||||
let (op, size) = op_name_size(alu_op);
|
||||
&Inst::AluRRR {
|
||||
alu_op,
|
||||
size,
|
||||
rd,
|
||||
rn,
|
||||
rm,
|
||||
} => {
|
||||
let op = op_name(alu_op);
|
||||
let rd = show_ireg_sized(rd.to_reg(), mb_rru, size);
|
||||
let rn = show_ireg_sized(rn, mb_rru, size);
|
||||
let rm = show_ireg_sized(rm, mb_rru, size);
|
||||
@@ -2176,15 +2164,16 @@ impl Inst {
|
||||
}
|
||||
&Inst::AluRRImm12 {
|
||||
alu_op,
|
||||
size,
|
||||
rd,
|
||||
rn,
|
||||
ref imm12,
|
||||
} => {
|
||||
let (op, size) = op_name_size(alu_op);
|
||||
let op = op_name(alu_op);
|
||||
let rd = show_ireg_sized(rd.to_reg(), mb_rru, size);
|
||||
let rn = show_ireg_sized(rn, mb_rru, size);
|
||||
|
||||
if imm12.bits == 0 && alu_op == ALUOp::Add64 {
|
||||
if imm12.bits == 0 && alu_op == ALUOp::Add && size.is64() {
|
||||
// special-case MOV (used for moving into SP).
|
||||
format!("mov {}, {}", rd, rn)
|
||||
} else {
|
||||
@@ -2194,11 +2183,12 @@ impl Inst {
|
||||
}
|
||||
&Inst::AluRRImmLogic {
|
||||
alu_op,
|
||||
size,
|
||||
rd,
|
||||
rn,
|
||||
ref imml,
|
||||
} => {
|
||||
let (op, size) = op_name_size(alu_op);
|
||||
let op = op_name(alu_op);
|
||||
let rd = show_ireg_sized(rd.to_reg(), mb_rru, size);
|
||||
let rn = show_ireg_sized(rn, mb_rru, size);
|
||||
let imml = imml.show_rru(mb_rru);
|
||||
@@ -2206,11 +2196,12 @@ impl Inst {
|
||||
}
|
||||
&Inst::AluRRImmShift {
|
||||
alu_op,
|
||||
size,
|
||||
rd,
|
||||
rn,
|
||||
ref immshift,
|
||||
} => {
|
||||
let (op, size) = op_name_size(alu_op);
|
||||
let op = op_name(alu_op);
|
||||
let rd = show_ireg_sized(rd.to_reg(), mb_rru, size);
|
||||
let rn = show_ireg_sized(rn, mb_rru, size);
|
||||
let immshift = immshift.show_rru(mb_rru);
|
||||
@@ -2218,12 +2209,13 @@ impl Inst {
|
||||
}
|
||||
&Inst::AluRRRShift {
|
||||
alu_op,
|
||||
size,
|
||||
rd,
|
||||
rn,
|
||||
rm,
|
||||
ref shiftop,
|
||||
} => {
|
||||
let (op, size) = op_name_size(alu_op);
|
||||
let op = op_name(alu_op);
|
||||
let rd = show_ireg_sized(rd.to_reg(), mb_rru, size);
|
||||
let rn = show_ireg_sized(rn, mb_rru, size);
|
||||
let rm = show_ireg_sized(rm, mb_rru, size);
|
||||
@@ -2232,12 +2224,13 @@ impl Inst {
|
||||
}
|
||||
&Inst::AluRRRExtend {
|
||||
alu_op,
|
||||
size,
|
||||
rd,
|
||||
rn,
|
||||
rm,
|
||||
ref extendop,
|
||||
} => {
|
||||
let (op, size) = op_name_size(alu_op);
|
||||
let op = op_name(alu_op);
|
||||
let rd = show_ireg_sized(rd.to_reg(), mb_rru, size);
|
||||
let rn = show_ireg_sized(rn, mb_rru, size);
|
||||
let rm = show_ireg_sized(rm, mb_rru, size);
|
||||
@@ -3419,15 +3412,12 @@ impl Inst {
|
||||
} else {
|
||||
offset as u64
|
||||
};
|
||||
let alu_op = if offset < 0 {
|
||||
ALUOp::Sub64
|
||||
} else {
|
||||
ALUOp::Add64
|
||||
};
|
||||
let alu_op = if offset < 0 { ALUOp::Sub } else { ALUOp::Add };
|
||||
|
||||
if let Some((idx, extendop)) = index_reg {
|
||||
let add = Inst::AluRRRExtend {
|
||||
alu_op: ALUOp::Add64,
|
||||
alu_op: ALUOp::Add,
|
||||
size: OperandSize::Size64,
|
||||
rd,
|
||||
rn: reg,
|
||||
rm: idx,
|
||||
@@ -3441,6 +3431,7 @@ impl Inst {
|
||||
} else if let Some(imm12) = Imm12::maybe_from_u64(abs_offset) {
|
||||
let add = Inst::AluRRImm12 {
|
||||
alu_op,
|
||||
size: OperandSize::Size64,
|
||||
rd,
|
||||
rn: reg,
|
||||
imm12,
|
||||
@@ -3453,6 +3444,7 @@ impl Inst {
|
||||
}
|
||||
let add = Inst::AluRRR {
|
||||
alu_op,
|
||||
size: OperandSize::Size64,
|
||||
rd,
|
||||
rn: reg,
|
||||
rm: tmp.to_reg(),
|
||||
|
||||
Reference in New Issue
Block a user