merge faster check for current attachment
original commit: 89c0ee7e5c9bb588c17815ab3013c10168af035f
This commit is contained in:
parent
6b40582dac
commit
10b01217f2
|
@ -11614,15 +11614,24 @@
|
||||||
(set! ,lvalue ,(%mref ,ats ,(constant pair-car-disp)))))]
|
(set! ,lvalue ,(%mref ,ats ,(constant pair-car-disp)))))]
|
||||||
[(set! ,[lvalue] (attachment-get ,[t]))
|
[(set! ,[lvalue] (attachment-get ,[t]))
|
||||||
;; Default expression => need to check for reified continuation
|
;; Default expression => need to check for reified continuation
|
||||||
;; and attachment beyond it. For now, we always reify the continuation
|
;; and attachment beyond it
|
||||||
;; to simplify the check
|
(let ([uf (make-tmp 'uf)]
|
||||||
(let ([ats (make-tmp 'ats)])
|
[sl (make-tmp 'sl)]
|
||||||
|
[ats (make-tmp 'ats)])
|
||||||
(%seq
|
(%seq
|
||||||
(set! ,%td (inline ,(intrinsic-info-asmlib reify-cc #f) ,%asmlibcall))
|
(set! ,uf (literal ,(make-info-literal #f 'library-code
|
||||||
(set! ,ats ,(%tc-ref attachments))
|
(lookup-libspec dounderflow)
|
||||||
(if ,(%inline eq? ,(%mref ,%td ,(constant continuation-attachments-disp)) ,ats)
|
(fx+ (constant code-data-disp) (constant size-rp-header)))))
|
||||||
(set! ,lvalue ,t)
|
(if ,(%inline eq? ,%ref-ret ,uf)
|
||||||
(set! ,lvalue ,(%mref ,ats ,(constant pair-car-disp))))))]
|
;; Reified, so maybe an attachment
|
||||||
|
,(%seq
|
||||||
|
(set! ,sl ,(%tc-ref stack-link))
|
||||||
|
(set! ,ats ,(%tc-ref attachments))
|
||||||
|
(if ,(%inline eq? ,(%mref ,sl ,(constant continuation-attachments-disp)) ,ats)
|
||||||
|
(set! ,lvalue ,t)
|
||||||
|
(set! ,lvalue ,(%mref ,ats ,(constant pair-car-disp)))))
|
||||||
|
;; Not reified, so no attachment
|
||||||
|
(set! ,lvalue ,t))))]
|
||||||
[(attachment-set ,aop)
|
[(attachment-set ,aop)
|
||||||
(case aop
|
(case aop
|
||||||
[(pop)
|
[(pop)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user