File: timebase.S

package info (click to toggle)
openbios-sparc 1.0%2Bsvn640-1
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 4,412 kB
  • ctags: 12,091
  • sloc: ansic: 57,249; asm: 2,680; xml: 1,335; cpp: 414; makefile: 224; sh: 190
file content (33 lines) | stat: -rw-r--r-- 904 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "asm/asmdefs.h"
#include "asm/processor.h"

/*
 * unsigned long long _get_ticks(void);
 */
GLOBL(_get_ticks):
1:      mftbu   r3
        mftb    r4
        mftbu   r5
        cmpw    0,r3,r5
        bne     1b
        blr

/*
 * Delay for a number of ticks
 */
GLOBL(_wait_ticks):
        mflr    r8              /* save link register */
        mr      r7, r3          /* save tick count */
        bl      _get_ticks       /* Get start time */

        /* Calculate end time */
        addc    r7, r4, r7      /* Compute end time lower */
        addze   r6, r3          /*     and end time upper */

1:      bl      _get_ticks       /* Get current time */
        subfc   r4, r4, r7      /* Subtract current time from end time */
        subfe.  r3, r3, r6
        bge     1b              /* Loop until time expired */

        mtlr    r8              /* restore link register */
        blr