1// Code generated by gen/arithBoundaryGen.go. DO NOT EDIT.
2
3package main
4
5import "testing"
6
7type utd64 struct {
8	a, b                    uint64
9	add, sub, mul, div, mod uint64
10}
11type itd64 struct {
12	a, b                    int64
13	add, sub, mul, div, mod int64
14}
15type utd32 struct {
16	a, b                    uint32
17	add, sub, mul, div, mod uint32
18}
19type itd32 struct {
20	a, b                    int32
21	add, sub, mul, div, mod int32
22}
23type utd16 struct {
24	a, b                    uint16
25	add, sub, mul, div, mod uint16
26}
27type itd16 struct {
28	a, b                    int16
29	add, sub, mul, div, mod int16
30}
31type utd8 struct {
32	a, b                    uint8
33	add, sub, mul, div, mod uint8
34}
35type itd8 struct {
36	a, b                    int8
37	add, sub, mul, div, mod int8
38}
39
40//go:noinline
41func add_uint64_ssa(a, b uint64) uint64 {
42	return a + b
43}
44
45//go:noinline
46func sub_uint64_ssa(a, b uint64) uint64 {
47	return a - b
48}
49
50//go:noinline
51func div_uint64_ssa(a, b uint64) uint64 {
52	return a / b
53}
54
55//go:noinline
56func mod_uint64_ssa(a, b uint64) uint64 {
57	return a % b
58}
59
60//go:noinline
61func mul_uint64_ssa(a, b uint64) uint64 {
62	return a * b
63}
64
65//go:noinline
66func add_int64_ssa(a, b int64) int64 {
67	return a + b
68}
69
70//go:noinline
71func sub_int64_ssa(a, b int64) int64 {
72	return a - b
73}
74
75//go:noinline
76func div_int64_ssa(a, b int64) int64 {
77	return a / b
78}
79
80//go:noinline
81func mod_int64_ssa(a, b int64) int64 {
82	return a % b
83}
84
85//go:noinline
86func mul_int64_ssa(a, b int64) int64 {
87	return a * b
88}
89
90//go:noinline
91func add_uint32_ssa(a, b uint32) uint32 {
92	return a + b
93}
94
95//go:noinline
96func sub_uint32_ssa(a, b uint32) uint32 {
97	return a - b
98}
99
100//go:noinline
101func div_uint32_ssa(a, b uint32) uint32 {
102	return a / b
103}
104
105//go:noinline
106func mod_uint32_ssa(a, b uint32) uint32 {
107	return a % b
108}
109
110//go:noinline
111func mul_uint32_ssa(a, b uint32) uint32 {
112	return a * b
113}
114
115//go:noinline
116func add_int32_ssa(a, b int32) int32 {
117	return a + b
118}
119
120//go:noinline
121func sub_int32_ssa(a, b int32) int32 {
122	return a - b
123}
124
125//go:noinline
126func div_int32_ssa(a, b int32) int32 {
127	return a / b
128}
129
130//go:noinline
131func mod_int32_ssa(a, b int32) int32 {
132	return a % b
133}
134
135//go:noinline
136func mul_int32_ssa(a, b int32) int32 {
137	return a * b
138}
139
140//go:noinline
141func add_uint16_ssa(a, b uint16) uint16 {
142	return a + b
143}
144
145//go:noinline
146func sub_uint16_ssa(a, b uint16) uint16 {
147	return a - b
148}
149
150//go:noinline
151func div_uint16_ssa(a, b uint16) uint16 {
152	return a / b
153}
154
155//go:noinline
156func mod_uint16_ssa(a, b uint16) uint16 {
157	return a % b
158}
159
160//go:noinline
161func mul_uint16_ssa(a, b uint16) uint16 {
162	return a * b
163}
164
165//go:noinline
166func add_int16_ssa(a, b int16) int16 {
167	return a + b
168}
169
170//go:noinline
171func sub_int16_ssa(a, b int16) int16 {
172	return a - b
173}
174
175//go:noinline
176func div_int16_ssa(a, b int16) int16 {
177	return a / b
178}
179
180//go:noinline
181func mod_int16_ssa(a, b int16) int16 {
182	return a % b
183}
184
185//go:noinline
186func mul_int16_ssa(a, b int16) int16 {
187	return a * b
188}
189
190//go:noinline
191func add_uint8_ssa(a, b uint8) uint8 {
192	return a + b
193}
194
195//go:noinline
196func sub_uint8_ssa(a, b uint8) uint8 {
197	return a - b
198}
199
200//go:noinline
201func div_uint8_ssa(a, b uint8) uint8 {
202	return a / b
203}
204
205//go:noinline
206func mod_uint8_ssa(a, b uint8) uint8 {
207	return a % b
208}
209
210//go:noinline
211func mul_uint8_ssa(a, b uint8) uint8 {
212	return a * b
213}
214
215//go:noinline
216func add_int8_ssa(a, b int8) int8 {
217	return a + b
218}
219
220//go:noinline
221func sub_int8_ssa(a, b int8) int8 {
222	return a - b
223}
224
225//go:noinline
226func div_int8_ssa(a, b int8) int8 {
227	return a / b
228}
229
230//go:noinline
231func mod_int8_ssa(a, b int8) int8 {
232	return a % b
233}
234
235//go:noinline
236func mul_int8_ssa(a, b int8) int8 {
237	return a * b
238}
239
240var uint64_data []utd64 = []utd64{utd64{a: 0, b: 0, add: 0, sub: 0, mul: 0},
241	utd64{a: 0, b: 1, add: 1, sub: 18446744073709551615, mul: 0, div: 0, mod: 0},
242	utd64{a: 0, b: 4294967296, add: 4294967296, sub: 18446744069414584320, mul: 0, div: 0, mod: 0},
243	utd64{a: 0, b: 18446744073709551615, add: 18446744073709551615, sub: 1, mul: 0, div: 0, mod: 0},
244	utd64{a: 1, b: 0, add: 1, sub: 1, mul: 0},
245	utd64{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
246	utd64{a: 1, b: 4294967296, add: 4294967297, sub: 18446744069414584321, mul: 4294967296, div: 0, mod: 1},
247	utd64{a: 1, b: 18446744073709551615, add: 0, sub: 2, mul: 18446744073709551615, div: 0, mod: 1},
248	utd64{a: 4294967296, b: 0, add: 4294967296, sub: 4294967296, mul: 0},
249	utd64{a: 4294967296, b: 1, add: 4294967297, sub: 4294967295, mul: 4294967296, div: 4294967296, mod: 0},
250	utd64{a: 4294967296, b: 4294967296, add: 8589934592, sub: 0, mul: 0, div: 1, mod: 0},
251	utd64{a: 4294967296, b: 18446744073709551615, add: 4294967295, sub: 4294967297, mul: 18446744069414584320, div: 0, mod: 4294967296},
252	utd64{a: 18446744073709551615, b: 0, add: 18446744073709551615, sub: 18446744073709551615, mul: 0},
253	utd64{a: 18446744073709551615, b: 1, add: 0, sub: 18446744073709551614, mul: 18446744073709551615, div: 18446744073709551615, mod: 0},
254	utd64{a: 18446744073709551615, b: 4294967296, add: 4294967295, sub: 18446744069414584319, mul: 18446744069414584320, div: 4294967295, mod: 4294967295},
255	utd64{a: 18446744073709551615, b: 18446744073709551615, add: 18446744073709551614, sub: 0, mul: 1, div: 1, mod: 0},
256}
257var int64_data []itd64 = []itd64{itd64{a: -9223372036854775808, b: -9223372036854775808, add: 0, sub: 0, mul: 0, div: 1, mod: 0},
258	itd64{a: -9223372036854775808, b: -9223372036854775807, add: 1, sub: -1, mul: -9223372036854775808, div: 1, mod: -1},
259	itd64{a: -9223372036854775808, b: -4294967296, add: 9223372032559808512, sub: -9223372032559808512, mul: 0, div: 2147483648, mod: 0},
260	itd64{a: -9223372036854775808, b: -1, add: 9223372036854775807, sub: -9223372036854775807, mul: -9223372036854775808, div: -9223372036854775808, mod: 0},
261	itd64{a: -9223372036854775808, b: 0, add: -9223372036854775808, sub: -9223372036854775808, mul: 0},
262	itd64{a: -9223372036854775808, b: 1, add: -9223372036854775807, sub: 9223372036854775807, mul: -9223372036854775808, div: -9223372036854775808, mod: 0},
263	itd64{a: -9223372036854775808, b: 4294967296, add: -9223372032559808512, sub: 9223372032559808512, mul: 0, div: -2147483648, mod: 0},
264	itd64{a: -9223372036854775808, b: 9223372036854775806, add: -2, sub: 2, mul: 0, div: -1, mod: -2},
265	itd64{a: -9223372036854775808, b: 9223372036854775807, add: -1, sub: 1, mul: -9223372036854775808, div: -1, mod: -1},
266	itd64{a: -9223372036854775807, b: -9223372036854775808, add: 1, sub: 1, mul: -9223372036854775808, div: 0, mod: -9223372036854775807},
267	itd64{a: -9223372036854775807, b: -9223372036854775807, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
268	itd64{a: -9223372036854775807, b: -4294967296, add: 9223372032559808513, sub: -9223372032559808511, mul: -4294967296, div: 2147483647, mod: -4294967295},
269	itd64{a: -9223372036854775807, b: -1, add: -9223372036854775808, sub: -9223372036854775806, mul: 9223372036854775807, div: 9223372036854775807, mod: 0},
270	itd64{a: -9223372036854775807, b: 0, add: -9223372036854775807, sub: -9223372036854775807, mul: 0},
271	itd64{a: -9223372036854775807, b: 1, add: -9223372036854775806, sub: -9223372036854775808, mul: -9223372036854775807, div: -9223372036854775807, mod: 0},
272	itd64{a: -9223372036854775807, b: 4294967296, add: -9223372032559808511, sub: 9223372032559808513, mul: 4294967296, div: -2147483647, mod: -4294967295},
273	itd64{a: -9223372036854775807, b: 9223372036854775806, add: -1, sub: 3, mul: 9223372036854775806, div: -1, mod: -1},
274	itd64{a: -9223372036854775807, b: 9223372036854775807, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
275	itd64{a: -4294967296, b: -9223372036854775808, add: 9223372032559808512, sub: 9223372032559808512, mul: 0, div: 0, mod: -4294967296},
276	itd64{a: -4294967296, b: -9223372036854775807, add: 9223372032559808513, sub: 9223372032559808511, mul: -4294967296, div: 0, mod: -4294967296},
277	itd64{a: -4294967296, b: -4294967296, add: -8589934592, sub: 0, mul: 0, div: 1, mod: 0},
278	itd64{a: -4294967296, b: -1, add: -4294967297, sub: -4294967295, mul: 4294967296, div: 4294967296, mod: 0},
279	itd64{a: -4294967296, b: 0, add: -4294967296, sub: -4294967296, mul: 0},
280	itd64{a: -4294967296, b: 1, add: -4294967295, sub: -4294967297, mul: -4294967296, div: -4294967296, mod: 0},
281	itd64{a: -4294967296, b: 4294967296, add: 0, sub: -8589934592, mul: 0, div: -1, mod: 0},
282	itd64{a: -4294967296, b: 9223372036854775806, add: 9223372032559808510, sub: 9223372032559808514, mul: 8589934592, div: 0, mod: -4294967296},
283	itd64{a: -4294967296, b: 9223372036854775807, add: 9223372032559808511, sub: 9223372032559808513, mul: 4294967296, div: 0, mod: -4294967296},
284	itd64{a: -1, b: -9223372036854775808, add: 9223372036854775807, sub: 9223372036854775807, mul: -9223372036854775808, div: 0, mod: -1},
285	itd64{a: -1, b: -9223372036854775807, add: -9223372036854775808, sub: 9223372036854775806, mul: 9223372036854775807, div: 0, mod: -1},
286	itd64{a: -1, b: -4294967296, add: -4294967297, sub: 4294967295, mul: 4294967296, div: 0, mod: -1},
287	itd64{a: -1, b: -1, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
288	itd64{a: -1, b: 0, add: -1, sub: -1, mul: 0},
289	itd64{a: -1, b: 1, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
290	itd64{a: -1, b: 4294967296, add: 4294967295, sub: -4294967297, mul: -4294967296, div: 0, mod: -1},
291	itd64{a: -1, b: 9223372036854775806, add: 9223372036854775805, sub: -9223372036854775807, mul: -9223372036854775806, div: 0, mod: -1},
292	itd64{a: -1, b: 9223372036854775807, add: 9223372036854775806, sub: -9223372036854775808, mul: -9223372036854775807, div: 0, mod: -1},
293	itd64{a: 0, b: -9223372036854775808, add: -9223372036854775808, sub: -9223372036854775808, mul: 0, div: 0, mod: 0},
294	itd64{a: 0, b: -9223372036854775807, add: -9223372036854775807, sub: 9223372036854775807, mul: 0, div: 0, mod: 0},
295	itd64{a: 0, b: -4294967296, add: -4294967296, sub: 4294967296, mul: 0, div: 0, mod: 0},
296	itd64{a: 0, b: -1, add: -1, sub: 1, mul: 0, div: 0, mod: 0},
297	itd64{a: 0, b: 0, add: 0, sub: 0, mul: 0},
298	itd64{a: 0, b: 1, add: 1, sub: -1, mul: 0, div: 0, mod: 0},
299	itd64{a: 0, b: 4294967296, add: 4294967296, sub: -4294967296, mul: 0, div: 0, mod: 0},
300	itd64{a: 0, b: 9223372036854775806, add: 9223372036854775806, sub: -9223372036854775806, mul: 0, div: 0, mod: 0},
301	itd64{a: 0, b: 9223372036854775807, add: 9223372036854775807, sub: -9223372036854775807, mul: 0, div: 0, mod: 0},
302	itd64{a: 1, b: -9223372036854775808, add: -9223372036854775807, sub: -9223372036854775807, mul: -9223372036854775808, div: 0, mod: 1},
303	itd64{a: 1, b: -9223372036854775807, add: -9223372036854775806, sub: -9223372036854775808, mul: -9223372036854775807, div: 0, mod: 1},
304	itd64{a: 1, b: -4294967296, add: -4294967295, sub: 4294967297, mul: -4294967296, div: 0, mod: 1},
305	itd64{a: 1, b: -1, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
306	itd64{a: 1, b: 0, add: 1, sub: 1, mul: 0},
307	itd64{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
308	itd64{a: 1, b: 4294967296, add: 4294967297, sub: -4294967295, mul: 4294967296, div: 0, mod: 1},
309	itd64{a: 1, b: 9223372036854775806, add: 9223372036854775807, sub: -9223372036854775805, mul: 9223372036854775806, div: 0, mod: 1},
310	itd64{a: 1, b: 9223372036854775807, add: -9223372036854775808, sub: -9223372036854775806, mul: 9223372036854775807, div: 0, mod: 1},
311	itd64{a: 4294967296, b: -9223372036854775808, add: -9223372032559808512, sub: -9223372032559808512, mul: 0, div: 0, mod: 4294967296},
312	itd64{a: 4294967296, b: -9223372036854775807, add: -9223372032559808511, sub: -9223372032559808513, mul: 4294967296, div: 0, mod: 4294967296},
313	itd64{a: 4294967296, b: -4294967296, add: 0, sub: 8589934592, mul: 0, div: -1, mod: 0},
314	itd64{a: 4294967296, b: -1, add: 4294967295, sub: 4294967297, mul: -4294967296, div: -4294967296, mod: 0},
315	itd64{a: 4294967296, b: 0, add: 4294967296, sub: 4294967296, mul: 0},
316	itd64{a: 4294967296, b: 1, add: 4294967297, sub: 4294967295, mul: 4294967296, div: 4294967296, mod: 0},
317	itd64{a: 4294967296, b: 4294967296, add: 8589934592, sub: 0, mul: 0, div: 1, mod: 0},
318	itd64{a: 4294967296, b: 9223372036854775806, add: -9223372032559808514, sub: -9223372032559808510, mul: -8589934592, div: 0, mod: 4294967296},
319	itd64{a: 4294967296, b: 9223372036854775807, add: -9223372032559808513, sub: -9223372032559808511, mul: -4294967296, div: 0, mod: 4294967296},
320	itd64{a: 9223372036854775806, b: -9223372036854775808, add: -2, sub: -2, mul: 0, div: 0, mod: 9223372036854775806},
321	itd64{a: 9223372036854775806, b: -9223372036854775807, add: -1, sub: -3, mul: 9223372036854775806, div: 0, mod: 9223372036854775806},
322	itd64{a: 9223372036854775806, b: -4294967296, add: 9223372032559808510, sub: -9223372032559808514, mul: 8589934592, div: -2147483647, mod: 4294967294},
323	itd64{a: 9223372036854775806, b: -1, add: 9223372036854775805, sub: 9223372036854775807, mul: -9223372036854775806, div: -9223372036854775806, mod: 0},
324	itd64{a: 9223372036854775806, b: 0, add: 9223372036854775806, sub: 9223372036854775806, mul: 0},
325	itd64{a: 9223372036854775806, b: 1, add: 9223372036854775807, sub: 9223372036854775805, mul: 9223372036854775806, div: 9223372036854775806, mod: 0},
326	itd64{a: 9223372036854775806, b: 4294967296, add: -9223372032559808514, sub: 9223372032559808510, mul: -8589934592, div: 2147483647, mod: 4294967294},
327	itd64{a: 9223372036854775806, b: 9223372036854775806, add: -4, sub: 0, mul: 4, div: 1, mod: 0},
328	itd64{a: 9223372036854775806, b: 9223372036854775807, add: -3, sub: -1, mul: -9223372036854775806, div: 0, mod: 9223372036854775806},
329	itd64{a: 9223372036854775807, b: -9223372036854775808, add: -1, sub: -1, mul: -9223372036854775808, div: 0, mod: 9223372036854775807},
330	itd64{a: 9223372036854775807, b: -9223372036854775807, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
331	itd64{a: 9223372036854775807, b: -4294967296, add: 9223372032559808511, sub: -9223372032559808513, mul: 4294967296, div: -2147483647, mod: 4294967295},
332	itd64{a: 9223372036854775807, b: -1, add: 9223372036854775806, sub: -9223372036854775808, mul: -9223372036854775807, div: -9223372036854775807, mod: 0},
333	itd64{a: 9223372036854775807, b: 0, add: 9223372036854775807, sub: 9223372036854775807, mul: 0},
334	itd64{a: 9223372036854775807, b: 1, add: -9223372036854775808, sub: 9223372036854775806, mul: 9223372036854775807, div: 9223372036854775807, mod: 0},
335	itd64{a: 9223372036854775807, b: 4294967296, add: -9223372032559808513, sub: 9223372032559808511, mul: -4294967296, div: 2147483647, mod: 4294967295},
336	itd64{a: 9223372036854775807, b: 9223372036854775806, add: -3, sub: 1, mul: -9223372036854775806, div: 1, mod: 1},
337	itd64{a: 9223372036854775807, b: 9223372036854775807, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
338}
339var uint32_data []utd32 = []utd32{utd32{a: 0, b: 0, add: 0, sub: 0, mul: 0},
340	utd32{a: 0, b: 1, add: 1, sub: 4294967295, mul: 0, div: 0, mod: 0},
341	utd32{a: 0, b: 4294967295, add: 4294967295, sub: 1, mul: 0, div: 0, mod: 0},
342	utd32{a: 1, b: 0, add: 1, sub: 1, mul: 0},
343	utd32{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
344	utd32{a: 1, b: 4294967295, add: 0, sub: 2, mul: 4294967295, div: 0, mod: 1},
345	utd32{a: 4294967295, b: 0, add: 4294967295, sub: 4294967295, mul: 0},
346	utd32{a: 4294967295, b: 1, add: 0, sub: 4294967294, mul: 4294967295, div: 4294967295, mod: 0},
347	utd32{a: 4294967295, b: 4294967295, add: 4294967294, sub: 0, mul: 1, div: 1, mod: 0},
348}
349var int32_data []itd32 = []itd32{itd32{a: -2147483648, b: -2147483648, add: 0, sub: 0, mul: 0, div: 1, mod: 0},
350	itd32{a: -2147483648, b: -2147483647, add: 1, sub: -1, mul: -2147483648, div: 1, mod: -1},
351	itd32{a: -2147483648, b: -1, add: 2147483647, sub: -2147483647, mul: -2147483648, div: -2147483648, mod: 0},
352	itd32{a: -2147483648, b: 0, add: -2147483648, sub: -2147483648, mul: 0},
353	itd32{a: -2147483648, b: 1, add: -2147483647, sub: 2147483647, mul: -2147483648, div: -2147483648, mod: 0},
354	itd32{a: -2147483648, b: 2147483647, add: -1, sub: 1, mul: -2147483648, div: -1, mod: -1},
355	itd32{a: -2147483647, b: -2147483648, add: 1, sub: 1, mul: -2147483648, div: 0, mod: -2147483647},
356	itd32{a: -2147483647, b: -2147483647, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
357	itd32{a: -2147483647, b: -1, add: -2147483648, sub: -2147483646, mul: 2147483647, div: 2147483647, mod: 0},
358	itd32{a: -2147483647, b: 0, add: -2147483647, sub: -2147483647, mul: 0},
359	itd32{a: -2147483647, b: 1, add: -2147483646, sub: -2147483648, mul: -2147483647, div: -2147483647, mod: 0},
360	itd32{a: -2147483647, b: 2147483647, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
361	itd32{a: -1, b: -2147483648, add: 2147483647, sub: 2147483647, mul: -2147483648, div: 0, mod: -1},
362	itd32{a: -1, b: -2147483647, add: -2147483648, sub: 2147483646, mul: 2147483647, div: 0, mod: -1},
363	itd32{a: -1, b: -1, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
364	itd32{a: -1, b: 0, add: -1, sub: -1, mul: 0},
365	itd32{a: -1, b: 1, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
366	itd32{a: -1, b: 2147483647, add: 2147483646, sub: -2147483648, mul: -2147483647, div: 0, mod: -1},
367	itd32{a: 0, b: -2147483648, add: -2147483648, sub: -2147483648, mul: 0, div: 0, mod: 0},
368	itd32{a: 0, b: -2147483647, add: -2147483647, sub: 2147483647, mul: 0, div: 0, mod: 0},
369	itd32{a: 0, b: -1, add: -1, sub: 1, mul: 0, div: 0, mod: 0},
370	itd32{a: 0, b: 0, add: 0, sub: 0, mul: 0},
371	itd32{a: 0, b: 1, add: 1, sub: -1, mul: 0, div: 0, mod: 0},
372	itd32{a: 0, b: 2147483647, add: 2147483647, sub: -2147483647, mul: 0, div: 0, mod: 0},
373	itd32{a: 1, b: -2147483648, add: -2147483647, sub: -2147483647, mul: -2147483648, div: 0, mod: 1},
374	itd32{a: 1, b: -2147483647, add: -2147483646, sub: -2147483648, mul: -2147483647, div: 0, mod: 1},
375	itd32{a: 1, b: -1, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
376	itd32{a: 1, b: 0, add: 1, sub: 1, mul: 0},
377	itd32{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
378	itd32{a: 1, b: 2147483647, add: -2147483648, sub: -2147483646, mul: 2147483647, div: 0, mod: 1},
379	itd32{a: 2147483647, b: -2147483648, add: -1, sub: -1, mul: -2147483648, div: 0, mod: 2147483647},
380	itd32{a: 2147483647, b: -2147483647, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
381	itd32{a: 2147483647, b: -1, add: 2147483646, sub: -2147483648, mul: -2147483647, div: -2147483647, mod: 0},
382	itd32{a: 2147483647, b: 0, add: 2147483647, sub: 2147483647, mul: 0},
383	itd32{a: 2147483647, b: 1, add: -2147483648, sub: 2147483646, mul: 2147483647, div: 2147483647, mod: 0},
384	itd32{a: 2147483647, b: 2147483647, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
385}
386var uint16_data []utd16 = []utd16{utd16{a: 0, b: 0, add: 0, sub: 0, mul: 0},
387	utd16{a: 0, b: 1, add: 1, sub: 65535, mul: 0, div: 0, mod: 0},
388	utd16{a: 0, b: 65535, add: 65535, sub: 1, mul: 0, div: 0, mod: 0},
389	utd16{a: 1, b: 0, add: 1, sub: 1, mul: 0},
390	utd16{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
391	utd16{a: 1, b: 65535, add: 0, sub: 2, mul: 65535, div: 0, mod: 1},
392	utd16{a: 65535, b: 0, add: 65535, sub: 65535, mul: 0},
393	utd16{a: 65535, b: 1, add: 0, sub: 65534, mul: 65535, div: 65535, mod: 0},
394	utd16{a: 65535, b: 65535, add: 65534, sub: 0, mul: 1, div: 1, mod: 0},
395}
396var int16_data []itd16 = []itd16{itd16{a: -32768, b: -32768, add: 0, sub: 0, mul: 0, div: 1, mod: 0},
397	itd16{a: -32768, b: -32767, add: 1, sub: -1, mul: -32768, div: 1, mod: -1},
398	itd16{a: -32768, b: -1, add: 32767, sub: -32767, mul: -32768, div: -32768, mod: 0},
399	itd16{a: -32768, b: 0, add: -32768, sub: -32768, mul: 0},
400	itd16{a: -32768, b: 1, add: -32767, sub: 32767, mul: -32768, div: -32768, mod: 0},
401	itd16{a: -32768, b: 32766, add: -2, sub: 2, mul: 0, div: -1, mod: -2},
402	itd16{a: -32768, b: 32767, add: -1, sub: 1, mul: -32768, div: -1, mod: -1},
403	itd16{a: -32767, b: -32768, add: 1, sub: 1, mul: -32768, div: 0, mod: -32767},
404	itd16{a: -32767, b: -32767, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
405	itd16{a: -32767, b: -1, add: -32768, sub: -32766, mul: 32767, div: 32767, mod: 0},
406	itd16{a: -32767, b: 0, add: -32767, sub: -32767, mul: 0},
407	itd16{a: -32767, b: 1, add: -32766, sub: -32768, mul: -32767, div: -32767, mod: 0},
408	itd16{a: -32767, b: 32766, add: -1, sub: 3, mul: 32766, div: -1, mod: -1},
409	itd16{a: -32767, b: 32767, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
410	itd16{a: -1, b: -32768, add: 32767, sub: 32767, mul: -32768, div: 0, mod: -1},
411	itd16{a: -1, b: -32767, add: -32768, sub: 32766, mul: 32767, div: 0, mod: -1},
412	itd16{a: -1, b: -1, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
413	itd16{a: -1, b: 0, add: -1, sub: -1, mul: 0},
414	itd16{a: -1, b: 1, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
415	itd16{a: -1, b: 32766, add: 32765, sub: -32767, mul: -32766, div: 0, mod: -1},
416	itd16{a: -1, b: 32767, add: 32766, sub: -32768, mul: -32767, div: 0, mod: -1},
417	itd16{a: 0, b: -32768, add: -32768, sub: -32768, mul: 0, div: 0, mod: 0},
418	itd16{a: 0, b: -32767, add: -32767, sub: 32767, mul: 0, div: 0, mod: 0},
419	itd16{a: 0, b: -1, add: -1, sub: 1, mul: 0, div: 0, mod: 0},
420	itd16{a: 0, b: 0, add: 0, sub: 0, mul: 0},
421	itd16{a: 0, b: 1, add: 1, sub: -1, mul: 0, div: 0, mod: 0},
422	itd16{a: 0, b: 32766, add: 32766, sub: -32766, mul: 0, div: 0, mod: 0},
423	itd16{a: 0, b: 32767, add: 32767, sub: -32767, mul: 0, div: 0, mod: 0},
424	itd16{a: 1, b: -32768, add: -32767, sub: -32767, mul: -32768, div: 0, mod: 1},
425	itd16{a: 1, b: -32767, add: -32766, sub: -32768, mul: -32767, div: 0, mod: 1},
426	itd16{a: 1, b: -1, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
427	itd16{a: 1, b: 0, add: 1, sub: 1, mul: 0},
428	itd16{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
429	itd16{a: 1, b: 32766, add: 32767, sub: -32765, mul: 32766, div: 0, mod: 1},
430	itd16{a: 1, b: 32767, add: -32768, sub: -32766, mul: 32767, div: 0, mod: 1},
431	itd16{a: 32766, b: -32768, add: -2, sub: -2, mul: 0, div: 0, mod: 32766},
432	itd16{a: 32766, b: -32767, add: -1, sub: -3, mul: 32766, div: 0, mod: 32766},
433	itd16{a: 32766, b: -1, add: 32765, sub: 32767, mul: -32766, div: -32766, mod: 0},
434	itd16{a: 32766, b: 0, add: 32766, sub: 32766, mul: 0},
435	itd16{a: 32766, b: 1, add: 32767, sub: 32765, mul: 32766, div: 32766, mod: 0},
436	itd16{a: 32766, b: 32766, add: -4, sub: 0, mul: 4, div: 1, mod: 0},
437	itd16{a: 32766, b: 32767, add: -3, sub: -1, mul: -32766, div: 0, mod: 32766},
438	itd16{a: 32767, b: -32768, add: -1, sub: -1, mul: -32768, div: 0, mod: 32767},
439	itd16{a: 32767, b: -32767, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
440	itd16{a: 32767, b: -1, add: 32766, sub: -32768, mul: -32767, div: -32767, mod: 0},
441	itd16{a: 32767, b: 0, add: 32767, sub: 32767, mul: 0},
442	itd16{a: 32767, b: 1, add: -32768, sub: 32766, mul: 32767, div: 32767, mod: 0},
443	itd16{a: 32767, b: 32766, add: -3, sub: 1, mul: -32766, div: 1, mod: 1},
444	itd16{a: 32767, b: 32767, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
445}
446var uint8_data []utd8 = []utd8{utd8{a: 0, b: 0, add: 0, sub: 0, mul: 0},
447	utd8{a: 0, b: 1, add: 1, sub: 255, mul: 0, div: 0, mod: 0},
448	utd8{a: 0, b: 255, add: 255, sub: 1, mul: 0, div: 0, mod: 0},
449	utd8{a: 1, b: 0, add: 1, sub: 1, mul: 0},
450	utd8{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
451	utd8{a: 1, b: 255, add: 0, sub: 2, mul: 255, div: 0, mod: 1},
452	utd8{a: 255, b: 0, add: 255, sub: 255, mul: 0},
453	utd8{a: 255, b: 1, add: 0, sub: 254, mul: 255, div: 255, mod: 0},
454	utd8{a: 255, b: 255, add: 254, sub: 0, mul: 1, div: 1, mod: 0},
455}
456var int8_data []itd8 = []itd8{itd8{a: -128, b: -128, add: 0, sub: 0, mul: 0, div: 1, mod: 0},
457	itd8{a: -128, b: -127, add: 1, sub: -1, mul: -128, div: 1, mod: -1},
458	itd8{a: -128, b: -1, add: 127, sub: -127, mul: -128, div: -128, mod: 0},
459	itd8{a: -128, b: 0, add: -128, sub: -128, mul: 0},
460	itd8{a: -128, b: 1, add: -127, sub: 127, mul: -128, div: -128, mod: 0},
461	itd8{a: -128, b: 126, add: -2, sub: 2, mul: 0, div: -1, mod: -2},
462	itd8{a: -128, b: 127, add: -1, sub: 1, mul: -128, div: -1, mod: -1},
463	itd8{a: -127, b: -128, add: 1, sub: 1, mul: -128, div: 0, mod: -127},
464	itd8{a: -127, b: -127, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
465	itd8{a: -127, b: -1, add: -128, sub: -126, mul: 127, div: 127, mod: 0},
466	itd8{a: -127, b: 0, add: -127, sub: -127, mul: 0},
467	itd8{a: -127, b: 1, add: -126, sub: -128, mul: -127, div: -127, mod: 0},
468	itd8{a: -127, b: 126, add: -1, sub: 3, mul: 126, div: -1, mod: -1},
469	itd8{a: -127, b: 127, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
470	itd8{a: -1, b: -128, add: 127, sub: 127, mul: -128, div: 0, mod: -1},
471	itd8{a: -1, b: -127, add: -128, sub: 126, mul: 127, div: 0, mod: -1},
472	itd8{a: -1, b: -1, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
473	itd8{a: -1, b: 0, add: -1, sub: -1, mul: 0},
474	itd8{a: -1, b: 1, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
475	itd8{a: -1, b: 126, add: 125, sub: -127, mul: -126, div: 0, mod: -1},
476	itd8{a: -1, b: 127, add: 126, sub: -128, mul: -127, div: 0, mod: -1},
477	itd8{a: 0, b: -128, add: -128, sub: -128, mul: 0, div: 0, mod: 0},
478	itd8{a: 0, b: -127, add: -127, sub: 127, mul: 0, div: 0, mod: 0},
479	itd8{a: 0, b: -1, add: -1, sub: 1, mul: 0, div: 0, mod: 0},
480	itd8{a: 0, b: 0, add: 0, sub: 0, mul: 0},
481	itd8{a: 0, b: 1, add: 1, sub: -1, mul: 0, div: 0, mod: 0},
482	itd8{a: 0, b: 126, add: 126, sub: -126, mul: 0, div: 0, mod: 0},
483	itd8{a: 0, b: 127, add: 127, sub: -127, mul: 0, div: 0, mod: 0},
484	itd8{a: 1, b: -128, add: -127, sub: -127, mul: -128, div: 0, mod: 1},
485	itd8{a: 1, b: -127, add: -126, sub: -128, mul: -127, div: 0, mod: 1},
486	itd8{a: 1, b: -1, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
487	itd8{a: 1, b: 0, add: 1, sub: 1, mul: 0},
488	itd8{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
489	itd8{a: 1, b: 126, add: 127, sub: -125, mul: 126, div: 0, mod: 1},
490	itd8{a: 1, b: 127, add: -128, sub: -126, mul: 127, div: 0, mod: 1},
491	itd8{a: 126, b: -128, add: -2, sub: -2, mul: 0, div: 0, mod: 126},
492	itd8{a: 126, b: -127, add: -1, sub: -3, mul: 126, div: 0, mod: 126},
493	itd8{a: 126, b: -1, add: 125, sub: 127, mul: -126, div: -126, mod: 0},
494	itd8{a: 126, b: 0, add: 126, sub: 126, mul: 0},
495	itd8{a: 126, b: 1, add: 127, sub: 125, mul: 126, div: 126, mod: 0},
496	itd8{a: 126, b: 126, add: -4, sub: 0, mul: 4, div: 1, mod: 0},
497	itd8{a: 126, b: 127, add: -3, sub: -1, mul: -126, div: 0, mod: 126},
498	itd8{a: 127, b: -128, add: -1, sub: -1, mul: -128, div: 0, mod: 127},
499	itd8{a: 127, b: -127, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
500	itd8{a: 127, b: -1, add: 126, sub: -128, mul: -127, div: -127, mod: 0},
501	itd8{a: 127, b: 0, add: 127, sub: 127, mul: 0},
502	itd8{a: 127, b: 1, add: -128, sub: 126, mul: 127, div: 127, mod: 0},
503	itd8{a: 127, b: 126, add: -3, sub: 1, mul: -126, div: 1, mod: 1},
504	itd8{a: 127, b: 127, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
505}
506
507//TestArithmeticBoundary tests boundary results for arithmetic operations.
508func TestArithmeticBoundary(t *testing.T) {
509
510	for _, v := range uint64_data {
511		if got := add_uint64_ssa(v.a, v.b); got != v.add {
512			t.Errorf("add_uint64 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
513		}
514		if got := sub_uint64_ssa(v.a, v.b); got != v.sub {
515			t.Errorf("sub_uint64 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
516		}
517		if v.b != 0 {
518			if got := div_uint64_ssa(v.a, v.b); got != v.div {
519				t.Errorf("div_uint64 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
520			}
521
522		}
523		if v.b != 0 {
524			if got := mod_uint64_ssa(v.a, v.b); got != v.mod {
525				t.Errorf("mod_uint64 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
526			}
527
528		}
529		if got := mul_uint64_ssa(v.a, v.b); got != v.mul {
530			t.Errorf("mul_uint64 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
531		}
532	}
533	for _, v := range int64_data {
534		if got := add_int64_ssa(v.a, v.b); got != v.add {
535			t.Errorf("add_int64 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
536		}
537		if got := sub_int64_ssa(v.a, v.b); got != v.sub {
538			t.Errorf("sub_int64 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
539		}
540		if v.b != 0 {
541			if got := div_int64_ssa(v.a, v.b); got != v.div {
542				t.Errorf("div_int64 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
543			}
544
545		}
546		if v.b != 0 {
547			if got := mod_int64_ssa(v.a, v.b); got != v.mod {
548				t.Errorf("mod_int64 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
549			}
550
551		}
552		if got := mul_int64_ssa(v.a, v.b); got != v.mul {
553			t.Errorf("mul_int64 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
554		}
555	}
556	for _, v := range uint32_data {
557		if got := add_uint32_ssa(v.a, v.b); got != v.add {
558			t.Errorf("add_uint32 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
559		}
560		if got := sub_uint32_ssa(v.a, v.b); got != v.sub {
561			t.Errorf("sub_uint32 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
562		}
563		if v.b != 0 {
564			if got := div_uint32_ssa(v.a, v.b); got != v.div {
565				t.Errorf("div_uint32 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
566			}
567
568		}
569		if v.b != 0 {
570			if got := mod_uint32_ssa(v.a, v.b); got != v.mod {
571				t.Errorf("mod_uint32 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
572			}
573
574		}
575		if got := mul_uint32_ssa(v.a, v.b); got != v.mul {
576			t.Errorf("mul_uint32 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
577		}
578	}
579	for _, v := range int32_data {
580		if got := add_int32_ssa(v.a, v.b); got != v.add {
581			t.Errorf("add_int32 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
582		}
583		if got := sub_int32_ssa(v.a, v.b); got != v.sub {
584			t.Errorf("sub_int32 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
585		}
586		if v.b != 0 {
587			if got := div_int32_ssa(v.a, v.b); got != v.div {
588				t.Errorf("div_int32 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
589			}
590
591		}
592		if v.b != 0 {
593			if got := mod_int32_ssa(v.a, v.b); got != v.mod {
594				t.Errorf("mod_int32 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
595			}
596
597		}
598		if got := mul_int32_ssa(v.a, v.b); got != v.mul {
599			t.Errorf("mul_int32 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
600		}
601	}
602	for _, v := range uint16_data {
603		if got := add_uint16_ssa(v.a, v.b); got != v.add {
604			t.Errorf("add_uint16 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
605		}
606		if got := sub_uint16_ssa(v.a, v.b); got != v.sub {
607			t.Errorf("sub_uint16 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
608		}
609		if v.b != 0 {
610			if got := div_uint16_ssa(v.a, v.b); got != v.div {
611				t.Errorf("div_uint16 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
612			}
613
614		}
615		if v.b != 0 {
616			if got := mod_uint16_ssa(v.a, v.b); got != v.mod {
617				t.Errorf("mod_uint16 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
618			}
619
620		}
621		if got := mul_uint16_ssa(v.a, v.b); got != v.mul {
622			t.Errorf("mul_uint16 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
623		}
624	}
625	for _, v := range int16_data {
626		if got := add_int16_ssa(v.a, v.b); got != v.add {
627			t.Errorf("add_int16 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
628		}
629		if got := sub_int16_ssa(v.a, v.b); got != v.sub {
630			t.Errorf("sub_int16 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
631		}
632		if v.b != 0 {
633			if got := div_int16_ssa(v.a, v.b); got != v.div {
634				t.Errorf("div_int16 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
635			}
636
637		}
638		if v.b != 0 {
639			if got := mod_int16_ssa(v.a, v.b); got != v.mod {
640				t.Errorf("mod_int16 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
641			}
642
643		}
644		if got := mul_int16_ssa(v.a, v.b); got != v.mul {
645			t.Errorf("mul_int16 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
646		}
647	}
648	for _, v := range uint8_data {
649		if got := add_uint8_ssa(v.a, v.b); got != v.add {
650			t.Errorf("add_uint8 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
651		}
652		if got := sub_uint8_ssa(v.a, v.b); got != v.sub {
653			t.Errorf("sub_uint8 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
654		}
655		if v.b != 0 {
656			if got := div_uint8_ssa(v.a, v.b); got != v.div {
657				t.Errorf("div_uint8 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
658			}
659
660		}
661		if v.b != 0 {
662			if got := mod_uint8_ssa(v.a, v.b); got != v.mod {
663				t.Errorf("mod_uint8 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
664			}
665
666		}
667		if got := mul_uint8_ssa(v.a, v.b); got != v.mul {
668			t.Errorf("mul_uint8 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
669		}
670	}
671	for _, v := range int8_data {
672		if got := add_int8_ssa(v.a, v.b); got != v.add {
673			t.Errorf("add_int8 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
674		}
675		if got := sub_int8_ssa(v.a, v.b); got != v.sub {
676			t.Errorf("sub_int8 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
677		}
678		if v.b != 0 {
679			if got := div_int8_ssa(v.a, v.b); got != v.div {
680				t.Errorf("div_int8 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
681			}
682
683		}
684		if v.b != 0 {
685			if got := mod_int8_ssa(v.a, v.b); got != v.mod {
686				t.Errorf("mod_int8 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
687			}
688
689		}
690		if got := mul_int8_ssa(v.a, v.b); got != v.mul {
691			t.Errorf("mul_int8 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
692		}
693	}
694}
695