diff options
Diffstat (limited to 'arch/mips/mm/uasm.c')
-rw-r--r-- | arch/mips/mm/uasm.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/arch/mips/mm/uasm.c b/arch/mips/mm/uasm.c index 64a28e819064..39b891056227 100644 --- a/arch/mips/mm/uasm.c +++ b/arch/mips/mm/uasm.c | |||
@@ -63,11 +63,12 @@ enum opcode { | |||
63 | insn_bne, insn_cache, insn_daddiu, insn_daddu, insn_dins, insn_dinsm, | 63 | insn_bne, insn_cache, insn_daddiu, insn_daddu, insn_dins, insn_dinsm, |
64 | insn_dmfc0, insn_dmtc0, insn_drotr, insn_drotr32, insn_dsll, | 64 | insn_dmfc0, insn_dmtc0, insn_drotr, insn_drotr32, insn_dsll, |
65 | insn_dsll32, insn_dsra, insn_dsrl, insn_dsrl32, insn_dsubu, insn_eret, | 65 | insn_dsll32, insn_dsra, insn_dsrl, insn_dsrl32, insn_dsubu, insn_eret, |
66 | insn_j, insn_jal, insn_jr, insn_ld, insn_ldx, insn_ll, insn_lld, | 66 | insn_ext, insn_ins, insn_j, insn_jal, insn_jr, insn_ld, insn_ldx, |
67 | insn_lui, insn_lw, insn_lwx, insn_mfc0, insn_mtc0, insn_or, insn_ori, | 67 | insn_ll, insn_lld, insn_lui, insn_lw, insn_lwx, insn_mfc0, insn_mtc0, |
68 | insn_pref, insn_rfe, insn_rotr, insn_sc, insn_scd, insn_sd, insn_sll, | 68 | insn_or, insn_ori, insn_pref, insn_rfe, insn_rotr, insn_sc, insn_scd, |
69 | insn_sra, insn_srl, insn_subu, insn_sw, insn_syscall, insn_tlbp, | 69 | insn_sd, insn_sll, insn_sra, insn_srl, insn_subu, insn_sw, |
70 | insn_tlbr, insn_tlbwi, insn_tlbwr, insn_xor, insn_xori, | 70 | insn_syscall, insn_tlbp, insn_tlbr, insn_tlbwi, insn_tlbwr, insn_xor, |
71 | insn_xori, | ||
71 | }; | 72 | }; |
72 | 73 | ||
73 | struct insn { | 74 | struct insn { |
@@ -115,6 +116,9 @@ static struct insn insn_table[] __uasminitdata = { | |||
115 | { insn_dsrl, M(spec_op, 0, 0, 0, 0, dsrl_op), RT | RD | RE }, | 116 | { insn_dsrl, M(spec_op, 0, 0, 0, 0, dsrl_op), RT | RD | RE }, |
116 | { insn_dsubu, M(spec_op, 0, 0, 0, 0, dsubu_op), RS | RT | RD }, | 117 | { insn_dsubu, M(spec_op, 0, 0, 0, 0, dsubu_op), RS | RT | RD }, |
117 | { insn_eret, M(cop0_op, cop_op, 0, 0, 0, eret_op), 0 }, | 118 | { insn_eret, M(cop0_op, cop_op, 0, 0, 0, eret_op), 0 }, |
119 | { insn_ext, M(spec3_op, 0, 0, 0, 0, ext_op), RS | RT | RD | RE }, | ||
120 | { insn_ins, M(spec3_op, 0, 0, 0, 0, ins_op), RS | RT | RD | RE }, | ||
121 | { insn_j, M(j_op, 0, 0, 0, 0, 0), JIMM }, | ||
118 | { insn_jal, M(jal_op, 0, 0, 0, 0, 0), JIMM }, | 122 | { insn_jal, M(jal_op, 0, 0, 0, 0, 0), JIMM }, |
119 | { insn_j, M(j_op, 0, 0, 0, 0, 0), JIMM }, | 123 | { insn_j, M(j_op, 0, 0, 0, 0, 0), JIMM }, |
120 | { insn_jr, M(spec_op, 0, 0, 0, 0, jr_op), RS }, | 124 | { insn_jr, M(spec_op, 0, 0, 0, 0, jr_op), RS }, |
@@ -341,6 +345,13 @@ Ip_u2u1msbu3(op) \ | |||
341 | } \ | 345 | } \ |
342 | UASM_EXPORT_SYMBOL(uasm_i##op); | 346 | UASM_EXPORT_SYMBOL(uasm_i##op); |
343 | 347 | ||
348 | #define I_u2u1msbdu3(op) \ | ||
349 | Ip_u2u1msbu3(op) \ | ||
350 | { \ | ||
351 | build_insn(buf, insn##op, b, a, d-1, c); \ | ||
352 | } \ | ||
353 | UASM_EXPORT_SYMBOL(uasm_i##op); | ||
354 | |||
344 | #define I_u1u2(op) \ | 355 | #define I_u1u2(op) \ |
345 | Ip_u1u2(op) \ | 356 | Ip_u1u2(op) \ |
346 | { \ | 357 | { \ |
@@ -394,6 +405,8 @@ I_u2u1u3(_drotr) | |||
394 | I_u2u1u3(_drotr32) | 405 | I_u2u1u3(_drotr32) |
395 | I_u3u1u2(_dsubu) | 406 | I_u3u1u2(_dsubu) |
396 | I_0(_eret) | 407 | I_0(_eret) |
408 | I_u2u1msbdu3(_ext) | ||
409 | I_u2u1msbu3(_ins) | ||
397 | I_u1(_j) | 410 | I_u1(_j) |
398 | I_u1(_jal) | 411 | I_u1(_jal) |
399 | I_u1(_jr) | 412 | I_u1(_jr) |