x86_32-optimal_nop.s revision 648ac5153e2317d8eb21c5b201f7c58e6a04e2d6
1// RUN: llvm-mc -triple i386-apple-darwin9 %s -filetype=obj -o - | macho-dump --dump-section-data | 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, 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
155f0:
156        .byte 0
157	.align	4, 0x90
158        .long 0
159
160// CHECK: ('cputype', 7)
161// CHECK: ('cpusubtype', 3)
162// CHECK: ('filetype', 1)
163// CHECK: ('num_load_commands', 1)
164// CHECK: ('load_commands_size', 296)
165// CHECK: ('flag', 0)
166// CHECK: ('load_commands', [
167// CHECK:   # Load Command 0
168// CHECK:  (('command', 1)
169// CHECK:   ('size', 192)
170// CHECK:   ('segment_name', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
171// CHECK:   ('vm_addr', 0)
172// CHECK:   ('vm_size', 372)
173// CHECK:   ('file_offset', 324)
174// CHECK:   ('file_size', 372)
175// CHECK:   ('maxprot', 7)
176// CHECK:   ('initprot', 7)
177// CHECK:   ('num_sections', 2)
178// CHECK:   ('flags', 0)
179// CHECK:   ('sections', [
180// CHECK:     # Section 0
181// CHECK:    (('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
182// CHECK:     ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
183// CHECK:     ('address', 0)
184// CHECK:     ('size', 337)
185// CHECK:     ('offset', 324)
186// CHECK:     ('alignment', 4)
187// CHECK:     ('reloc_offset', 0)
188// CHECK:     ('num_reloc', 0)
189// CHECK:     ('flags', 0x80000400)
190// CHECK:     ('reserved1', 0)
191// CHECK:     ('reserved2', 0)
192// CHECK:    ),
193// CHECK:   ('_relocations', [
194// CHECK:   ])
195// CHECK:   ('_section_data', '\xc3\x90\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc3f\x90\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x0f\x1f\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc3\xc3\xc3\x0f\x1f@\x00\xc3\x00\x00\x00\x00\x00\x00\x00\xc3\xc3\xc3\x0f\x1fD\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\xc3\xc3f\x0f\x1fD\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\xc3\x0f\x1f\x80\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\xc3\xc3\xc3\xc3\xc3\xc3\xc3\xc3\xc3\x00\x00\x00\x00\x00\x00\x00\xc3\xc3\xc3\xc3\xc3\xc3\xc3f\x0f\x1f\x84\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc3\xc3\xc3\xc3\xc3\xc3f\x0f\x1f\x84\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc3\xc3\xc3\xc3\x0f\x1fD\x00\x00f\x0f\x1fD\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc3\xc3\xc3f\x0f\x1fD\x00\x00f\x0f\x1fD\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc3\xc3f\x0f\x1fD\x00\x00\x0f\x1f\x80\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc3\x0f\x1f\x80\x00\x00\x00\x00\x0f\x1f\x80\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x0f\x1f\x80\x00\x00\x00\x00\x0f\x1f\x84\x00\x00\x00\x00\x00\xc3')
196// CHECK:     # Section 1
197// CHECK:    (('section_name', '__const\x00\x00\x00\x00\x00\x00\x00\x00\x00')
198// CHECK:     ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
199// CHECK:     ('address', 352)
200// CHECK:     ('size', 20)
201// CHECK:     ('offset', 676)
202// CHECK:     ('alignment', 4)
203// CHECK:     ('reloc_offset', 0)
204// CHECK:     ('num_reloc', 0)
205// CHECK:     ('flags', 0x0)
206// CHECK:     ('reserved1', 0)
207// CHECK:     ('reserved2', 0)
208// CHECK:    ),
209// CHECK:   ('_relocations', [
210// CHECK:   ])
211// CHECK:   ('_section_data', '\x00\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x00\x00\x00\x00')
212// CHECK:   ])
213// CHECK:  ),
214// CHECK:   # Load Command 1
215// CHECK:  (('command', 2)
216// CHECK:   ('size', 24)
217// CHECK:   ('symoff', 696)
218// CHECK:   ('nsyms', 1)
219// CHECK:   ('stroff', 708)
220// CHECK:   ('strsize', 4)
221// CHECK:   ('_string_data', '\x00f0\x00')
222// CHECK:   ('_symbols', [
223// CHECK:     # Symbol 0
224// CHECK:    (('n_strx', 1)
225// CHECK:     ('n_type', 0xe)
226// CHECK:     ('n_sect', 2)
227// CHECK:     ('n_desc', 0)
228// CHECK:     ('n_value', 352)
229// CHECK:     ('_string', 'f0')
230// CHECK:    ),
231// CHECK:   ])
232// CHECK:  ),
233// CHECK:   # Load Command 2
234// CHECK:  (('command', 11)
235// CHECK:   ('size', 80)
236// CHECK:   ('ilocalsym', 0)
237// CHECK:   ('nlocalsym', 1)
238// CHECK:   ('iextdefsym', 1)
239// CHECK:   ('nextdefsym', 0)
240// CHECK:   ('iundefsym', 1)
241// CHECK:   ('nundefsym', 0)
242// CHECK:   ('tocoff', 0)
243// CHECK:   ('ntoc', 0)
244// CHECK:   ('modtaboff', 0)
245// CHECK:   ('nmodtab', 0)
246// CHECK:   ('extrefsymoff', 0)
247// CHECK:   ('nextrefsyms', 0)
248// CHECK:   ('indirectsymoff', 0)
249// CHECK:   ('nindirectsyms', 0)
250// CHECK:   ('extreloff', 0)
251// CHECK:   ('nextrel', 0)
252// CHECK:   ('locreloff', 0)
253// CHECK:   ('nlocrel', 0)
254// CHECK:   ('_indirect_symbols', [
255// CHECK:   ])
256// CHECK:  ),
257// CHECK: ])
258