Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/csky/include/asm/jump_label.h
26493 views
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
12
static __always_inline bool arch_static_branch(struct static_key *key,
13
bool branch)
14
{
15
asm 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;
25
label:
26
return true;
27
}
28
29
static __always_inline bool arch_static_branch_jump(struct static_key *key,
30
bool branch)
31
{
32
asm 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;
42
label:
43
return true;
44
}
45
46
enum jump_label_type;
47
void arch_jump_label_transform_static(struct jump_entry *entry,
48
enum jump_label_type type);
49
#define arch_jump_label_transform_static arch_jump_label_transform_static
50
51
#endif /* __ASSEMBLY__ */
52
#endif /* __ASM_CSKY_JUMP_LABEL_H */
53
54