MIPS: uasm: Add sllv uasm instruction
authorMarkos Chandras <markos.chandras@imgtec.com>
Tue, 8 Apr 2014 11:47:04 +0000 (12:47 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Fri, 30 May 2014 12:53:05 +0000 (14:53 +0200)
It will be used later on by bpf-jit

[ralf@linux-mips.org: Fixed conflict with
49e9529b9d43773307b8c73bd251b71784830c3d [MIPS: uasm: add jalr instruction].

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: http://patchwork.linux-mips.org/patch/6725/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/uasm.h
arch/mips/include/uapi/asm/inst.h
arch/mips/mm/uasm-micromips.c
arch/mips/mm/uasm-mips.c
arch/mips/mm/uasm.c

index fd9e50ae81c942d6e59917ab85f2ff7434b32ac5..3001b1868a4593c53c00a34f5e020fc29ed1a9f3 100644 (file)
@@ -140,6 +140,7 @@ Ip_u2s3u1(_sc);
 Ip_u2s3u1(_scd);
 Ip_u2s3u1(_sd);
 Ip_u2u1u3(_sll);
+Ip_u3u2u1(_sllv);
 Ip_u2u1u3(_sra);
 Ip_u2u1u3(_srl);
 Ip_u3u1u2(_subu);
index a1ad5516ad1fab5071310b4d92744d20a73f3414..217d696bd1d32de47c3463f9c49e5d603ded589f 100644 (file)
@@ -248,6 +248,7 @@ enum mm_32i_minor_op {
 enum mm_32a_minor_op {
        mm_sll32_op = 0x000,
        mm_ins_op = 0x00c,
+       mm_sllv32_op = 0x010,
        mm_ext_op = 0x02c,
        mm_pool32axf_op = 0x03c,
        mm_srl32_op = 0x040,
index bcbcf4ae69b73f5d2e57b36fd9424cc8d7b5e551..e0a8df070e4b9478f4b33e800be0ff42b991efca 100644 (file)
@@ -94,6 +94,7 @@ static struct insn insn_table_MM[] = {
        { insn_scd, 0, 0 },
        { insn_sd, 0, 0 },
        { insn_sll, M(mm_pool32a_op, 0, 0, 0, 0, mm_sll32_op), RT | RS | RD },
+       { insn_sllv, M(mm_pool32a_op, 0, 0, 0, 0, mm_sllv32_op), RT | RS | RD },
        { insn_sra, M(mm_pool32a_op, 0, 0, 0, 0, mm_sra_op), RT | RS | RD },
        { insn_srl, M(mm_pool32a_op, 0, 0, 0, 0, mm_srl32_op), RT | RS | RD },
        { insn_rotr, M(mm_pool32a_op, 0, 0, 0, 0, mm_rotr_op), RT | RS | RD },
index 4a2fc82fcd4f922980837cb5d0a84cbeb29e6a04..086c590c99977669134d6040a5c44628b8f8aef0 100644 (file)
@@ -103,6 +103,7 @@ static struct insn insn_table[] = {
        { insn_sc,  M(sc_op, 0, 0, 0, 0, 0),  RS | RT | SIMM },
        { insn_sd,  M(sd_op, 0, 0, 0, 0, 0),  RS | RT | SIMM },
        { insn_sll,  M(spec_op, 0, 0, 0, 0, sll_op),  RT | RD | RE },
+       { insn_sllv,  M(spec_op, 0, 0, 0, 0, sllv_op),  RS | RT | RD },
        { insn_sra,  M(spec_op, 0, 0, 0, 0, sra_op),  RT | RD | RE },
        { insn_srl,  M(spec_op, 0, 0, 0, 0, srl_op),  RT | RD | RE },
        { insn_subu,  M(spec_op, 0, 0, 0, 0, subu_op),  RS | RT | RD },
index 0969a52384b456c5301ec8dc239bdb048196c527..9372d8296ced7ce34d401adc39d94656db6decb7 100644 (file)
@@ -52,9 +52,9 @@ enum opcode {
        insn_ext, insn_ins, insn_j, insn_jal, insn_jalr, insn_jr, insn_ld,
        insn_ldx, insn_ll, insn_lld, insn_lui, insn_lw, insn_lwx, insn_mfc0,
        insn_mtc0, insn_or, insn_ori, insn_pref, insn_rfe, insn_rotr, insn_sc,
-       insn_scd, insn_sd, insn_sll, insn_sra, insn_srl, insn_subu, insn_sw,
-       insn_sync, insn_syscall, insn_tlbp, insn_tlbr, insn_tlbwi, insn_tlbwr,
-       insn_wait, insn_xor, insn_xori, insn_yield,
+       insn_scd, insn_sd, insn_sll, insn_sllv, insn_sra, insn_srl, insn_subu,
+       insn_sw, insn_sync, insn_syscall, insn_tlbp, insn_tlbr, insn_tlbwi,
+       insn_tlbwr, insn_wait, insn_xor, insn_xori, insn_yield,
 };
 
 struct insn {
@@ -280,6 +280,7 @@ I_u2s3u1(_sc)
 I_u2s3u1(_scd)
 I_u2s3u1(_sd)
 I_u2u1u3(_sll)
+I_u3u2u1(_sllv)
 I_u2u1u3(_sra)
 I_u2u1u3(_srl)
 I_u2u1u3(_rotr)