X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Falpha-assem.S;h=1a8928b1a722797c1281cb539897f1445964897a;hb=dd54f9e004a0a83d1328e94648f48dcc27e0be5b;hp=c23e5467a56704e666b979524946b0cd4c398334;hpb=1e4629723d19f96d752235ffde34fe58431431ae;p=sbcl.git diff --git a/src/runtime/alpha-assem.S b/src/runtime/alpha-assem.S index c23e546..1a8928b 100644 --- a/src/runtime/alpha-assem.S +++ b/src/runtime/alpha-assem.S @@ -18,6 +18,12 @@ #endif #include "sbcl.h" #include "lispregs.h" +#include "genesis/fdefn.h" +#include "genesis/closure.h" +#include "genesis/funcallable-instance.h" +#include "genesis/simple-fun.h" +#include "genesis/static-symbols.h" + /* #include "globals.h" */ /* @@ -89,7 +95,7 @@ call_into_lisp: /* Indirect the closure */ ldl reg_CODE, CLOSURE_FUN_OFFSET(reg_LEXENV) - addl reg_CODE,6*4-FUN_POINTER_LOWTAG, reg_LIP + addl reg_CODE, SIMPLE_FUN_CODE_OFFSET, reg_LIP /* And into lisp we go. */ jsr reg_ZERO,(reg_LIP) @@ -252,9 +258,7 @@ start_of_tramps: */ .text .globl start_of_tramps - .globl closure_tramp .globl undefined_tramp - .globl closure_tramp_offset .globl undefined_tramp_offset .ent undefined_tramp_offset undefined_tramp_offset: @@ -279,9 +283,10 @@ undefined_tramp= call_into_lisp_LRA_page+0x140 /* The closure trampoline. */ .text .globl closure_tramp + .globl closure_tramp_offset .ent closure_tramp_offset -closure_tramp= call_into_lisp_LRA_page+0x150 closure_tramp_offset: +closure_tramp= call_into_lisp_LRA_page+0x150 ldl reg_LEXENV, FDEFN_FUN_OFFSET(reg_FDEFN) ldl reg_L0, CLOSURE_FUN_OFFSET(reg_LEXENV) addl reg_L0, SIMPLE_FUN_CODE_OFFSET, reg_LIP @@ -292,17 +297,40 @@ closure_tramp_offset: .globl end_of_tramps end_of_tramps: + .text + .globl funcallable_instance_tramp + .align 2 + .long SIMPLE_FUN_HEADER_WIDETAG +funcallable_instance_tramp = . + 1 + .long funcallable_instance_tramp + .long NIL + .long NIL + .long NIL + .long NIL + .long NIL + + ldl reg_LEXENV, FUNCALLABLE_INSTANCE_FUNCTION_OFFSET(reg_LEXENV) + /* I think we don't actually need to use reg_CODE here, because + $CODE is computed from $LIP in the function itself */ + ldl reg_CODE, CLOSURE_FUN_OFFSET(reg_LEXENV) + addl reg_CODE, SIMPLE_FUN_CODE_OFFSET, reg_LIP + jmp reg_ZERO, (reg_LIP) /* * fun-end breakpoint magic. */ +/* + * For an explanation of the magic involved in function-end + * breakpoints, see the implementation in ppc-assem.S. + */ + .text .align 2 .set noreorder .globl fun_end_breakpoint_guts fun_end_breakpoint_guts: - .long RETURN_PC_HEADER_WIDETAG + .long RETURN_PC_HEADER_WIDETAG + 0x800 br zero, fun_end_breakpoint_trap nop mov reg_CSP, reg_OCFP