summaryrefslogtreecommitdiff
path: root/test_arm.c
diff options
context:
space:
mode:
Diffstat (limited to 'test_arm.c')
-rw-r--r--test_arm.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/test_arm.c b/test_arm.c
new file mode 100644
index 0000000..48f7971
--- /dev/null
+++ b/test_arm.c
@@ -0,0 +1,29 @@
+#include <stdio.h>
+#include "gen_arm.h"
+
+typedef int32_t (*fib_fun)(int32_t);
+
+int main(int arc, char **argv)
+{
+ code_info code;
+ init_code_info(&code);
+ uint32_t *fib = code.cur;
+ subi(&code, r0, r0, 2, SET_COND);
+ movi_cc(&code, r0, 1, NO_COND, CC_LT);
+ bx_cc(&code, lr, CC_LT);
+ pushm(&code, LR | R4);
+ mov(&code, r4, r0, NO_COND);
+ bl(&code, fib);
+ mov(&code, r1, r0, NO_COND);
+ addi(&code, r0, r4, 1, NO_COND);
+ mov(&code, r4, r1, NO_COND);
+ bl(&code, fib);
+ add(&code, r0, r4, r0, NO_COND);
+ popm(&code, LR | R4);
+ bx(&code, LR);
+
+ fib_fun fibc = (fib_fun)fib;
+ printf("fib(10): %d\n", fibc(10));
+
+ return 0;
+}