ARM: 8306/1: loop_udelay: remove bogomips value limitation
[deliverable/linux.git] / arch / arm / lib / delay-loop.S
index 518bf6e93f78a2cb1c74f7b857c6fa96b1018f53..792c59d885bc9d8274eaef7ea8c3a68539d9dc0a 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/delay.h>
+
                .text
 
 .LC0:          .word   loops_per_jiffy
@@ -17,7 +18,6 @@
 
 /*
  * r0  <= 2000
- * lpj <= 0x01ffffff (max. 3355 bogomips)
  * HZ  <= 1000
  */
 
@@ -25,16 +25,11 @@ ENTRY(__loop_udelay)
                ldr     r2, .LC1
                mul     r0, r2, r0
 ENTRY(__loop_const_udelay)                     @ 0 <= r0 <= 0x7fffff06
-               mov     r1, #-1
                ldr     r2, .LC0
-               ldr     r2, [r2]                @ max = 0x01ffffff
-               add     r0, r0, r1, lsr #32-14
-               mov     r0, r0, lsr #14         @ max = 0x0001ffff
-               add     r2, r2, r1, lsr #32-10
-               mov     r2, r2, lsr #10         @ max = 0x00007fff
-               mul     r0, r2, r0              @ max = 2^32-1
-               add     r0, r0, r1, lsr #32-6
-               movs    r0, r0, lsr #6
+               ldr     r2, [r2]
+               umull   r1, r0, r2, r0
+               adds    r1, r1, #0xffffffff
+               adcs    r0, r0, r0
                reteq   lr
 
 /*
This page took 0.024095 seconds and 5 git commands to generate.