Replace the inline asm in delay() with a while loop. This may not be as

efficient but it appears to actually work.  Some investigation may be
required.
This commit is contained in:
Benno Rice 2003-02-05 11:26:14 +00:00
parent 8bc7bc1ea0
commit 4a95ae9a68
2 changed files with 8 additions and 16 deletions

View File

@ -310,16 +310,12 @@ decr_get_timecount(struct timecounter *tc)
void
delay(int n)
{
u_quad_t tb;
u_long tbh, tbl, scratch;
u_quad_t tb, ttb;
tb = mftb();
tb += (n * 1000 + ns_per_tick - 1) / ns_per_tick;
tbh = tb >> 32;
tbl = tb;
__asm ("1: mftbu %0; cmplw %0,%1; blt 1b; bgt 2f;"
"mftb %0; cmplw %0,%2; blt 1b; 2:"
: "=r"(scratch) : "r"(tbh), "r"(tbl));
ttb = tb + (n * 1000 + ns_per_tick - 1) / ns_per_tick;
while (tb < ttb)
tb = mftb();
}
/*

View File

@ -310,16 +310,12 @@ decr_get_timecount(struct timecounter *tc)
void
delay(int n)
{
u_quad_t tb;
u_long tbh, tbl, scratch;
u_quad_t tb, ttb;
tb = mftb();
tb += (n * 1000 + ns_per_tick - 1) / ns_per_tick;
tbh = tb >> 32;
tbl = tb;
__asm ("1: mftbu %0; cmplw %0,%1; blt 1b; bgt 2f;"
"mftb %0; cmplw %0,%2; blt 1b; 2:"
: "=r"(scratch) : "r"(tbh), "r"(tbl));
ttb = tb + (n * 1000 + ns_per_tick - 1) / ns_per_tick;
while (tb < ttb)
tb = mftb();
}
/*