Skip to content

Commit fbdba60

Browse files
mmindpalmer-dabbelt
authored andcommitted
riscv: implement ALTERNATIVE_2 macro
When the alternatives were added the commit already provided a template on how to implement 2 different alternatives for one piece of code. Make this usable. Signed-off-by: Heiko Stuebner <heiko@sntech.de> Reviewed-by: Philipp Tomsich <philipp.tomsich@vrull.eu> Link: https://lore.kernel.org/r/20220511192921.2223629-5-heiko@sntech.de Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
1 parent a8e9101 commit fbdba60

1 file changed

Lines changed: 58 additions & 20 deletions

File tree

arch/riscv/include/asm/alternative-macros.h

Lines changed: 58 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,24 @@
3939
#define _ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, CONFIG_k) \
4040
__ALTERNATIVE_CFG old_c, new_c, vendor_id, errata_id, IS_ENABLED(CONFIG_k)
4141

42+
.macro __ALTERNATIVE_CFG_2 old_c, new_c_1, vendor_id_1, errata_id_1, enable_1, \
43+
new_c_2, vendor_id_2, errata_id_2, enable_2
44+
886 :
45+
\old_c
46+
887 :
47+
ALT_NEW_CONTENT \vendor_id_1, \errata_id_1, \enable_1, \new_c_1
48+
ALT_NEW_CONTENT \vendor_id_2, \errata_id_2, \enable_2, \new_c_2
49+
.endm
50+
51+
#define _ALTERNATIVE_CFG_2(old_c, new_c_1, vendor_id_1, errata_id_1, \
52+
CONFIG_k_1, \
53+
new_c_2, vendor_id_2, errata_id_2, \
54+
CONFIG_k_2) \
55+
__ALTERNATIVE_CFG_2 old_c, new_c_1, vendor_id_1, errata_id_1, \
56+
IS_ENABLED(CONFIG_k_1), \
57+
new_c_2, vendor_id_2, errata_id_2, \
58+
IS_ENABLED(CONFIG_k_2)
59+
4260
#else /* !__ASSEMBLY__ */
4361

4462
#include <asm/asm.h>
@@ -74,6 +92,25 @@
7492
#define _ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, CONFIG_k) \
7593
__ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, IS_ENABLED(CONFIG_k))
7694

95+
#define __ALTERNATIVE_CFG_2(old_c, new_c_1, vendor_id_1, errata_id_1, \
96+
enable_1, \
97+
new_c_2, vendor_id_2, errata_id_2, \
98+
enable_2) \
99+
"886 :\n" \
100+
old_c "\n" \
101+
"887 :\n" \
102+
ALT_NEW_CONTENT(vendor_id_1, errata_id_1, enable_1, new_c_1) \
103+
ALT_NEW_CONTENT(vendor_id_2, errata_id_2, enable_2, new_c_2)
104+
105+
#define _ALTERNATIVE_CFG_2(old_c, new_c_1, vendor_id_1, errata_id_1, \
106+
CONFIG_k_1, \
107+
new_c_2, vendor_id_2, errata_id_2, \
108+
CONFIG_k_2) \
109+
__ALTERNATIVE_CFG_2(old_c, new_c_1, vendor_id_1, errata_id_1, \
110+
IS_ENABLED(CONFIG_k_1), \
111+
new_c_2, vendor_id_2, errata_id_2, \
112+
IS_ENABLED(CONFIG_k_2))
113+
77114
#endif /* __ASSEMBLY__ */
78115

79116
#else /* CONFIG_RISCV_ALTERNATIVE */
@@ -86,6 +123,12 @@
86123
#define _ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, CONFIG_k) \
87124
__ALTERNATIVE_CFG old_c
88125

126+
#define _ALTERNATIVE_CFG_2(old_c, new_c_1, vendor_id_1, errata_id_1, \
127+
CONFIG_k_1, \
128+
new_c_2, vendor_id_2, errata_id_2, \
129+
CONFIG_k_2) \
130+
__ALTERNATIVE_CFG old_c
131+
89132
#else /* !__ASSEMBLY__ */
90133

91134
#define __ALTERNATIVE_CFG(old_c) \
@@ -94,6 +137,12 @@
94137
#define _ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, CONFIG_k) \
95138
__ALTERNATIVE_CFG(old_c)
96139

140+
#define _ALTERNATIVE_CFG_2(old_c, new_c_1, vendor_id_1, errata_id_1, \
141+
CONFIG_k_1, \
142+
new_c_2, vendor_id_2, errata_id_2, \
143+
CONFIG_k_2) \
144+
__ALTERNATIVE_CFG(old_c)
145+
97146
#endif /* __ASSEMBLY__ */
98147
#endif /* CONFIG_RISCV_ALTERNATIVE */
99148

@@ -119,25 +168,14 @@
119168
* this case, this vendor can create a new macro ALTERNATIVE_2() based
120169
* on the following sample code and then replace ALTERNATIVE() with
121170
* ALTERNATIVE_2() to append its customized content.
122-
*
123-
* .macro __ALTERNATIVE_CFG_2 old_c, new_c_1, vendor_id_1, errata_id_1, enable_1, \
124-
* new_c_2, vendor_id_2, errata_id_2, enable_2
125-
* 886 :
126-
* \old_c
127-
* 887 :
128-
* ALT_NEW_CONTENT \vendor_id_1, \errata_id_1, \enable_1, \new_c_1
129-
* ALT_NEW_CONTENT \vendor_id_2, \errata_id_2, \enable_2, \new_c_2
130-
* .endm
131-
*
132-
* #define _ALTERNATIVE_CFG_2(old_c, new_c_1, vendor_id_1, errata_id_1, CONFIG_k_1, \
133-
* new_c_2, vendor_id_2, errata_id_2, CONFIG_k_2) \
134-
* __ALTERNATIVE_CFG_2 old_c, new_c_1, vendor_id_1, errata_id_1, IS_ENABLED(CONFIG_k_1), \
135-
* new_c_2, vendor_id_2, errata_id_2, IS_ENABLED(CONFIG_k_2) \
136-
*
137-
* #define ALTERNATIVE_2(old_content, new_content_1, vendor_id_1, errata_id_1, CONFIG_k_1, \
138-
* new_content_2, vendor_id_2, errata_id_2, CONFIG_k_2) \
139-
* _ALTERNATIVE_CFG_2(old_content, new_content_1, vendor_id_1, errata_id_1, CONFIG_k_1, \
140-
* new_content_2, vendor_id_2, errata_id_2, CONFIG_k_2)
141-
*
142171
*/
172+
#define ALTERNATIVE_2(old_content, new_content_1, vendor_id_1, \
173+
errata_id_1, CONFIG_k_1, \
174+
new_content_2, vendor_id_2, \
175+
errata_id_2, CONFIG_k_2) \
176+
_ALTERNATIVE_CFG_2(old_content, new_content_1, vendor_id_1, \
177+
errata_id_1, CONFIG_k_1, \
178+
new_content_2, vendor_id_2, \
179+
errata_id_2, CONFIG_k_2)
180+
143181
#endif

0 commit comments

Comments
 (0)