aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/port/i386_solaris/Makefile.inc4
-rw-r--r--src/backend/port/i386_solaris/tas.s35
2 files changed, 37 insertions, 2 deletions
diff --git a/src/backend/port/i386_solaris/Makefile.inc b/src/backend/port/i386_solaris/Makefile.inc
index c88f9a0b4f9..c9df83ee8b8 100644
--- a/src/backend/port/i386_solaris/Makefile.inc
+++ b/src/backend/port/i386_solaris/Makefile.inc
@@ -7,7 +7,7 @@
#
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/backend/port/i386_solaris/Attic/Makefile.inc,v 1.3 1996/07/25 07:27:08 scrappy Exp $
+# $Header: /cvsroot/pgsql/src/backend/port/i386_solaris/Attic/Makefile.inc,v 1.4 1996/07/25 19:48:24 scrappy Exp $
#
#-------------------------------------------------------------------------
@@ -15,6 +15,6 @@ CFLAGS+= -DUSE_POSIX_TIME -DNEED_ISINF -DNEED_RUSAGE -DNO_EMPTY_STMTS
LDADD+= -ll -ldl
-SUBSRCS+= port.c
+SUBSRCS+= port.c tas.s
HEADERS+= machine.h port-protos.h rusagestub.h
diff --git a/src/backend/port/i386_solaris/tas.s b/src/backend/port/i386_solaris/tas.s
new file mode 100644
index 00000000000..bbc91fc82a7
--- /dev/null
+++ b/src/backend/port/i386_solaris/tas.s
@@ -0,0 +1,35 @@
+/=============================================================================
+/ tas.s -- test and set lock for i386_solaris
+/=============================================================================
+
+ .file "tas.s"
+ .text
+ .align 16
+.L1.text:
+
+ .globl tas
+tas:
+ pushl %ebp /save prev base pointer
+ movl %esp,%ebp /new base pointer
+ pushl %ebx /save prev bx
+ movl 8(%ebp),%ebx /load bx with address of lock
+ pushl %ebx /save prev bx
+ movl 8(%ebp),%ebx /load bx with address of lock
+ movl $255,%eax /put something in ax
+ xchgb %al,(%ebx) /swap lock value with "0"
+ cmpb $0,%al /did we get the lock?
+ jne .Locked
+ subl %eax,%eax /yes, we got it -- return 0
+ jmp .Finish
+ .align 4
+.Locked:
+ movl $1,%eax /no, we didn't get it - return 1
+.Finish:
+ popl %ebx /restore prev bx
+ movl %ebp,%esp /restore stack state
+ popl %ebp
+ ret /return
+ .align 4
+ .type tas,@function
+ .size tas,.-tas
+