aboutsummaryrefslogtreecommitdiff
path: root/deps/lightning/check/tramp.tst
diff options
context:
space:
mode:
authorTwinaphex2020-02-08 16:24:22 +0100
committerGitHub2020-02-08 16:24:22 +0100
commit0adc619b5a5705d16cc6caea64951776ababbb96 (patch)
treefbae9b1d18d04d8e7908aa1c3446782ebf6e8785 /deps/lightning/check/tramp.tst
parent0204c39a68a1fd4bf667aa8ece5a769f2983b7d0 (diff)
parent6f1edc3c7fd1f7f58155107d0c99d0ac7d22443b (diff)
downloadpcsx_rearmed-0adc619b5a5705d16cc6caea64951776ababbb96.tar.gz
pcsx_rearmed-0adc619b5a5705d16cc6caea64951776ababbb96.tar.bz2
pcsx_rearmed-0adc619b5a5705d16cc6caea64951776ababbb96.zip
Merge pull request #377 from pcercuei/libretro
Lightrec dynarec
Diffstat (limited to 'deps/lightning/check/tramp.tst')
-rw-r--r--deps/lightning/check/tramp.tst111
1 files changed, 111 insertions, 0 deletions
diff --git a/deps/lightning/check/tramp.tst b/deps/lightning/check/tramp.tst
new file mode 100644
index 0000000..faf63d2
--- /dev/null
+++ b/deps/lightning/check/tramp.tst
@@ -0,0 +1,111 @@
+#if __WORDSIZE == 32
+# define SIZE 4
+#else
+# define SIZE 8
+#endif
+.data 8192
+fmt:
+.c "xfibs(%d) = %d\n"
+/* Simulate a language specific stack */
+.align SIZE
+top:
+/* Top, or base of the stack */
+.size SIZE
+stk:
+.size 8160
+
+.code
+ jmpi main
+
+/* Usually a trampoline is created before the code that uses it, but
+ * for testing purposes it is not required.
+ * In this test case, it would mean "main" would be converted in a
+ * different jit_state_t to native code, before xfibs was know.
+ */
+ name xfibs
+xfibs:
+ /* return address is in %r0 */
+ /* argument and return value in %v0 */
+ prolog
+ tramp 64
+ blti_u out %v0 2
+ subi %v1 %v0 1 /* V1 = N-1 */
+ subi %v2 %v0 2 /* V1 = N-2 */
+
+ /* save return address */
+ ldi %r1 top
+ stxi $(SIZE * 0) %r1 %r0
+ /* save operands */
+ stxi $(SIZE * 1) %r1 %v0
+ stxi $(SIZE * 2) %r1 %v1
+ stxi $(SIZE * 3) %r1 %v2
+ /* adjust "language" stack */
+ addi %r1 %r1 $(SIZE * 4)
+ sti top %r1
+
+ /* return address */
+ movi %r0 ret1
+ /* argument */
+ movr %v0 %v1
+ /* indirect goto */
+ jmpi xfibs
+ret1:
+ movr %v1 %v0 /* V1 = rfibs(N-1) */
+ /* save V1 */
+ ldi %r1 top
+ stxi $(-SIZE * 2) %r1 %v1
+
+ /* reload V2 */
+ ldxi %v2 %r1 $(-SIZE * 1)
+
+ /* return address */
+ movi %r0 ret2
+ /* argument */
+ movr %v0 %v2
+ /* indirect goto */
+ jmpi xfibs
+ret2:
+ movr %v2 %v0 /* V2 = rfibs(N-2) */
+
+ /* reload return address */
+ ldi %r1 top
+ subi %r1 %r1 $(SIZE * 4)
+ ldxi %r0 %r1 $(SIZE * 0)
+ /* reload operands */
+ ldxi %v0 %r1 $(SIZE * 1)
+ ldxi %v1 %r1 $(SIZE * 2)
+ /* V2 already loaded */
+ /* update "language" stack */
+ sti top %r1
+
+ addi %v1 %v1 1
+ addr %v0 %v1 %v2
+ jmpr %r0
+out:
+ movi %v0 1
+ jmpr %r0
+ epilog
+
+ name main
+main:
+ prolog
+ frame 64
+
+ /* Initialize language stack */
+ movi %r0 stk
+ sti top %r0
+
+ /* return address */
+ movi %r0 done
+ /* argument */
+ movi %v0 32
+ jmpi xfibs
+done:
+ prepare
+ pushargi fmt
+ ellipsis
+ pushargi 32
+ pushargr %v0
+ finishi @printf
+ ret
+ epilog