From 1aea9f41737788772c7e10544a26ac7dcef9589a Mon Sep 17 00:00:00 2001 From: Guillaume Emont Date: Mon, 10 Dec 2012 16:39:08 +0100 Subject: [PATCH] mips: added _emit() for lbu, subq.ph and preceu.ph.qbr --- orc/orcmips.c | 40 ++++++++++++++++++++++++++++++++++++++++ orc/orcmips.h | 4 ++++ 2 files changed, 44 insertions(+) diff --git a/orc/orcmips.c b/orc/orcmips.c index 84a90dd..c6f36ed 100644 --- a/orc/orcmips.c +++ b/orc/orcmips.c @@ -220,6 +220,16 @@ orc_mips_emit_lb (OrcCompiler *compiler, OrcMipsRegister dest, } void +orc_mips_emit_lbu (OrcCompiler *compiler, OrcMipsRegister dest, + OrcMipsRegister base, unsigned int offset) +{ + ORC_ASM_CODE (compiler, " lbu %s, %d(%s)\n", + orc_mips_reg_name (dest), + offset, orc_mips_reg_name (base)); + orc_mips_emit (compiler, MIPS_IMMEDIATE_INSTRUCTION(044, base, dest, offset)); +} + +void orc_mips_emit_jr (OrcCompiler *compiler, OrcMipsRegister address_reg) { ORC_ASM_CODE (compiler, " jr %s\n", orc_mips_reg_name (address_reg)); @@ -496,6 +506,19 @@ orc_mips_emit_subq_s_ph (OrcCompiler *compiler, } void +orc_mips_emit_subq_ph (OrcCompiler *compiler, + OrcMipsRegister dest, + OrcMipsRegister source1, + OrcMipsRegister source2) +{ + ORC_ASM_CODE (compiler, " subq.ph %s, %s, %s\n", + orc_mips_reg_name (dest), + orc_mips_reg_name (source1), + orc_mips_reg_name (source2)); + orc_mips_emit (compiler, MIPS_BINARY_INSTRUCTION(037, source1, source2, dest, 013, 020)); +} + +void orc_mips_emit_srl (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value) { @@ -714,6 +737,23 @@ orc_mips_emit_replv_qb (OrcCompiler *compiler, 03, /* REPLV.QB */ 022 /* ABSQ_S.PH */)); } + +void +orc_mips_emit_preceu_ph_qbr (OrcCompiler *compiler, + OrcMipsRegister dest, + OrcMipsRegister source) +{ + ORC_ASM_CODE (compiler, " preceu.ph.qbr %s, %s\n", + orc_mips_reg_name (dest), + orc_mips_reg_name (source)); + orc_mips_emit (compiler, + MIPS_BINARY_INSTRUCTION(037, /* SPECIAL3 */ + ORC_MIPS_ZERO, /* actually no reg here */ + source, dest, + 035, /* PRECEU.PH.QBR */ + 022 /* ABSQ_S.PH */)); +} + void orc_mips_emit_cmp_lt_ph (OrcCompiler *compiler, OrcMipsRegister source1, diff --git a/orc/orcmips.h b/orc/orcmips.h index 3638eb1..b0faa31 100644 --- a/orc/orcmips.h +++ b/orc/orcmips.h @@ -71,6 +71,8 @@ void orc_mips_emit_lh (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister base, unsigned int offset); void orc_mips_emit_lb (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister base, unsigned int offset); +void orc_mips_emit_lbu (OrcCompiler *compiler, OrcMipsRegister dest, + OrcMipsRegister base, unsigned int offset); void orc_mips_emit_jr (OrcCompiler *compiler, OrcMipsRegister address_reg); void orc_mips_emit_conditional_branch (OrcCompiler *compiler, int condition, @@ -114,6 +116,7 @@ void orc_mips_emit_move (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsReg void orc_mips_emit_sub (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); void orc_mips_emit_subu_qb (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); void orc_mips_emit_subq_s_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); +void orc_mips_emit_subq_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); void orc_mips_emit_srl (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); void orc_mips_emit_sll (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); void orc_mips_emit_sra (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source, int value); @@ -140,6 +143,7 @@ void orc_mips_emit_movn (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsReg void orc_mips_emit_repl_ph (OrcCompiler *compiler, OrcMipsRegister dest, int value); void orc_mips_emit_replv_qb (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source); +void orc_mips_emit_preceu_ph_qbr (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source); void orc_mips_emit_cmp_lt_ph (OrcCompiler *compiler, OrcMipsRegister source1, OrcMipsRegister source2); void orc_mips_emit_pick_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source1, OrcMipsRegister source2); -- 2.7.4