X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fsparc-assem.S;h=c856cc9dca3b8d0b74e2777cd5ffb4d0774c66ce;hb=b9e94e326f79ab01e56cb437e424ce5ea489471f;hp=c766729a74be938b949b0ace28ddc850b8289b1a;hpb=cd3ba8630e52f6131f7bc9931bc2fe77c77fe1a9;p=sbcl.git diff --git a/src/runtime/sparc-assem.S b/src/runtime/sparc-assem.S index c766729..c856cc9 100644 --- a/src/runtime/sparc-assem.S +++ b/src/runtime/sparc-assem.S @@ -1,12 +1,16 @@ #define _ASM -#define FUNCDEF(x) .type x,@function +#include "sparc-funcdef.h" #define LANGUAGE_ASSEMBLY #include "lispregs.h" #include "globals.h" #include "sbcl.h" - +#include "genesis/closure.h" +#include "genesis/funcallable-instance.h" +#include "genesis/fdefn.h" +#include "genesis/static-symbols.h" +#include "genesis/simple-fun.h" #define load(sym, reg) \ sethi %hi(sym), reg; ld [reg+%lo(sym)], reg @@ -197,6 +201,8 @@ call_into_c: ret nop +/* Lisp calling convention. notice the first .byte line. + */ .global undefined_tramp FUNCDEF(undefined_tramp) .align 8 @@ -219,6 +225,8 @@ undefined_tramp = . + 1 jmp reg_CODE+SIMPLE_FUN_CODE_OFFSET nop +/* Lisp calling convention. Notice the first .byte line. + */ .global closure_tramp FUNCDEF(closure_tramp) .align 8 @@ -235,7 +243,21 @@ closure_tramp = . + 1 jmp reg_CODE+SIMPLE_FUN_CODE_OFFSET nop - + .global funcallable_instance_tramp + FUNCDEF(funcallable_instance_tramp) + .align 8 + .word SIMPLE_FUN_HEADER_WIDETAG +funcallable_instance_tramp = . + 1 + .word funcallable_instance_tramp + .word NIL + .word NIL + .word NIL + .word NIL + + ld [reg_LEXENV+FUNCALLABLE_INSTANCE_FUNCTION_OFFSET], reg_LEXENV + ld [reg_LEXENV+CLOSURE_FUN_OFFSET], reg_CODE + jmp reg_CODE+SIMPLE_FUN_CODE_OFFSET + nop /* * Function-end breakpoint magic. */ @@ -284,4 +306,3 @@ save_context: ta ST_FLUSH_WINDOWS ! flush register windows retl ! return from leaf routine nop -