xref: /openbmc/linux/arch/mips/include/asm/jump_label.h (revision 565d76cb)
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License.  See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (c) 2010 Cavium Networks, Inc.
7  */
8 #ifndef _ASM_MIPS_JUMP_LABEL_H
9 #define _ASM_MIPS_JUMP_LABEL_H
10 
11 #include <linux/types.h>
12 
13 #ifdef __KERNEL__
14 
15 #define JUMP_LABEL_NOP_SIZE 4
16 
17 #ifdef CONFIG_64BIT
18 #define WORD_INSN ".dword"
19 #else
20 #define WORD_INSN ".word"
21 #endif
22 
23 #define JUMP_LABEL(key, label)						\
24 	do {								\
25 		asm goto("1:\tnop\n\t"					\
26 			"nop\n\t"					\
27 			".pushsection __jump_table,  \"a\"\n\t"		\
28 			WORD_INSN " 1b, %l[" #label "], %0\n\t"		\
29 			".popsection\n\t"				\
30 			: :  "i" (key) :  : label);			\
31 	} while (0)
32 
33 
34 #endif /* __KERNEL__ */
35 
36 #ifdef CONFIG_64BIT
37 typedef u64 jump_label_t;
38 #else
39 typedef u32 jump_label_t;
40 #endif
41 
42 struct jump_entry {
43 	jump_label_t code;
44 	jump_label_t target;
45 	jump_label_t key;
46 };
47 
48 #endif /* _ASM_MIPS_JUMP_LABEL_H */
49