From: stassats <sta...@us...> - 2014-05-18 02:21:00
|
The branch "master" has been updated in SBCL: via d76f4c9653b1441279f1f34b9232571676d6632b (commit) from 8dc4c5d58565bec05271730eaf50d1704281c8d3 (commit) - Log ----------------------------------------------------------------- commit d76f4c9653b1441279f1f34b9232571676d6632b Author: Stas Boukarev <sta...@gm...> Date: Sun May 18 05:46:48 2014 +0400 More immediate encoding fixes on ARM. This time dealing with large stack frames. --- src/compiler/arm/call.lisp | 22 +++++++++++++--------- src/compiler/arm/nlx.lisp | 3 ++- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/compiler/arm/call.lisp b/src/compiler/arm/call.lisp index c2ce6ae..bf8b462 100644 --- a/src/compiler/arm/call.lisp +++ b/src/compiler/arm/call.lisp @@ -162,8 +162,9 @@ (inst compute-code code-tn lip start-lab temp) ;; Build our stack frames. (unless copy-more-arg-follows - (inst add temp cfp-tn - (* n-word-bytes (sb-allocated-size 'control-stack))) + (composite-immediate-instruction + add temp cfp-tn + (* n-word-bytes (sb-allocated-size 'control-stack))) (store-csp temp) (let ((nfp-tn (current-nfp-tn vop))) (when nfp-tn @@ -179,8 +180,10 @@ (:generator 2 (trace-table-entry trace-table-fun-prologue) (load-csp res) - (inst add nfp res (* (max 1 (sb-allocated-size 'control-stack)) - n-word-bytes)) + (composite-immediate-instruction + add nfp res + (* (max 1 (sb-allocated-size 'control-stack)) + n-word-bytes)) (store-csp nfp) (when (ir2-physenv-number-stack-p callee) (let* ((nbytes (bytes-needed-for-non-descriptor-stack-frame))) @@ -202,7 +205,8 @@ (load-csp res) ;; Our minimum caller frame size is two words, one for the frame ;; link and one for the LRA. - (inst add csp-temp res (* (max 2 nargs) n-word-bytes)) + (composite-immediate-instruction + add csp-temp res (* (max 2 nargs) n-word-bytes)) (store-csp csp-temp) (storew cfp-tn res ocfp-save-offset))) @@ -416,8 +420,8 @@ (assemble () ;; Compute the end of the fixed stack frame (start of the MORE ;; arg area) into RESULT. - (inst add result cfp-tn - (* n-word-bytes (sb-allocated-size 'control-stack))) + (composite-immediate-instruction + add result cfp-tn (* n-word-bytes (sb-allocated-size 'control-stack))) ;; Compute the end of the MORE arg area (and our overall frame ;; allocation) into the stack pointer. (cond ((zerop fixed) @@ -482,8 +486,8 @@ ;; number stack frame. (let ((nfp-tn (current-nfp-tn vop))) (when nfp-tn - (inst sub nfp-tn nsp-tn - (bytes-needed-for-non-descriptor-stack-frame)) + (composite-immediate-instruction + sub nfp-tn nsp-tn (bytes-needed-for-non-descriptor-stack-frame)) (move nsp-tn nfp-tn))))))) ;;; More args are stored consecutively on the stack, starting diff --git a/src/compiler/arm/nlx.lisp b/src/compiler/arm/nlx.lisp index 7c0fec4..f46fa75 100644 --- a/src/compiler/arm/nlx.lisp +++ b/src/compiler/arm/nlx.lisp @@ -98,7 +98,8 @@ (:temporary (:scs (descriptor-reg) :target block :to (:result 0)) result) (:temporary (:scs (interior-reg)) lip) (:generator 44 - (inst add result cfp-tn (* (tn-offset tn) n-word-bytes)) + (composite-immediate-instruction + add result cfp-tn (* (tn-offset tn) n-word-bytes)) (load-symbol-value temp *current-unwind-protect-block*) (storew temp result catch-block-current-uwp-slot) (storew cfp-tn result catch-block-current-cont-slot) ----------------------------------------------------------------------- hooks/post-receive -- SBCL |