summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--orc/orcmips.c16
-rw-r--r--orc/orcmips.h1
2 files changed, 17 insertions, 0 deletions
diff --git a/orc/orcmips.c b/orc/orcmips.c
index b0869e9..45abe70 100644
--- a/orc/orcmips.c
+++ b/orc/orcmips.c
@@ -896,3 +896,19 @@ orc_mips_emit_wsbh (OrcCompiler *compiler,
02, /* WSBH */
040 /* BSHFL */));
}
+
+void
+orc_mips_emit_seh (OrcCompiler *compiler,
+ OrcMipsRegister dest,
+ OrcMipsRegister source)
+{
+ ORC_ASM_CODE (compiler, " seh %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,
+ 030, /* SEH */
+ 040 /* BSHFL */));
+}
diff --git a/orc/orcmips.h b/orc/orcmips.h
index 1edef44..02387c0 100644
--- a/orc/orcmips.h
+++ b/orc/orcmips.h
@@ -183,6 +183,7 @@ void orc_mips_emit_packrl_ph (OrcCompiler *compiler, OrcMipsRegister dest, OrcMi
void orc_mips_emit_align (OrcCompiler *compiler, int align_shift);
void orc_mips_emit_wsbh (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source);
+void orc_mips_emit_seh (OrcCompiler *compiler, OrcMipsRegister dest, OrcMipsRegister source);
void orc_mips_do_fixups (OrcCompiler *compiler);