From 5285ddc694a3e1eb0aaf00ad347a73643ad3772e Mon Sep 17 00:00:00 2001 From: Alastair Bridgewater Date: Fri, 30 Dec 2016 13:50:33 -0500 Subject: [PATCH] ppc: Prevent XEP-ALLOCATE-FRAME from trashing NARGS * Yet another entry in the saga of "XEP-ALLOCATE-FRAME vs. the NARGS". This has not been linked to any known failure on PPC, but was found by desk-checking all of the backends for this bug (it'd been found the hard way on three backends already, after all). --- src/compiler/ppc/call.lisp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/compiler/ppc/call.lisp b/src/compiler/ppc/call.lisp index 65dcf90b7..40473632e 100644 --- a/src/compiler/ppc/call.lisp +++ b/src/compiler/ppc/call.lisp @@ -101,7 +101,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 (:scs (non-descriptor-reg) :offset nl6-offset) temp) (:generator 1 ;; Make sure the function is aligned, and drop a label pointing to this ;; function header. -- 2.11.4.GIT