diff options
| author | Koakuma <koachan@protonmail.com> | 2022-04-20 21:16:17 +0700 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2022-05-05 19:34:03 +0200 |
| commit | b6d7f63f34bbdb7c67abecbcd47389d2a3d28743 (patch) | |
| tree | aee14c6f05d58cf1777847747a97d5a3c79070e9 /src/arch/sparcv9/CodeGen.zig | |
| parent | 59905a62f9da9946a797cc35a2523c9929663600 (diff) | |
| download | zig-b6d7f63f34bbdb7c67abecbcd47389d2a3d28743.tar.gz zig-b6d7f63f34bbdb7c67abecbcd47389d2a3d28743.zip | |
stage2: sparcv9: Implement jmpl lowering
Diffstat (limited to 'src/arch/sparcv9/CodeGen.zig')
| -rw-r--r-- | src/arch/sparcv9/CodeGen.zig | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/arch/sparcv9/CodeGen.zig b/src/arch/sparcv9/CodeGen.zig index 7d93916fc1..ffd1dfde86 100644 --- a/src/arch/sparcv9/CodeGen.zig +++ b/src/arch/sparcv9/CodeGen.zig @@ -1,5 +1,7 @@ //! SPARCv9 codegen. //! This lowers AIR into MIR. +//! For now this only implements medium/low code model with absolute addressing. +//! TODO add support for other code models. const std = @import("std"); const assert = std.debug.assert; const log = std.log.scoped(.codegen); @@ -884,7 +886,14 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions. _ = try self.addInst(.{ .tag = .jmpl, - .data = .{ .branch_link_indirect = .{ .reg = .o7 } }, + .data = .{ + .arithmetic_3op = .{ + .is_imm = false, + .rd = .o7, + .rs1 = .o7, + .rs2_or_imm = .{ .rs2 = .g0 }, + }, + }, }); } else if (func_value.castTag(.extern_fn)) |_| { return self.fail("TODO implement calling extern functions", .{}); @@ -899,7 +908,14 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.builtin.CallOptions. _ = try self.addInst(.{ .tag = .jmpl, - .data = .{ .branch_link_indirect = .{ .reg = .o7 } }, + .data = .{ + .arithmetic_3op = .{ + .is_imm = false, + .rd = .o7, + .rs1 = .o7, + .rs2_or_imm = .{ .rs2 = .g0 }, + }, + }, }); } |
