authorgravatar for jan.hafer@rwth-aachen.deJan Philipp Hafer <jan.hafer@rwth-aachen.de> 2023-10-20 09:57:11+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2023-10-20 00:57:11-07:00
log3c22cecee20d0c01d6c007c4fb8a8903498c66db
tree319a4795282a23f9b4e0829765904440534e9b09
parenta361f37b1c247a8a05383ceee48d0e2885f5bcd8
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

compiler_rt: add tests for arm routines (#17573)

* __aeabi_ldivmod * __aeabi_uldivmod * __aeabi_idivmod * __aeabi_uidivmod

3 files changed, 269 insertions(+), 42 deletions(-)

lib/compiler_rt/int.zig+81-41
...@@ -10,6 +10,7 @@ const is_test = builtin.is_test;...@@ -10,6 +10,7 @@ const is_test = builtin.is_test;
10const common = @import("common.zig");10const common = @import("common.zig");
11const udivmod = @import("udivmod.zig").udivmod;11const udivmod = @import("udivmod.zig").udivmod;
12const __divti3 = @import("divti3.zig").__divti3;12const __divti3 = @import("divti3.zig").__divti3;
13const arm = @import("arm.zig");
1314
14pub const panic = common.panic;15pub const panic = common.panic;
1516
...@@ -73,31 +74,51 @@ pub fn __divmoddi4(a: i64, b: i64, rem: *i64) callconv(.C) i64 {...@@ -73,31 +74,51 @@ pub fn __divmoddi4(a: i64, b: i64, rem: *i64) callconv(.C) i64 {
73 return d;74 return d;
74}75}
7576
76test "test_divmoddi4" {77fn test_one_divmoddi4(a: i64, b: i64, expected_q: i64, expected_r: i64) !void {
77 const cases = [_][4]i64{78 var r: i64 = undefined;
78 [_]i64{ 0, 1, 0, 0 },79 const q: i64 = __divmoddi4(a, b, &r);
79 [_]i64{ 0, -1, 0, 0 },80 try testing.expect(q == expected_q and r == expected_r);
80 [_]i64{ 2, 1, 2, 0 },81}
81 [_]i64{ 2, -1, -2, 0 },
82 [_]i64{ -2, 1, -2, 0 },
83 [_]i64{ -2, -1, 2, 0 },
84 [_]i64{ 7, 5, 1, 2 },
85 [_]i64{ -7, 5, -1, -2 },
86 [_]i64{ 19, 5, 3, 4 },
87 [_]i64{ 19, -5, -3, 4 },
88 [_]i64{ @bitCast(@as(u64, 0x8000000000000000)), 8, @bitCast(@as(u64, 0xf000000000000000)), 0 },
89 [_]i64{ @bitCast(@as(u64, 0x8000000000000007)), 8, @bitCast(@as(u64, 0xf000000000000001)), -1 },
90 };
9182
92 for (cases) |case| {83const cases__divmoddi4 =
84 [_][4]i64{
85 [_]i64{ 0, 1, 0, 0 },
86 [_]i64{ 0, -1, 0, 0 },
87 [_]i64{ 2, 1, 2, 0 },
88 [_]i64{ 2, -1, -2, 0 },
89 [_]i64{ -2, 1, -2, 0 },
90 [_]i64{ -2, -1, 2, 0 },
91 [_]i64{ 7, 5, 1, 2 },
92 [_]i64{ -7, 5, -1, -2 },
93 [_]i64{ 19, 5, 3, 4 },
94 [_]i64{ 19, -5, -3, 4 },
95 [_]i64{ @as(i64, @bitCast(@as(u64, 0x8000000000000000))), 8, @as(i64, @bitCast(@as(u64, 0xf000000000000000))), 0 },
96 [_]i64{ @as(i64, @bitCast(@as(u64, 0x8000000000000007))), 8, @as(i64, @bitCast(@as(u64, 0xf000000000000001))), -1 },
97};
98
99test "test_divmoddi4" {
100 for (cases__divmoddi4) |case| {
93 try test_one_divmoddi4(case[0], case[1], case[2], case[3]);101 try test_one_divmoddi4(case[0], case[1], case[2], case[3]);
94 }102 }
95}103}
96104
97fn test_one_divmoddi4(a: i64, b: i64, expected_q: i64, expected_r: i64) !void {105fn test_one_aeabi_ldivmod(a: i64, b: i64, expected_q: i64, expected_r: i64) !void {
98 var r: i64 = undefined;106 const LdivmodRes = extern struct {
99 const q: i64 = __divmoddi4(a, b, &r);107 q: i64, // r1:r0
100 try testing.expect(q == expected_q and r == expected_r);108 r: i64, // r3:r2
109 };
110 const actualIdivmod = @as(*const fn (a: i64, b: i64) callconv(.AAPCS) LdivmodRes, @ptrCast(&arm.__aeabi_ldivmod));
111 const arm_res = actualIdivmod(a, b);
112 try testing.expectEqual(expected_q, arm_res.q);
113 try testing.expectEqual(expected_r, arm_res.r);
114}
115
116test "arm.__aeabi_ldivmod" {
117 if (!builtin.cpu.arch.isARM()) return error.SkipZigTest;
118
119 for (cases__divmodsi4) |case| {
120 try test_one_aeabi_ldivmod(case[0], case[1], case[2], case[3]);
121 }
101}122}
102123
103pub fn __udivmoddi4(a: u64, b: u64, maybe_rem: ?*u64) callconv(.C) u64 {124pub fn __udivmoddi4(a: u64, b: u64, maybe_rem: ?*u64) callconv(.C) u64 {
...@@ -212,27 +233,21 @@ pub fn __divmodsi4(a: i32, b: i32, rem: *i32) callconv(.C) i32 {...@@ -212,27 +233,21 @@ pub fn __divmodsi4(a: i32, b: i32, rem: *i32) callconv(.C) i32 {
212 return d;233 return d;
213}234}
214235
215test "test_divmodsi4" {236const cases__divmodsi4 =
216 const cases = [_][4]i32{237 [_][4]i32{
217 [_]i32{ 0, 1, 0, 0 },238 [_]i32{ 0, 1, 0, 0 },
218 [_]i32{ 0, -1, 0, 0 },239 [_]i32{ 0, -1, 0, 0 },
219 [_]i32{ 2, 1, 2, 0 },240 [_]i32{ 2, 1, 2, 0 },
220 [_]i32{ 2, -1, -2, 0 },241 [_]i32{ 2, -1, -2, 0 },
221 [_]i32{ -2, 1, -2, 0 },242 [_]i32{ -2, 1, -2, 0 },
222 [_]i32{ -2, -1, 2, 0 },243 [_]i32{ -2, -1, 2, 0 },
223 [_]i32{ 7, 5, 1, 2 },244 [_]i32{ 7, 5, 1, 2 },
224 [_]i32{ -7, 5, -1, -2 },245 [_]i32{ -7, 5, -1, -2 },
225 [_]i32{ 19, 5, 3, 4 },246 [_]i32{ 19, 5, 3, 4 },
226 [_]i32{ 19, -5, -3, 4 },247 [_]i32{ 19, -5, -3, 4 },
227248 [_]i32{ @bitCast(@as(u32, 0x80000000)), 8, @bitCast(@as(u32, 0xf0000000)), 0 },
228 [_]i32{ @bitCast(@as(u32, 0x80000000)), 8, @bitCast(@as(u32, 0xf0000000)), 0 },249 [_]i32{ @bitCast(@as(u32, 0x80000007)), 8, @bitCast(@as(u32, 0xf0000001)), -1 },
229 [_]i32{ @bitCast(@as(u32, 0x80000007)), 8, @bitCast(@as(u32, 0xf0000001)), -1 },250};
230 };
231
232 for (cases) |case| {
233 try test_one_divmodsi4(case[0], case[1], case[2], case[3]);
234 }
235}
236251
237fn test_one_divmodsi4(a: i32, b: i32, expected_q: i32, expected_r: i32) !void {252fn test_one_divmodsi4(a: i32, b: i32, expected_q: i32, expected_r: i32) !void {
238 var r: i32 = undefined;253 var r: i32 = undefined;
...@@ -240,6 +255,31 @@ fn test_one_divmodsi4(a: i32, b: i32, expected_q: i32, expected_r: i32) !void {...@@ -240,6 +255,31 @@ fn test_one_divmodsi4(a: i32, b: i32, expected_q: i32, expected_r: i32) !void {
240 try testing.expect(q == expected_q and r == expected_r);255 try testing.expect(q == expected_q and r == expected_r);
241}256}
242257
258test "test_divmodsi4" {
259 for (cases__divmodsi4) |case| {
260 try test_one_divmodsi4(case[0], case[1], case[2], case[3]);
261 }
262}
263
264fn test_one_aeabi_idivmod(a: i32, b: i32, expected_q: i32, expected_r: i32) !void {
265 const IdivmodRes = extern struct {
266 q: i32, // r0
267 r: i32, // r1
268 };
269 const actualIdivmod = @as(*const fn (a: i32, b: i32) callconv(.AAPCS) IdivmodRes, @ptrCast(&arm.__aeabi_idivmod));
270 const arm_res = actualIdivmod(a, b);
271 try testing.expectEqual(expected_q, arm_res.q);
272 try testing.expectEqual(expected_r, arm_res.r);
273}
274
275test "arm.__aeabi_idivmod" {
276 if (!builtin.cpu.arch.isARM()) return error.SkipZigTest;
277
278 for (cases__divmodsi4) |case| {
279 try test_one_aeabi_idivmod(case[0], case[1], case[2], case[3]);
280 }
281}
282
243pub fn __udivmodsi4(a: u32, b: u32, rem: *u32) callconv(.C) u32 {283pub fn __udivmodsi4(a: u32, b: u32, rem: *u32) callconv(.C) u32 {
244 const d = __udivsi3(a, b);284 const d = __udivsi3(a, b);
245 rem.* = @bitCast(@as(i32, @bitCast(a)) -% (@as(i32, @bitCast(d)) * @as(i32, @bitCast(b))));285 rem.* = @bitCast(@as(i32, @bitCast(a)) -% (@as(i32, @bitCast(d)) * @as(i32, @bitCast(b))));
lib/compiler_rt/udivmoddi4_test.zig+23-1
...@@ -1,7 +1,9 @@...@@ -1,7 +1,9 @@
1// Disable formatting to avoid unnecessary source repository bloat.1// Disable formatting to avoid unnecessary source repository bloat.
2// zig fmt: off2// zig fmt: off
3const __udivmoddi4 = @import("int.zig").__udivmoddi4;
4const testing = @import("std").testing;3const testing = @import("std").testing;
4const builtin = @import("builtin");
5const __udivmoddi4 = @import("int.zig").__udivmoddi4;
6const __aeabi_uldivmod = @import("arm.zig").__aeabi_uldivmod;
57
6fn test__udivmoddi4(a: u64, b: u64, expected_q: u64, expected_r: u64) !void {8fn test__udivmoddi4(a: u64, b: u64, expected_q: u64, expected_r: u64) !void {
7 var r: u64 = undefined;9 var r: u64 = undefined;
...@@ -16,6 +18,26 @@ test "udivmoddi4" {...@@ -16,6 +18,26 @@ test "udivmoddi4" {
16 }18 }
17}19}
1820
21const ARMRes = extern struct {
22 q: u64, // r1:r0
23 r: u64, // r3:r2
24};
25
26fn test__aeabi_uldivmod(a: u64, b: u64, expected_q: u64, expected_r: u64) !void {
27 const actualUldivmod = @as(*const fn (a: u64, b: u64) callconv(.AAPCS) ARMRes, @ptrCast(&__aeabi_uldivmod));
28 const arm_res = actualUldivmod(a, b);
29 try testing.expectEqual(expected_q, arm_res.q);
30 try testing.expectEqual(expected_r, arm_res.r);
31}
32
33test "arm.__aeabi_uldivmod" {
34 if (!builtin.cpu.arch.isARM()) return error.SkipZigTest;
35
36 for (cases) |case| {
37 try test__aeabi_uldivmod(case[0], case[1], case[2], case[3]);
38 }
39}
40
19const cases = [_][4]u64{41const cases = [_][4]u64{
20 [_]u64{0x0000000000000000, 0x0000000000000001, 0x0000000000000000, 0x0000000000000000},42 [_]u64{0x0000000000000000, 0x0000000000000001, 0x0000000000000000, 0x0000000000000000},
21 [_]u64{0x0000000000000000, 0x0000000000000002, 0x0000000000000000, 0x0000000000000000},43 [_]u64{0x0000000000000000, 0x0000000000000002, 0x0000000000000000, 0x0000000000000000},
lib/compiler_rt/udivmodsi4_test.zig created+165
...@@ -0,0 +1,165 @@
1// Disable formatting to avoid unnecessary source repository bloat.
2// zig fmt: off
3const testing = @import("std").testing;
4const builtin = @import("builtin");
5const __aeabi_uidivmod = @import("arm.zig").__aeabi_uidivmod;
6
7const ARMRes = extern struct {
8 q: u32, // r0
9 r: u32, // r1
10};
11
12fn test__aeabi_uidivmod(a: u32, b: u32, expected_q: u32, expected_r: u32) !void {
13 const actualUidivmod = @as(*const fn (a: u32, b: u32) callconv(.AAPCS) ARMRes, @ptrCast(&__aeabi_uidivmod));
14 const arm_res = actualUidivmod(a, b);
15 try testing.expectEqual(expected_q, arm_res.q);
16 try testing.expectEqual(expected_r, arm_res.r);
17}
18
19test "arm.__aeabi_uidivmod" {
20 if (!builtin.cpu.arch.isARM()) return error.SkipZigTest;
21
22 var i: i32 = 0;
23 for (cases) |case| {
24 try test__aeabi_uidivmod(case[0], case[1], case[2], case[3]);
25 i+=1;
26 }
27}
28
29const cases = [_][4]u32{
30 [_]u32{0x00000000, 0x00000001, 0x00000000, 0x00000000},
31 [_]u32{0x00000000, 0x00000002, 0x00000000, 0x00000000},
32 [_]u32{0x00000000, 0x00000003, 0x00000000, 0x00000000},
33 [_]u32{0x00000000, 0x00000010, 0x00000000, 0x00000000},
34 [_]u32{0x00000000, 0x078644FA, 0x00000000, 0x00000000},
35 [_]u32{0x00000000, 0x0747AE14, 0x00000000, 0x00000000},
36 [_]u32{0x00000000, 0x7FFFFFFF, 0x00000000, 0x00000000},
37 [_]u32{0x00000000, 0x80000000, 0x00000000, 0x00000000},
38 [_]u32{0x00000000, 0xFFFFFFFD, 0x00000000, 0x00000000},
39 [_]u32{0x00000000, 0xFFFFFFFE, 0x00000000, 0x00000000},
40 [_]u32{0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000},
41 [_]u32{0x00000001, 0x00000001, 0x00000001, 0x00000000}, // 1/1 => q=1, r=0
42 [_]u32{0x00000001, 0x00000002, 0x00000000, 0x00000001},
43 [_]u32{0x00000001, 0x00000003, 0x00000000, 0x00000001},
44 [_]u32{0x00000001, 0x00000010, 0x00000000, 0x00000001},
45 [_]u32{0x00000001, 0x078644FA, 0x00000000, 0x00000001},
46 [_]u32{0x00000001, 0x0747AE14, 0x00000000, 0x00000001},
47 [_]u32{0x00000001, 0x7FFFFFFF, 0x00000000, 0x00000001},
48 [_]u32{0x00000001, 0x80000000, 0x00000000, 0x00000001},
49 [_]u32{0x00000001, 0xFFFFFFFD, 0x00000000, 0x00000001},
50 [_]u32{0x00000001, 0xFFFFFFFE, 0x00000000, 0x00000001},
51 [_]u32{0x00000001, 0xFFFFFFFF, 0x00000000, 0x00000001},
52 [_]u32{0x00000001, 0x00000000, 0x00000000, 0x00000001},
53 [_]u32{0x00000001, 0x00000001, 0x00000001, 0x00000000},
54 [_]u32{0x00000001, 0x00000002, 0x00000000, 0x00000001},
55 [_]u32{0x00000001, 0x00000003, 0x00000000, 0x00000001},
56 [_]u32{0x00000001, 0x00000010, 0x00000000, 0x00000001},
57 [_]u32{0x00000001, 0x078644FA, 0x00000000, 0x00000001},
58 [_]u32{0x00000001, 0x0747AE14, 0x00000000, 0x00000001},
59 [_]u32{0x00000001, 0x7FFFFFFF, 0x00000000, 0x00000001},
60 [_]u32{0x00000001, 0x80000000, 0x00000000, 0x00000001},
61 [_]u32{0x00000001, 0xFFFFFFFD, 0x00000000, 0x00000001},
62 [_]u32{0x00000001, 0xFFFFFFFE, 0x00000000, 0x00000001},
63 [_]u32{0x00000001, 0xFFFFFFFF, 0x00000000, 0x00000001},
64 [_]u32{0x00000002, 0x00000001, 0x00000002, 0x00000000},
65 [_]u32{0x00000002, 0x00000002, 0x00000001, 0x00000000},
66 [_]u32{0x00000002, 0x00000003, 0x00000000, 0x00000002},
67 [_]u32{0x00000002, 0x00000010, 0x00000000, 0x00000002},
68 [_]u32{0x00000002, 0x078644FA, 0x00000000, 0x00000002},
69 [_]u32{0x00000002, 0x0747AE14, 0x00000000, 0x00000002},
70 [_]u32{0x00000002, 0x7FFFFFFF, 0x00000000, 0x00000002},
71 [_]u32{0x00000002, 0x80000000, 0x00000000, 0x00000002},
72 [_]u32{0x00000002, 0xFFFFFFFD, 0x00000000, 0x00000002},
73 [_]u32{0x00000002, 0xFFFFFFFE, 0x00000000, 0x00000002},
74 [_]u32{0x00000002, 0xFFFFFFFF, 0x00000000, 0x00000002},
75
76 [_]u32{0x00000010, 0x00000001, 0x00000010, 0x00000000},
77 [_]u32{0x00000010, 0x00000002, 0x00000008, 0x00000000},
78 [_]u32{0x00000010, 0x00000003, 0x00000005, 0x00000001},
79 [_]u32{0x00000010, 0x00000010, 0x00000001, 0x00000000},
80 [_]u32{0x00000010, 0x078644FA, 0x00000000, 0x00000010},
81 [_]u32{0x00000010, 0x0747AE14, 0x00000000, 0x00000010},
82 [_]u32{0x00000010, 0x7FFFFFFF, 0x00000000, 0x00000010},
83 [_]u32{0x00000010, 0x80000000, 0x00000000, 0x00000010},
84 [_]u32{0x00000010, 0xFFFFFFFD, 0x00000000, 0x00000010},
85 [_]u32{0x00000010, 0xFFFFFFFE, 0x00000000, 0x00000010},
86 [_]u32{0x00000010, 0xFFFFFFFF, 0x00000000, 0x00000010},
87
88 [_]u32{0x078644FA, 0x00000001, 0x078644FA, 0x00000000},
89 [_]u32{0x078644FA, 0x00000002, 0x03C3227D, 0x00000000},
90 [_]u32{0x078644FA, 0x00000003, 0x028216FE, 0x00000000},
91 [_]u32{0x078644FA, 0x00000010, 0x0078644F, 0x0000000A},
92 [_]u32{0x078644FA, 0x078644FA, 0x00000001, 0x00000000},
93 [_]u32{0x078644FA, 0x0747AE14, 0x00000001, 0x003E96E6},
94 [_]u32{0x078644FA, 0x7FFFFFFF, 0x00000000, 0x078644FA},
95 [_]u32{0x078644FA, 0x80000000, 0x00000000, 0x078644FA},
96 [_]u32{0x078644FA, 0xFFFFFFFD, 0x00000000, 0x078644FA},
97 [_]u32{0x078644FA, 0xFFFFFFFE, 0x00000000, 0x078644FA},
98 [_]u32{0x078644FA, 0xFFFFFFFF, 0x00000000, 0x078644FA},
99 [_]u32{0x0747AE14, 0x00000001, 0x0747AE14, 0x00000000},
100 [_]u32{0x0747AE14, 0x00000002, 0x03A3D70A, 0x00000000},
101 [_]u32{0x0747AE14, 0x00000003, 0x026D3A06, 0x00000002},
102 [_]u32{0x0747AE14, 0x00000010, 0x00747AE1, 0x00000004},
103 [_]u32{0x0747AE14, 0x078644FA, 0x00000000, 0x0747AE14},
104 [_]u32{0x0747AE14, 0x0747AE14, 0x00000001, 0x00000000},
105 [_]u32{0x0747AE14, 0x7FFFFFFF, 0x00000000, 0x0747AE14},
106 [_]u32{0x0747AE14, 0x80000000, 0x00000000, 0x0747AE14},
107 [_]u32{0x0747AE14, 0xFFFFFFFD, 0x00000000, 0x0747AE14},
108 [_]u32{0x0747AE14, 0xFFFFFFFE, 0x00000000, 0x0747AE14},
109 [_]u32{0x0747AE14, 0xFFFFFFFF, 0x00000000, 0x0747AE14},
110 [_]u32{0x7FFFFFFF, 0x00000001, 0x7FFFFFFF, 0x00000000},
111 [_]u32{0x7FFFFFFF, 0x00000002, 0x3FFFFFFF, 0x00000001},
112 [_]u32{0x7FFFFFFF, 0x00000003, 0x2AAAAAAA, 0x00000001},
113 [_]u32{0x7FFFFFFF, 0x00000010, 0x07FFFFFF, 0x0000000F},
114 [_]u32{0x7FFFFFFF, 0x078644FA, 0x00000011, 0x00156B65},
115 [_]u32{0x7FFFFFFF, 0x0747AE14, 0x00000011, 0x043D70AB},
116 [_]u32{0x7FFFFFFF, 0x7FFFFFFF, 0x00000001, 0x00000000},
117 [_]u32{0x7FFFFFFF, 0x80000000, 0x00000000, 0x7FFFFFFF},
118 [_]u32{0x7FFFFFFF, 0xFFFFFFFD, 0x00000000, 0x7FFFFFFF},
119 [_]u32{0x7FFFFFFF, 0xFFFFFFFE, 0x00000000, 0x7FFFFFFF},
120 [_]u32{0x7FFFFFFF, 0xFFFFFFFF, 0x00000000, 0x7FFFFFFF},
121 [_]u32{0x80000000, 0x00000001, 0x80000000, 0x00000000},
122 [_]u32{0x80000000, 0x00000002, 0x40000000, 0x00000000},
123 [_]u32{0x80000000, 0x00000003, 0x2AAAAAAA, 0x00000002},
124 [_]u32{0x80000000, 0x00000010, 0x08000000, 0x00000000},
125 [_]u32{0x80000000, 0x078644FA, 0x00000011, 0x00156B66},
126 [_]u32{0x80000000, 0x0747AE14, 0x00000011, 0x043D70AC},
127 [_]u32{0x80000000, 0x7FFFFFFF, 0x00000001, 0x00000001},
128 [_]u32{0x80000000, 0x80000000, 0x00000001, 0x00000000},
129 [_]u32{0x80000000, 0xFFFFFFFD, 0x00000000, 0x80000000},
130 [_]u32{0x80000000, 0xFFFFFFFE, 0x00000000, 0x80000000},
131 [_]u32{0x80000000, 0xFFFFFFFF, 0x00000000, 0x80000000},
132 [_]u32{0xFFFFFFFD, 0x00000001, 0xFFFFFFFD, 0x00000000},
133 [_]u32{0xFFFFFFFD, 0x00000002, 0x7FFFFFFE, 0x00000001},
134 [_]u32{0xFFFFFFFD, 0x00000003, 0x55555554, 0x00000001},
135 [_]u32{0xFFFFFFFD, 0x00000010, 0x0FFFFFFF, 0x0000000D},
136 [_]u32{0xFFFFFFFD, 0x078644FA, 0x00000022, 0x002AD6C9},
137 [_]u32{0xFFFFFFFD, 0x0747AE14, 0x00000023, 0x01333341},
138 [_]u32{0xFFFFFFFD, 0x7FFFFFFF, 0x00000001, 0x7FFFFFFE},
139 [_]u32{0xFFFFFFFD, 0x80000000, 0x00000001, 0x7FFFFFFD},
140 [_]u32{0xFFFFFFFD, 0xFFFFFFFD, 0x00000001, 0x00000000},
141 [_]u32{0xFFFFFFFD, 0xFFFFFFFE, 0x00000000, 0xFFFFFFFD},
142 [_]u32{0xFFFFFFFD, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFD},
143 [_]u32{0xFFFFFFFE, 0x00000001, 0xFFFFFFFE, 0x00000000},
144 [_]u32{0xFFFFFFFE, 0x00000002, 0x7FFFFFFF, 0x00000000},
145 [_]u32{0xFFFFFFFE, 0x00000003, 0x55555554, 0x00000002},
146 [_]u32{0xFFFFFFFE, 0x00000010, 0x0FFFFFFF, 0x0000000E},
147 [_]u32{0xFFFFFFFE, 0x078644FA, 0x00000022, 0x002AD6CA},
148 [_]u32{0xFFFFFFFE, 0x0747AE14, 0x00000023, 0x01333342},
149 [_]u32{0xFFFFFFFE, 0x7FFFFFFF, 0x00000002, 0x00000000},
150 [_]u32{0xFFFFFFFE, 0x80000000, 0x00000001, 0x7FFFFFFE},
151 [_]u32{0xFFFFFFFE, 0xFFFFFFFD, 0x00000001, 0x00000001},
152 [_]u32{0xFFFFFFFE, 0xFFFFFFFE, 0x00000001, 0x00000000},
153 [_]u32{0xFFFFFFFE, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFE},
154 [_]u32{0xFFFFFFFF, 0x00000001, 0xFFFFFFFF, 0x00000000},
155 [_]u32{0xFFFFFFFF, 0x00000002, 0x7FFFFFFF, 0x00000001},
156 [_]u32{0xFFFFFFFF, 0x00000003, 0x55555555, 0x00000000},
157 [_]u32{0xFFFFFFFF, 0x00000010, 0x0FFFFFFF, 0x0000000F},
158 [_]u32{0xFFFFFFFF, 0x078644FA, 0x00000022, 0x002AD6CB},
159 [_]u32{0xFFFFFFFF, 0x0747AE14, 0x00000023, 0x01333343},
160 [_]u32{0xFFFFFFFF, 0x7FFFFFFF, 0x00000002, 0x00000001},
161 [_]u32{0xFFFFFFFF, 0x80000000, 0x00000001, 0x7FFFFFFF},
162 [_]u32{0xFFFFFFFF, 0xFFFFFFFD, 0x00000001, 0x00000002},
163 [_]u32{0xFFFFFFFF, 0xFFFFFFFE, 0x00000001, 0x00000001},
164 [_]u32{0xFFFFFFFF, 0xFFFFFFFF, 0x00000001, 0x00000000},
165};