| ... | ... | @@ -344,4 +344,38 @@ pub fn addCases(ctx: *TestContext) !void { |
| 344 | 344 | "", |
| 345 | 345 | ); |
| 346 | 346 | } |
| 347 | |
| 348 | { |
| 349 | var case = ctx.exe("integer multiplication", linux_arm); |
| 350 | // Simple u32 integer multiplication |
| 351 | case.addCompareOutput( |
| 352 | \\export fn _start() noreturn { |
| 353 | \\ assert(mul(1, 1) == 1); |
| 354 | \\ assert(mul(42, 1) == 42); |
| 355 | \\ assert(mul(1, 42) == 42); |
| 356 | \\ assert(mul(123, 42) == 5166); |
| 357 | \\ exit(); |
| 358 | \\} |
| 359 | \\ |
| 360 | \\fn mul(x: u32, y: u32) u32 { |
| 361 | \\ return x * y; |
| 362 | \\} |
| 363 | \\ |
| 364 | \\fn assert(ok: bool) void { |
| 365 | \\ if (!ok) unreachable; |
| 366 | \\} |
| 367 | \\ |
| 368 | \\fn exit() noreturn { |
| 369 | \\ asm volatile ("svc #0" |
| 370 | \\ : |
| 371 | \\ : [number] "{r7}" (1), |
| 372 | \\ [arg1] "{r0}" (0) |
| 373 | \\ : "memory" |
| 374 | \\ ); |
| 375 | \\ unreachable; |
| 376 | \\} |
| 377 | , |
| 378 | "", |
| 379 | ); |
| 380 | } |
| 347 | 381 | } |