Commit | Line | Data |
---|---|---|
e039ee4e AP |
1 | #ifndef __ASM_ALTERNATIVE_ASM_H |
2 | #define __ASM_ALTERNATIVE_ASM_H | |
3 | ||
4 | #ifdef __ASSEMBLY__ | |
5 | ||
6 | .macro altinstruction_entry orig_offset alt_offset feature orig_len alt_len | |
7 | .word \orig_offset - . | |
8 | .word \alt_offset - . | |
9 | .hword \feature | |
10 | .byte \orig_len | |
11 | .byte \alt_len | |
12 | .endm | |
13 | ||
301bcfac AP |
14 | .macro alternative_insn insn1 insn2 cap |
15 | 661: \insn1 | |
16 | 662: .pushsection .altinstructions, "a" | |
17 | altinstruction_entry 661b, 663f, \cap, 662b-661b, 664f-663f | |
18 | .popsection | |
19 | .pushsection .altinstr_replacement, "ax" | |
20 | 663: \insn2 | |
21 | 664: .popsection | |
22 | .if ((664b-663b) != (662b-661b)) | |
23 | .error "Alternatives instruction length mismatch" | |
24 | .endif | |
25 | .endm | |
26 | ||
e039ee4e AP |
27 | #endif /* __ASSEMBLY__ */ |
28 | ||
29 | #endif /* __ASM_ALTERNATIVE_ASM_H */ |