Index: /branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp
===================================================================
--- /branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp	(revision 8348)
+++ /branches/ia32/compiler/X86/X8632/x8632-vinsns.lisp	(revision 8349)
@@ -2514,13 +2514,11 @@
                                      ((src :lisp))
                                      ((tag :u8)))
-  ;; nilsym?
   (cmpl (:$l x8632::nil-value) (:%l src))
   (je :nilsym)
-  ;; tag-misc?
+  (movl (:%l src) (:%l tag))
   (andb (:$b x8632::tagmask) (:%b tag))
   (cmpb (:$b x8632::tag-misc) (:%b tag))
   (jne :bad)
-  ;; symbol?
-  (movb (:@ x8632::misc-subtag-offset) (:%b tag))
+  (movb (:@ x8632::misc-subtag-offset (:%l src)) (:%b tag))
   (cmpb (:$b x8632::subtag-symbol) (:%b tag))
   (jne :bad)
@@ -2700,6 +2698,7 @@
 (define-x8632-vinsn setup-macptr-allocation (()
                                              ((src :address)))
-  (movd (:%l src) (:%mmx x8632::mm1))
-  (movl (:$l x8632::macptr-header) (:%l x8632::mm0))
+  (movd (:%l src) (:%mmx x8632::mm1))	;see %set-new-macptr-value, below
+  (movl (:$l x8632::macptr-header) (:%l x8632::imm0))
+  (movd (:%l x8632::imm0) (:%mmx x8632::mm0))
   (movl (:$l (- x8632::macptr.size x8632::fulltag-misc)) (:%l x8632::imm0)))
 
@@ -2939,37 +2938,7 @@
   (jmp (:@ .SPmkunwind)))
 
-
 ;;; Funcall the function or symbol in temp0 and obtain the single
 ;;; value that it returns.
-(define-x8632-vinsn funcall (()
-                             ()
-                             ((tag :u8)
-                              (entry (:label 1))))
-  ;; tag is almost certainly going to be eax, which is
-  ;; the same as nargs.  we need to preserve nargs.
-  (pushl (:%l x8632::nargs.l))
-  (movl (:%l x8632::temp0) (:%l tag))
-  ((:pred = (:apply %hard-regspec-value tag) x8632::eax)
-   ;; accumulator
-   (andl (:$b x8632::tagmask) (:%accl tag))
-   (cmpl (:$b x8632::tag-misc) (:%accl tag)))
-  ((:pred > (:apply %hard-regspec-value tag) x8632::eax)
-   (andl (:$b x8632::tagmask) (:%l tag))
-   (cmpl (:$b x8632::tag-misc) (:%l tag)))
-  (jne :bad)
-  (movb (:@ x8632::misc-subtag-offset (:%l x8632::temp0)) (:%b tag))
-  (cmpb (:$b x8632::subtag-function) (:%b tag))
-  (cmovel (:%l x8632::temp0) (:%l x8632::xfn))
-  (je :call)
-  (cmpb (:$b x8632::subtag-symbol) (:%b tag))
-  (cmovel (:%l x8632::symbol.fcell (:%l x8632::fname)) (:%l x8632::xfn))
-  (jne :bad)
-  :call
-  (popl (:%l x8632::nargs))
-  (:talign 5)
-  (call (:%l x8632::xfn))
-  (movl (:$self 0) (:%l x8632::fn))
-  :bad
-  (uuo-error-not-callable))
+(define-x8632-subprim-call-vinsn (funcall) .SPfuncall)
 
 (define-x8632-vinsn tail-funcall (()
@@ -3080,5 +3049,5 @@
    ((:pred > n 1)
     (movl (:$l n) (:%l temp))
-    (:talign 4)
+    (:talign 5)
     (call (:@ .SPunbind-n)))
    ((:pred = n 1)
