mirror of
https://github.com/postgres/postgres.git
synced 2025-11-09 06:21:09 +03:00
Add support for Solaris x86_64 using Sun's compiler.
Pierre Girard
This commit is contained in:
35
src/backend/port/tas/solaris_x86_64.s
Normal file
35
src/backend/port/tas/solaris_x86_64.s
Normal file
@@ -0,0 +1,35 @@
|
||||
/=============================================================================
|
||||
/ tas.s -- test and set lock for solaris_i386
|
||||
/ based on i386 ASM with modifications outlined in
|
||||
/ http://www.x86-64.org/documentation/assembly
|
||||
/=============================================================================
|
||||
|
||||
.file "tas.s"
|
||||
.text
|
||||
.align 16
|
||||
.L1.text:
|
||||
|
||||
.globl tas
|
||||
tas:
|
||||
pushq %rbp /save prev base pointer
|
||||
movq %rsp,%rbp /new base pointer
|
||||
pushq %rbx /save prev bx
|
||||
movq 8(%rbp),%rbx /load bx with address of lock
|
||||
movq $255,%rax /put something in ax
|
||||
xchgb %al,(%rbx) /swap lock value with "0"
|
||||
cmpb $0,%al /did we get the lock?
|
||||
jne .Locked
|
||||
subq %rax,%rax /yes, we got it -- return 0
|
||||
jmp .Finish
|
||||
.align 8
|
||||
.Locked:
|
||||
movq $1,%rax /no, we didn't get it - return 1
|
||||
.Finish:
|
||||
popq %rbx /restore prev bx
|
||||
movq %rbp,%rsp /restore stack state
|
||||
popq %rbp
|
||||
ret /return
|
||||
.align 8
|
||||
.type tas,@function
|
||||
.size tas,.-tas
|
||||
|
||||
Reference in New Issue
Block a user