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 14 .text 15 16.LC0: .word loops_per_jiffy 17.LC1: .word UDELAY_MULT 18 19/* 20 * r0 <= 2000 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 ldr r2, .LC0 29 ldr r2, [r2] 30 umull r1, r0, r2, r0 31 adds r1, r1, #0xffffffff 32 adcs r0, r0, r0 33 reteq lr 34 35/* 36 * loops = r0 * HZ * loops_per_jiffy / 1000000 37 */ 38 .align 3 39 40@ Delay routine 41ENTRY(__loop_delay) 42 subs r0, r0, #1 43#if 0 44 retls lr 45 subs r0, r0, #1 46 retls lr 47 subs r0, r0, #1 48 retls lr 49 subs r0, r0, #1 50 retls lr 51 subs r0, r0, #1 52 retls lr 53 subs r0, r0, #1 54 retls lr 55 subs r0, r0, #1 56 retls lr 57 subs r0, r0, #1 58#endif 59 bhi __loop_delay 60 ret lr 61ENDPROC(__loop_udelay) 62ENDPROC(__loop_const_udelay) 63ENDPROC(__loop_delay) 64