| ... | @@ -344,4 +344,38 @@ pub fn addCases(ctx: *TestContext) !void { | ... | @@ -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 | } |