[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 12/12] target-ppc: Introduce DFP Add
From: |
Tom Musta |
Subject: |
[Qemu-devel] [RFC 12/12] target-ppc: Introduce DFP Add |
Date: |
Thu, 13 Mar 2014 10:13:08 -0500 |
This patch provides the implementation for the Decimal Floating Point
(DFP) Add instructions (dadd, daddq).
Signed-off-by: Tom Musta <address@hidden>
---
target-ppc/dfp_helper.c | 35 ++++++++++++++++++++++++-----------
target-ppc/helper.h | 3 +++
target-ppc/translate.c | 8 +++++---
3 files changed, 32 insertions(+), 14 deletions(-)
diff --git a/target-ppc/dfp_helper.c b/target-ppc/dfp_helper.c
index a3381ef..46a83e4 100644
--- a/target-ppc/dfp_helper.c
+++ b/target-ppc/dfp_helper.c
@@ -235,17 +235,30 @@ static void ppc_dfp_run_post_processors(struct PPC_DFP
*dfp,
}
}
+#define DFP_HELPER_TAB(op, dnop, postprocs, size)
\
+void helper_##op(CPUPPCState *env, uint64_t *t, uint64_t *a, uint64_t *b)
\
+{
\
+ struct PPC_DFP dfp;
\
+ ppc_dfp_prepare_decimal##size##_fra_frb(&dfp, a, b, env);
\
+ dnop(&dfp.t, &dfp.a, &dfp.b, &dfp.context);
\
+ decimal##size##FromNumber((decimal##size *)dfp.t64, &dfp.t, &dfp.context);
\
+ ppc_dfp_run_post_processors(&dfp, postprocs, ARRAY_SIZE(postprocs));
\
+ if (size == 64) {
\
+ t[0] = dfp.t64[0];
\
+ } else if (size == 128) {
\
+ t[0] = dfp.t64[HI_IDX];
\
+ t[1] = dfp.t64[LO_IDX];
\
+ }
\
+}
-void *_TmpAvoidDefinedButNotUsedWarnings_[] = {
- (void *)ppc_dfp_prepare_decimal64_fra_frb,
- (void *)ppc_dfp_prepare_decimal128_fra_frb,
- (void *)ppc_dfp_run_post_processors,
- (void *)ppc_dfp_set_FPRF_from_FRT,
- (void *)ppc_dfp_check_for_OX,
- (void *)ppc_dfp_check_for_UX,
- (void *)ppc_dfp_check_for_XX,
- (void *)ppc_dfp_check_for_VXSNAN,
- (void *)ppc_dfp_check_for_VXISI_add,
+PPC_DFP_PostProc ADD_PPs[] = {
+ ppc_dfp_set_FPRF_from_FRT,
+ ppc_dfp_check_for_OX,
+ ppc_dfp_check_for_UX,
+ ppc_dfp_check_for_XX,
+ ppc_dfp_check_for_VXSNAN,
+ ppc_dfp_check_for_VXISI_add,
};
-
+DFP_HELPER_TAB(dadd, decNumberAdd, ADD_PPs, 64)
+DFP_HELPER_TAB(daddq, decNumberAdd, ADD_PPs, 128)
diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index 1bebc8e..6054554 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -618,4 +618,7 @@ DEF_HELPER_3(store_601_batu, void, env, i32, tl)
#define dh_ctype_fprp uint64_t *
#define dh_is_signed_fprp dh_is_signed_ptr
+DEF_HELPER_4(dadd, void, env, fprp, fprp, fprp)
+DEF_HELPER_4(daddq, void, env, fprp, fprp, fprp)
+
#include "exec/def-helper.h"
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 26bfebc..de9ddb6 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -8229,9 +8229,8 @@ static void gen_##name(DisasContext *ctx) \
_GEN_DFP_TAB(name, op1, op2) \
_GEN_DFP_TAB(name##q, op1, op2)
-/* Avoid 'defined but not used' warnings ... this will be removed in */
-/* a subsequent patch. */
-void *_TempCr6_[] = { (void *)gen_set_cr6_from_fpscr, };
+GEN_DFP_TAB(dadd, 0x02, 0x00)
+
/*** SPE extension ***/
/* Register moves */
@@ -11062,6 +11061,9 @@ GEN_XX3FORM_DM(xxpermdi, 0x08, 0x01),
#define GEN_DFP_TAB(name, op1, op2) \
GEN_DFP_TAB_LONG(name, op1, op2), \
GEN_DFP_TAB_QUAD(name##q, op1, op2),
+
+GEN_DFP_TAB(dadd, 0x02, 0x00)
+
#undef GEN_SPE
#define GEN_SPE(name0, name1, opc2, opc3, inval0, inval1, type) \
GEN_OPCODE_DUAL(name0##_##name1, 0x04, opc2, opc3, inval0, inval1, type,
PPC_NONE)
--
1.7.1
- [Qemu-devel] [RFC 05/12] target-ppc: Eliminate redundant declarations, (continued)
- [Qemu-devel] [RFC 05/12] target-ppc: Eliminate redundant declarations, Tom Musta, 2014/03/13
- [Qemu-devel] [RFC 04/12] target-ppc: Change gstdint.h to stdint.h, Tom Musta, 2014/03/13
- [Qemu-devel] [RFC 06/12] target-ppc: Eliminate Unused Variable in decSetSubnormal, Tom Musta, 2014/03/13
- [Qemu-devel] [RFC 07/12] target-ppc: Enable Building of libdecnumber, Tom Musta, 2014/03/13
- [Qemu-devel] [RFC 10/12] target-ppc: Introduce DFP Helper Utilities, Tom Musta, 2014/03/13
- [Qemu-devel] [RFC 08/12] target-ppc: Define FPR Pointer Type for Helpers, Tom Musta, 2014/03/13
- [Qemu-devel] [RFC 09/12] target-ppc: Introduce Translation Macros for DFP Arithmetic Forms, Tom Musta, 2014/03/13
- [Qemu-devel] [RFC 02/12] target-ppc: Prepare libdecnumber for QEMU include structure, Tom Musta, 2014/03/13
- [Qemu-devel] [RFC 11/12] target-ppc: Introduce DFP Post Processor Utilities, Tom Musta, 2014/03/13
- [Qemu-devel] [RFC 03/12] target-ppc: Modify dconfig.h to Integrate with QEMU, Tom Musta, 2014/03/13
- [Qemu-devel] [RFC 12/12] target-ppc: Introduce DFP Add,
Tom Musta <=
- [Qemu-devel] [RFC 01/12] target-ppc: Introduce libdecnumber Code, Tom Musta, 2014/03/13