| author | |
| committer | |
| log | db80dff4e002146063609d20599a7310837074c7 |
| tree | 4035e1593a535d6d0a1bea5d61b19cfe43a351fd |
| parent | fe1d6c2f56caaf4151d3880f483fe88af9f34b6b |
4 files changed, 21 insertions(+), 8 deletions(-)
src/codegen/llvm.zig+1-1| ... | @@ -4390,7 +4390,7 @@ pub const FuncGen = struct { | ... | @@ -4390,7 +4390,7 @@ pub const FuncGen = struct { |
| 4390 | var operand_llvm_ty = try self.dg.llvmType(operand_ty); | 4390 | var operand_llvm_ty = try self.dg.llvmType(operand_ty); |
| 4391 | 4391 | ||
| 4392 | if (bits % 16 == 8) { | 4392 | if (bits % 16 == 8) { |
| 4393 | // If not an even byte-multiple, we need zero-extend + shift-left 1 byte | 4393 | // If not an even byte-multiple, we need zero-extend + shift-left 1 byte |
| 4394 | // The truncated result at the end will be the correct bswap | 4394 | // The truncated result at the end will be the correct bswap |
| 4395 | operand_llvm_ty = self.context.intType(bits + 8); | 4395 | operand_llvm_ty = self.context.intType(bits + 8); |
| 4396 | const extended = self.builder.buildZExt(operand, operand_llvm_ty, ""); | 4396 | const extended = self.builder.buildZExt(operand, operand_llvm_ty, ""); |
test/behavior.zig+2-2| ... | @@ -6,6 +6,8 @@ test { | ... | @@ -6,6 +6,8 @@ test { |
| 6 | _ = @import("behavior/array.zig"); | 6 | _ = @import("behavior/array.zig"); |
| 7 | _ = @import("behavior/basic.zig"); | 7 | _ = @import("behavior/basic.zig"); |
| 8 | _ = @import("behavior/bit_shifting.zig"); | 8 | _ = @import("behavior/bit_shifting.zig"); |
| 9 | _ = @import("behavior/bitreverse.zig"); | ||
| 10 | _ = @import("behavior/byteswap.zig"); | ||
| 9 | _ = @import("behavior/bool.zig"); | 11 | _ = @import("behavior/bool.zig"); |
| 10 | _ = @import("behavior/bugs/394.zig"); | 12 | _ = @import("behavior/bugs/394.zig"); |
| 11 | _ = @import("behavior/bugs/655.zig"); | 13 | _ = @import("behavior/bugs/655.zig"); |
| ... | @@ -105,8 +107,6 @@ test { | ... | @@ -105,8 +107,6 @@ test { |
| 105 | if (builtin.zig_backend != .stage2_c) { | 107 | if (builtin.zig_backend != .stage2_c) { |
| 106 | // Tests that pass for stage1 and the llvm backend. | 108 | // Tests that pass for stage1 and the llvm backend. |
| 107 | _ = @import("behavior/atomics.zig"); | 109 | _ = @import("behavior/atomics.zig"); |
| 108 | _ = @import("behavior/bitreverse.zig"); | ||
| 109 | _ = @import("behavior/byteswap.zig"); | ||
| 110 | _ = @import("behavior/bugs/9584.zig"); | 110 | _ = @import("behavior/bugs/9584.zig"); |
| 111 | _ = @import("behavior/eval.zig"); | 111 | _ = @import("behavior/eval.zig"); |
| 112 | _ = @import("behavior/floatop.zig"); | 112 | _ = @import("behavior/floatop.zig"); |
test/behavior/bitreverse.zig+14-5| ... | @@ -3,10 +3,24 @@ const builtin = @import("builtin"); | ... | @@ -3,10 +3,24 @@ const builtin = @import("builtin"); |
| 3 | const expect = std.testing.expect; | 3 | const expect = std.testing.expect; |
| 4 | const minInt = std.math.minInt; | 4 | const minInt = std.math.minInt; |
| 5 | 5 | ||
| 6 | test "@bitReverse large exotic integer" { | ||
| 7 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; | ||
| 8 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; | ||
| 9 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | ||
| 10 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; | ||
| 11 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; | ||
| 12 | // Currently failing on stage1 for big-endian targets | ||
| 13 | if (builtin.zig_backend == .stage1) return error.SkipZigTest; | ||
| 14 | |||
| 15 | try expect(@bitReverse(u95, @as(u95, 0x123456789abcdef111213141)) == 0x4146424447bd9eac8f351624); | ||
| 16 | } | ||
| 17 | |||
| 6 | test "@bitReverse" { | 18 | test "@bitReverse" { |
| 7 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; | 19 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; |
| 8 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; | 20 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; |
| 9 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | 21 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; |
| 22 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; | ||
| 23 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; | ||
| 10 | 24 | ||
| 11 | comptime try testBitReverse(); | 25 | comptime try testBitReverse(); |
| 12 | try testBitReverse(); | 26 | try testBitReverse(); |
| ... | @@ -27,11 +41,6 @@ fn testBitReverse() !void { | ... | @@ -27,11 +41,6 @@ fn testBitReverse() !void { |
| 27 | try expect(@bitReverse(u96, @as(u96, 0x123456789abcdef111213141)) == 0x828c84888f7b3d591e6a2c48); | 41 | try expect(@bitReverse(u96, @as(u96, 0x123456789abcdef111213141)) == 0x828c84888f7b3d591e6a2c48); |
| 28 | try expect(@bitReverse(u128, @as(u128, 0x123456789abcdef11121314151617181)) == 0x818e868a828c84888f7b3d591e6a2c48); | 42 | try expect(@bitReverse(u128, @as(u128, 0x123456789abcdef11121314151617181)) == 0x818e868a828c84888f7b3d591e6a2c48); |
| 29 | 43 | ||
| 30 | if (builtin.zig_backend != .stage1) { | ||
| 31 | // Currently failing on stage1 for big-endian targets | ||
| 32 | try expect(@bitReverse(u95, @as(u95, 0x123456789abcdef111213141)) == 0x4146424447bd9eac8f351624); | ||
| 33 | } | ||
| 34 | |||
| 35 | // using runtime uints, unsigned | 44 | // using runtime uints, unsigned |
| 36 | var num0: u0 = 0; | 45 | var num0: u0 = 0; |
| 37 | try expect(@bitReverse(u0, num0) == 0); | 46 | try expect(@bitReverse(u0, num0) == 0); |
test/behavior/byteswap.zig+4| ... | @@ -6,6 +6,8 @@ test "@byteSwap integers" { | ... | @@ -6,6 +6,8 @@ test "@byteSwap integers" { |
| 6 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; | 6 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; |
| 7 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; | 7 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; |
| 8 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | 8 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; |
| 9 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; | ||
| 10 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; | ||
| 9 | 11 | ||
| 10 | const ByteSwapIntTest = struct { | 12 | const ByteSwapIntTest = struct { |
| 11 | fn run() !void { | 13 | fn run() !void { |
| ... | @@ -56,6 +58,8 @@ test "@byteSwap vectors" { | ... | @@ -56,6 +58,8 @@ test "@byteSwap vectors" { |
| 56 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; | 58 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; |
| 57 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; | 59 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; |
| 58 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | 60 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; |
| 61 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; | ||
| 62 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; | ||
| 59 | 63 | ||
| 60 | const ByteSwapVectorTest = struct { | 64 | const ByteSwapVectorTest = struct { |
| 61 | fn run() !void { | 65 | fn run() !void { |