diff options
| author | Charles.Forsyth <devnull@localhost> | 2006-12-22 17:07:39 +0000 |
|---|---|---|
| committer | Charles.Forsyth <devnull@localhost> | 2006-12-22 17:07:39 +0000 |
| commit | 37da2899f40661e3e9631e497da8dc59b971cbd0 (patch) | |
| tree | cbc6d4680e347d906f5fa7fca73214418741df72 /lib9/lock-Unixware-386.s | |
| parent | 54bc8ff236ac10b3eaa928fd6bcfc0cdb2ba46ae (diff) | |
20060303a
Diffstat (limited to 'lib9/lock-Unixware-386.s')
| -rw-r--r-- | lib9/lock-Unixware-386.s | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/lib9/lock-Unixware-386.s b/lib9/lock-Unixware-386.s new file mode 100644 index 00000000..efa33d02 --- /dev/null +++ b/lib9/lock-Unixware-386.s @@ -0,0 +1,56 @@ + .section .bss + .align 4 +.L4_.bss: + .align 4 +Unixware_Asm_IntP: / Offset 0 + .type Unixware_Asm_IntP,@object + .size Unixware_Asm_IntP,4 + .set .,.+4 +Unixware_Asm_VoidP: / Offset 4 + .type Unixware_Asm_VoidP,@object + .size Unixware_Asm_VoidP,4 + .set .,.+4 + .section .data + .align 4 +.L2_.data: + .align 4 +.L01: .string "canlock corrupted 0x%lux\n\000" + .set .,.+0x2 + .section .text + .align 4 +.L1_.text: + + .align 4 + .align 4 + .globl canlock +canlock: + pushl %ebp + movl %esp,%ebp + pushl %esi + movl 8(%ebp),%eax + movl %eax,Unixware_Asm_IntP + movl $1, %ecx + xchg (%eax), %ecx + andl %ecx,%ecx + jne .L1 + movl $1,%esi + jmp .L2 + .align 4 +.L3: + subl %esi,%esi + jmp .L2 + .align 4 +.L1: + cmpl $1,%ecx + je .L3 + pushl %ecx + pushl $.L01 + call print + addl $8,%esp +.L2: + movl %esi,%eax + popl %esi + leave + ret + .type canlock,@function + .size canlock,.-canlock |
