aboutsummaryrefslogtreecommitdiff
path: root/src/arch/sparcv9/CodeGen.zig
diff options
context:
space:
mode:
authorKoakuma <koachan@protonmail.com>2022-04-20 21:16:17 +0700
committerJakub Konka <kubkon@jakubkonka.com>2022-05-05 19:34:03 +0200
commitb6d7f63f34bbdb7c67abecbcd47389d2a3d28743 (patch)
treeaee14c6f05d58cf1777847747a97d5a3c79070e9 /src/arch/sparcv9/CodeGen.zig
parent59905a62f9da9946a797cc35a2523c9929663600 (diff)
downloadzig-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.zig20
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 },
+ },
+ },
});
}