0.9.17.8:
[sbcl.git] / src / runtime / sparc-assem.S
index c766729..c856cc9 100644 (file)
@@ -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 
-