aboutsummaryrefslogtreecommitdiff
path: root/target-alpha
diff options
context:
space:
mode:
Diffstat (limited to 'target-alpha')
-rw-r--r--target-alpha/op_helper.c17
-rw-r--r--target-alpha/op_helper.h6
-rw-r--r--target-alpha/op_template.h8
3 files changed, 31 insertions, 0 deletions
diff --git a/target-alpha/op_helper.c b/target-alpha/op_helper.c
index 9a3009c4d4..072499e306 100644
--- a/target-alpha/op_helper.c
+++ b/target-alpha/op_helper.c
@@ -1072,6 +1072,23 @@ void helper_mtpr (int iprn)
}
#endif
+#if defined(HOST_SPARC) || defined(HOST_SPARC64)
+void helper_reset_FT0 (void)
+{
+ FT0 = 0;
+}
+
+void helper_reset_FT1 (void)
+{
+ FT1 = 0;
+}
+
+void helper_reset_FT2 (void)
+{
+ FT2 = 0;
+}
+#endif
+
/*****************************************************************************/
/* Softmmu support */
#if !defined (CONFIG_USER_ONLY)
diff --git a/target-alpha/op_helper.h b/target-alpha/op_helper.h
index 0c65fd4a33..7e79720bc1 100644
--- a/target-alpha/op_helper.h
+++ b/target-alpha/op_helper.h
@@ -138,3 +138,9 @@ void helper_mtpr (int iprn);
void helper_ld_phys_to_virt (void);
void helper_st_phys_to_virt (void);
void helper_tb_flush (void);
+
+#if defined(HOST_SPARC) || defined(HOST_SPARC64)
+void helper_reset_FT0 (void);
+void helper_reset_FT1 (void);
+void helper_reset_FT2 (void);
+#endif
diff --git a/target-alpha/op_template.h b/target-alpha/op_template.h
index db15bb8912..ab589f21e8 100644
--- a/target-alpha/op_template.h
+++ b/target-alpha/op_template.h
@@ -26,11 +26,19 @@ void OPPROTO glue(op_reset_T, REG) (void)
RETURN();
}
+#if !defined(HOST_SPARC) && !defined(HOST_SPARC64)
void OPPROTO glue(op_reset_FT, REG) (void)
{
glue(FT, REG) = 0;
RETURN();
}
+#else
+void OPPROTO glue(op_reset_FT, REG) (void)
+{
+ glue(helper_reset_FT, REG)();
+ RETURN();
+}
+#endif
/* XXX: This can be great on most RISC machines */
#if !defined(__i386__) && !defined(__x86_64__)