1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef __ALPHA_SPECIAL_INSNS_H 3*4882a593Smuzhiyun #define __ALPHA_SPECIAL_INSNS_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun enum implver_enum { 6*4882a593Smuzhiyun IMPLVER_EV4, 7*4882a593Smuzhiyun IMPLVER_EV5, 8*4882a593Smuzhiyun IMPLVER_EV6 9*4882a593Smuzhiyun }; 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #ifdef CONFIG_ALPHA_GENERIC 12*4882a593Smuzhiyun #define implver() \ 13*4882a593Smuzhiyun ({ unsigned long __implver; \ 14*4882a593Smuzhiyun __asm__ ("implver %0" : "=r"(__implver)); \ 15*4882a593Smuzhiyun (enum implver_enum) __implver; }) 16*4882a593Smuzhiyun #else 17*4882a593Smuzhiyun /* Try to eliminate some dead code. */ 18*4882a593Smuzhiyun #ifdef CONFIG_ALPHA_EV4 19*4882a593Smuzhiyun #define implver() IMPLVER_EV4 20*4882a593Smuzhiyun #endif 21*4882a593Smuzhiyun #ifdef CONFIG_ALPHA_EV5 22*4882a593Smuzhiyun #define implver() IMPLVER_EV5 23*4882a593Smuzhiyun #endif 24*4882a593Smuzhiyun #if defined(CONFIG_ALPHA_EV6) 25*4882a593Smuzhiyun #define implver() IMPLVER_EV6 26*4882a593Smuzhiyun #endif 27*4882a593Smuzhiyun #endif 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun enum amask_enum { 30*4882a593Smuzhiyun AMASK_BWX = (1UL << 0), 31*4882a593Smuzhiyun AMASK_FIX = (1UL << 1), 32*4882a593Smuzhiyun AMASK_CIX = (1UL << 2), 33*4882a593Smuzhiyun AMASK_MAX = (1UL << 8), 34*4882a593Smuzhiyun AMASK_PRECISE_TRAP = (1UL << 9), 35*4882a593Smuzhiyun }; 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun #define amask(mask) \ 38*4882a593Smuzhiyun ({ unsigned long __amask, __input = (mask); \ 39*4882a593Smuzhiyun __asm__ ("amask %1,%0" : "=r"(__amask) : "rI"(__input)); \ 40*4882a593Smuzhiyun __amask; }) 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun #endif /* __ALPHA_SPECIAL_INSNS_H */ 43