linux/arch/arm/lib/delay-loop.S
<<
>>
Prefs
   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
  44@ Delay routine
  45ENTRY(__loop_delay)
  46                subs    r0, r0, #1
  47#if 0
  48                movls   pc, lr
  49                subs    r0, r0, #1
  50                movls   pc, lr
  51                subs    r0, r0, #1
  52                movls   pc, lr
  53                subs    r0, r0, #1
  54                movls   pc, lr
  55                subs    r0, r0, #1
  56                movls   pc, lr
  57                subs    r0, r0, #1
  58                movls   pc, lr
  59                subs    r0, r0, #1
  60                movls   pc, lr
  61                subs    r0, r0, #1
  62#endif
  63                bhi     __loop_delay
  64                mov     pc, lr
  65ENDPROC(__loop_udelay)
  66ENDPROC(__loop_const_udelay)
  67ENDPROC(__loop_delay)
  68