diff options
author | Leonid Yegoshin <Leonid.Yegoshin@imgtec.com> | 2014-11-18 11:24:15 -0500 |
---|---|---|
committer | Markos Chandras <markos.chandras@imgtec.com> | 2015-02-16 05:01:25 -0500 |
commit | 51eec48e1252ea39d21b5206e4962f09f823a369 (patch) | |
tree | 52b61709dd45d40c3980c3a8215aac915f05ac7e /arch/mips/mm | |
parent | 7fd08ca58ae6299e7f7efee9b9062b731de94726 (diff) |
MIPS: mm: uasm: Add signed 9-bit immediate related macros
MIPS R6 redefines several instructions and reduces the immediate
field to 9-bits so add related macros for the microassembler.
Signed-off-by: Leonid Yegoshin <Leonid.Yegoshin@imgtec.com>
Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Diffstat (limited to 'arch/mips/mm')
-rw-r--r-- | arch/mips/mm/uasm.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/arch/mips/mm/uasm.c b/arch/mips/mm/uasm.c index 4adf30284813..f86d293463a6 100644 --- a/arch/mips/mm/uasm.c +++ b/arch/mips/mm/uasm.c | |||
@@ -24,7 +24,8 @@ enum fields { | |||
24 | JIMM = 0x080, | 24 | JIMM = 0x080, |
25 | FUNC = 0x100, | 25 | FUNC = 0x100, |
26 | SET = 0x200, | 26 | SET = 0x200, |
27 | SCIMM = 0x400 | 27 | SCIMM = 0x400, |
28 | SIMM9 = 0x800, | ||
28 | }; | 29 | }; |
29 | 30 | ||
30 | #define OP_MASK 0x3f | 31 | #define OP_MASK 0x3f |
@@ -41,6 +42,8 @@ enum fields { | |||
41 | #define FUNC_SH 0 | 42 | #define FUNC_SH 0 |
42 | #define SET_MASK 0x7 | 43 | #define SET_MASK 0x7 |
43 | #define SET_SH 0 | 44 | #define SET_SH 0 |
45 | #define SIMM9_SH 7 | ||
46 | #define SIMM9_MASK 0x1ff | ||
44 | 47 | ||
45 | enum opcode { | 48 | enum opcode { |
46 | insn_invalid, | 49 | insn_invalid, |
@@ -116,6 +119,14 @@ static inline u32 build_scimm(u32 arg) | |||
116 | return (arg & SCIMM_MASK) << SCIMM_SH; | 119 | return (arg & SCIMM_MASK) << SCIMM_SH; |
117 | } | 120 | } |
118 | 121 | ||
122 | static inline u32 build_scimm9(s32 arg) | ||
123 | { | ||
124 | WARN((arg > 0xff || arg < -0x100), | ||
125 | KERN_WARNING "Micro-assembler field overflow\n"); | ||
126 | |||
127 | return (arg & SIMM9_MASK) << SIMM9_SH; | ||
128 | } | ||
129 | |||
119 | static inline u32 build_func(u32 arg) | 130 | static inline u32 build_func(u32 arg) |
120 | { | 131 | { |
121 | WARN(arg & ~FUNC_MASK, KERN_WARNING "Micro-assembler field overflow\n"); | 132 | WARN(arg & ~FUNC_MASK, KERN_WARNING "Micro-assembler field overflow\n"); |