xref: /inferno-os/lib9/lock-Unixware-386.s (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1	.section	.bss
2	.align	4
3.L4_.bss:
4	.align	4
5Unixware_Asm_IntP: / Offset 0
6	.type	Unixware_Asm_IntP,@object
7	.size	Unixware_Asm_IntP,4
8	.set	.,.+4
9Unixware_Asm_VoidP: / Offset 4
10	.type	Unixware_Asm_VoidP,@object
11	.size	Unixware_Asm_VoidP,4
12	.set	.,.+4
13	.section	.data
14	.align	4
15.L2_.data:
16	.align	4
17.L01:	.string	"canlock corrupted 0x%lux\n\000"
18	.set	.,.+0x2
19	.section	.text
20	.align	4
21.L1_.text:
22
23	.align	4
24	.align	4
25	.globl	canlock
26canlock:
27	pushl	%ebp
28	movl	%esp,%ebp
29	pushl	%esi
30	movl	8(%ebp),%eax
31	movl	%eax,Unixware_Asm_IntP
32	movl	$1, %ecx
33	xchg	(%eax), %ecx
34	andl	%ecx,%ecx
35	jne	.L1
36	movl	$1,%esi
37	jmp	.L2
38	.align	4
39.L3:
40	subl	%esi,%esi
41	jmp	.L2
42	.align	4
43.L1:
44	cmpl	$1,%ecx
45	je	.L3
46	pushl	%ecx
47	pushl	$.L01
48	call	print
49	addl	$8,%esp
50.L2:
51	movl	%esi,%eax
52	popl	%esi
53	leave
54	ret
55	.type	canlock,@function
56	.size	canlock,.-canlock
57