s390/alternatives: add alternative_input() / alternative_io()
authorHeiko Carstens <hca@linux.ibm.com>
Tue, 2 Feb 2021 16:10:49 +0000 (17:10 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Tue, 9 Feb 2021 14:57:06 +0000 (15:57 +0100)
Add support for alternative inline assemblies with input and output
arguments. This is consistent to x86.

Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/include/asm/alternative.h

index 1c8a38f..d3880ca 100644 (file)
@@ -145,6 +145,22 @@ void apply_alternatives(struct alt_instr *start, struct alt_instr *end);
        asm_inline volatile(ALTERNATIVE_2(oldinstr, altinstr1, facility1,   \
                                   altinstr2, facility2) ::: "memory")
 
+/* Alternative inline assembly with input. */
+#define alternative_input(oldinstr, newinstr, feature, input...)       \
+       asm_inline volatile (ALTERNATIVE(oldinstr, newinstr, feature)   \
+               : : input)
+
+/* Like alternative_input, but with a single output argument */
+#define alternative_io(oldinstr, altinstr, facility, output, input...) \
+       asm_inline volatile(ALTERNATIVE(oldinstr, altinstr, facility)   \
+               : output : input)
+
+/* Use this macro if more than one output parameter is needed. */
+#define ASM_OUTPUT2(a...) a
+
+/* Use this macro if clobbers are needed without inputs. */
+#define ASM_NO_INPUT_CLOBBER(clobber...) : clobber
+
 #endif /* __ASSEMBLY__ */
 
 #endif /* _ASM_S390_ALTERNATIVE_H */