diff options
Diffstat (limited to 'target-sparc/fop_template.h')
-rw-r--r-- | target-sparc/fop_template.h | 47 |
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 |