diff --git a/tools/cross-scripts/cross-x86-x86.lisp b/tools/cross-scripts/cross-x86-x86.lisp
index e05c6c3dae22750b50d47574a78cc5f6a4f51f9a..85df423cd139960b278e4453843b32a5059a9cf3 100644
--- a/tools/cross-scripts/cross-x86-x86.lisp
+++ b/tools/cross-scripts/cross-x86-x86.lisp
@@ -69,9 +69,13 @@
 (load "vm:primtype")
 (load "vm:move")
 (load "vm:sap")
+(when (target-featurep :sse2)
+  (load "vm:sse2-sap"))
 (load "vm:system")
 (load "vm:char")
-(load "vm:float")
+(if (target-featurep :sse2)
+    (load "vm:float-sse2")
+    (load "vm:float"))
 
 (load "vm:memory")
 (load "vm:static-fn")
@@ -80,11 +84,18 @@
 (load "vm:subprim")
 (load "vm:debug")
 (load "vm:c-call")
+(when (target-featurep :sse2)
+  (load "vm:sse2-c-call"))
 (load "vm:print")
 (load "vm:alloc")
 (load "vm:call")
 (load "vm:nlx")
 (load "vm:values")
+;; These need to be loaded before array because array wants to use
+;; some vops as templates.
+(load (if (target-featurep :sse2)
+	  "vm:sse2-array"
+	  "vm:x87-array"))
 (load "vm:array")
 (load "vm:pred")
 (load "vm:type-vops")