1.0.41.27: ppc: Calling convention fixes for assembly-routines calling static-funs.
authorAlastair Bridgewater <lisphacker@users.sourceforge.net>
Sat, 7 Aug 2010 15:22:58 +0000 (15:22 +0000)
committerAlastair Bridgewater <lisphacker@users.sourceforge.net>
Sat, 7 Aug 2010 15:22:58 +0000 (15:22 +0000)
  * This is essentially the same as the static-fun VOP fixes from
earlier.

src/assembly/ppc/arith.lisp
src/compiler/ppc/vm.lisp
version.lisp-expr

index 5f99d5a..60175d0 100644 (file)
@@ -46,7 +46,9 @@
   (lisp-return lra lip :offset 2)
 
   DO-STATIC-FUN
-  (inst lwz lip null-tn (static-fun-offset 'two-arg-+) )
+  (inst addi lexenv-tn null-tn (static-fdefn-offset 'two-arg-+))
+  (loadw code-tn lexenv-tn fdefn-fun-slot other-pointer-lowtag)
+  (loadw lip lexenv-tn fdefn-raw-addr-slot other-pointer-lowtag)
   (inst li nargs (fixnumize 2))
   (inst mr ocfp cfp-tn)
   (inst mr cfp-tn csp-tn)
@@ -94,7 +96,9 @@
   (lisp-return lra lip :offset 2)
 
   DO-STATIC-FUN
-  (inst lwz lip null-tn (static-fun-offset 'two-arg--))
+  (inst addi lexenv-tn null-tn (static-fdefn-offset 'two-arg--))
+  (loadw code-tn lexenv-tn fdefn-fun-slot other-pointer-lowtag)
+  (loadw lip lexenv-tn fdefn-raw-addr-slot other-pointer-lowtag)
   (inst li nargs (fixnumize 2))
   (inst mr ocfp cfp-tn)
   (inst mr cfp-tn csp-tn)
   (lisp-return lra lip :offset 2)
 
   DO-STATIC-FUN
-  (inst lwz lip null-tn (static-fun-offset 'two-arg-*))
+  (inst addi lexenv-tn null-tn (static-fdefn-offset 'two-arg-*))
+  (loadw code-tn lexenv-tn fdefn-fun-slot other-pointer-lowtag)
+  (loadw lip lexenv-tn fdefn-raw-addr-slot other-pointer-lowtag)
   (inst li nargs (fixnumize 2))
   (inst mr ocfp cfp-tn)
   (inst mr cfp-tn csp-tn)
           (inst beq DO-COMPARE)
 
           DO-STATIC-FN
-          (inst lwz lip null-tn (static-fun-offset ',static-fn))
+          (inst addi lexenv-tn null-tn (static-fdefn-offset ',static-fn))
+          (loadw code-tn lexenv-tn fdefn-fun-slot other-pointer-lowtag)
+          (loadw lip lexenv-tn fdefn-raw-addr-slot other-pointer-lowtag)
           (inst li nargs (fixnumize 2))
           (inst mr ocfp cfp-tn)
           (inst mr cfp-tn csp-tn)
   (lisp-return lra lip :offset 2)
 
   DO-STATIC-FN
-  (inst lwz lip null-tn (static-fun-offset 'eql))
+  (inst addi lexenv-tn null-tn (static-fdefn-offset 'eql))
+  (loadw code-tn lexenv-tn fdefn-fun-slot other-pointer-lowtag)
+  (loadw lip lexenv-tn fdefn-raw-addr-slot other-pointer-lowtag)
   (inst li nargs (fixnumize 2))
   (inst mr ocfp cfp-tn)
   (inst mr cfp-tn csp-tn)
   (lisp-return lra lip :offset 2)
 
   DO-STATIC-FN
-  (inst lwz lip null-tn (static-fun-offset 'two-arg-=))
+  (inst addi lexenv-tn null-tn (static-fdefn-offset 'two-arg-=))
+  (loadw code-tn lexenv-tn fdefn-fun-slot other-pointer-lowtag)
+  (loadw lip lexenv-tn fdefn-raw-addr-slot other-pointer-lowtag)
   (inst li nargs (fixnumize 2))
   (inst mr ocfp cfp-tn)
   (inst mr cfp-tn csp-tn)
   (lisp-return lra lip :offset 2)
 
   DO-STATIC-FN
-  (inst lwz lip null-tn (static-fun-offset 'two-arg-/=))
+  (inst addi lexenv-tn null-tn (static-fdefn-offset 'two-arg-/=))
+  (loadw code-tn lexenv-tn fdefn-fun-slot other-pointer-lowtag)
+  (loadw lip lexenv-tn fdefn-raw-addr-slot other-pointer-lowtag)
   (inst li nargs (fixnumize 2))
   (inst mr ocfp cfp-tn)
   (inst j lip 0)
index e20d141..b8a9956 100644 (file)
   (defregtn code descriptor-reg)
   (defregtn alloc any-reg)
   (defregtn lra descriptor-reg)
+  (defregtn lexenv descriptor-reg)
 
   (defregtn nargs any-reg)
   (defregtn bsp any-reg)
index 4d44392..7c0e02e 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.41.26"
+"1.0.41.27"