• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
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 
27 #endif  /*  __ASSEMBLY__  */
28 
29 #endif /* __ASM_ALTERNATIVE_ASM_H */
30