;; Generate a new set of results.
(inst xor k k)
LOOP1
- (inst mov y (make-ea :dword :base state :index k :scale 4
- :disp (- (* (+ 3 vector-data-offset)
- n-word-bytes)
- other-pointer-lowtag)))
- (inst mov tmp (make-ea :dword :base state :index k :scale 4
- :disp (- (* (+ 1 3 vector-data-offset)
- n-word-bytes)
- other-pointer-lowtag)))
+ (inst mov y (make-ea-for-vector-data state :index k :offset 3))
+ (inst mov tmp (make-ea-for-vector-data state :index k :offset (+ 1 3)))
(inst and y #x80000000)
(inst and tmp #x7fffffff)
(inst or y tmp)
(inst jmp :nc skip1)
(inst xor y #x9908b0df)
SKIP1
- (inst xor y (make-ea :dword :base state :index k :scale 4
- :disp (- (* (+ 397 3 vector-data-offset)
- n-word-bytes)
- other-pointer-lowtag)))
- (inst mov (make-ea :dword :base state :index k :scale 4
- :disp (- (* (+ 3 vector-data-offset)
- n-word-bytes)
- other-pointer-lowtag))
- y)
+ (inst xor y (make-ea-for-vector-data state :index k :offset (+ 397 3)))
+ (inst mov (make-ea-for-vector-data state :index k :offset 3) y)
(inst inc k)
(inst cmp k (- 624 397))
(inst jmp :b loop1)
LOOP2
- (inst mov y (make-ea :dword :base state :index k :scale 4
- :disp (- (* (+ 3 vector-data-offset)
- n-word-bytes)
- other-pointer-lowtag)))
- (inst mov tmp (make-ea :dword :base state :index k :scale 4
- :disp (- (* (+ 1 3 vector-data-offset)
- n-word-bytes)
- other-pointer-lowtag)))
+ (inst mov y (make-ea-for-vector-data state :index k :offset 3))
+ (inst mov tmp (make-ea-for-vector-data state :index k :offset (+ 1 3)))
(inst and y #x80000000)
(inst and tmp #x7fffffff)
(inst or y tmp)
(inst jmp :nc skip2)
(inst xor y #x9908b0df)
SKIP2
- (inst xor y (make-ea :dword :base state :index k :scale 4
- :disp (- (* (+ (- 397 624) 3 vector-data-offset)
- n-word-bytes)
- other-pointer-lowtag)))
- (inst mov (make-ea :dword :base state :index k :scale 4
- :disp (- (* (+ 3 vector-data-offset)
- n-word-bytes)
- other-pointer-lowtag))
- y)
+ (inst xor y (make-ea-for-vector-data state :index k :offset (+ (- 397 624) 3)))
+ (inst mov (make-ea-for-vector-data state :index k :offset 3) y)
(inst inc k)
(inst cmp k (- 624 1))
(inst jmp :b loop2)
- (inst mov y (make-ea :dword :base state
- :disp (- (* (+ (- 624 1) 3 vector-data-offset)
- n-word-bytes)
- other-pointer-lowtag)))
- (inst mov tmp (make-ea :dword :base state
- :disp (- (* (+ 0 3 vector-data-offset)
- n-word-bytes)
- other-pointer-lowtag)))
+ (inst mov y (make-ea-for-vector-data state :offset (+ (- 624 1) 3)))
+ (inst mov tmp (make-ea-for-vector-data state :offset (+ 0 3)))
(inst and y #x80000000)
(inst and tmp #x7fffffff)
(inst or y tmp)
(inst jmp :nc skip3)
(inst xor y #x9908b0df)
SKIP3
- (inst xor y (make-ea :dword :base state
- :disp (- (* (+ (- 397 1) 3 vector-data-offset)
- n-word-bytes)
- other-pointer-lowtag)))
- (inst mov (make-ea :dword :base state
- :disp (- (* (+ (- 624 1) 3 vector-data-offset)
- n-word-bytes)
- other-pointer-lowtag))
- y)
+ (inst xor y (make-ea-for-vector-data state :offset (+ (- 397 1) 3)))
+ (inst mov (make-ea-for-vector-data state :offset (+ (- 624 1) 3)) y)
;; Restore the temporary registers and return.
(inst pop tmp)
(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))
;; 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
;; 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