From 4a95ae9a6887adb775a0243fa992ce45a79ff979 Mon Sep 17 00:00:00 2001 From: Benno Rice Date: Wed, 5 Feb 2003 11:26:14 +0000 Subject: [PATCH] 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. --- sys/powerpc/aim/clock.c | 12 ++++-------- sys/powerpc/powerpc/clock.c | 12 ++++-------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/sys/powerpc/aim/clock.c b/sys/powerpc/aim/clock.c index 073f9ebf123a..867b8ddc5deb 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 073f9ebf123a..867b8ddc5deb 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(); } /*