Skip to content

Instantly share code, notes, and snippets.

@matu3ba
Created December 12, 2021 16:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matu3ba/3fdecf00934bb064657b080ae2ff27a2 to your computer and use it in GitHub Desktop.
Save matu3ba/3fdecf00934bb064657b080ae2ff27a2 to your computer and use it in GitHub Desktop.
Helper to create test data for compiler_rt negation
const math = @import("std").math;
const print = @import("std").debug.print;
fn printTestCases(comptime T: type, min_divided: T, max_divided: T) !void {
print("try test__negsi2({d}, {d});\n", .{ min_divided, max_divided });
print("try test__negsi2({d}, {d});\n", .{ max_divided, min_divided });
}
pub fn main() !void {
const ST = i128;
const BS = @bitSizeOf(ST);
const min_usable = math.minInt(ST) + 1;
const max_usable = math.maxInt(ST);
print("// max_usable == MAX(i32) == -MIN(i32) == {d} == {x}\n", .{ max_usable, max_usable });
print("// divTrunc: max_usable / i, i=1,2,3,5,100\n", .{});
print("// {x} / i\n", .{max_usable});
var min_divided: ST = @divTrunc(min_usable, 3);
var max_divided: ST = @divTrunc(max_usable, 3);
try printTestCases(ST, min_divided, max_divided);
min_divided = @divTrunc(min_usable, 5);
max_divided = @divTrunc(max_usable, 5);
try printTestCases(ST, min_divided, max_divided);
min_divided = @divTrunc(min_usable, 10);
max_divided = @divTrunc(max_usable, 10);
try printTestCases(ST, min_divided, max_divided);
print("// shifting1: max_usable >> i, i=0..bitsize\n", .{});
print("// {x} >> i\n", .{max_usable});
print("// {x} >> i + 1\n", .{max_usable});
print("// {x} >> i + 3\n", .{max_usable});
print("// {x} >> i + 7\n", .{max_usable});
comptime var i = 0;
inline while (i < BS - 4) : (i += 1) {
min_divided = min_usable >> i;
max_divided = max_usable >> i;
try printTestCases(ST, min_divided, max_divided);
min_divided = (min_usable >> i) + 1;
max_divided = (max_usable >> i) - 1;
try printTestCases(ST, min_divided, max_divided);
min_divided = (min_usable >> i) + 3;
max_divided = (max_usable >> i) - 3;
try printTestCases(ST, min_divided, max_divided);
min_divided = (min_usable >> i) + 7;
max_divided = (max_usable >> i) - 7;
try printTestCases(ST, min_divided, max_divided);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment