[AArch64] Refactor Mov instructions (#4033)
Merge Mov32 and Mov64 into a single instruction parameterized by a new OperandSize field. Also combine the Mov[K,N,Z] into a single instruction with a new opcode to select between the operations. Copyright (c) 2022, Arm Limited.
This commit is contained in:
@@ -7,8 +7,9 @@ pub mod generated_code;
|
||||
use super::{
|
||||
writable_zero_reg, zero_reg, AMode, ASIMDFPModImm, ASIMDMovModImm, AtomicRmwOp, BranchTarget,
|
||||
CallIndInfo, CallInfo, Cond, CondBrKind, ExtendOp, FPUOpRI, FloatCC, Imm12, ImmLogic, ImmShift,
|
||||
Inst as MInst, IntCC, JTSequenceInfo, MachLabel, MoveWideConst, NarrowValueMode, Opcode,
|
||||
OperandSize, PairAMode, Reg, ScalarSize, ShiftOpAndAmt, UImm5, VecMisc2, VectorSize, NZCV,
|
||||
Inst as MInst, IntCC, JTSequenceInfo, MachLabel, MoveWideConst, MoveWideOp, NarrowValueMode,
|
||||
Opcode, OperandSize, PairAMode, Reg, ScalarSize, ShiftOpAndAmt, UImm5, VecMisc2, VectorSize,
|
||||
NZCV,
|
||||
};
|
||||
use crate::isa::aarch64::settings::Flags as IsaFlags;
|
||||
use crate::machinst::isle::*;
|
||||
@@ -145,14 +146,29 @@ where
|
||||
let imm =
|
||||
MoveWideConst::maybe_with_shift(((!imm16) & 0xffff) as u16, i * 16)
|
||||
.unwrap();
|
||||
self.emit(&MInst::MovN { rd, imm, size });
|
||||
self.emit(&MInst::MovWide {
|
||||
op: MoveWideOp::MovN,
|
||||
rd,
|
||||
imm,
|
||||
size,
|
||||
});
|
||||
} else {
|
||||
let imm = MoveWideConst::maybe_with_shift(imm16 as u16, i * 16).unwrap();
|
||||
self.emit(&MInst::MovZ { rd, imm, size });
|
||||
self.emit(&MInst::MovWide {
|
||||
op: MoveWideOp::MovZ,
|
||||
rd,
|
||||
imm,
|
||||
size,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
let imm = MoveWideConst::maybe_with_shift(imm16 as u16, i * 16).unwrap();
|
||||
self.emit(&MInst::MovK { rd, imm, size });
|
||||
self.emit(&MInst::MovWide {
|
||||
op: MoveWideOp::MovK,
|
||||
rd,
|
||||
imm,
|
||||
size,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
src/clif.isle 443b34b797fc8ace
|
||||
src/prelude.isle afd037c4d91c875c
|
||||
src/isa/aarch64/inst.isle 950bb0092242218e
|
||||
src/isa/aarch64/inst.isle f7f03d5ea5411344
|
||||
src/isa/aarch64/lower.isle 71c7e603b0e4bdef
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user