77
77
ENTRY(atomic_inc_8_nv)
78
78
ALTENTRY(atomic_inc_uchar_nv)
79
movb (%rdi), %al // %al = old value
81
leaq 1(%rax), %rcx // %cl = new value
83
cmpxchgb %cl, (%rdi) // try to stick it in
85
movzbl %cl, %eax // return new value
87
87
SET_SIZE(atomic_inc_uchar_nv)
88
88
SET_SIZE(atomic_inc_8_nv)
90
90
ENTRY(atomic_inc_16_nv)
91
91
ALTENTRY(atomic_inc_ushort_nv)
92
movw (%rdi), %ax // %ax = old value
94
leaq 1(%rax), %rcx // %cx = new value
96
cmpxchgw %cx, (%rdi) // try to stick it in
98
movzwl %cx, %eax // return new value
100
100
SET_SIZE(atomic_inc_ushort_nv)
101
101
SET_SIZE(atomic_inc_16_nv)
103
103
ENTRY(atomic_inc_32_nv)
104
104
ALTENTRY(atomic_inc_uint_nv)
105
movl (%rdi), %eax // %eax = old value
107
leaq 1(%rax), %rcx // %ecx = new value
109
cmpxchgl %ecx, (%rdi)
109
cmpxchgl %ecx, (%rdi) // try to stick it in
111
movl %ecx, %eax // return new value
113
113
SET_SIZE(atomic_inc_uint_nv)
114
114
SET_SIZE(atomic_inc_32_nv)
116
116
ENTRY(atomic_inc_64_nv)
117
117
ALTENTRY(atomic_inc_ulong_nv)
118
movq (%rdi), %rax // %rax = old value
120
leaq 1(%rax), %rcx // %rcx = new value
122
cmpxchgq %rcx, (%rdi)
122
cmpxchgq %rcx, (%rdi) // try to stick it in
124
movq %rcx, %rax // return new value
126
126
SET_SIZE(atomic_inc_ulong_nv)
127
127
SET_SIZE(atomic_inc_64_nv)
161
161
ENTRY(atomic_dec_8_nv)
162
162
ALTENTRY(atomic_dec_uchar_nv)
163
movb (%rdi), %al // %al = old value
165
leaq -1(%rax), %rcx // %cl = new value
167
cmpxchgb %cl, (%rdi) // try to stick it in
169
movzbl %cl, %eax // return new value
171
171
SET_SIZE(atomic_dec_uchar_nv)
172
172
SET_SIZE(atomic_dec_8_nv)
174
174
ENTRY(atomic_dec_16_nv)
175
175
ALTENTRY(atomic_dec_ushort_nv)
176
movw (%rdi), %ax // %ax = old value
178
leaq -1(%rax), %rcx // %cx = new value
180
cmpxchgw %cx, (%rdi) // try to stick it in
182
movzwl %cx, %eax // return new value
184
184
SET_SIZE(atomic_dec_ushort_nv)
185
185
SET_SIZE(atomic_dec_16_nv)
187
187
ENTRY(atomic_dec_32_nv)
188
188
ALTENTRY(atomic_dec_uint_nv)
189
movl (%rdi), %eax // %eax = old value
191
leaq -1(%rax), %rcx // %ecx = new value
193
cmpxchgl %ecx, (%rdi)
193
cmpxchgl %ecx, (%rdi) // try to stick it in
195
movl %ecx, %eax // return new value
197
197
SET_SIZE(atomic_dec_uint_nv)
198
198
SET_SIZE(atomic_dec_32_nv)
200
200
ENTRY(atomic_dec_64_nv)
201
201
ALTENTRY(atomic_dec_ulong_nv)
202
movq (%rdi), %rax // %rax = old value
204
leaq -1(%rax), %rcx // %rcx = new value
206
cmpxchgq %rcx, (%rdi)
206
cmpxchgq %rcx, (%rdi) // try to stick it in
208
movq %rcx, %rax // return new value
210
210
SET_SIZE(atomic_dec_ulong_nv)
211
211
SET_SIZE(atomic_dec_64_nv)
311
311
ENTRY(atomic_add_8_nv)
312
312
ALTENTRY(atomic_add_char_nv)
313
movb (%rdi), %al // %al = old value
316
addb %al, %cl // %cl = new value
318
cmpxchgb %cl, (%rdi) // try to stick it in
320
movzbl %cl, %eax // return new value
322
322
SET_SIZE(atomic_add_char_nv)
323
323
SET_SIZE(atomic_add_8_nv)
325
325
ENTRY(atomic_add_16_nv)
326
326
ALTENTRY(atomic_add_short_nv)
327
movw (%rdi), %ax // %ax = old value
330
addw %ax, %cx // %cx = new value
332
cmpxchgw %cx, (%rdi) // try to stick it in
334
movzwl %cx, %eax // return new value
336
336
SET_SIZE(atomic_add_short_nv)
337
337
SET_SIZE(atomic_add_16_nv)
369
369
ENTRY(atomic_and_8_nv)
370
370
ALTENTRY(atomic_and_uchar_nv)
371
movb (%rdi), %al // %al = old value
374
andb %al, %cl // %cl = new value
376
cmpxchgb %cl, (%rdi) // try to stick it in
378
movzbl %cl, %eax // return new value
380
380
SET_SIZE(atomic_and_uchar_nv)
381
381
SET_SIZE(atomic_and_8_nv)
383
383
ENTRY(atomic_and_16_nv)
384
384
ALTENTRY(atomic_and_ushort_nv)
385
movw (%rdi), %ax // %ax = old value
388
andw %ax, %cx // %cx = new value
390
cmpxchgw %cx, (%rdi) // try to stick it in
392
movzwl %cx, %eax // return new value
394
394
SET_SIZE(atomic_and_ushort_nv)
395
395
SET_SIZE(atomic_and_16_nv)
425
425
ENTRY(atomic_or_8_nv)
426
426
ALTENTRY(atomic_or_uchar_nv)
427
movb (%rdi), %al // %al = old value
430
orb %al, %cl // %cl = new value
432
cmpxchgb %cl, (%rdi) // try to stick it in
434
movzbl %cl, %eax // return new value
436
436
SET_SIZE(atomic_and_uchar_nv)
437
437
SET_SIZE(atomic_and_8_nv)
439
439
ENTRY(atomic_or_16_nv)
440
440
ALTENTRY(atomic_or_ushort_nv)
441
movw (%rdi), %ax // %ax = old value
444
orw %ax, %cx // %cx = new value
446
cmpxchgw %cx, (%rdi) // try to stick it in
448
movzwl %cx, %eax // return new value
450
450
SET_SIZE(atomic_or_ushort_nv)
451
451
SET_SIZE(atomic_or_16_nv)