diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2024-02-21 23:40:44 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2024-02-21 23:40:44 +0100 |
| commit | 6236f5b8105f4f5ae773190d18ebff2db90e34e5 (patch) | |
| tree | 2b5b9e5a3bb389abea35c365e5ff410968533105 /src/link/riscv.zig | |
| parent | 2ad2e2f6f5c327187b37619c0d7dd207c29916a1 (diff) | |
| download | zig-6236f5b8105f4f5ae773190d18ebff2db90e34e5.tar.gz zig-6236f5b8105f4f5ae773190d18ebff2db90e34e5.zip | |
link+riscv: simplify bitSlice helper
Diffstat (limited to 'src/link/riscv.zig')
| -rw-r--r-- | src/link/riscv.zig | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/link/riscv.zig b/src/link/riscv.zig index 3c530b7818..85e4098200 100644 --- a/src/link/riscv.zig +++ b/src/link/riscv.zig @@ -32,7 +32,7 @@ pub fn writeInstU(code: *[4]u8, value: u32) void { ), code), }; const compensated: u32 = @bitCast(@as(i32, @bitCast(value)) + 0x800); - inst.U.imm12_31 = @truncate(bitSlice(compensated, 31, 12)); + inst.U.imm12_31 = bitSlice(compensated, 31, 12); mem.writeInt(u32, code, inst.toU32(), .little); } @@ -43,7 +43,7 @@ pub fn writeInstI(code: *[4]u8, value: u32) void { Instruction.I, ), code), }; - inst.I.imm0_11 = @truncate(bitSlice(value, 11, 0)); + inst.I.imm0_11 = bitSlice(value, 11, 0); mem.writeInt(u32, code, inst.toU32(), .little); } @@ -54,13 +54,17 @@ pub fn writeInstS(code: *[4]u8, value: u32) void { Instruction.S, ), code), }; - inst.S.imm0_4 = @truncate(bitSlice(value, 4, 0)); - inst.S.imm5_11 = @truncate(bitSlice(value, 11, 5)); + inst.S.imm0_4 = bitSlice(value, 4, 0); + inst.S.imm5_11 = bitSlice(value, 11, 5); mem.writeInt(u32, code, inst.toU32(), .little); } -fn bitSlice(value: anytype, high: std.math.Log2Int(@TypeOf(value)), low: std.math.Log2Int(@TypeOf(value))) @TypeOf(value) { - return (value >> low) & ((@as(@TypeOf(value), 1) << (high - low + 1)) - 1); +fn bitSlice( + value: anytype, + comptime high: comptime_int, + comptime low: comptime_int, +) std.math.IntFittingRange(0, 1 << high - low) { + return @truncate((value >> low) & (1 << (high - low + 1)) - 1); } const bits = @import("../arch/riscv64/bits.zig"); |
