aboutsummaryrefslogtreecommitdiff
path: root/target-sparc/fop_template.h
diff options
context:
space:
mode:
Diffstat (limited to 'target-sparc/fop_template.h')
-rw-r--r--target-sparc/fop_template.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/target-sparc/fop_template.h b/target-sparc/fop_template.h
index 0598b30208..0c045b8355 100644
--- a/target-sparc/fop_template.h
+++ b/target-sparc/fop_template.h
@@ -77,5 +77,52 @@ void OPPROTO glue(op_store_DT1_fpr_fpr, REGNAME)(void)
*p = u.l.upper;
}
+#if defined(CONFIG_USER_ONLY)
+/* quad floating point registers moves */
+void OPPROTO glue(op_load_fpr_QT0_fpr, REGNAME)(void)
+{
+ CPU_QuadU u;
+ uint32_t *p = (uint32_t *)®
+ u.l.lowest = *(p + 3);
+ u.l.lower = *(p + 2);
+ u.l.upper = *(p + 1);
+ u.l.upmost = *p;
+ QT0 = u.q;
+}
+
+void OPPROTO glue(op_store_QT0_fpr_fpr, REGNAME)(void)
+{
+ CPU_QuadU u;
+ uint32_t *p = (uint32_t *)®
+ u.q = QT0;
+ *(p + 3) = u.l.lowest;
+ *(p + 2) = u.l.lower;
+ *(p + 1) = u.l.upper;
+ *p = u.l.upmost;
+}
+
+void OPPROTO glue(op_load_fpr_QT1_fpr, REGNAME)(void)
+{
+ CPU_QuadU u;
+ uint32_t *p = (uint32_t *)®
+ u.l.lowest = *(p + 3);
+ u.l.lower = *(p + 2);
+ u.l.upper = *(p + 1);
+ u.l.upmost = *p;
+ QT1 = u.q;
+}
+
+void OPPROTO glue(op_store_QT1_fpr_fpr, REGNAME)(void)
+{
+ CPU_QuadU u;
+ uint32_t *p = (uint32_t *)®
+ u.q = QT1;
+ *(p + 3) = u.l.lowest;
+ *(p + 2) = u.l.lower;
+ *(p + 1) = u.l.upper;
+ *p = u.l.upmost;
+}
+#endif
+
#undef REG
#undef REGNAME