14
14
define i8 @add8 (ptr %p ) {
15
15
; X64-LABEL: add8:
16
16
; X64: # %bb.0:
17
- ; X64-NEXT: xorl %eax, %eax
18
- ; X64-NEXT: lock xaddb %al, (%rdi)
19
- ; X64-NEXT: # kill: def $al killed $al killed $eax
17
+ ; X64-NEXT: #MEMBARRIER
18
+ ; X64-NEXT: movzbl (%rdi), %eax
20
19
; X64-NEXT: retq
21
20
;
22
21
; X86-GENERIC-LABEL: add8:
23
22
; X86-GENERIC: # %bb.0:
24
- ; X86-GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx
25
- ; X86-GENERIC-NEXT: xorl %eax, %eax
26
- ; X86-GENERIC-NEXT: lock xaddb %al, (%ecx)
27
- ; X86-GENERIC-NEXT: # kill: def $al killed $al killed $eax
23
+ ; X86-GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
24
+ ; X86-GENERIC-NEXT: #MEMBARRIER
25
+ ; X86-GENERIC-NEXT: movzbl (%eax), %eax
28
26
; X86-GENERIC-NEXT: retl
29
27
;
30
28
; X86-ATOM-LABEL: add8:
31
29
; X86-ATOM: # %bb.0:
32
- ; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx
33
- ; X86-ATOM-NEXT: xorl %eax, %eax
34
- ; X86-ATOM-NEXT: lock xaddb %al, (%ecx)
35
- ; X86-ATOM-NEXT: # kill: def $al killed $al killed $eax
30
+ ; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax
31
+ ; X86-ATOM-NEXT: #MEMBARRIER
32
+ ; X86-ATOM-NEXT: movzbl (%eax), %eax
33
+ ; X86-ATOM-NEXT: nop
34
+ ; X86-ATOM-NEXT: nop
36
35
; X86-ATOM-NEXT: nop
37
36
; X86-ATOM-NEXT: nop
38
37
; X86-ATOM-NEXT: retl
@@ -43,62 +42,64 @@ define i8 @add8(ptr %p) {
43
42
define i16 @or16 (ptr %p ) {
44
43
; X64-LABEL: or16:
45
44
; X64: # %bb.0:
45
+ ; X64-NEXT: #MEMBARRIER
46
46
; X64-NEXT: movzwl (%rdi), %eax
47
- ; X64-NEXT: .p2align 4, 0x90
48
- ; X64-NEXT: .LBB1_1: # %atomicrmw.start
49
- ; X64-NEXT: # =>This Inner Loop Header: Depth=1
50
- ; X64-NEXT: lock cmpxchgw %ax, (%rdi)
51
- ; X64-NEXT: jne .LBB1_1
52
- ; X64-NEXT: # %bb.2: # %atomicrmw.end
53
47
; X64-NEXT: retq
54
48
;
55
- ; X86-LABEL: or16:
56
- ; X86: # %bb.0:
57
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
58
- ; X86-NEXT: movzwl (%ecx), %eax
59
- ; X86-NEXT: .p2align 4, 0x90
60
- ; X86-NEXT: .LBB1_1: # %atomicrmw.start
61
- ; X86-NEXT: # =>This Inner Loop Header: Depth=1
62
- ; X86-NEXT: lock cmpxchgw %ax, (%ecx)
63
- ; X86-NEXT: jne .LBB1_1
64
- ; X86-NEXT: # %bb.2: # %atomicrmw.end
65
- ; X86-NEXT: retl
49
+ ; X86-GENERIC-LABEL: or16:
50
+ ; X86-GENERIC: # %bb.0:
51
+ ; X86-GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
52
+ ; X86-GENERIC-NEXT: #MEMBARRIER
53
+ ; X86-GENERIC-NEXT: movzwl (%eax), %eax
54
+ ; X86-GENERIC-NEXT: retl
55
+ ;
56
+ ; X86-ATOM-LABEL: or16:
57
+ ; X86-ATOM: # %bb.0:
58
+ ; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax
59
+ ; X86-ATOM-NEXT: #MEMBARRIER
60
+ ; X86-ATOM-NEXT: movzwl (%eax), %eax
61
+ ; X86-ATOM-NEXT: nop
62
+ ; X86-ATOM-NEXT: nop
63
+ ; X86-ATOM-NEXT: nop
64
+ ; X86-ATOM-NEXT: nop
65
+ ; X86-ATOM-NEXT: retl
66
66
%1 = atomicrmw or ptr %p , i16 0 syncscope("singlethread" ) acquire
67
67
ret i16 %1
68
68
}
69
69
70
70
define i32 @xor32 (ptr %p ) {
71
71
; X64-LABEL: xor32:
72
72
; X64: # %bb.0:
73
+ ; X64-NEXT: #MEMBARRIER
73
74
; X64-NEXT: movl (%rdi), %eax
74
- ; X64-NEXT: .p2align 4, 0x90
75
- ; X64-NEXT: .LBB2_1: # %atomicrmw.start
76
- ; X64-NEXT: # =>This Inner Loop Header: Depth=1
77
- ; X64-NEXT: lock cmpxchgl %eax, (%rdi)
78
- ; X64-NEXT: jne .LBB2_1
79
- ; X64-NEXT: # %bb.2: # %atomicrmw.end
80
75
; X64-NEXT: retq
81
76
;
82
- ; X86-LABEL: xor32:
83
- ; X86: # %bb.0:
84
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
85
- ; X86-NEXT: movl (%ecx), %eax
86
- ; X86-NEXT: .p2align 4, 0x90
87
- ; X86-NEXT: .LBB2_1: # %atomicrmw.start
88
- ; X86-NEXT: # =>This Inner Loop Header: Depth=1
89
- ; X86-NEXT: lock cmpxchgl %eax, (%ecx)
90
- ; X86-NEXT: jne .LBB2_1
91
- ; X86-NEXT: # %bb.2: # %atomicrmw.end
92
- ; X86-NEXT: retl
77
+ ; X86-GENERIC-LABEL: xor32:
78
+ ; X86-GENERIC: # %bb.0:
79
+ ; X86-GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
80
+ ; X86-GENERIC-NEXT: #MEMBARRIER
81
+ ; X86-GENERIC-NEXT: movl (%eax), %eax
82
+ ; X86-GENERIC-NEXT: retl
83
+ ;
84
+ ; X86-ATOM-LABEL: xor32:
85
+ ; X86-ATOM: # %bb.0:
86
+ ; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax
87
+ ; X86-ATOM-NEXT: #MEMBARRIER
88
+ ; X86-ATOM-NEXT: movl (%eax), %eax
89
+ ; X86-ATOM-NEXT: nop
90
+ ; X86-ATOM-NEXT: nop
91
+ ; X86-ATOM-NEXT: nop
92
+ ; X86-ATOM-NEXT: nop
93
+ ; X86-ATOM-NEXT: retl
93
94
%1 = atomicrmw xor ptr %p , i32 0 syncscope("singlethread" ) release
94
95
ret i32 %1
95
96
}
96
97
97
98
define i64 @sub64 (ptr %p ) {
98
99
; X64-LABEL: sub64:
99
100
; X64: # %bb.0:
100
- ; X64-NEXT: xorl %eax, %eax
101
- ; X64-NEXT: lock xaddq %rax, (%rdi)
101
+ ; X64-NEXT: #MEMBARRIER
102
+ ; X64-NEXT: movq (%rdi), %rax
102
103
; X64-NEXT: retq
103
104
;
104
105
; X86-LABEL: sub64:
@@ -112,7 +113,7 @@ define i64 @sub64(ptr %p) {
112
113
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
113
114
; X86-NEXT: movl (%esi), %eax
114
115
; X86-NEXT: movl 4(%esi), %edx
115
- ; X86-NEXT: .p2align 4, 0x90
116
+ ; X86-NEXT: .p2align 4
116
117
; X86-NEXT: .LBB3_1: # %atomicrmw.start
117
118
; X86-NEXT: # =>This Inner Loop Header: Depth=1
118
119
; X86-NEXT: movl %edx, %ecx
@@ -162,7 +163,7 @@ define i128 @or128(ptr %p) {
162
163
; X86-GENERIC-NEXT: movl 8(%edi), %edx
163
164
; X86-GENERIC-NEXT: movl (%edi), %ebx
164
165
; X86-GENERIC-NEXT: movl 4(%edi), %esi
165
- ; X86-GENERIC-NEXT: .p2align 4, 0x90
166
+ ; X86-GENERIC-NEXT: .p2align 4
166
167
; X86-GENERIC-NEXT: .LBB4_1: # %atomicrmw.start
167
168
; X86-GENERIC-NEXT: # =>This Inner Loop Header: Depth=1
168
169
; X86-GENERIC-NEXT: movl %ebx, (%esp)
@@ -223,7 +224,7 @@ define i128 @or128(ptr %p) {
223
224
; X86-ATOM-NEXT: movl 8(%edi), %edx
224
225
; X86-ATOM-NEXT: movl (%edi), %esi
225
226
; X86-ATOM-NEXT: movl 4(%edi), %ebx
226
- ; X86-ATOM-NEXT: .p2align 4, 0x90
227
+ ; X86-ATOM-NEXT: .p2align 4
227
228
; X86-ATOM-NEXT: .LBB4_1: # %atomicrmw.start
228
229
; X86-ATOM-NEXT: # =>This Inner Loop Header: Depth=1
229
230
; X86-ATOM-NEXT: movl %esi, (%esp)
@@ -271,26 +272,27 @@ define i128 @or128(ptr %p) {
271
272
define i32 @and32 (ptr %p ) {
272
273
; X64-LABEL: and32:
273
274
; X64: # %bb.0:
275
+ ; X64-NEXT: #MEMBARRIER
274
276
; X64-NEXT: movl (%rdi), %eax
275
- ; X64-NEXT: .p2align 4, 0x90
276
- ; X64-NEXT: .LBB5_1: # %atomicrmw.start
277
- ; X64-NEXT: # =>This Inner Loop Header: Depth=1
278
- ; X64-NEXT: lock cmpxchgl %eax, (%rdi)
279
- ; X64-NEXT: jne .LBB5_1
280
- ; X64-NEXT: # %bb.2: # %atomicrmw.end
281
277
; X64-NEXT: retq
282
278
;
283
- ; X86-LABEL: and32:
284
- ; X86: # %bb.0:
285
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
286
- ; X86-NEXT: movl (%ecx), %eax
287
- ; X86-NEXT: .p2align 4, 0x90
288
- ; X86-NEXT: .LBB5_1: # %atomicrmw.start
289
- ; X86-NEXT: # =>This Inner Loop Header: Depth=1
290
- ; X86-NEXT: lock cmpxchgl %eax, (%ecx)
291
- ; X86-NEXT: jne .LBB5_1
292
- ; X86-NEXT: # %bb.2: # %atomicrmw.end
293
- ; X86-NEXT: retl
279
+ ; X86-GENERIC-LABEL: and32:
280
+ ; X86-GENERIC: # %bb.0:
281
+ ; X86-GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
282
+ ; X86-GENERIC-NEXT: #MEMBARRIER
283
+ ; X86-GENERIC-NEXT: movl (%eax), %eax
284
+ ; X86-GENERIC-NEXT: retl
285
+ ;
286
+ ; X86-ATOM-LABEL: and32:
287
+ ; X86-ATOM: # %bb.0:
288
+ ; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax
289
+ ; X86-ATOM-NEXT: #MEMBARRIER
290
+ ; X86-ATOM-NEXT: movl (%eax), %eax
291
+ ; X86-ATOM-NEXT: nop
292
+ ; X86-ATOM-NEXT: nop
293
+ ; X86-ATOM-NEXT: nop
294
+ ; X86-ATOM-NEXT: nop
295
+ ; X86-ATOM-NEXT: retl
294
296
%1 = atomicrmw and ptr %p , i32 -1 syncscope("singlethread" ) acq_rel
295
297
ret i32 %1
296
298
}
@@ -449,7 +451,7 @@ define void @or64_nouse_seq_cst(ptr %p) {
449
451
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
450
452
; X86-NEXT: movl (%esi), %eax
451
453
; X86-NEXT: movl 4(%esi), %edx
452
- ; X86-NEXT: .p2align 4, 0x90
454
+ ; X86-NEXT: .p2align 4
453
455
; X86-NEXT: .LBB11_1: # %atomicrmw.start
454
456
; X86-NEXT: # =>This Inner Loop Header: Depth=1
455
457
; X86-NEXT: movl %edx, %ecx
@@ -500,7 +502,7 @@ define void @or128_nouse_seq_cst(ptr %p) {
500
502
; X86-GENERIC-NEXT: movl 8(%esi), %edi
501
503
; X86-GENERIC-NEXT: movl (%esi), %edx
502
504
; X86-GENERIC-NEXT: movl 4(%esi), %ebx
503
- ; X86-GENERIC-NEXT: .p2align 4, 0x90
505
+ ; X86-GENERIC-NEXT: .p2align 4
504
506
; X86-GENERIC-NEXT: .LBB12_1: # %atomicrmw.start
505
507
; X86-GENERIC-NEXT: # =>This Inner Loop Header: Depth=1
506
508
; X86-GENERIC-NEXT: movl %edx, (%esp)
@@ -557,7 +559,7 @@ define void @or128_nouse_seq_cst(ptr %p) {
557
559
; X86-ATOM-NEXT: movl 8(%esi), %edx
558
560
; X86-ATOM-NEXT: movl (%esi), %eax
559
561
; X86-ATOM-NEXT: movl 4(%esi), %edi
560
- ; X86-ATOM-NEXT: .p2align 4, 0x90
562
+ ; X86-ATOM-NEXT: .p2align 4
561
563
; X86-ATOM-NEXT: .LBB12_1: # %atomicrmw.start
562
564
; X86-ATOM-NEXT: # =>This Inner Loop Header: Depth=1
563
565
; X86-ATOM-NEXT: movl %eax, (%esp)
0 commit comments