Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm/lib/delay-loop.S
26292 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* linux/arch/arm/lib/delay.S
4
*
5
* Copyright (C) 1995, 1996 Russell King
6
*/
7
#include <linux/linkage.h>
8
#include <linux/cfi_types.h>
9
#include <asm/assembler.h>
10
#include <asm/delay.h>
11
12
#ifdef CONFIG_ARCH_RPC
13
.arch armv4
14
#endif
15
16
.text
17
18
.LC0: .word loops_per_jiffy
19
.LC1: .word UDELAY_MULT
20
21
/*
22
* loops = r0 * HZ * loops_per_jiffy / 1000000
23
*
24
* r0 <= 2000
25
* HZ <= 1000
26
*/
27
28
SYM_TYPED_FUNC_START(__loop_udelay)
29
ldr r2, .LC1
30
mul r0, r2, r0 @ r0 = delay_us * UDELAY_MULT
31
b __loop_const_udelay
32
SYM_FUNC_END(__loop_udelay)
33
34
SYM_TYPED_FUNC_START(__loop_const_udelay) @ 0 <= r0 <= 0xfffffaf0
35
ldr r2, .LC0
36
ldr r2, [r2]
37
umull r1, r0, r2, r0 @ r0-r1 = r0 * loops_per_jiffy
38
adds r1, r1, #0xffffffff @ rounding up ...
39
adcs r0, r0, r0 @ and right shift by 31
40
reteq lr
41
b __loop_delay
42
SYM_FUNC_END(__loop_const_udelay)
43
44
.align 3
45
46
@ Delay routine
47
SYM_TYPED_FUNC_START(__loop_delay)
48
subs r0, r0, #1
49
#if 0
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
retls lr
59
subs r0, r0, #1
60
retls lr
61
subs r0, r0, #1
62
retls lr
63
subs r0, r0, #1
64
#endif
65
bhi __loop_delay
66
ret lr
67
SYM_FUNC_END(__loop_delay)
68
69