--- a/src/compiler/generic/vm-type.lisp
+++ b/src/compiler/generic/vm-type.lisp
@@ -167,9 +167,11 @@
 ;;; Return the most specific integer type that can be quickly checked that
 ;;; includes the given type.
 (defun containing-integer-type (subtype)
-  (dolist (type '(fixnum
-		  (signed-byte 32)
-		  (unsigned-byte 32)
+  (dolist (type '((signed-byte 32)
+                  (unsigned-byte 32)
+                  fixnum
+		  (signed-byte #.sb!vm:n-word-bits)
+		  (unsigned-byte #.sb!vm:n-word-bits)
 		  integer)
 		(error "~S isn't an integer type?" subtype))
     (when (csubtypep subtype (specifier-type type))
@@ -191,10 +193,18 @@
     (numeric-type
      (cond ((type= type (specifier-type 'fixnum))
 	    'sb!c:check-fixnum)
+           ;#!+#.(cl:if (cl:= 32 sb!vm:n-word-bits) '(and) '(or))
 	   ((type= type (specifier-type '(signed-byte 32)))
 	    'sb!c:check-signed-byte-32)
+           ;#!+#.(cl:if (cl:= 32 sb!vm:n-word-bits) '(and) '(or))
 	   ((type= type (specifier-type '(unsigned-byte 32)))
 	    'sb!c:check-unsigned-byte-32)
+           #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
+	   ((type= type (specifier-type '(signed-byte 64)))
+	    'sb!c:check-signed-byte-64)
+           #!+#.(cl:if (cl:= 64 sb!vm:n-word-bits) '(and) '(or))
+	   ((type= type (specifier-type '(unsigned-byte 64)))
+	    'sb!c:check-unsigned-byte-64)
 	   (t nil)))
     (fun-type
      'sb!c:check-fun)