From 4a71579b757d3a2eb6902c84391f429838ad4912 Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Thu, 30 Jan 2020 12:33:44 -0300 Subject: git subrepo clone https://git.savannah.gnu.org/git/lightning.git deps/lightning subrepo: subdir: "deps/lightning" merged: "b0b8eb5" upstream: origin: "https://git.savannah.gnu.org/git/lightning.git" branch: "master" commit: "b0b8eb5" git-subrepo: version: "0.4.1" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "a04d8c2" --- deps/lightning/check/tramp.tst | 111 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 deps/lightning/check/tramp.tst (limited to 'deps/lightning/check/tramp.tst') 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 -- cgit v1.2.3