diff options
| author | joachimschmidt557 <joachim.schmidt557@outlook.com> | 2022-04-16 18:58:48 +0200 |
|---|---|---|
| committer | joachimschmidt557 <joachim.schmidt557@outlook.com> | 2022-04-19 22:39:14 +0200 |
| commit | f95a8ddafa53d4cee591c82bd5ed3eb0eac4a51b (patch) | |
| tree | 36b7429dcfedc02cbed4c310e5f72f868b913882 /src/arch/aarch64/Mir.zig | |
| parent | c78daeb642e742af3ac42bac0468776ccc4cd452 (diff) | |
| download | zig-f95a8ddafa53d4cee591c82bd5ed3eb0eac4a51b.tar.gz zig-f95a8ddafa53d4cee591c82bd5ed3eb0eac4a51b.zip | |
stage2 AArch64: Implement basic truncate functionality
Diffstat (limited to 'src/arch/aarch64/Mir.zig')
| -rw-r--r-- | src/arch/aarch64/Mir.zig | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/src/arch/aarch64/Mir.zig b/src/arch/aarch64/Mir.zig index 6515a8da2e..dcde591a07 100644 --- a/src/arch/aarch64/Mir.zig +++ b/src/arch/aarch64/Mir.zig @@ -130,6 +130,14 @@ pub const Inst = struct { push_regs, /// Return from subroutine ret, + /// Signed bitfield extract + sbfx, + /// Signed extend byte + sxtb, + /// Signed extend halfword + sxth, + /// Signed extend word + sxtw, /// Store Pair of Registers stp, /// Pseudo-instruction: Store to stack @@ -156,6 +164,12 @@ pub const Inst = struct { sub_shifted_register, /// Supervisor Call svc, + /// Unsigned bitfield extract + ubfx, + /// Unsigned extend byte + uxtb, + /// Unsigned extend halfword + uxth, }; /// The position of an MIR instruction within the `Mir` instructions array. @@ -225,13 +239,6 @@ pub const Inst = struct { rt: Register, inst: Index, }, - /// Two registers - /// - /// Used by e.g. mov_register - rr: struct { - rd: Register, - rn: Register, - }, /// A register, an unsigned 12-bit immediate, and an optional shift /// /// Used by e.g. cmp_immediate @@ -240,6 +247,13 @@ pub const Inst = struct { imm12: u12, sh: u1 = 0, }, + /// Two registers + /// + /// Used by e.g. mov_register + rr: struct { + rd: Register, + rn: Register, + }, /// Two registers, an unsigned 12-bit immediate, and an optional shift /// /// Used by e.g. sub_immediate @@ -268,6 +282,16 @@ pub const Inst = struct { imm6: u6, shift: bits.Instruction.LogicalShiftedRegisterShift, }, + /// Two registers and a lsb (range 0-63) and a width (range + /// 1-64) + /// + /// Used by e.g. ubfx + rr_lsb_width: struct { + rd: Register, + rn: Register, + lsb: u6, + width: u7, + }, /// Two registers and a bitmask immediate /// /// Used by e.g. eor_immediate |
