summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--target-sparc/exec.h5
-rw-r--r--target-sparc/op_helper.c17
2 files changed, 21 insertions, 1 deletions
diff --git a/target-sparc/exec.h b/target-sparc/exec.h
index db19da6f66..54c824ee87 100644
--- a/target-sparc/exec.h
+++ b/target-sparc/exec.h
@@ -71,13 +71,14 @@ void do_fcmpes(void);
 void do_fcmped(void);
 #if defined(CONFIG_USER_ONLY)
 void do_fitoq(void);
-void do_fabsq(void);
 void do_fsqrtq(void);
 void do_fcmpq(void);
 void do_fcmpeq(void);
 #endif
 #ifdef TARGET_SPARC64
 void do_fabsd(void);
+void do_fxtos(void);
+void do_fxtod(void);
 void do_fcmps_fcc1(void);
 void do_fcmpd_fcc1(void);
 void do_fcmps_fcc2(void);
@@ -91,6 +92,8 @@ void do_fcmped_fcc2(void);
 void do_fcmpes_fcc3(void);
 void do_fcmped_fcc3(void);
 #if defined(CONFIG_USER_ONLY)
+void do_fabsq(void);
+void do_fxtoq(void);
 void do_fcmpq_fcc1(void);
 void do_fcmpq_fcc2(void);
 void do_fcmpq_fcc3(void);
diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c
index 48f5fc6004..a71c9da370 100644
--- a/target-sparc/op_helper.c
+++ b/target-sparc/op_helper.c
@@ -70,6 +70,14 @@ void do_fitod(void)
 {
     DT0 = int32_to_float64(*((int32_t *)&FT1), &env->fp_status);
 }
+
+#if defined(CONFIG_USER_ONLY)
+void do_fitoq(void)
+{
+    QT0 = int32_to_float128(*((int32_t *)&FT1), &env->fp_status);
+}
+#endif
+
 #ifdef TARGET_SPARC64
 void do_fxtos(void)
 {
@@ -84,6 +92,15 @@ void do_fxtod(void)
     DT0 = int64_to_float64(*((int64_t *)&DT1), &env->fp_status);
     check_ieee_exceptions();
 }
+
+#if defined(CONFIG_USER_ONLY)
+void do_fxtoq(void)
+{
+    set_float_exception_flags(0, &env->fp_status);
+    QT0 = int64_to_float128(*((int32_t *)&DT1), &env->fp_status);
+    check_ieee_exceptions();
+}
+#endif
 #endif
 #endif