1.0.16.10: function-ify ERROR-CALL and GENERATE-ERROR-CODE on x86
[sbcl.git] / src / assembly / x86 / assem-rtns.lisp
index 612e415..930c2e7 100644 (file)
@@ -54,9 +54,7 @@
   (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