X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fx86%2Falloc.lisp;h=bcf3483a7b3072f3b3b89dc3dc964b469ca8062c;hb=b63c4fb9b98fa8188e17ba926e150ba417a74635;hp=1278d10e5b19253adf70521eaf927ce32040270e;hpb=8902b8b6bd2e9285749dd39d313b33b6c69c5213;p=sbcl.git diff --git a/src/compiler/x86/alloc.lisp b/src/compiler/x86/alloc.lisp index 1278d10..bcf3483 100644 --- a/src/compiler/x86/alloc.lisp +++ b/src/compiler/x86/alloc.lisp @@ -115,18 +115,19 @@ (define-vop (make-closure) (:args (function :to :save :scs (descriptor-reg))) - (:info length) + (:info length stack-allocate-p) (:temporary (:sc any-reg) temp) (:results (result :scs (descriptor-reg))) (:node-var node) (:generator 10 - (pseudo-atomic - (let ((size (+ length closure-info-offset))) - (allocation result (pad-data-block size) node) - (inst lea result - (make-ea :byte :base result :disp fun-pointer-lowtag)) - (storew (logior (ash (1- size) n-widetag-bits) closure-header-widetag) - result 0 fun-pointer-lowtag)) + (maybe-pseudo-atomic stack-allocate-p + (let ((size (+ length closure-info-offset))) + (allocation result (pad-data-block size) node + stack-allocate-p) + (inst lea result + (make-ea :byte :base result :disp fun-pointer-lowtag)) + (storew (logior (ash (1- size) n-widetag-bits) closure-header-widetag) + result 0 fun-pointer-lowtag)) (loadw temp function closure-fun-slot fun-pointer-lowtag) (storew temp result closure-fun-slot fun-pointer-lowtag))))