From: Alastair B. <lis...@us...> - 2015-11-30 21:17:45
|
The branch "master" has been updated in SBCL: via 0cb0cd9687074e4da4900d3e03a7a0a122625b43 (commit) from e500bac63d0a392b226fc2b6f76f2c5c5f780d34 (commit) - Log ----------------------------------------------------------------- commit 0cb0cd9687074e4da4900d3e03a7a0a122625b43 Author: Alastair Bridgewater <ala...@gm...> Date: Sun Nov 29 17:07:58 2015 -0500 hppa: Prevent XEP-ALLOCATE-FRAME from trashing NARGS * I don't know why this hadn't been found before, given that it seems to be possible on any platform where NARGS is a NON-DESCRIPTOR-REG and the COMPUTE-CODE-FROM-whatever instruction in XEP-ALLOCATE-FRAME needs a temporary register, but whatever. * And, actually, I have little else to say beyond the commentary in the patch itself. --- src/compiler/hppa/call.lisp | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-) diff --git a/src/compiler/hppa/call.lisp b/src/compiler/hppa/call.lisp index 7fdb9d8..87b60a3 100644 --- a/src/compiler/hppa/call.lisp +++ b/src/compiler/hppa/call.lisp @@ -104,7 +104,12 @@ (define-vop (xep-allocate-frame) (:info start-lab) - (:temporary (:scs (non-descriptor-reg)) temp) + ;; KLUDGE: Specify an explicit offset for TEMP because NARGS is a + ;; non-descriptor-reg, but is also live, yet the register allocator + ;; does not know that it is, and if TEMP collides NARGS and + ;; COMPUTE-CODE-FROM-LIP needs TEMP then we run into trouble very + ;; quickly. + (:temporary (:sc non-descriptor-reg :offset nl5-offset) temp) (:generator 1 ;; Make sure the function is aligned, and drop a label pointing to this ;; function header. ----------------------------------------------------------------------- hooks/post-receive -- SBCL |