1	.text
2
3	.align 4,0x90
4	.globl q_atomic_test_and_set_int
5q_atomic_test_and_set_int:
6	movl		 4(%esp),%ecx
7	movl		 8(%esp),%eax
8	movl		12(%esp),%edx
9	lock
10	cmpxchgl	%edx,(%ecx)
11	mov		$0,%eax
12 	sete		%al
13	ret
14	.align 4,0x90
15	.type q_atomic_test_and_set_int,@function
16	.size q_atomic_test_and_set_int,.-q_atomic_test_and_set_int
17
18	.align 4,0x90
19	.globl q_atomic_test_and_set_ptr
20q_atomic_test_and_set_ptr:
21	movl		 4(%esp),%ecx
22	movl		 8(%esp),%eax
23	movl		12(%esp),%edx
24	lock
25	cmpxchgl	%edx,(%ecx)
26	mov		$0,%eax
27	sete		%al
28	ret
29	.align    4,0x90
30	.type	q_atomic_test_and_set_ptr,@function
31	.size	q_atomic_test_and_set_ptr,.-q_atomic_test_and_set_ptr
32
33	.align 4,0x90
34	.globl q_atomic_increment
35q_atomic_increment:
36	movl 4(%esp), %ecx
37	lock
38	incl (%ecx)
39	mov $0,%eax
40	setne %al
41	ret
42	.align 4,0x90
43	.type q_atomic_increment,@function
44	.size	q_atomic_increment,.-q_atomic_increment
45
46	.align 4,0x90
47	.globl q_atomic_decrement
48q_atomic_decrement:
49	movl 4(%esp), %ecx
50	lock
51	decl (%ecx)
52	mov $0,%eax
53	setne %al
54	ret
55	.align 4,0x90
56	.type q_atomic_decrement,@function
57	.size	q_atomic_decrement,.-q_atomic_decrement
58
59	.align 4,0x90
60	.globl q_atomic_set_int
61q_atomic_set_int:
62	mov 4(%esp),%ecx
63	mov 8(%esp),%eax
64	xchgl %eax,(%ecx)
65	ret
66	.align 4,0x90
67	.type q_atomic_set_int,@function
68	.size	q_atomic_set_int,.-q_atomic_set_int
69
70	.align 4,0x90
71	.globl q_atomic_set_ptr
72q_atomic_set_ptr:
73	mov 4(%esp),%ecx
74	mov 8(%esp),%eax
75	xchgl %eax,(%ecx)
76	ret
77	.align 4,0x90
78	.type q_atomic_set_ptr,@function
79	.size	q_atomic_set_ptr,.-q_atomic_set_ptr
80
81        .align 4,0x90
82        .globl q_atomic_fetch_and_add_int
83q_atomic_fetch_and_add_int:
84        mov 4(%esp),%ecx
85        mov 8(%esp),%eax
86        lock
87        xadd %eax,(%ecx)
88        ret
89        .align 4,0x90
90        .type q_atomic_fetch_and_add_int,@function
91        .size q_atomic_fetch_and_add_int,.-q_atomic_fetch_and_add_int
92
93        .align 4,0x90
94        .globl q_atomic_fetch_and_add_ptr
95q_atomic_fetch_and_add_ptr:
96        mov 4(%esp),%ecx
97        mov 8(%esp),%eax
98        lock
99        xadd %eax,(%ecx)
100        ret
101        .align 4,0x90
102        .type q_atomic_fetch_and_add_ptr,@function
103        .size q_atomic_fetch_and_add_ptr,.-q_atomic_fetch_and_add_ptr
104