|
Lines 299-305
Link Here
|
| 299 |
*/ |
299 |
*/ |
| 300 |
#define alternative(oldinstr, newinstr, feature) \ |
300 |
#define alternative(oldinstr, newinstr, feature) \ |
| 301 |
asm volatile ("661:\n\t" oldinstr "\n662:\n" \ |
301 |
asm volatile ("661:\n\t" oldinstr "\n662:\n" \ |
| 302 |
".section .altinstructions,\"a\"\n" \ |
302 |
".section .altinstructions,\"aw\"\n" \ |
| 303 |
" .align 4\n" \ |
303 |
" .align 4\n" \ |
| 304 |
" .long 661b\n" /* label */ \ |
304 |
" .long 661b\n" /* label */ \ |
| 305 |
" .long 663f\n" /* new instruction */ \ |
305 |
" .long 663f\n" /* new instruction */ \ |
|
Lines 307-313
Link Here
|
| 307 |
" .byte 662b-661b\n" /* sourcelen */ \ |
307 |
" .byte 662b-661b\n" /* sourcelen */ \ |
| 308 |
" .byte 664f-663f\n" /* replacementlen */ \ |
308 |
" .byte 664f-663f\n" /* replacementlen */ \ |
| 309 |
".previous\n" \ |
309 |
".previous\n" \ |
| 310 |
".section .altinstr_replacement,\"ax\"\n" \ |
310 |
".section .altinstr_replacement,\"awx\"\n" \ |
| 311 |
"663:\n\t" newinstr "\n664:\n" /* replacement */ \ |
311 |
"663:\n\t" newinstr "\n664:\n" /* replacement */ \ |
| 312 |
".previous" :: "i" (feature) : "memory") |
312 |
".previous" :: "i" (feature) : "memory") |
| 313 |
|
313 |
|
|
Lines 323-329
Link Here
|
| 323 |
*/ |
323 |
*/ |
| 324 |
#define alternative_input(oldinstr, newinstr, feature, input) \ |
324 |
#define alternative_input(oldinstr, newinstr, feature, input) \ |
| 325 |
asm volatile ("661:\n\t" oldinstr "\n662:\n" \ |
325 |
asm volatile ("661:\n\t" oldinstr "\n662:\n" \ |
| 326 |
".section .altinstructions,\"a\"\n" \ |
326 |
".section .altinstructions,\"aw\"\n" \ |
| 327 |
" .align 4\n" \ |
327 |
" .align 4\n" \ |
| 328 |
" .long 661b\n" /* label */ \ |
328 |
" .long 661b\n" /* label */ \ |
| 329 |
" .long 663f\n" /* new instruction */ \ |
329 |
" .long 663f\n" /* new instruction */ \ |
|
Lines 331-337
Link Here
|
| 331 |
" .byte 662b-661b\n" /* sourcelen */ \ |
331 |
" .byte 662b-661b\n" /* sourcelen */ \ |
| 332 |
" .byte 664f-663f\n" /* replacementlen */ \ |
332 |
" .byte 664f-663f\n" /* replacementlen */ \ |
| 333 |
".previous\n" \ |
333 |
".previous\n" \ |
| 334 |
".section .altinstr_replacement,\"ax\"\n" \ |
334 |
".section .altinstr_replacement,\"awx\"\n" \ |
| 335 |
"663:\n\t" newinstr "\n664:\n" /* replacement */ \ |
335 |
"663:\n\t" newinstr "\n664:\n" /* replacement */ \ |
| 336 |
".previous" :: "i" (feature), input) |
336 |
".previous" :: "i" (feature), input) |
| 337 |
|
337 |
|