Linux-2.6.12-rc2
[linux-2.6.git] / arch / arm26 / lib / delay.S
1 /*
2  *  linux/arch/arm26/lib/delay.S
3  *
4  *  Copyright (C) 1995, 1996 Russell King
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10 #include <linux/linkage.h>
11 #include <asm/assembler.h>
12                 .text
13
14 LC0:            .word   loops_per_jiffy
15
16 /*
17  * 0 <= r0 <= 2000
18  */
19 ENTRY(udelay)
20                 mov     r2,     #0x6800
21                 orr     r2, r2, #0x00db
22                 mul     r1, r0, r2
23                 ldr     r2, LC0
24                 ldr     r2, [r2]
25                 mov     r1, r1, lsr #11
26                 mov     r2, r2, lsr #11
27                 mul     r0, r1, r2
28                 movs    r0, r0, lsr #6
29                 RETINSTR(moveq,pc,lr)
30
31 /*
32  * loops = (r0 * 0x10c6 * 100 * loops_per_jiffy) / 2^32
33  *
34  * Oh, if only we had a cycle counter...
35  */
36
37 @ Delay routine
38 ENTRY(__delay)
39                 subs    r0, r0, #1
40 #if 0
41                 RETINSTR(movls,pc,lr)
42                 subs    r0, r0, #1
43                 RETINSTR(movls,pc,lr)
44                 subs    r0, r0, #1
45                 RETINSTR(movls,pc,lr)
46                 subs    r0, r0, #1
47                 RETINSTR(movls,pc,lr)
48                 subs    r0, r0, #1
49                 RETINSTR(movls,pc,lr)
50                 subs    r0, r0, #1
51                 RETINSTR(movls,pc,lr)
52                 subs    r0, r0, #1
53                 RETINSTR(movls,pc,lr)
54                 subs    r0, r0, #1
55 #endif
56                 bhi     __delay
57                 RETINSTR(mov,pc,lr)