(inst lea edi (make-ea :dword :base ebx :disp (- n-word-bytes)))
(inst rep)
(inst movs :dword)
-
- ;; solaris requires DF being zero.
- #!+sunos (inst cld)
+ (inst cld)
;; Restore the count.
(inst mov ecx edx)
(inst sub esi (fixnumize 1))
(inst rep)
(inst movs :dword)
-
- ;; solaris requires DF being zero.
- #!+sunos (inst cld)
+ (inst cld)
;; Load the register arguments carefully.
(loadw edx ebp-tn -1)
(inst push ebx)
;; And jump into the function.
- (inst jmp
- (make-ea :byte :base eax
- :disp (- (* closure-fun-slot n-word-bytes)
- fun-pointer-lowtag)))
+ (inst jmp (make-ea-for-object-slot eax closure-fun-slot fun-pointer-lowtag))
;; All the arguments fit in registers, so load them.
REGISTER-ARGS
(pushw ebp-tn -2)
;; And away we go.
- (inst jmp (make-ea :byte :base eax
- :disp (- (* closure-fun-slot n-word-bytes)
- fun-pointer-lowtag))))
+ (inst jmp (make-ea-for-object-slot eax closure-fun-slot fun-pointer-lowtag)))
\f
(define-assembly-routine (throw
(:return-style :none))
LOOP
- (let ((error (generate-error-code nil unseen-throw-tag-error target)))
+ (let ((error (generate-error-code nil 'unseen-throw-tag-error target)))
(inst or catch catch) ; check for NULL pointer
(inst jmp :z error))
(:temp uwp unsigned-reg esi-offset))
(declare (ignore start count))
- (let ((error (generate-error-code nil invalid-unwind-error)))
+ (let ((error (generate-error-code nil 'invalid-unwind-error)))
(inst or block block) ; check for NULL pointer
(inst jmp :z error))
;; be saved on the stack: the block in edx-tn, start in ebx-tn, and
;; count in ecx-tn.
- (inst jmp (make-ea :byte :base block
- :disp (* unwind-block-entry-pc-slot n-word-bytes))))
+ (inst jmp (make-ea-for-object-slot block unwind-block-entry-pc-slot 0)))
;;;; Win32 non-local exit noise
(:arg count (any-reg descriptor-reg) ecx-offset))
(declare (ignore start count))
- (let ((error (generate-error-code nil invalid-unwind-error)))
+ (let ((error (generate-error-code nil 'invalid-unwind-error)))
(inst or block block) ; check for NULL pointer
(inst jmp :z error))
;; Nlx-entry expects the arg start in ebx-tn and the arg count
;; in ecx-tn. Fortunately, that's where they are already.
- (inst jmp (make-ea :byte :base block
- :disp (* unwind-block-entry-pc-slot n-word-bytes))))
+ (inst jmp (make-ea-for-object-slot block unwind-block-entry-pc-slot 0)))
;;;; Win32 UWP block SEH interface.
(inst xor ecx-tn ecx-tn)
(inst mov ebx-tn ebp-tn)
(loadw ebp-tn block unwind-block-current-cont-slot)
- (inst jmp (make-ea :byte :base block
- :disp (* unwind-block-entry-pc-slot n-word-bytes))))
+ (inst jmp (make-ea-for-object-slot block unwind-block-entry-pc-slot 0)))
#!+win32
(define-assembly-routine (continue-unwind