diff options
Diffstat (limited to 'src/lib9/tas-power.c')
-rw-r--r-- | src/lib9/tas-power.c | 42 |
1 files changed, 0 insertions, 42 deletions
diff --git a/src/lib9/tas-power.c b/src/lib9/tas-power.c deleted file mode 100644 index 2ed71d47..00000000 --- a/src/lib9/tas-power.c +++ /dev/null @@ -1,42 +0,0 @@ -#include "u.h" -#include "libc.h" - -/* - * first argument (l) is in r3 at entry. - * r3 contains return value upon return. - */ -int -_tas(int *x) -{ - int v; - int tmp, tmp2, tmp3; - - /* - * this __asm__ works with gcc on linux - */ - __asm__("\n sync\n" - " li %1,0\n" - " mr %2,%4 /* &x->val */\n" - " lis %3,0xdead /* assemble constant 0xdeaddead */\n" - " ori %3,%3,0xdead /* \" */\n" - "tas1:\n" - " dcbf %2,%1 /* cache flush; \"fix for 603x bug\" */\n" - " lwarx %0,%2,%1 /* v = x->val with reservation */\n" - " cmp cr0,0,%0,%1 /* v == 0 */\n" - " bne tas0\n" - " stwcx. %3,%2,%1 /* if (x->val same) x->val = 0xdeaddead */\n" - " bne tas1\n" - "tas0:\n" - " sync\n" - " isync\n" - : "=r" (v), "=&r" (tmp), "=&r"(tmp2), "=&r"(tmp3) - : "r" (x) - : "cr0", "memory" - ); - switch(v) { - case 0: return 0; - case 0xdeaddead: return 1; - default: fprint(2, "tas: corrupted 0x%lux\n", v); - } - return 0; -} |