MIPS: microMIPS: Fix macro naming in micro-assembler.
authorSteven J. Hill <Steven.Hill@imgtec.com>
Mon, 25 Mar 2013 17:03:41 +0000 (12:03 -0500)
committerRalf Baechle <ralf@linux-mips.org>
Thu, 9 May 2013 15:55:18 +0000 (17:55 +0200)
The macros did not properly take into account the ISA that
the kernel was being compiled with. A classic MIPS kernel
will have the standard 'uasm_i_##op' macro functions with
'MM_uasm_i_##op' macro functions for the microMIPS version.
A pure microMIPS kernel will have the standard macros with
'CL_uasm_i_##op' macro functions for the classic version.

Signed-off-by: Steven J. Hill <Steven.Hill@imgtec.com>
arch/mips/include/asm/uasm.h
arch/mips/mm/uasm-mips.c

index f924b87..370d967 100644 (file)
 #define _UASM_ISA_MICROMIPS    1
 
 #ifndef UASM_ISA
+#ifdef CONFIG_CPU_MICROMIPS
+#define UASM_ISA       _UASM_ISA_MICROMIPS
+#else
 #define UASM_ISA       _UASM_ISA_CLASSIC
 #endif
+#endif
 
 #if (UASM_ISA == _UASM_ISA_CLASSIC)
+#ifdef CONFIG_CPU_MICROMIPS
+#define ISAOPC(op)     CL_uasm_i##op
+#define ISAFUNC(x)     CL_##x
+#else
 #define ISAOPC(op)     uasm_i##op
 #define ISAFUNC(x)     x
+#endif
 #elif (UASM_ISA == _UASM_ISA_MICROMIPS)
+#ifdef CONFIG_CPU_MICROMIPS
+#define ISAOPC(op)     uasm_i##op
+#define ISAFUNC(x)     x
+#else
 #define ISAOPC(op)     MM_uasm_i##op
 #define ISAFUNC(x)     MM_##x
+#endif
 #else
 #error Unsupported micro-assembler ISA!!!
 #endif
@@ -160,9 +174,9 @@ void ISAFUNC(UASM_i_LA_mostly)(u32 **buf, unsigned int rs, long addr);
 void ISAFUNC(UASM_i_LA)(u32 **buf, unsigned int rs, long addr);
 
 #define UASM_L_LA(lb)                                                  \
-static inline void __uasminit uasm_l##lb(struct uasm_label **lab, u32 *addr) \
+static inline void __uasminit ISAFUNC(uasm_l##lb)(struct uasm_label **lab, u32 *addr) \
 {                                                                      \
-       uasm_build_label(lab, addr, label##lb);                         \
+       ISAFUNC(uasm_build_label)(lab, addr, label##lb);                \
 }
 
 /* convenience macros for instructions */
index e78e74d..5fcdd8f 100644 (file)
@@ -20,6 +20,7 @@
 #include <asm/inst.h>
 #include <asm/elf.h>
 #include <asm/bugs.h>
+#define UASM_ISA       _UASM_ISA_CLASSIC
 #include <asm/uasm.h>
 
 #define RS_MASK                0x1f
         | (e) << RE_SH                                         \
         | (f) << FUNC_SH)
 
+/* Define these when we are not the ISA the kernel is being compiled with. */
+#ifdef CONFIG_CPU_MICROMIPS
+#define CL_uasm_i_b(buf, off) ISAOPC(_beq)(buf, 0, 0, off)
+#define CL_uasm_i_beqz(buf, rs, off) ISAOPC(_beq)(buf, rs, 0, off)
+#define CL_uasm_i_beqzl(buf, rs, off) ISAOPC(_beql)(buf, rs, 0, off)
+#define CL_uasm_i_bnez(buf, rs, off) ISAOPC(_bne)(buf, rs, 0, off)
+#endif
+
 #include "uasm.c"
 
 static struct insn insn_table[] __uasminitdata = {