github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/cmd/compile/test/testdata/arithBoundary_test.go (about) 1 // Code generated by gen/arithBoundaryGen.go. DO NOT EDIT. 2 3 package main 4 5 import "testing" 6 7 type utd64 struct { 8 a, b uint64 9 add, sub, mul, div, mod uint64 10 } 11 type itd64 struct { 12 a, b int64 13 add, sub, mul, div, mod int64 14 } 15 type utd32 struct { 16 a, b uint32 17 add, sub, mul, div, mod uint32 18 } 19 type itd32 struct { 20 a, b int32 21 add, sub, mul, div, mod int32 22 } 23 type utd16 struct { 24 a, b uint16 25 add, sub, mul, div, mod uint16 26 } 27 type itd16 struct { 28 a, b int16 29 add, sub, mul, div, mod int16 30 } 31 type utd8 struct { 32 a, b uint8 33 add, sub, mul, div, mod uint8 34 } 35 type itd8 struct { 36 a, b int8 37 add, sub, mul, div, mod int8 38 } 39 40 //go:noinline 41 func add_uint64_ssa(a, b uint64) uint64 { 42 return a + b 43 } 44 45 //go:noinline 46 func sub_uint64_ssa(a, b uint64) uint64 { 47 return a - b 48 } 49 50 //go:noinline 51 func div_uint64_ssa(a, b uint64) uint64 { 52 return a / b 53 } 54 55 //go:noinline 56 func mod_uint64_ssa(a, b uint64) uint64 { 57 return a % b 58 } 59 60 //go:noinline 61 func mul_uint64_ssa(a, b uint64) uint64 { 62 return a * b 63 } 64 65 //go:noinline 66 func add_int64_ssa(a, b int64) int64 { 67 return a + b 68 } 69 70 //go:noinline 71 func sub_int64_ssa(a, b int64) int64 { 72 return a - b 73 } 74 75 //go:noinline 76 func div_int64_ssa(a, b int64) int64 { 77 return a / b 78 } 79 80 //go:noinline 81 func mod_int64_ssa(a, b int64) int64 { 82 return a % b 83 } 84 85 //go:noinline 86 func mul_int64_ssa(a, b int64) int64 { 87 return a * b 88 } 89 90 //go:noinline 91 func add_uint32_ssa(a, b uint32) uint32 { 92 return a + b 93 } 94 95 //go:noinline 96 func sub_uint32_ssa(a, b uint32) uint32 { 97 return a - b 98 } 99 100 //go:noinline 101 func div_uint32_ssa(a, b uint32) uint32 { 102 return a / b 103 } 104 105 //go:noinline 106 func mod_uint32_ssa(a, b uint32) uint32 { 107 return a % b 108 } 109 110 //go:noinline 111 func mul_uint32_ssa(a, b uint32) uint32 { 112 return a * b 113 } 114 115 //go:noinline 116 func add_int32_ssa(a, b int32) int32 { 117 return a + b 118 } 119 120 //go:noinline 121 func sub_int32_ssa(a, b int32) int32 { 122 return a - b 123 } 124 125 //go:noinline 126 func div_int32_ssa(a, b int32) int32 { 127 return a / b 128 } 129 130 //go:noinline 131 func mod_int32_ssa(a, b int32) int32 { 132 return a % b 133 } 134 135 //go:noinline 136 func mul_int32_ssa(a, b int32) int32 { 137 return a * b 138 } 139 140 //go:noinline 141 func add_uint16_ssa(a, b uint16) uint16 { 142 return a + b 143 } 144 145 //go:noinline 146 func sub_uint16_ssa(a, b uint16) uint16 { 147 return a - b 148 } 149 150 //go:noinline 151 func div_uint16_ssa(a, b uint16) uint16 { 152 return a / b 153 } 154 155 //go:noinline 156 func mod_uint16_ssa(a, b uint16) uint16 { 157 return a % b 158 } 159 160 //go:noinline 161 func mul_uint16_ssa(a, b uint16) uint16 { 162 return a * b 163 } 164 165 //go:noinline 166 func add_int16_ssa(a, b int16) int16 { 167 return a + b 168 } 169 170 //go:noinline 171 func sub_int16_ssa(a, b int16) int16 { 172 return a - b 173 } 174 175 //go:noinline 176 func div_int16_ssa(a, b int16) int16 { 177 return a / b 178 } 179 180 //go:noinline 181 func mod_int16_ssa(a, b int16) int16 { 182 return a % b 183 } 184 185 //go:noinline 186 func mul_int16_ssa(a, b int16) int16 { 187 return a * b 188 } 189 190 //go:noinline 191 func add_uint8_ssa(a, b uint8) uint8 { 192 return a + b 193 } 194 195 //go:noinline 196 func sub_uint8_ssa(a, b uint8) uint8 { 197 return a - b 198 } 199 200 //go:noinline 201 func div_uint8_ssa(a, b uint8) uint8 { 202 return a / b 203 } 204 205 //go:noinline 206 func mod_uint8_ssa(a, b uint8) uint8 { 207 return a % b 208 } 209 210 //go:noinline 211 func mul_uint8_ssa(a, b uint8) uint8 { 212 return a * b 213 } 214 215 //go:noinline 216 func add_int8_ssa(a, b int8) int8 { 217 return a + b 218 } 219 220 //go:noinline 221 func sub_int8_ssa(a, b int8) int8 { 222 return a - b 223 } 224 225 //go:noinline 226 func div_int8_ssa(a, b int8) int8 { 227 return a / b 228 } 229 230 //go:noinline 231 func mod_int8_ssa(a, b int8) int8 { 232 return a % b 233 } 234 235 //go:noinline 236 func mul_int8_ssa(a, b int8) int8 { 237 return a * b 238 } 239 240 var 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 } 257 var 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 } 339 var 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 } 349 var 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 } 386 var 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 } 396 var 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 } 446 var 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 } 456 var 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. 508 func 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 }