| #ifndef __ASM_ALTERNATIVE_ASM_H |
| #define __ASM_ALTERNATIVE_ASM_H |
| |
| #ifdef __ASSEMBLY__ |
| |
| .macro altinstruction_entry orig_offset alt_offset feature orig_len alt_len |
| .word \orig_offset - . |
| .word \alt_offset - . |
| .hword \feature |
| .byte \orig_len |
| .byte \alt_len |
| .endm |
| |
| .macro alternative_insn insn1 insn2 cap |
| 661: \insn1 |
| 662: .pushsection .altinstructions, "a" |
| altinstruction_entry 661b, 663f, \cap, 662b-661b, 664f-663f |
| .popsection |
| .pushsection .altinstr_replacement, "ax" |
| 663: \insn2 |
| 664: .popsection |
| .if ((664b-663b) != (662b-661b)) |
| .error "Alternatives instruction length mismatch" |
| .endif |
| .endm |
| |
| #endif /* __ASSEMBLY__ */ |
| |
| #endif /* __ASM_ALTERNATIVE_ASM_H */ |