diff --git a/tools/cross-scripts/cross-x86-netbsd.lisp b/tools/cross-scripts/cross-x86-netbsd.lisp
index fc42c39b57e29d64d34b10e1f8aedf9831dca7a8..0a598427c065c02f3959fe7fe42ec9d96c718c3a 100644
--- a/tools/cross-scripts/cross-x86-netbsd.lisp
+++ b/tools/cross-scripts/cross-x86-netbsd.lisp
@@ -1,36 +1,39 @@
+;; Basic cross-compile script for cross-compiling from x86 to x86.
+;; May require tweaking for more difficult cross-compiles.
+
 (in-package :cl-user)
 
 ;;; Rename the X86 package and backend so that new-backend does the
 ;;; right thing.
-(rename-package "X86" "OLD-X86")
+(rename-package "X86" "OLD-X86" '("OLD-VM"))
 (setf (c:backend-name c:*native-backend*) "OLD-X86")
 
 (c::new-backend "X86"
-   ;; Features to add here
+   ;; Features to add here.  These are just examples.  You may not
+   ;; need to list anything here.  We list them here anyway as a
+   ;; record of typical features for all x86 ports.
    '(:x86 :i486 :pentium
-     :stack-checking :heap-overflow-check :mp :gencgc :netbsd
-     :conservative-float-type :linkage-table
-     :hash-new :random-mt19937 :modular-arith :small
-     :cmu :cmu18 :cmu18e :cmu19 :cmu19a
-     :no-pcl :no-clx :no-clm :no-hemlock
+     :stack-checking			; Catches stack overflow
+     :heap-overflow-check		; Catches heap overflows
+     :relative-package-names		; relative package names
+     :mp				; multiprocessing
+     :gencgc				; Generational GC
+     :netbsd :bsd
+     :conservative-float-type
+     :hash-new
+     :random-mt19937
+     :cmu :cmu19 :cmu19e		; Version features
+     :double-double			; double-double float support
      )
-   ;; Features to remove from current *features* here
-   '(:x86-bootstrap :alpha :osf1 :mips :ppc :sparc
+   ;; Features to remove from current *features* here.  Normally don't
+   ;; need to list anything here unless you are trying to remove a
+   ;; feature.
+   '(:x86-bootstrap
+     ;; :alpha :osf1 :mips
      :propagate-fun-type :propagate-float-type :constrain-float-type
-     :openbsd :freebsd :freebsd4 :glibc2 :glibc2.1 :linux
-     :long-float :new-random))
-
-;(load "target:bootfiles/19c/boot-2005-11-1.lisp")
-;(load "target:bootfiles/19c/boot-2005-11-2.lisp")
-
-;;; Extern-alien-name for the new backend.
-(in-package :vm)
-(defun extern-alien-name (name)
-  (declare (type simple-string name))
-  name)
-(export 'extern-alien-name)
-(export 'fixup-code-object)
-(export 'sanctify-for-execution)
+     ;; :openbsd :freebsd :glibc2 :linux
+     :glibc2 :linux
+     :long-float :new-random :small))
 
 ;;; Compile the new backend.
 (pushnew :bootstrap *features*)
@@ -112,26 +115,40 @@
 				       (find-symbol ,(symbol-name sym)
 						    :vm))))
 			       syms))))
