diff --git a/test/stage2/arm.zig b/test/stage2/arm.zig index b77c6a8980..2326d723c6 100644 --- a/test/stage2/arm.zig +++ b/test/stage2/arm.zig @@ -115,7 +115,8 @@ pub fn addCases(ctx: *TestContext) !void { } { - var case = ctx.exe("addition", linux_arm); + var case = ctx.exe("arithmetic operations", linux_arm); + // Add two numbers case.addCompareOutput( \\export fn _start() noreturn { @@ -148,5 +149,137 @@ pub fn addCases(ctx: *TestContext) !void { , "12345612345678", ); + + // Subtract two numbers + case.addCompareOutput( + \\export fn _start() noreturn { + \\ print(10, 5); + \\ print(4, 3); + \\ exit(); + \\} + \\ + \\fn print(a: u32, b: u32) void { + \\ asm volatile ("svc #0" + \\ : + \\ : [number] "{r7}" (4), + \\ [arg3] "{r2}" (a - b), + \\ [arg1] "{r0}" (1), + \\ [arg2] "{r1}" (@ptrToInt("123456789")) + \\ : "memory" + \\ ); + \\ return; + \\} + \\ + \\fn exit() noreturn { + \\ asm volatile ("svc #0" + \\ : + \\ : [number] "{r7}" (1), + \\ [arg1] "{r0}" (0) + \\ : "memory" + \\ ); + \\ unreachable; + \\} + , + "123451", + ); + + // Bitwise And + case.addCompareOutput( + \\export fn _start() noreturn { + \\ print(8, 9); + \\ print(3, 7); + \\ exit(); + \\} + \\ + \\fn print(a: u32, b: u32) void { + \\ asm volatile ("svc #0" + \\ : + \\ : [number] "{r7}" (4), + \\ [arg3] "{r2}" (a & b), + \\ [arg1] "{r0}" (1), + \\ [arg2] "{r1}" (@ptrToInt("123456789")) + \\ : "memory" + \\ ); + \\ return; + \\} + \\ + \\fn exit() noreturn { + \\ asm volatile ("svc #0" + \\ : + \\ : [number] "{r7}" (1), + \\ [arg1] "{r0}" (0) + \\ : "memory" + \\ ); + \\ unreachable; + \\} + , + "12345678123", + ); + + // Bitwise Or + case.addCompareOutput( + \\export fn _start() noreturn { + \\ print(4, 2); + \\ print(3, 7); + \\ exit(); + \\} + \\ + \\fn print(a: u32, b: u32) void { + \\ asm volatile ("svc #0" + \\ : + \\ : [number] "{r7}" (4), + \\ [arg3] "{r2}" (a | b), + \\ [arg1] "{r0}" (1), + \\ [arg2] "{r1}" (@ptrToInt("123456789")) + \\ : "memory" + \\ ); + \\ return; + \\} + \\ + \\fn exit() noreturn { + \\ asm volatile ("svc #0" + \\ : + \\ : [number] "{r7}" (1), + \\ [arg1] "{r0}" (0) + \\ : "memory" + \\ ); + \\ unreachable; + \\} + , + "1234561234567", + ); + + // Bitwise Xor + case.addCompareOutput( + \\export fn _start() noreturn { + \\ print(42, 42); + \\ print(3, 5); + \\ exit(); + \\} + \\ + \\fn print(a: u32, b: u32) void { + \\ asm volatile ("svc #0" + \\ : + \\ : [number] "{r7}" (4), + \\ [arg3] "{r2}" (a ^ b), + \\ [arg1] "{r0}" (1), + \\ [arg2] "{r1}" (@ptrToInt("123456789")) + \\ : "memory" + \\ ); + \\ return; + \\} + \\ + \\fn exit() noreturn { + \\ asm volatile ("svc #0" + \\ : + \\ : [number] "{r7}" (1), + \\ [arg1] "{r0}" (0) + \\ : "memory" + \\ ); + \\ unreachable; + \\} + , + "123456", + ); } }