aboutsummaryrefslogtreecommitdiff
path: root/test/cases/arm-linux/function_pointers.zig
diff options
context:
space:
mode:
Diffstat (limited to 'test/cases/arm-linux/function_pointers.zig')
-rw-r--r--test/cases/arm-linux/function_pointers.zig44
1 files changed, 44 insertions, 0 deletions
diff --git a/test/cases/arm-linux/function_pointers.zig b/test/cases/arm-linux/function_pointers.zig
new file mode 100644
index 0000000000..0ef5df6745
--- /dev/null
+++ b/test/cases/arm-linux/function_pointers.zig
@@ -0,0 +1,44 @@
+const PrintFn = *const fn () void;
+
+pub fn main() void {
+ var printFn: PrintFn = stopSayingThat;
+ var i: u32 = 0;
+ while (i < 4) : (i += 1) printFn();
+
+ printFn = moveEveryZig;
+ printFn();
+}
+
+fn stopSayingThat() void {
+ asm volatile ("svc #0"
+ :
+ : [number] "{r7}" (4),
+ [arg1] "{r0}" (1),
+ [arg2] "{r1}" (@ptrToInt("Hello, my name is Inigo Montoya; you killed my father, prepare to die.\n")),
+ [arg3] "{r2}" ("Hello, my name is Inigo Montoya; you killed my father, prepare to die.\n".len),
+ : "memory"
+ );
+ return;
+}
+
+fn moveEveryZig() void {
+ asm volatile ("svc #0"
+ :
+ : [number] "{r7}" (4),
+ [arg1] "{r0}" (1),
+ [arg2] "{r1}" (@ptrToInt("All your codebase are belong to us\n")),
+ [arg3] "{r2}" ("All your codebase are belong to us\n".len),
+ : "memory"
+ );
+ return;
+}
+
+// run
+// target=arm-linux
+//
+// Hello, my name is Inigo Montoya; you killed my father, prepare to die.
+// Hello, my name is Inigo Montoya; you killed my father, prepare to die.
+// Hello, my name is Inigo Montoya; you killed my father, prepare to die.
+// Hello, my name is Inigo Montoya; you killed my father, prepare to die.
+// All your codebase are belong to us
+//