summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/powerpc/aim/clock.c12
-rw-r--r--sys/powerpc/powerpc/clock.c12
2 files changed, 8 insertions, 16 deletions
diff --git a/sys/powerpc/aim/clock.c b/sys/powerpc/aim/clock.c
index 073f9eb..867b8dd 100644
--- a/sys/powerpc/aim/clock.c
+++ b/sys/powerpc/aim/clock.c
@@ -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();
}
/*
diff --git a/sys/powerpc/powerpc/clock.c b/sys/powerpc/powerpc/clock.c
index 073f9eb..867b8dd 100644
--- a/sys/powerpc/powerpc/clock.c
+++ b/sys/powerpc/powerpc/clock.c
@@ -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();
}
/*
OpenPOWER on IntegriCloud