/=============================================================================
/ 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

