Skip to content

Commit

Permalink
Unwind-to-frame-and-call-VOP doesn't need static symbols.
Browse files Browse the repository at this point in the history
  * The UNWIND procedure takes as parameters a target block and an
unknown-values start/count pair.  The old implementation was passing
the block, a zero count, and a garbage start.  Pass the function to
call as the start, instead of storing it as a static symbol value as
is done now or reserving an extra stack slot somewhere relative to
the unwind block.

  * Delete the static symbol formerly used for this.

  * This has been done for both x86 and x86-64.
  • Loading branch information
Alastair Bridgewater authored and Alastair Bridgewater committed Oct 22, 2011
1 parent 082940f commit c6989d6
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 20 deletions.
14 changes: 7 additions & 7 deletions src/compiler/x86-64/nlx.lisp
Expand Up @@ -239,17 +239,17 @@
(define-vop (unwind-to-frame-and-call)
(:args (ofp :scs (descriptor-reg))
(uwp :scs (descriptor-reg))
(function :scs (descriptor-reg)))
(function :scs (descriptor-reg) :to :load :target saved-function))
(:arg-types system-area-pointer system-area-pointer t)
(:temporary (:sc sap-reg) temp)
(:temporary (:sc descriptor-reg :offset rbx-offset) saved-function)
(:temporary (:sc unsigned-reg :offset rax-offset) block)
(:generator 22
;; Store the function into a non-stack location, since we'll be
;; unwinding the stack and destroying register contents before we
;; use it.
(store-tl-symbol-value function
*unwind-to-frame-function*
temp)
;; use it. It turns out that RBX is preserved as part of the
;; normal multiple-value handling of an unwind, so use that.
(move saved-function function)

;; Allocate space for magic UWP block.
(inst sub rsp-tn (* unwind-block-size n-word-bytes))
Expand All @@ -270,8 +270,8 @@
(inst jmp temp-reg-tn)
ENTRY-LABEL

;; Load function from symbol
(load-tl-symbol-value block *unwind-to-frame-function*)
;; Move our saved function to where we want it now.
(move block saved-function)

;; No parameters
(zeroize rcx-tn)
Expand Down
3 changes: 0 additions & 3 deletions src/compiler/x86-64/parms.lisp
Expand Up @@ -177,9 +177,6 @@
;; For GC-AND-SAVE
*restart-lisp-function*

;; For the UNWIND-TO-FRAME-AND-CALL VOP
*unwind-to-frame-function*

;; Needed for callbacks to work across saving cores. see
;; ALIEN-CALLBACK-ASSEMBLER-WRAPPER in c-call.lisp for gory
;; details.
Expand Down
14 changes: 7 additions & 7 deletions src/compiler/x86/nlx.lisp
Expand Up @@ -260,17 +260,17 @@
(define-vop (unwind-to-frame-and-call)
(:args (ofp :scs (descriptor-reg))
(uwp :scs (descriptor-reg))
(function :scs (descriptor-reg)))
(function :scs (descriptor-reg) :to :load :target saved-function))
(:arg-types system-area-pointer system-area-pointer t)
(:temporary (:sc sap-reg) temp)
(:temporary (:sc descriptor-reg :offset ebx-offset) saved-function)
(:temporary (:sc unsigned-reg :offset eax-offset) block)
(:generator 22
;; Store the function into a non-stack location, since we'll be
;; unwinding the stack and destroying register contents before we
;; use it.
(store-tl-symbol-value function
*unwind-to-frame-function*
temp)
;; use it. It turns out that EBX is preserved as part of the
;; normal multiple-value handling of an unwind, so use that.
(move saved-function function)

;; Allocate space for magic UWP block.
(inst sub esp-tn (* unwind-block-size n-word-bytes))
Expand All @@ -289,8 +289,8 @@
(inst jmp (make-fixup 'unwind :assembly-routine))
ENTRY-LABEL

;; Load function from symbol
(load-tl-symbol-value block *unwind-to-frame-function*)
;; Move our saved function to where we want it now.
(move block saved-function)

;; No parameters
(inst xor ecx-tn ecx-tn)
Expand Down
3 changes: 0 additions & 3 deletions src/compiler/x86/parms.lisp
Expand Up @@ -352,9 +352,6 @@
;; For GC-AND-SAVE
*restart-lisp-function*

;; For the UNWIND-TO-FRAME-AND-CALL VOP
*unwind-to-frame-function*

;; Needed for callbacks to work across saving cores. see
;; ALIEN-CALLBACK-ASSEMBLER-WRAPPER in c-call.lisp for gory
;; details.
Expand Down

0 comments on commit c6989d6

Please sign in to comment.