xref: /openbmc/linux/arch/riscv/include/asm/asm.h (revision 7e186433)
150acfb2bSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
25d8544e2SPalmer Dabbelt /*
35d8544e2SPalmer Dabbelt  * Copyright (C) 2015 Regents of the University of California
45d8544e2SPalmer Dabbelt  */
55d8544e2SPalmer Dabbelt 
65d8544e2SPalmer Dabbelt #ifndef _ASM_RISCV_ASM_H
75d8544e2SPalmer Dabbelt #define _ASM_RISCV_ASM_H
85d8544e2SPalmer Dabbelt 
95d8544e2SPalmer Dabbelt #ifdef __ASSEMBLY__
105d8544e2SPalmer Dabbelt #define __ASM_STR(x)	x
115d8544e2SPalmer Dabbelt #else
125d8544e2SPalmer Dabbelt #define __ASM_STR(x)	#x
135d8544e2SPalmer Dabbelt #endif
145d8544e2SPalmer Dabbelt 
155d8544e2SPalmer Dabbelt #if __riscv_xlen == 64
165d8544e2SPalmer Dabbelt #define __REG_SEL(a, b)	__ASM_STR(a)
175d8544e2SPalmer Dabbelt #elif __riscv_xlen == 32
185d8544e2SPalmer Dabbelt #define __REG_SEL(a, b)	__ASM_STR(b)
195d8544e2SPalmer Dabbelt #else
205d8544e2SPalmer Dabbelt #error "Unexpected __riscv_xlen"
215d8544e2SPalmer Dabbelt #endif
225d8544e2SPalmer Dabbelt 
235d8544e2SPalmer Dabbelt #define REG_L		__REG_SEL(ld, lw)
245d8544e2SPalmer Dabbelt #define REG_S		__REG_SEL(sd, sw)
2518856604SPalmer Dabbelt #define REG_SC		__REG_SEL(sc.d, sc.w)
26*7e186433SJisheng Zhang #define REG_AMOSWAP_AQ	__REG_SEL(amoswap.d.aq, amoswap.w.aq)
276f4eea90SVincent Chen #define REG_ASM		__REG_SEL(.dword, .word)
285d8544e2SPalmer Dabbelt #define SZREG		__REG_SEL(8, 4)
295d8544e2SPalmer Dabbelt #define LGREG		__REG_SEL(3, 2)
305d8544e2SPalmer Dabbelt 
315d8544e2SPalmer Dabbelt #if __SIZEOF_POINTER__ == 8
325d8544e2SPalmer Dabbelt #ifdef __ASSEMBLY__
335d8544e2SPalmer Dabbelt #define RISCV_PTR		.dword
345d8544e2SPalmer Dabbelt #define RISCV_SZPTR		8
355d8544e2SPalmer Dabbelt #define RISCV_LGPTR		3
365d8544e2SPalmer Dabbelt #else
375d8544e2SPalmer Dabbelt #define RISCV_PTR		".dword"
385d8544e2SPalmer Dabbelt #define RISCV_SZPTR		"8"
395d8544e2SPalmer Dabbelt #define RISCV_LGPTR		"3"
405d8544e2SPalmer Dabbelt #endif
415d8544e2SPalmer Dabbelt #elif __SIZEOF_POINTER__ == 4
425d8544e2SPalmer Dabbelt #ifdef __ASSEMBLY__
435d8544e2SPalmer Dabbelt #define RISCV_PTR		.word
445d8544e2SPalmer Dabbelt #define RISCV_SZPTR		4
455d8544e2SPalmer Dabbelt #define RISCV_LGPTR		2
465d8544e2SPalmer Dabbelt #else
475d8544e2SPalmer Dabbelt #define RISCV_PTR		".word"
485d8544e2SPalmer Dabbelt #define RISCV_SZPTR		"4"
495d8544e2SPalmer Dabbelt #define RISCV_LGPTR		"2"
505d8544e2SPalmer Dabbelt #endif
515d8544e2SPalmer Dabbelt #else
525d8544e2SPalmer Dabbelt #error "Unexpected __SIZEOF_POINTER__"
535d8544e2SPalmer Dabbelt #endif
545d8544e2SPalmer Dabbelt 
555d8544e2SPalmer Dabbelt #if (__SIZEOF_INT__ == 4)
565e6f82b0SOlof Johansson #define RISCV_INT		__ASM_STR(.word)
575e6f82b0SOlof Johansson #define RISCV_SZINT		__ASM_STR(4)
585e6f82b0SOlof Johansson #define RISCV_LGINT		__ASM_STR(2)
595d8544e2SPalmer Dabbelt #else
605d8544e2SPalmer Dabbelt #error "Unexpected __SIZEOF_INT__"
615d8544e2SPalmer Dabbelt #endif
625d8544e2SPalmer Dabbelt 
635d8544e2SPalmer Dabbelt #if (__SIZEOF_SHORT__ == 2)
645e6f82b0SOlof Johansson #define RISCV_SHORT		__ASM_STR(.half)
655e6f82b0SOlof Johansson #define RISCV_SZSHORT		__ASM_STR(2)
665e6f82b0SOlof Johansson #define RISCV_LGSHORT		__ASM_STR(1)
675d8544e2SPalmer Dabbelt #else
685d8544e2SPalmer Dabbelt #error "Unexpected __SIZEOF_SHORT__"
695d8544e2SPalmer Dabbelt #endif
705d8544e2SPalmer Dabbelt 
715d8544e2SPalmer Dabbelt #endif /* _ASM_RISCV_ASM_H */
72