New hazard handling function back_to_back_c0_hazard() to handle back to
authorRalf Baechle <ralf@linux-mips.org>
Tue, 1 Mar 2005 18:12:06 +0000 (18:12 +0000)
committerRalf Baechle <ralf@linux-mips.org>
Sat, 29 Oct 2005 18:30:49 +0000 (19:30 +0100)
back mtc0 / mfc0 pairs from the same coprocessor register.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
include/asm-mips/hazards.h

index f524eaccd5f1d26a168a6a12cde8688b98a217fb..d6e88cf06ba913900b096b0d90b62f269fa4251c 100644 (file)
@@ -124,6 +124,9 @@ __asm__(
                ".set\tmips32\n\t"                                      \
                "_ssnop; _ssnop; _ssnop; _ssnop\n\t"                    \
                ".set\tmips0")
+
+#define back_to_back_c0_hazard()       do { } while (0)
+
 #else
 
 /*
@@ -141,6 +144,12 @@ __asm__(
                "nop; nop; nop; nop; nop; nop;\n\t"                     \
                ".set reorder\n\t")
 
+#define back_to_back_c0_hazard()                                       \
+       __asm__ __volatile__(                                           \
+       "       .set noreorder                          \n"             \
+       "       nop; nop; nop                           \n"             \
+       "       .set reorder                            \n")
+
 #endif
 
 /*
@@ -170,6 +179,10 @@ __asm__(
        __asm__ __volatile__(                                           \
        "_ehb\t\t\t\t# irq_disable_hazard")
 
+#define back_to_back_c0_hazard()                                       \
+       __asm__ __volatile__(                                           \
+       "_ehb\t\t\t\t# back_to_back_c0_hazard")
+
 #elif defined(CONFIG_CPU_R10000) || defined(CONFIG_CPU_RM9000)
 
 /*
@@ -186,6 +199,8 @@ __asm__(
 #define irq_enable_hazard()    do { } while (0)
 #define irq_disable_hazard()   do { } while (0)
 
+#define back_to_back_c0_hazard()       do { } while (0)
+
 #else
 
 /*
@@ -210,6 +225,12 @@ __asm__(
        __asm__ __volatile__(                                           \
        "_ssnop; _ssnop; _ssnop;\t\t# irq_disable_hazard")
 
+#define back_to_back_c0_hazard()                                       \
+       __asm__ __volatile__(                                           \
+       "       .set noreorder                          \n"             \
+       "       nop; nop; nop                           \n"             \
+       "       .set reorder                            \n")
+
 #endif
 
 #endif /* __ASSEMBLY__ */