Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.14-rc4 58 lines 1.2 kB view raw
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 .text 13 14LC0: .word loops_per_jiffy 15 16/* 17 * 0 <= r0 <= 2000 18 */ 19ENTRY(__udelay) 20 mov r2, #0x6800 21 orr r2, r2, #0x00db 22 mul r0, r2, r0 23ENTRY(__const_udelay) @ 0 <= r0 <= 0x01ffffff 24 ldr r2, LC0 25 ldr r2, [r2] @ max = 0x0fffffff 26 mov r0, r0, lsr #11 @ max = 0x00003fff 27 mov r2, r2, lsr #11 @ max = 0x0003ffff 28 mul r0, r2, r0 @ max = 2^32-1 29 movs r0, r0, lsr #6 30 RETINSTR(moveq,pc,lr) 31 32/* 33 * loops = (r0 * 0x10c6 * 100 * loops_per_jiffy) / 2^32 34 * 35 * Oh, if only we had a cycle counter... 36 */ 37 38@ Delay routine 39ENTRY(__delay) 40 subs r0, r0, #1 41#if 0 42 RETINSTR(movls,pc,lr) 43 subs r0, r0, #1 44 RETINSTR(movls,pc,lr) 45 subs r0, r0, #1 46 RETINSTR(movls,pc,lr) 47 subs r0, r0, #1 48 RETINSTR(movls,pc,lr) 49 subs r0, r0, #1 50 RETINSTR(movls,pc,lr) 51 subs r0, r0, #1 52 RETINSTR(movls,pc,lr) 53 subs r0, r0, #1 54 RETINSTR(movls,pc,lr) 55 subs r0, r0, #1 56#endif 57 bhi __delay 58 RETINSTR(mov,pc,lr)