162217bebSHelge Deller /* SPDX-License-Identifier: GPL-2.0 */ 262217bebSHelge Deller #ifndef _ASM_PARISC_JUMP_LABEL_H 362217bebSHelge Deller #define _ASM_PARISC_JUMP_LABEL_H 462217bebSHelge Deller 562217bebSHelge Deller #ifndef __ASSEMBLY__ 662217bebSHelge Deller 762217bebSHelge Deller #include <linux/types.h> 8*4d7804d2SHelge Deller #include <linux/stringify.h> 962217bebSHelge Deller #include <asm/assembly.h> 1062217bebSHelge Deller 1162217bebSHelge Deller #define JUMP_LABEL_NOP_SIZE 4 1262217bebSHelge Deller 1362217bebSHelge Deller static __always_inline bool arch_static_branch(struct static_key *key, bool branch) 1462217bebSHelge Deller { 1562217bebSHelge Deller asm_volatile_goto("1:\n\t" 1662217bebSHelge Deller "nop\n\t" 1762217bebSHelge Deller ".pushsection __jump_table, \"aw\"\n\t" 1862217bebSHelge Deller ".word 1b - ., %l[l_yes] - .\n\t" 1962217bebSHelge Deller __stringify(ASM_ULONG_INSN) " %c0 - .\n\t" 2062217bebSHelge Deller ".popsection\n\t" 2162217bebSHelge Deller : : "i" (&((char *)key)[branch]) : : l_yes); 2262217bebSHelge Deller 2362217bebSHelge Deller return false; 2462217bebSHelge Deller l_yes: 2562217bebSHelge Deller return true; 2662217bebSHelge Deller } 2762217bebSHelge Deller 2862217bebSHelge Deller static __always_inline bool arch_static_branch_jump(struct static_key *key, bool branch) 2962217bebSHelge Deller { 3062217bebSHelge Deller asm_volatile_goto("1:\n\t" 3162217bebSHelge Deller "b,n %l[l_yes]\n\t" 3262217bebSHelge Deller ".pushsection __jump_table, \"aw\"\n\t" 3362217bebSHelge Deller ".word 1b - ., %l[l_yes] - .\n\t" 3462217bebSHelge Deller __stringify(ASM_ULONG_INSN) " %c0 - .\n\t" 3562217bebSHelge Deller ".popsection\n\t" 3662217bebSHelge Deller : : "i" (&((char *)key)[branch]) : : l_yes); 3762217bebSHelge Deller 3862217bebSHelge Deller return false; 3962217bebSHelge Deller l_yes: 4062217bebSHelge Deller return true; 4162217bebSHelge Deller } 4262217bebSHelge Deller 4362217bebSHelge Deller #endif /* __ASSEMBLY__ */ 4462217bebSHelge Deller #endif 45