diff options
| author | joachimschmidt557 <joachim.schmidt557@outlook.com> | 2021-04-09 18:08:57 +0200 |
|---|---|---|
| committer | joachimschmidt557 <joachim.schmidt557@outlook.com> | 2021-04-11 10:19:36 +0200 |
| commit | 4fe575f47bbc10ee56f47bd9e7e1b8dacd35fc41 (patch) | |
| tree | 06320c8df899d0eec76f49e439d94380178270be /test | |
| parent | a6ddc12b33d4df48670e7752228b4257933d79c7 (diff) | |
| download | zig-4fe575f47bbc10ee56f47bd9e7e1b8dacd35fc41.tar.gz zig-4fe575f47bbc10ee56f47bd9e7e1b8dacd35fc41.zip | |
stage2 ARM: Add fibonacci test
Diffstat (limited to 'test')
| -rw-r--r-- | test/stage2/arm.zig | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/test/stage2/arm.zig b/test/stage2/arm.zig index 31bbfc3170..f4efbd9b2a 100644 --- a/test/stage2/arm.zig +++ b/test/stage2/arm.zig @@ -419,4 +419,43 @@ pub fn addCases(ctx: *TestContext) !void { "", ); } + + { + var case = ctx.exe("recursive fibonacci", linux_arm); + case.addCompareOutput( + \\export fn _start() noreturn { + \\ assert(fib(0) == 0); + \\ assert(fib(1) == 1); + \\ assert(fib(2) == 1); + \\ assert(fib(3) == 2); + \\ assert(fib(10) == 55); + \\ assert(fib(20) == 6765); + \\ exit(); + \\} + \\ + \\fn fib(n: u32) u32 { + \\ if (n < 2) { + \\ return n; + \\ } else { + \\ return fib(n - 2) + fib(n - 1); + \\ } + \\} + \\ + \\fn assert(ok: bool) void { + \\ if (!ok) unreachable; + \\} + \\ + \\fn exit() noreturn { + \\ asm volatile ("svc #0" + \\ : + \\ : [number] "{r7}" (1), + \\ [arg1] "{r0}" (0) + \\ : "memory" + \\ ); + \\ unreachable; + \\} + , + "", + ); + } } |
