Lines Matching +full:smp +full:- +full:offset

1 /* SPDX-License-Identifier: GPL-2.0 */
13 * Alternative inline assembly for SMP.
18 * SMP alternatives use the same data structures as the other
20 * UP system running a SMP kernel. The existing apply_alternatives()
21 * works fine for patching a SMP kernel for UP.
23 * The SMP alternative tables can be kept after boot and contain both
24 * UP and SMP versions of the instructions to allow switching back to
25 * SMP at runtime, when hotplugging in a new CPU, which is especially
37 ".long 671f - .\n" /* offset */ \
55 ".long 999b - .\n\t" \
60 s32 repl_offset; /* offset to replacement instruction */
64 u8 padlen; /* length of build-time padding */
102 #define alt_slen "662b-661b"
103 #define alt_pad_len alt_end_marker"b-662b"
104 #define alt_total_slen alt_end_marker"b-661b"
105 #define alt_rlen(num) e_replacement(num)"f-"b_replacement(num)"f"
111 ".skip -(((" alt_rlen(num) ")-(" alt_slen ")) > 0) * " \
112 "((" alt_rlen(num) ")-(" alt_slen ")),0x90\n" \
119 * The additional "-" is needed because gas uses a "true" value of -1.
121 #define alt_max_short(a, b) "((" a ") ^ (((" a ") ^ (" b ")) & -(-((" a ") < (" b ")))))"
131 ".skip -((" alt_max_short(alt_rlen(num1), alt_rlen(num2)) " - (" alt_slen ")) > 0) * " \
132 "(" alt_max_short(alt_rlen(num1), alt_rlen(num2)) " - (" alt_slen ")), 0x90\n" \
139 ".skip -((" alt_max_short(alt_max_short(alt_rlen(n1), alt_rlen(n2)), alt_rlen(n3)) \
140 " - (" alt_slen ")) > 0) * " \
142 " - (" alt_slen ")), 0x90\n" \
146 " .long 661b - .\n" /* label */ \
147 " .long " b_replacement(num)"f - .\n" /* new instruction */ \