mips: added _emit() for lbu, subq.ph and preceu.ph.qbr
authorGuillaume Emont <guijemont@igalia.com>
Mon, 10 Dec 2012 15:39:08 +0000 (16:39 +0100)
committerGuillaume Emont <guijemont@igalia.com>
Fri, 28 Dec 2012 14:23:38 +0000 (15:23 +0100)
orc/orcmips.c
orc/orcmips.h

index 84a90dd..c6f36ed 100644 (file)
@@ -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,
index 3638eb1..b0faa31 100644 (file)
@@ -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);