diff options
author | jmc <jmc@pkgsrc.org> | 2002-03-14 07:44:21 +0000 |
---|---|---|
committer | jmc <jmc@pkgsrc.org> | 2002-03-14 07:44:21 +0000 |
commit | 713cf9a1c6b5e4e2d4b06724507e7b2dec24293e (patch) | |
tree | 63e057b891075c39a48955327a50faa07c936427 /lang/clisp/files | |
parent | a21faa53fc30fad739f6fc70ef621346e7d25b6d (diff) | |
download | pkgsrc-713cf9a1c6b5e4e2d4b06724507e7b2dec24293e.tar.gz |
Port to powerpc:
Provide a trampoline implementation that doesn't presume r11 is free (it's not
in dynamically linked programs and the ELF ABI says as much but somehow linux
managed to avoid this it seems). Use r13 for the time being since while gcc
will allocate it, it's the last "local" one allocated so none of the clisp
code hits that (nothing needed 17+ local registers in use ever). Update the
vacall implementation to match the trampoline calls but otherwise for
any assembly use the linux code.
Make these changes specific to netbsd, update the test cases so everything
works.
This now passes all the clisp tests when done/installed.
Diffstat (limited to 'lang/clisp/files')
-rw-r--r-- | lang/clisp/files/tramp-rs6000-netbsd.o | bin | 0 -> 487 bytes | |||
-rw-r--r-- | lang/clisp/files/tramp-rs6000-netbsd.s | 29 | ||||
-rw-r--r-- | lang/clisp/files/vacall-rs6000-netbsd.s | 159 |
3 files changed, 188 insertions, 0 deletions
diff --git a/lang/clisp/files/tramp-rs6000-netbsd.o b/lang/clisp/files/tramp-rs6000-netbsd.o Binary files differnew file mode 100644 index 00000000000..ef578f6b491 --- /dev/null +++ b/lang/clisp/files/tramp-rs6000-netbsd.o diff --git a/lang/clisp/files/tramp-rs6000-netbsd.s b/lang/clisp/files/tramp-rs6000-netbsd.s new file mode 100644 index 00000000000..758fe31f916 --- /dev/null +++ b/lang/clisp/files/tramp-rs6000-netbsd.s @@ -0,0 +1,29 @@ +/* Trampoline for rs6000 CPU with SysV.4 ABI */ + +/* + * Copyright 1995-1999 Bruno Haible, <haible@clisp.cons.org> + * + * This is free software distributed under the GNU General Public Licence + * described in the file COPYING. Contact the author if you don't have this + * or can't live with it. There is ABSOLUTELY NO WARRANTY, explicit or implied, + * on this software. + */ + +/* Available registers: r0, r12, r11, r10, r9, r8, r7, r6, r5, r4, r3. */ +/* However, r0 is special in that it cannot be used as a base register. */ +/* And r3...r10 should not be clobbered because they contain the first 8 + * integer arguments to the function being called. + * Use r13 as it's the last possible register allocated with gcc and r11/12 + * get used during dynamic linkage. + */ + + .globl tramp +tramp: +/* Move <data> into register r13 */ + lis 13,0x7355 + ori 13,13,0x4711 +/* Get <function> */ + lis 0,0xbabe + ori 0,0,0xbec0 + mtctr 0 + bctr diff --git a/lang/clisp/files/vacall-rs6000-netbsd.s b/lang/clisp/files/vacall-rs6000-netbsd.s new file mode 100644 index 00000000000..3486025a314 --- /dev/null +++ b/lang/clisp/files/vacall-rs6000-netbsd.s @@ -0,0 +1,159 @@ + .file "vacall-rs6000.c" +gcc2_compiled.: + .section ".text" + .align 2 + .globl __vacall_r + .type __vacall_r,@function +__vacall_r: + stwu 1,-208(1) + mflr 0 + stw 0,212(1) + stw 3,152(1) + stw 4,156(1) + stw 5,160(1) + stw 6,164(1) + stw 7,168(1) + stw 8,172(1) + stw 9,176(1) + stw 10,180(1) + stfd 1,48(1) + stfd 2,56(1) + stfd 3,64(1) + stfd 4,72(1) + stfd 5,80(1) + stfd 6,88(1) + stfd 7,96(1) + stfd 8,104(1) + li 9,0 + stw 9,8(1) + addi 0,1,152 + stw 0,12(1) + addi 0,1,216 + stw 0,184(1) + stw 9,188(1) + stw 9,16(1) + stw 9,20(1) + addi 0,1,48 + stw 0,40(1) + lwz 9,0(13) + lwz 3,4(13) + addi 4,1,8 + mtlr 9 + blrl + lwz 0,20(1) + cmpwi 0,0,0 + bc 12,2,.L4 + cmpwi 0,0,1 + bc 12,2,.L42 + lwz 0,20(1) + cmpwi 0,0,2 + bc 4,2,.L7 + lbz 0,32(1) + extsb 3,0 + b .L4 +.L7: + lwz 0,20(1) + cmpwi 0,0,3 + bc 4,2,.L9 +.L42: + lbz 3,32(1) + b .L4 +.L9: + lwz 0,20(1) + cmpwi 0,0,4 + bc 4,2,.L11 + lha 3,32(1) + b .L4 +.L11: + lwz 0,20(1) + cmpwi 0,0,5 + bc 4,2,.L13 + lhz 3,32(1) + b .L4 +.L13: + lwz 0,20(1) + cmpwi 0,0,6 + bc 12,2,.L43 + lwz 0,20(1) + cmpwi 0,0,7 + bc 12,2,.L43 + lwz 0,20(1) + cmpwi 0,0,8 + bc 12,2,.L43 + lwz 0,20(1) + cmpwi 0,0,9 + bc 12,2,.L43 + lwz 9,20(1) + addi 9,9,-10 + cmplwi 0,9,1 + bc 12,1,.L23 + lwz 3,32(1) + lwz 4,36(1) + b .L4 +.L23: + lwz 0,20(1) + cmpwi 0,0,12 + bc 4,2,.L25 + lfs 1,32(1) + b .L4 +.L25: + lwz 0,20(1) + cmpwi 0,0,13 + bc 4,2,.L27 + lfd 1,32(1) + b .L4 +.L27: + lwz 0,20(1) + cmpwi 0,0,14 + bc 4,2,.L29 +.L43: + lwz 3,32(1) + b .L4 +.L29: + lwz 0,20(1) + cmpwi 0,0,15 + bc 4,2,.L4 + lwz 0,8(1) + andi. 9,0,1 + bc 12,2,.L32 + lwz 3,16(1) + b .L4 +.L32: + lwz 0,8(1) + andi. 9,0,1024 + bc 12,2,.L4 + lwz 0,24(1) + cmpwi 0,0,1 + bc 4,2,.L35 + lwz 9,16(1) + lbz 3,0(9) + b .L4 +.L35: + lwz 0,24(1) + cmpwi 0,0,2 + bc 4,2,.L37 + lwz 9,16(1) + lhz 3,0(9) + b .L4 +.L37: + lwz 0,24(1) + cmpwi 0,0,4 + bc 4,2,.L39 + lwz 9,16(1) + lwz 3,0(9) + b .L4 +.L39: + lwz 0,24(1) + cmpwi 0,0,8 + bc 4,2,.L4 + lwz 9,16(1) + lwz 3,0(9) + lwz 4,4(9) +.L4: + lwz 0,212(1) + mtlr 0 + la 1,208(1) + blr +.Lfe1: + .size __vacall_r,.Lfe1-__vacall_r + .ident "GCC: (GNU) 2.95.2 19991024 (release/franzo)" |