Loading...
Note: File does not exist in v4.6.
1/* SPDX-License-Identifier: GPL-2.0-only */
2
3#ifndef __ASM_CSKY_JUMP_LABEL_H
4#define __ASM_CSKY_JUMP_LABEL_H
5
6#ifndef __ASSEMBLY__
7
8#include <linux/types.h>
9
10#define JUMP_LABEL_NOP_SIZE 4
11
12static __always_inline bool arch_static_branch(struct static_key *key,
13 bool branch)
14{
15 asm_volatile_goto(
16 "1: nop32 \n"
17 " .pushsection __jump_table, \"aw\" \n"
18 " .align 2 \n"
19 " .long 1b - ., %l[label] - . \n"
20 " .long %0 - . \n"
21 " .popsection \n"
22 : : "i"(&((char *)key)[branch]) : : label);
23
24 return false;
25label:
26 return true;
27}
28
29static __always_inline bool arch_static_branch_jump(struct static_key *key,
30 bool branch)
31{
32 asm_volatile_goto(
33 "1: bsr32 %l[label] \n"
34 " .pushsection __jump_table, \"aw\" \n"
35 " .align 2 \n"
36 " .long 1b - ., %l[label] - . \n"
37 " .long %0 - . \n"
38 " .popsection \n"
39 : : "i"(&((char *)key)[branch]) : : label);
40
41 return false;
42label:
43 return true;
44}
45
46#endif /* __ASSEMBLY__ */
47#endif /* __ASM_CSKY_JUMP_LABEL_H */