-  (frob OLD-X86:BYTE-BITS OLD-X86:WORD-BITS
-	#+long-float OLD-X86:SIMPLE-ARRAY-LONG-FLOAT-TYPE 
-	OLD-X86:SIMPLE-ARRAY-DOUBLE-FLOAT-TYPE 
-	OLD-X86:SIMPLE-ARRAY-SINGLE-FLOAT-TYPE
-	#+long-float OLD-X86:SIMPLE-ARRAY-COMPLEX-LONG-FLOAT-TYPE 
-	OLD-X86:SIMPLE-ARRAY-COMPLEX-DOUBLE-FLOAT-TYPE 
-	OLD-X86:SIMPLE-ARRAY-COMPLEX-SINGLE-FLOAT-TYPE
-	OLD-X86:SIMPLE-ARRAY-UNSIGNED-BYTE-2-TYPE 
-	OLD-X86:SIMPLE-ARRAY-UNSIGNED-BYTE-4-TYPE
-	OLD-X86:SIMPLE-ARRAY-UNSIGNED-BYTE-8-TYPE 
-	OLD-X86:SIMPLE-ARRAY-UNSIGNED-BYTE-16-TYPE 
-	OLD-X86:SIMPLE-ARRAY-UNSIGNED-BYTE-32-TYPE 
-	OLD-X86:SIMPLE-ARRAY-SIGNED-BYTE-8-TYPE 
-	OLD-X86:SIMPLE-ARRAY-SIGNED-BYTE-16-TYPE
-	OLD-X86:SIMPLE-ARRAY-SIGNED-BYTE-30-TYPE 
-	OLD-X86:SIMPLE-ARRAY-SIGNED-BYTE-32-TYPE
-	OLD-X86:SIMPLE-BIT-VECTOR-TYPE
-	OLD-X86:SIMPLE-STRING-TYPE OLD-X86:SIMPLE-VECTOR-TYPE 
-	OLD-X86:SIMPLE-ARRAY-TYPE OLD-X86:VECTOR-DATA-OFFSET
-	))
+  (frob OLD-VM:BYTE-BITS OLD-VM:WORD-BITS
+	#+long-float OLD-VM:SIMPLE-ARRAY-LONG-FLOAT-TYPE 
+	OLD-VM:SIMPLE-ARRAY-DOUBLE-FLOAT-TYPE 
+	OLD-VM:SIMPLE-ARRAY-SINGLE-FLOAT-TYPE
+	#+long-float OLD-VM:SIMPLE-ARRAY-COMPLEX-LONG-FLOAT-TYPE 
+	OLD-VM:SIMPLE-ARRAY-COMPLEX-DOUBLE-FLOAT-TYPE 
+	OLD-VM:SIMPLE-ARRAY-COMPLEX-SINGLE-FLOAT-TYPE
+	OLD-VM:SIMPLE-ARRAY-UNSIGNED-BYTE-2-TYPE 
+	OLD-VM:SIMPLE-ARRAY-UNSIGNED-BYTE-4-TYPE
+	OLD-VM:SIMPLE-ARRAY-UNSIGNED-BYTE-8-TYPE 
+	OLD-VM:SIMPLE-ARRAY-UNSIGNED-BYTE-16-TYPE 
+	OLD-VM:SIMPLE-ARRAY-UNSIGNED-BYTE-32-TYPE 
+	OLD-VM:SIMPLE-ARRAY-SIGNED-BYTE-8-TYPE 
+	OLD-VM:SIMPLE-ARRAY-SIGNED-BYTE-16-TYPE
+	OLD-VM:SIMPLE-ARRAY-SIGNED-BYTE-30-TYPE 
+	OLD-VM:SIMPLE-ARRAY-SIGNED-BYTE-32-TYPE
+	OLD-VM:SIMPLE-BIT-VECTOR-TYPE
+	OLD-VM:SIMPLE-STRING-TYPE OLD-VM:SIMPLE-VECTOR-TYPE 
+	OLD-VM:SIMPLE-ARRAY-TYPE OLD-VM:VECTOR-DATA-OFFSET
+	OLD-VM:DOUBLE-FLOAT-EXPONENT-BYTE
+	OLD-VM:DOUBLE-FLOAT-NORMAL-EXPONENT-MAX 
+	OLD-VM:DOUBLE-FLOAT-SIGNIFICAND-BYTE
+	OLD-VM:SINGLE-FLOAT-EXPONENT-BYTE
+	OLD-VM:SINGLE-FLOAT-NORMAL-EXPONENT-MAX
+	OLD-VM:SINGLE-FLOAT-SIGNIFICAND-BYTE
+	)
+  #+double-double
+  (frob OLD-VM:SIMPLE-ARRAY-COMPLEX-DOUBLE-DOUBLE-FLOAT-TYPE
+	OLD-VM:SIMPLE-ARRAY-DOUBLE-DOUBLE-FLOAT-TYPE))
+
+;; Modular arith hacks
+(setf (fdefinition 'vm::ash-left-mod32) #'old-vm::ash-left-mod32)
+(setf (fdefinition 'vm::lognot-mod32) #'old-vm::lognot-mod32)
+;; End arith hacks
 
 (let ((function (symbol-function 'kernel:error-number-or-lose)))
   (let ((*info-environment* (c:backend-info-environment c:*target-backend*)))
@@ -172,10 +189,9 @@
 
 (defparameter *load-stuff* nil)
 
-;; hack, hack, hack: Make old-x86::any-reg the same as
-;; x86::any-reg as an SC.  Do this by adding old-x86::any-reg
+;; hack, hack, hack: Make old-vm::any-reg the same as
+;; x86::any-reg as an SC.  Do this by adding old-vm::any-reg
 ;; to the hash table with the same value as x86::any-reg.
 (let ((ht (c::backend-sc-names c::*target-backend*)))
-  (setf (gethash 'old-x86::any-reg ht)
-	(gethash 'x86::any-reg ht)))
-
+  (setf (gethash 'old-vm::any-reg ht)
+	(gethash 'vm::any-reg ht)))