summaryrefslogtreecommitdiff
path: root/lib9/lock-Hp-s800.s
diff options
context:
space:
mode:
Diffstat (limited to 'lib9/lock-Hp-s800.s')
-rw-r--r--lib9/lock-Hp-s800.s38
1 files changed, 38 insertions, 0 deletions
diff --git a/lib9/lock-Hp-s800.s b/lib9/lock-Hp-s800.s
new file mode 100644
index 00000000..26b6ca47
--- /dev/null
+++ b/lib9/lock-Hp-s800.s
@@ -0,0 +1,38 @@
+;
+; /*
+; * To get lock routine, compile this into a .s, then SUBSTITUTE
+; * a LOAD AND CLEAR WORD instruction for the load and store of
+; * l->key.
+; *
+; */
+; typedef struct Lock {
+; int key;
+; } Lock;
+;
+; int
+; mutexlock(Lock *l)
+; {
+; int key;
+;
+; key = l->key;
+; l->key = 0;
+; return key != 0;
+; }
+
+ .LEVEL 1.1
+
+ .SPACE $TEXT$,SORT=8
+ .SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=0x2c,CODE_ONLY,SORT=24
+mutexlock
+ .PROC
+ .CALLINFO FRAME=0,ARGS_SAVED
+ .ENTRY
+; SUBSTITUTED LDW 0(%r26),%r31
+; SUBSTITUTED STWS %r0,0(%r26)
+ LDCWS 0(%r26),%r31 ; SUBSTITUTED
+ COMICLR,= 0,%r31,%r28
+ LDI 1,%r28
+ .EXIT
+ BV,N %r0(%r2)
+ .PROCEND
+ .end