diff -Nur -x '*.trace' -x '*.rej' -x '*.orig' -x sbcl.h -x ldso-stubs.S -x Config -x target -x CVS -x 'target-*.h' -x output -x genesis -x '*.o' -x '*.nm' -x '*.core' -x '*.map' -x '*.d' -x '*~' -x '*.lisp-obj' -x '*.fasl' -x '*.lisp-temp' -x systems -x '*.tmp' -x local-target-features.lisp-expr -x a.out -x '*.so' -x foo.c -x sbcl -x grovel-headers -x customize-target-features.lisp -x external-format-test.txt -x test-status.lisp-expr sbcl-1.0.18-two-arg-passing-regs/src/compiler/x86/cell.lisp sbcl-1.0.18-reserve-ebx/src/compiler/x86/cell.lisp
--- sbcl-1.0.18-two-arg-passing-regs/src/compiler/x86/cell.lisp	2008-06-26 22:14:56.000000000 -0400
+++ sbcl-1.0.18-reserve-ebx/src/compiler/x86/cell.lisp	2008-06-29 20:23:14.000000000 -0400
@@ -309,7 +309,8 @@
 ;;; the existence of a TLS-INDEX.
 #!+sb-thread
 (define-vop (bind)
-  (:args (val :scs (any-reg descriptor-reg))
+  (:args (val :scs #!-x86-reserve-ebx (any-reg descriptor-reg)
+              #!+x86-reserve-ebx (control-stack))
          (symbol :scs (descriptor-reg)))
   (:temporary (:sc unsigned-reg) tls-index bsp)
   (:generator 10
@@ -335,8 +336,14 @@
       (inst push (make-ea :dword :base tls-index))
       (popw bsp (- binding-value-slot binding-size))
       (storew symbol bsp (- binding-symbol-slot binding-size))
-      (inst fs-segment-prefix)
-      (inst mov (make-ea :dword :base tls-index) val))))
+      (if (sc-is val control-stack)
+          (progn
+            (inst push val)
+            (inst fs-segment-prefix)
+            (inst pop (make-ea :dword :base tls-index)))
+          (progn
+            (inst fs-segment-prefix)
+            (inst mov (make-ea :dword :base tls-index) val))))))
 
 #!-sb-thread
 (define-vop (bind)
diff -Nur -x '*.trace' -x '*.rej' -x '*.orig' -x sbcl.h -x ldso-stubs.S -x Config -x target -x CVS -x 'target-*.h' -x output -x genesis -x '*.o' -x '*.nm' -x '*.core' -x '*.map' -x '*.d' -x '*~' -x '*.lisp-obj' -x '*.fasl' -x '*.lisp-temp' -x systems -x '*.tmp' -x local-target-features.lisp-expr -x a.out -x '*.so' -x foo.c -x sbcl -x grovel-headers -x customize-target-features.lisp -x external-format-test.txt -x test-status.lisp-expr sbcl-1.0.18-two-arg-passing-regs/src/compiler/x86/vm.lisp sbcl-1.0.18-reserve-ebx/src/compiler/x86/vm.lisp
--- sbcl-1.0.18-two-arg-passing-regs/src/compiler/x86/vm.lisp	2008-06-29 17:56:13.000000000 -0400
+++ sbcl-1.0.18-reserve-ebx/src/compiler/x86/vm.lisp	2008-06-29 20:23:14.000000000 -0400
@@ -56,7 +56,7 @@
   (defreg dh 5 :byte)
   (defreg bl 6 :byte)
   (defreg bh 7 :byte)
-  (defregset *byte-regs* al ah cl ch dl dh bl bh)
+  (defregset *byte-regs* al ah cl ch dl dh #!-x86-reserve-ebx bl #!-x86-reserve-ebx bh)
 
   ;; word registers
   (defreg ax 0 :word)
@@ -67,7 +67,7 @@
   (defreg bp 10 :word)
   (defreg si 12 :word)
   (defreg di 14 :word)
-  (defregset *word-regs* ax cx dx bx si di)
+  (defregset *word-regs* ax cx dx #!-x86-reserve-ebx bx si di)
 
   ;; double word registers
   (defreg eax 0 :dword)
@@ -78,7 +78,7 @@
   (defreg ebp 10 :dword)
   (defreg esi 12 :dword)
   (defreg edi 14 :dword)
-  (defregset *dword-regs* eax ecx edx ebx esi edi)
+  (defregset *dword-regs* eax ecx edx #!-x86-reserve-ebx ebx esi edi)
 
   ;; floating point registers
   (defreg fr0 0 :float)
