Index: /trunk/source/compiler/X86/X8632/x8632-vinsns.lisp
===================================================================
--- /trunk/source/compiler/X86/X8632/x8632-vinsns.lisp	(revision 14998)
+++ /trunk/source/compiler/X86/X8632/x8632-vinsns.lisp	(revision 14999)
@@ -4231,5 +4231,4 @@
   (ja default)
   (movl (:%l reg) (:%l temp))
-  (shrl (:%l temp))
   (movl (:@ (:^ :jtab) (:%l x8632::fn) (:%l temp)) (:%l temp))
   (leal (:@ (:%l x8632::fn) (:%l temp)) (:%l rjmp))
Index: /trunk/source/compiler/X86/X8664/x8664-vinsns.lisp
===================================================================
--- /trunk/source/compiler/X86/X8664/x8664-vinsns.lisp	(revision 14998)
+++ /trunk/source/compiler/X86/X8664/x8664-vinsns.lisp	(revision 14999)
@@ -4632,4 +4632,40 @@
   (movq (:@ (:%q x8664::rbp)) (:%q x8664::rbp)))
 
+(define-x8664-vinsn (cjmp :branch) (((reg :lisp))
+                                    ((reg :lisp)
+                                     (minval :s32const)
+                                     (maxval :u32const)
+                                     (default :label))
+                                    ((temp :s32)
+                                    (rjmp :lisp)))
+  (testl (:$l x8664::fixnummask) (:%l reg))
+  (jne default)
+  ((:not (:pred zerop minval))
+   (subq (:$l minval) (:%q reg)))
+  (cmpq (:$l maxval) (:%q reg))
+  (ja default)
+  (movl (:%l reg) (:%l temp))
+  (shrl (:%l temp))
+  (movl (:@ (:^ :jtab) (:%q x8664::fn) (:%q temp)) (:%l temp))
+  (leaq (:@ (:%q x8664::fn) (:%q temp)) (:%q rjmp))
+  (jmp (:%q rjmp))
+  (:uuo-section)
+  (:align 2)
+  (:long (:apply 1+ (:apply ash maxval (- x8664::fixnumshift))))
+  :jtab)
+
+
+
+(define-x8664-vinsn jtabentry (()
+                               ((label :label)))
+  (:uuo-section)
+  (:long (:^ label)))
+
+
+  
+  
+  
+  
+
 (queue-fixup
  (fixup-x86-vinsn-templates
