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