Taints the non-acquire RMW's store address with the load part
[oota-llvm.git] / test / MC / MachO / x86_32-optimal_nop.s
1 // RUN: llvm-mc -triple i386-apple-darwin9 %s -filetype=obj -o - | llvm-readobj -file-headers -s -sd -r -t -macho-segment -macho-dysymtab -macho-indirect-symbols | FileCheck %s
2
3 # 1 byte nop test
4         .align 4, 0 # start with 16 byte alignment filled with zeros
5         ret
6         # nop
7         # 0x90
8         .align 1, 0x90
9         ret
10 # 2 byte nop test
11         .align 4, 0 # start with 16 byte alignment filled with zeros
12         ret
13         ret
14         # xchg %ax,%ax
15         # 0x66, 0x90
16         .align 2, 0x90
17         ret
18 # 3 byte nop test
19         .align 4, 0 # start with 16 byte alignment filled with zeros
20         ret
21         # nopl (%[re]ax)
22         # 0x0f, 0x1f, 0x00
23         .align 2, 0x90
24         ret
25 # 4 byte nop test
26         .align 4, 0 # start with 16 byte alignment filled with zeros
27         ret
28         ret
29         ret
30         ret
31         # nopl 0(%[re]ax)
32         # 0x0f, 0x1f, 0x40, 0x00
33         .align 3, 0x90
34         ret
35 # 5 byte nop test
36         .align 4, 0 # start with 16 byte alignment filled with zeros
37         ret
38         ret
39         ret
40         # nopl 0(%[re]ax,%[re]ax,1)
41         # 0x0f, 0x1f, 0x44, 0x00, 0x00
42         .align 3, 0x90
43         ret
44 # 6 byte nop test
45         .align 4, 0 # start with 16 byte alignment filled with zeros
46         ret
47         ret
48         # nopw 0(%[re]ax,%[re]ax,1)
49         # 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00
50         .align 3, 0x90
51         ret
52 # 7 byte nop test
53         .align 4, 0 # start with 16 byte alignment filled with zeros
54         ret
55         # nopl 0L(%[re]ax)
56         # 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00
57         .align 3, 0x90
58         ret
59 # 8 byte nop test
60         .align 4, 0 # start with 16 byte alignment filled with zeros
61         ret
62         ret
63         ret
64         ret
65         ret
66         ret
67         ret
68         ret
69         # nopl 0L(%[re]ax,%[re]ax,1)
70         # 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00
71         .align 3, 0x90
72         ret
73 # 9 byte nop test
74         .align 4, 0 # start with 16 byte alignment filled with zeros
75         ret
76         ret
77         ret
78         ret
79         ret
80         ret
81         ret
82         # nopw 0L(%[re]ax,%[re]ax,1)
83         # 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00
84         .align 4, 0x90
85         ret
86 # 10 byte nop test
87         .align 4, 0 # start with 16 byte alignment filled with zeros
88         ret
89         ret
90         ret
91         ret
92         ret
93         ret
94         ret
95         # nopw %cs:0L(%[re]ax,%[re]ax,1)
96         # 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00
97         .align 4, 0x90
98         ret
99 # 11 byte nop test
100         .align 4, 0 # start with 16 byte alignment filled with zeros
101         ret
102         ret
103         ret
104         ret
105         ret
106         # nopw %cs:0L(%[re]ax,%[re]ax,1)
107         # 0x66, 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00
108         .align 4, 0x90
109         ret
110 # 12 byte nop test
111         .align 4, 0 # start with 16 byte alignment filled with zeros
112         ret
113         ret
114         ret
115         ret
116         # nopw 0(%[re]ax,%[re]ax,1)
117         # nopw 0(%[re]ax,%[re]ax,1)
118         # 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00,
119         # 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00
120         .align 4, 0x90
121         ret
122 # 13 byte nop test
123         .align 4, 0 # start with 16 byte alignment filled with zeros
124         ret
125         ret
126         ret
127         # nopw 0(%[re]ax,%[re]ax,1)
128         # nopl 0L(%[re]ax)
129         # 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00,
130         # 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00
131         .align 4, 0x90
132         ret
133 # 14 byte nop test
134         .align 4, 0 # start with 16 byte alignment filled with zeros
135         ret
136         ret
137         # nopl 0L(%[re]ax)
138         # nopl 0L(%[re]ax)
139         # 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00,
140         # 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00
141         .align 4, 0x90
142         ret
143 # 15 byte nop test
144         .align 4, 0 # start with 16 byte alignment filled with zeros
145         ret
146         # nopl 0L(%[re]ax)
147         # nopl 0L(%[re]ax,%[re]ax,1)
148         # 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00,
149         # 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00
150         .align 4, 0x90
151         ret
152
153         # Only the .text sections gets optimal nops.
154         .section        __TEXT,__const
155 f0:
156         .byte 0
157         .align  4, 0x90
158         .long 0
159
160 // CHECK: File: <stdin>
161 // CHECK: Format: Mach-O 32-bit i386
162 // CHECK: Arch: i386
163 // CHECK: AddressSize: 32bit
164 // CHECK: MachHeader {
165 // CHECK:   Magic: Magic (0xFEEDFACE)
166 // CHECK:   CpuType: X86 (0x7)
167 // CHECK:   CpuSubType: CPU_SUBTYPE_I386_ALL (0x3)
168 // CHECK:   FileType: Relocatable (0x1)
169 // CHECK:   NumOfLoadCommands: 4
170 // CHECK:   SizeOfLoadCommands: 312
171 // CHECK:   Flags [ (0x0)
172 // CHECK:   ]
173 // CHECK: }
174 // CHECK: Sections [
175 // CHECK:   Section {
176 // CHECK:     Index: 0
177 // CHECK:     Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00)
178 // CHECK:     Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
179 // CHECK:     Address: 0x0
180 // CHECK:     Size: 0x151
181 // CHECK:     Offset: 340
182 // CHECK:     Alignment: 4
183 // CHECK:     RelocationOffset: 0x0
184 // CHECK:     RelocationCount: 0
185 // CHECK:     Type: 0x0
186 // CHECK:     Attributes [ (0x800004)
187 // CHECK:       PureInstructions (0x800000)
188 // CHECK:       SomeInstructions (0x4)
189 // CHECK:     ]
190 // CHECK:     Reserved1: 0x0
191 // CHECK:     Reserved2: 0x0
192 // CHECK:     SectionData (
193 // CHECK:       0000: C390C300 00000000 00000000 00000000  |................|
194 // CHECK:       0010: C3C36690 C3000000 00000000 00000000  |..f.............|
195 // CHECK:       0020: C30F1F00 C3000000 00000000 00000000  |................|
196 // CHECK:       0030: C3C3C3C3 0F1F4000 C3000000 00000000  |......@.........|
197 // CHECK:       0040: C3C3C30F 1F440000 C3000000 00000000  |.....D..........|
198 // CHECK:       0050: C3C3660F 1F440000 C3000000 00000000  |..f..D..........|
199 // CHECK:       0060: C30F1F80 00000000 C3000000 00000000  |................|
200 // CHECK:       0070: C3C3C3C3 C3C3C3C3 C3000000 00000000  |................|
201 // CHECK:       0080: C3C3C3C3 C3C3C366 0F1F8400 00000000  |.......f........|
202 // CHECK:       0090: C3000000 00000000 00000000 00000000  |................|
203 // CHECK:       00A0: C3C3C3C3 C3C3C366 0F1F8400 00000000  |.......f........|
204 // CHECK:       00B0: C3000000 00000000 00000000 00000000  |................|
205 // CHECK:       00C0: C3C3C3C3 C366662E 0F1F8400 00000000  |.....ff.........|
206 // CHECK:       00D0: C3000000 00000000 00000000 00000000  |................|
207 // CHECK:       00E0: C3C3C3C3 6666662E 0F1F8400 00000000  |....fff.........|
208 // CHECK:       00F0: C3000000 00000000 00000000 00000000  |................|
209 // CHECK:       0100: C3C3C366 6666662E 0F1F8400 00000000  |...ffff.........|
210 // CHECK:       0110: C3000000 00000000 00000000 00000000  |................|
211 // CHECK:       0120: C3C36666 6666662E 0F1F8400 00000000  |..fffff.........|
212 // CHECK:       0130: C3000000 00000000 00000000 00000000  |................|
213 // CHECK:       0140: C3666666 6666662E 0F1F8400 00000000  |.ffffff.........|
214 // CHECK:       0150: C3                                   |.|
215 // CHECK:     )
216 // CHECK:   }
217 // CHECK:   Section {
218 // CHECK:     Index: 1
219 // CHECK:     Name: __const (5F 5F 63 6F 6E 73 74 00 00 00 00 00 00 00 00 00)
220 // CHECK:     Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
221 // CHECK:     Address: 0x160
222 // CHECK:     Size: 0x14
223 // CHECK:     Offset: 692
224 // CHECK:     Alignment: 4
225 // CHECK:     RelocationOffset: 0x0
226 // CHECK:     RelocationCount: 0
227 // CHECK:     Type: 0x0
228 // CHECK:     Attributes [ (0x0)
229 // CHECK:     ]
230 // CHECK:     Reserved1: 0x0
231 // CHECK:     Reserved2: 0x0
232 // CHECK:     SectionData (
233 // CHECK:       0000: 00909090 90909090 90909090 90909090  |................|
234 // CHECK:       0010: 00000000                             |....|
235 // CHECK:     )
236 // CHECK:   }
237 // CHECK: ]
238 // CHECK: Relocations [
239 // CHECK: ]
240 // CHECK: Symbols [
241 // CHECK:   Symbol {
242 // CHECK:     Name: f0 (1)
243 // CHECK:     Type: Section (0xE)
244 // CHECK:     Section: __const (0x2)
245 // CHECK:     RefType: UndefinedNonLazy (0x0)
246 // CHECK:     Flags [ (0x0)
247 // CHECK:     ]
248 // CHECK:     Value: 0x160
249 // CHECK:   }
250 // CHECK: ]
251 // CHECK: Indirect Symbols {
252 // CHECK:   Number: 0
253 // CHECK:   Symbols [
254 // CHECK:   ]
255 // CHECK: }
256 // CHECK: Segment {
257 // CHECK:   Cmd: LC_SEGMENT
258 // CHECK:   Name: 
259 // CHECK:   Size: 192
260 // CHECK:   vmaddr: 0x0
261 // CHECK:   vmsize: 0x174
262 // CHECK:   fileoff: 340
263 // CHECK:   filesize: 372
264 // CHECK:   maxprot: rwx
265 // CHECK:   initprot: rwx
266 // CHECK:   nsects: 2
267 // CHECK:   flags: 0x0
268 // CHECK: }
269 // CHECK: Dysymtab {
270 // CHECK:   ilocalsym: 0
271 // CHECK:   nlocalsym: 1
272 // CHECK:   iextdefsym: 1
273 // CHECK:   nextdefsym: 0
274 // CHECK:   iundefsym: 1
275 // CHECK:   nundefsym: 0
276 // CHECK:   tocoff: 0
277 // CHECK:   ntoc: 0
278 // CHECK:   modtaboff: 0
279 // CHECK:   nmodtab: 0
280 // CHECK:   extrefsymoff: 0
281 // CHECK:   nextrefsyms: 0
282 // CHECK:   indirectsymoff: 0
283 // CHECK:   nindirectsyms: 0
284 // CHECK:   extreloff: 0
285 // CHECK:   nextrel: 0
286 // CHECK:   locreloff: 0
287 // CHECK:   nlocrel: 0
288 // CHECK: }