From: Alastair Bridgewater Date: Sat, 7 Aug 2010 15:22:58 +0000 (+0000) Subject: 1.0.41.27: ppc: Calling convention fixes for assembly-routines calling static-funs. X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=1bab7f87e5800ae7d0eed4e301de15125e72bd6f;p=sbcl.git 1.0.41.27: ppc: Calling convention fixes for assembly-routines calling static-funs. * This is essentially the same as the static-fun VOP fixes from earlier. --- diff --git a/src/assembly/ppc/arith.lisp b/src/assembly/ppc/arith.lisp index 5f99d5a..60175d0 100644 --- a/src/assembly/ppc/arith.lisp +++ b/src/assembly/ppc/arith.lisp @@ -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) @@ -171,7 +175,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) @@ -303,7 +309,9 @@ (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) @@ -348,7 +356,9 @@ (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) @@ -384,7 +394,9 @@ (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) @@ -419,7 +431,9 @@ (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) diff --git a/src/compiler/ppc/vm.lisp b/src/compiler/ppc/vm.lisp index e20d141..b8a9956 100644 --- a/src/compiler/ppc/vm.lisp +++ b/src/compiler/ppc/vm.lisp @@ -262,6 +262,7 @@ (defregtn code descriptor-reg) (defregtn alloc any-reg) (defregtn lra descriptor-reg) + (defregtn lexenv descriptor-reg) (defregtn nargs any-reg) (defregtn bsp any-reg) diff --git a/version.lisp-expr b/version.lisp-expr index 4d44392..7c0e02e 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -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"