|
@@ -17,9 +17,6 @@
|
|
|
# define __kernel_extbl(val, shift) __builtin_alpha_extbl(val, shift)
|
|
|
# define __kernel_extwl(val, shift) __builtin_alpha_extwl(val, shift)
|
|
|
# define __kernel_cmpbge(a, b) __builtin_alpha_cmpbge(a, b)
|
|
|
-# define __kernel_cttz(x) __builtin_ctzl(x)
|
|
|
-# define __kernel_ctlz(x) __builtin_clzl(x)
|
|
|
-# define __kernel_ctpop(x) __builtin_popcountl(x)
|
|
|
#else
|
|
|
# define __kernel_insbl(val, shift) \
|
|
|
({ unsigned long __kir; \
|
|
@@ -49,17 +46,39 @@
|
|
|
({ unsigned long __kir; \
|
|
|
__asm__("cmpbge %r2,%1,%0" : "=r"(__kir) : "rI"(b), "rJ"(a)); \
|
|
|
__kir; })
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifdef __alpha_cix__
|
|
|
+# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3
|
|
|
+# define __kernel_cttz(x) __builtin_ctzl(x)
|
|
|
+# define __kernel_ctlz(x) __builtin_clzl(x)
|
|
|
+# define __kernel_ctpop(x) __builtin_popcountl(x)
|
|
|
+# else
|
|
|
+# define __kernel_cttz(x) \
|
|
|
+ ({ unsigned long __kir; \
|
|
|
+ __asm__("cttz %1,%0" : "=r"(__kir) : "r"(x)); \
|
|
|
+ __kir; })
|
|
|
+# define __kernel_ctlz(x) \
|
|
|
+ ({ unsigned long __kir; \
|
|
|
+ __asm__("ctlz %1,%0" : "=r"(__kir) : "r"(x)); \
|
|
|
+ __kir; })
|
|
|
+# define __kernel_ctpop(x) \
|
|
|
+ ({ unsigned long __kir; \
|
|
|
+ __asm__("ctpop %1,%0" : "=r"(__kir) : "r"(x)); \
|
|
|
+ __kir; })
|
|
|
+# endif
|
|
|
+#else
|
|
|
# define __kernel_cttz(x) \
|
|
|
({ unsigned long __kir; \
|
|
|
- __asm__("cttz %1,%0" : "=r"(__kir) : "r"(x)); \
|
|
|
+ __asm__(".arch ev67; cttz %1,%0" : "=r"(__kir) : "r"(x)); \
|
|
|
__kir; })
|
|
|
# define __kernel_ctlz(x) \
|
|
|
({ unsigned long __kir; \
|
|
|
- __asm__("ctlz %1,%0" : "=r"(__kir) : "r"(x)); \
|
|
|
+ __asm__(".arch ev67; ctlz %1,%0" : "=r"(__kir) : "r"(x)); \
|
|
|
__kir; })
|
|
|
# define __kernel_ctpop(x) \
|
|
|
({ unsigned long __kir; \
|
|
|
- __asm__("ctpop %1,%0" : "=r"(__kir) : "r"(x)); \
|
|
|
+ __asm__(".arch ev67; ctpop %1,%0" : "=r"(__kir) : "r"(x)); \
|
|
|
__kir; })
|
|
|
#endif
|
|
|
|
|
@@ -78,16 +97,20 @@
|
|
|
#else
|
|
|
#define __kernel_ldbu(mem) \
|
|
|
({ unsigned char __kir; \
|
|
|
- __asm__("ldbu %0,%1" : "=r"(__kir) : "m"(mem)); \
|
|
|
+ __asm__(".arch ev56; \
|
|
|
+ ldbu %0,%1" : "=r"(__kir) : "m"(mem)); \
|
|
|
__kir; })
|
|
|
#define __kernel_ldwu(mem) \
|
|
|
({ unsigned short __kir; \
|
|
|
- __asm__("ldwu %0,%1" : "=r"(__kir) : "m"(mem)); \
|
|
|
+ __asm__(".arch ev56; \
|
|
|
+ ldwu %0,%1" : "=r"(__kir) : "m"(mem)); \
|
|
|
__kir; })
|
|
|
-#define __kernel_stb(val,mem) \
|
|
|
- __asm__("stb %1,%0" : "=m"(mem) : "r"(val))
|
|
|
-#define __kernel_stw(val,mem) \
|
|
|
- __asm__("stw %1,%0" : "=m"(mem) : "r"(val))
|
|
|
+#define __kernel_stb(val,mem) \
|
|
|
+ __asm__(".arch ev56; \
|
|
|
+ stb %1,%0" : "=m"(mem) : "r"(val))
|
|
|
+#define __kernel_stw(val,mem) \
|
|
|
+ __asm__(".arch ev56; \
|
|
|
+ stw %1,%0" : "=m"(mem) : "r"(val))
|
|
|
#endif
|
|
|
|
|
|
#ifdef __KERNEL__
|