1/* 2 * linux/arch/arm/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#include <asm/delay.h> 13 .text 14 15.LC0: .word loops_per_jiffy 16.LC1: .word UDELAY_MULT 17 18/* 19 * r0 <= 2000 20 * lpj <= 0x01ffffff (max. 3355 bogomips) 21 * HZ <= 1000 22 */ 23 24ENTRY(__loop_udelay) 25 ldr r2, .LC1 26 mul r0, r2, r0 27ENTRY(__loop_const_udelay) @ 0 <= r0 <= 0x7fffff06 28 mov r1, #-1 29 ldr r2, .LC0 30 ldr r2, [r2] @ max = 0x01ffffff 31 add r0, r0, r1, lsr #32-14 32 mov r0, r0, lsr #14 @ max = 0x0001ffff 33 add r2, r2, r1, lsr #32-10 34 mov r2, r2, lsr #10 @ max = 0x00007fff 35 mul r0, r2, r0 @ max = 2^32-1 36 add r0, r0, r1, lsr #32-6 37 movs r0, r0, lsr #6 38 moveq pc, lr 39 40/* 41 * loops = r0 * HZ * loops_per_jiffy / 1000000 42 */ 43 .align 3 44 45@ Delay routine 46ENTRY(__loop_delay) 47 subs r0, r0, #1 48#if 0 49 movls pc, lr 50 subs r0, r0, #1 51 movls pc, lr 52 subs r0, r0, #1 53 movls pc, lr 54 subs r0, r0, #1 55 movls pc, lr 56 subs r0, r0, #1 57 movls pc, lr 58 subs r0, r0, #1 59 movls pc, lr 60 subs r0, r0, #1 61 movls pc, lr 62 subs r0, r0, #1 63#endif 64 bhi __loop_delay 65 mov pc, lr 66ENDPROC(__loop_udelay) 67ENDPROC(__loop_const_udelay) 68ENDPROC(__loop_delay) 69