| #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 |