authorgravatar for joachim.schmidt557@outlook.comJoachim Schmidt <joachim.schmidt557@outlook.com> 2021-04-09 18:08:57+02:00
committergravatar for joachim.schmidt557@outlook.comJoachim Schmidt <joachim.schmidt557@outlook.com> 2021-04-11 10:19:36+02:00
log4fe575f47bbc10ee56f47bd9e7e1b8dacd35fc41
tree06320c8df899d0eec76f49e439d94380178270be
parenta6ddc12b33d4df48670e7752228b4257933d79c7
signature Commit is signed but in an unrecognized format.

stage2 ARM: Add fibonacci test


2 files changed, 40 insertions(+), 1 deletions(-)

src/codegen.zig+1-1
...@@ -1745,7 +1745,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {...@@ -1745,7 +1745,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
17451745
1746 const result = self.args[arg_index];1746 const result = self.args[arg_index];
1747 const mcv = switch (arch) {1747 const mcv = switch (arch) {
1748 // TODO support stack-only registers on all target architectures1748 // TODO support stack-only arguments on all target architectures
1749 .arm, .armeb, .aarch64, .aarch64_32, .aarch64_be => switch (result) {1749 .arm, .armeb, .aarch64, .aarch64_32, .aarch64_be => switch (result) {
1750 // Copy registers to the stack1750 // Copy registers to the stack
1751 .register => |reg| blk: {1751 .register => |reg| blk: {
test/stage2/arm.zig+39
...@@ -419,4 +419,43 @@ pub fn addCases(ctx: *TestContext) !void {...@@ -419,4 +419,43 @@ pub fn addCases(ctx: *TestContext) !void {
419 "",419 "",
420 );420 );
421 }421 }
422
423 {
424 var case = ctx.exe("recursive fibonacci", linux_arm);
425 case.addCompareOutput(
426 \\export fn _start() noreturn {
427 \\ assert(fib(0) == 0);
428 \\ assert(fib(1) == 1);
429 \\ assert(fib(2) == 1);
430 \\ assert(fib(3) == 2);
431 \\ assert(fib(10) == 55);
432 \\ assert(fib(20) == 6765);
433 \\ exit();
434 \\}
435 \\
436 \\fn fib(n: u32) u32 {
437 \\ if (n < 2) {
438 \\ return n;
439 \\ } else {
440 \\ return fib(n - 2) + fib(n - 1);
441 \\ }
442 \\}
443 \\
444 \\fn assert(ok: bool) void {
445 \\ if (!ok) unreachable;
446 \\}
447 \\
448 \\fn exit() noreturn {
449 \\ asm volatile ("svc #0"
450 \\ :
451 \\ : [number] "{r7}" (1),
452 \\ [arg1] "{r0}" (0)
453 \\ : "memory"
454 \\ );
455 \\ unreachable;
456 \\}
457 ,
458 "",
459 );
460 }
422}461}