]> err.no Git - linux-2.6/blobdiff - include/asm-ia64/gcc_intrin.h
pci/irq: let pci_device_shutdown to call pci_msi_shutdown v2
[linux-2.6] / include / asm-ia64 / gcc_intrin.h
index 7c357dfbae50dc400b63c39e0f6add7a214a28a7..de2ed2cbdd845d9404c4036de78cba661f7a6ea5 100644 (file)
@@ -24,7 +24,9 @@
 extern void ia64_bad_param_for_setreg (void);
 extern void ia64_bad_param_for_getreg (void);
 
-register unsigned long ia64_r13 asm ("r13") __attribute_used__;
+#ifdef __KERNEL__
+register unsigned long ia64_r13 asm ("r13") __used;
+#endif
 
 #define ia64_setreg(regnum, val)                                               \
 ({                                                                             \
@@ -133,13 +135,17 @@ register unsigned long ia64_r13 asm ("r13") __attribute_used__;
        ia64_intri_res;                                                         \
 })
 
-#define ia64_popcnt(x)                                         \
-({                                                             \
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+# define ia64_popcnt(x)                __builtin_popcountl(x)
+#else
+# define ia64_popcnt(x)                                                \
+  ({                                                           \
        __u64 ia64_intri_res;                                   \
        asm ("popcnt %0=%1" : "=r" (ia64_intri_res) : "r" (x)); \
                                                                \
        ia64_intri_res;                                         \
-})
+  })
+#endif
 
 #define ia64_getf_exp(x)                                       \
 ({                                                             \
@@ -187,6 +193,11 @@ register unsigned long ia64_r13 asm ("r13") __attribute_used__;
        asm volatile ("ldf.fill %0=[%1]" :"=f"(__f__): "r"(x)); \
 })
 
+#define ia64_st4_rel_nta(m, val)                                       \
+({                                                                     \
+       asm volatile ("st4.rel.nta [%0] = %1\n\t" :: "r"(m), "r"(val)); \
+})
+
 #define ia64_stfs(x, regnum)                                           \
 ({                                                                     \
        register double __f__ asm ("f"#regnum);                         \