Commit 048035ea55

Koakuma <koachan@protonmail.com>
2022-03-13 15:00:16
stage2 sparcv9: Add Format 1 encoder
1 parent 92c262a
Changed files (1)
src
arch
sparcv9
src/arch/sparcv9/bits.zig
@@ -1,5 +1,6 @@
 const std = @import("std");
 const DW = std.dwarf;
+const assert = std.debug.assert;
 const testing = std.testing;
 
 /// General purpose registers in the SPARCv9 instruction set
@@ -448,4 +449,15 @@ pub const Instruction = union(enum) {
     pub fn toU32(self: Instruction) u32 {
         return @bitCast(u32, self);
     }
+
+    fn format1(disp: i32) Instruction {
+        // In SPARC, branch target needs to be aligned to 4 bytes.
+        assert(disp % 4 == 0);
+
+        // Discard the last two bits since those are implicitly zero.
+        const udisp = @truncate(u30, @bitCast(u32, disp) >> 2);
+        return Instruction{ .format_1 = .{
+            .disp30 = udisp,
+        } };
+    }
 };