summaryrefslogtreecommitdiff
path: root/sys/src/cmd/unix/drawterm/posix-power/tas.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/src/cmd/unix/drawterm/posix-power/tas.c')
-rw-r--r--sys/src/cmd/unix/drawterm/posix-power/tas.c42
1 files changed, 0 insertions, 42 deletions
diff --git a/sys/src/cmd/unix/drawterm/posix-power/tas.c b/sys/src/cmd/unix/drawterm/posix-power/tas.c
deleted file mode 100644
index 508aa6d81..000000000
--- a/sys/src/cmd/unix/drawterm/posix-power/tas.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(long *x)
-{
- int v;
- /*
- * this __asm__ works with gcc 2.95.2 (mac os x 10.1).
- * this assembly language destroys r0 (0), some other register (v),
- * r4 (x) and r5 (temp).
- */
- __asm__("\n sync\n"
- " li r0,0\n"
- " mr r4,%1 /* &l->val */\n"
- " lis r5,0xdead /* assemble constant 0xdeaddead */\n"
- " ori r5,r5,0xdead /* \" */\n"
- "tas1:\n"
- " dcbf r4,r0 /* cache flush; \"fix for 603x bug\" */\n"
- " lwarx %0,r4,r0 /* v = l->val with reservation */\n"
- " cmp cr0,0,%0,r0 /* v == 0 */\n"
- " bne tas0\n"
- " stwcx. r5,r4,r0 /* if (l->val same) l->val = 0xdeaddead */\n"
- " bne tas1\n"
- "tas0:\n"
- " sync\n"
- " isync\n"
- : "=r" (v)
- : "r" (x)
- : "cc", "memory", "r0", "r4", "r5"
- );
- switch(v) {
- case 0: return 0;
- case 0xdeaddead: return 1;
- default: print("tas: corrupted 0x%lux\n", v);
- }
- return 0;
-}