Merge branch 'linux-4.15' of git://github.com/skeggsb/linux into drm-fixes
[sfrench/cifs-2.6.git] / arch / alpha / include / asm / special_insns.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __ALPHA_SPECIAL_INSNS_H
3 #define __ALPHA_SPECIAL_INSNS_H
4
5 enum implver_enum {
6         IMPLVER_EV4,
7         IMPLVER_EV5,
8         IMPLVER_EV6
9 };
10
11 #ifdef CONFIG_ALPHA_GENERIC
12 #define implver()                               \
13 ({ unsigned long __implver;                     \
14    __asm__ ("implver %0" : "=r"(__implver));    \
15    (enum implver_enum) __implver; })
16 #else
17 /* Try to eliminate some dead code.  */
18 #ifdef CONFIG_ALPHA_EV4
19 #define implver() IMPLVER_EV4
20 #endif
21 #ifdef CONFIG_ALPHA_EV5
22 #define implver() IMPLVER_EV5
23 #endif
24 #if defined(CONFIG_ALPHA_EV6)
25 #define implver() IMPLVER_EV6
26 #endif
27 #endif
28
29 enum amask_enum {
30         AMASK_BWX = (1UL << 0),
31         AMASK_FIX = (1UL << 1),
32         AMASK_CIX = (1UL << 2),
33         AMASK_MAX = (1UL << 8),
34         AMASK_PRECISE_TRAP = (1UL << 9),
35 };
36
37 #define amask(mask)                                             \
38 ({ unsigned long __amask, __input = (mask);                     \
39    __asm__ ("amask %1,%0" : "=r"(__amask) : "rI"(__input));     \
40    __amask; })
41
42 #endif /* __ALPHA_SPECIAL_INSNS_H */