Index: /branches/ia32/level-0/X86/X8632/x8632-bignum.lisp
===================================================================
--- /branches/ia32/level-0/X86/X8632/x8632-bignum.lisp	(revision 9538)
+++ /branches/ia32/level-0/X86/X8632/x8632-bignum.lisp	(revision 9539)
@@ -693,4 +693,34 @@
   (single-value-return 5))
 
+;;; shift bignum right by i words plus nbits bits.
+(defx8632lapfunction bignum-shift-right-loop-1 ((nbits 12) (result 8)
+						(bignum 4) #|(ra 0)|#
+						(res-len-1 arg_y)
+						(i arg_z))
+  (movl (@ nbits (% esp)) (% imm0))
+  (sarl ($ x8632::fixnumshift) (% imm0))
+  (movd (% imm0) (% mm7))		;shift count
+
+  (movl (@ result (% esp)) (% temp0))
+  (movl (@ bignum (% esp)) (% temp1))
+  (push (% res-len-1))
+  (xorl (% arg_y) (% arg_y))		;index into result
+  (jmp @test)
+  @loop
+  (movq (@ x8632::misc-data-offset (% temp1) (% i)) (% mm0)) ;b[i+1] || b[i]
+  (psrlq (% mm7) (% mm0))
+  (movd (% mm0) (@ x8632::misc-data-offset (% temp0) (% arg_y)))
+  (addl ($ '1) (% i))
+  (addl ($ '1) (% arg_y))
+  @test
+  (cmpl (@ (% esp)) (% arg_y))		;compare to res-len-1
+  (jne @loop)
+  (addl ($ x8632::node-size) (% esp))
+  @finish
+  (movd (@ x8632::misc-data-offset (% temp1) (% i)) (% mm0)) ;last digit of b
+  (psrad (% mm7) (% mm0))
+  (movd (% mm0) (@ x8632::misc-data-offset (% temp0) (% arg_y)))
+  (single-value-return 5))
+
 (defx8632lapfunction %logcount-complement ((bignum arg_y) (i arg_z))
   (mark-as-imm temp0)
