ALTERNATIVE_2
.macro ALTERNATIVE_2 oldinstr, newinstr1, feature1, newinstr2, feature2
(asm volatile(ALTERNATIVE_2(oldinstr, newinstr1, feature1, newinstr2, feature2) ::: "memory"))
asm(ALTERNATIVE_2("li %0, 0\t\nnop", \
ALTERNATIVE_2( \
asm_inline volatile(ALTERNATIVE_2(oldinstr, altinstr1, feature1, \
.macro ALTERNATIVE_2 oldinstr, newinstr1, feature1, newinstr2, feature2
ALTERNATIVE_2(oldinstr, newinstr_no, X86_FEATURE_ALWAYS, newinstr_yes, ft_flags)
ALTERNATIVE(ALTERNATIVE_2(oldinstr, newinstr1, ft_flags1, newinstr2, ft_flags2), \
asm_inline volatile(ALTERNATIVE_2(oldinstr, newinstr1, ft_flags1, newinstr2, ft_flags2) ::: "memory")
asm_inline volatile(ALTERNATIVE_2("call %c[old]", "call %c[new1]", ft_flags1, \
.macro ALTERNATIVE_2 oldinstr, newinstr1, ft_flags1, newinstr2, ft_flags2
__ALTERNATIVE(ALTERNATIVE_2(\oldinstr, \newinstr1, \ft_flags1, \newinstr2, \ft_flags2),
ALTERNATIVE_2 oldinstr, newinstr_no, X86_FEATURE_ALWAYS, \
ALTERNATIVE_2 "jmp .Lskip_rsb_\@", \
ALTERNATIVE_2 "", "call entry_untrain_ret", X86_FEATURE_UNRET, \
ALTERNATIVE_2 "", \
ALTERNATIVE_2( \
asm volatile(ALTERNATIVE_2("call __clear_pages_unrolled",
#define SAVE_FLAGS ALTERNATIVE_2 "PARA_IRQ_save_fl", \
asm volatile(ALTERNATIVE_2(PARAVIRT_CALL, \
asm_inline volatile(ALTERNATIVE_2(
asm volatile(ALTERNATIVE_2("rdtsc",
ALTERNATIVE_2("movw %[port], %%dx\n\t" \
asm volatile(ALTERNATIVE_2( \