33 lines
936 B
ArmAsm
33 lines
936 B
ArmAsm
#include "asm/asmdefs.h"
|
|
#include "asm/processor.h"
|
|
|
|
/*
|
|
* unsigned long long _get_ticks(void);
|
|
*/
|
|
_GLOBAL(_get_ticks):
|
|
1: mftbu r3
|
|
mftb r4
|
|
mftbu r5
|
|
cmpw 0,r3,r5
|
|
bne 1b
|
|
blr
|
|
|
|
/*
|
|
* Delay for a number of ticks
|
|
*/
|
|
_GLOBAL(_wait_ticks):
|
|
mflr r8 /* save link register */
|
|
mr r7, r3 /* save tick count */
|
|
bl BRANCH_LABEL(_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 BRANCH_LABEL(_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
|