authorgravatar for joachim.schmidt557@outlook.comJoachim Schmidt <joachim.schmidt557@outlook.com> 2020-12-30 19:54:34+01:00
committergravatar for joachim.schmidt557@outlook.comJoachim Schmidt <joachim.schmidt557@outlook.com> 2021-01-01 12:22:17+01:00
loga2ab2fb9b080e233e1de2cb1ef74bdbc9476acb9
tree94476a135b37ef97d1310c078e73471fa4842644
parentc52ca0b1780c2865cb0c242cb2f1a397766e6ce8
signaturelock-open Commit is signed but in an unrecognized format.

stage2 ARM: Add simple tests for conditional branching


1 files changed, 62 insertions(+), 0 deletions(-)

test/stage2/arm.zig+62
...@@ -282,4 +282,66 @@ pub fn addCases(ctx: *TestContext) !void {...@@ -282,4 +282,66 @@ pub fn addCases(ctx: *TestContext) !void {
282 "123456",282 "123456",
283 );283 );
284 }284 }
285
286 {
287 var case = ctx.exe("if statements", linux_arm);
288 // Simple if statement in assert
289 case.addCompareOutput(
290 \\export fn _start() noreturn {
291 \\ var x: u32 = 123;
292 \\ var y: u32 = 42;
293 \\ assert(x > y);
294 \\ exit();
295 \\}
296 \\
297 \\fn assert(ok: bool) void {
298 \\ if (!ok) unreachable;
299 \\}
300 \\
301 \\fn exit() noreturn {
302 \\ asm volatile ("svc #0"
303 \\ :
304 \\ : [number] "{r7}" (1),
305 \\ [arg1] "{r0}" (0)
306 \\ : "memory"
307 \\ );
308 \\ unreachable;
309 \\}
310 ,
311 "",
312 );
313 }
314
315 {
316 var case = ctx.exe("while loops", linux_arm);
317 // Simple while loop with assert
318 case.addCompareOutput(
319 \\export fn _start() noreturn {
320 \\ var x: u32 = 2020;
321 \\ var i: u32 = 0;
322 \\ while (x > 0) {
323 \\ x -= 2;
324 \\ i += 1;
325 \\ }
326 \\ assert(i == 1010);
327 \\ exit();
328 \\}
329 \\
330 \\fn assert(ok: bool) void {
331 \\ if (!ok) unreachable;
332 \\}
333 \\
334 \\fn exit() noreturn {
335 \\ asm volatile ("svc #0"
336 \\ :
337 \\ : [number] "{r7}" (1),
338 \\ [arg1] "{r0}" (0)
339 \\ : "memory"
340 \\ );
341 \\ unreachable;
342 \\}
343 ,
344 "",
345 );
346 }
285}347}