[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 32/40] Add saturating arithmetic conversion function
From: |
Nathan Froyd |
Subject: |
[Qemu-devel] [PATCH 32/40] Add saturating arithmetic conversion functions for subsequent instructions. |
Date: |
Tue, 30 Dec 2008 19:10:14 -0800 |
Signed-off-by: Nathan Froyd <address@hidden>
---
target-ppc/op_helper.c | 27 +++++++++++++++++++++++++++
1 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c
index 7170d05..09e1368 100644
--- a/target-ppc/op_helper.c
+++ b/target-ppc/op_helper.c
@@ -1972,6 +1972,33 @@ target_ulong helper_dlmzb (target_ulong high,
target_ulong low, uint32_t update_
for (index = ARRAY_SIZE(r->element)-1; index >= 0; index--)
#endif
+/* Saturating arithmetic helpers. */
+#define SATCVT(from, to, from_type, to_type, min, max, use_min, use_max) \
+ static always_inline to_type cvt##from##to (from_type x, int *sat) \
+ { \
+ to_type r; \
+ if (use_min && x < min) { \
+ r = min; \
+ *sat = 1; \
+ } else if (use_max && x > max) { \
+ r = max; \
+ *sat = 1; \
+ } else { \
+ r = x; \
+ } \
+ return r; \
+ }
+SATCVT(sh, sb, int16_t, int8_t, INT8_MIN, INT8_MAX, 1, 1)
+SATCVT(sw, sh, int32_t, int16_t, INT16_MIN, INT16_MAX, 1, 1)
+SATCVT(sd, sw, int64_t, int32_t, INT32_MIN, INT32_MAX, 1, 1)
+SATCVT(uh, ub, uint16_t, uint8_t, 0, UINT8_MAX, 0, 1)
+SATCVT(uw, uh, uint32_t, uint16_t, 0, UINT16_MAX, 0, 1)
+SATCVT(ud, uw, uint64_t, uint32_t, 0, UINT32_MAX, 0, 1)
+SATCVT(sh, ub, int16_t, uint8_t, 0, UINT8_MAX, 1, 1)
+SATCVT(sw, uh, int32_t, uint16_t, 0, UINT16_MAX, 1, 1)
+SATCVT(sd, uw, int64_t, uint32_t, 0, UINT32_MAX, 1, 1)
+#undef SATCVT
+
void helper_lvsl (ppc_avr_t *r, target_ulong sh)
{
int i, j = (sh & 0xf);
--
1.6.0.5
- [Qemu-devel] [PATCH 05/40] Add vavg{s,u}{b,h,w} instructions., (continued)
- [Qemu-devel] [PATCH 05/40] Add vavg{s,u}{b,h,w} instructions., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 24/40] Add GEN_VXFORM_UIMM macro for subsequent instructions., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 21/40] Add vsldoi instruction., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 30/40] Add vmsum{u,m}bm instructions., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 26/40] Add GEN_VXFORM_NOA macro for subsequent instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 06/40] Add v{min, max}{s, u}{b, h, w} instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 33/40] Add vpks{h, w}{s, u}s, vpku{h, w}us, and vpku{h, w}um instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 07/40] Add GEN_VXRFORM{, 1} macros for subsequent instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 08/40] Add vcmpequ{b, h, w} and vcmpgt{s, u}{b, h, w} instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 19/40] Add vrl{b,h,w} instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 32/40] Add saturating arithmetic conversion functions for subsequent instructions.,
Nathan Froyd <=
- [Qemu-devel] [PATCH 14/40] Add vs{l,r}o instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 34/40] Add vpkpx instruction., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 17/40] Add m{f,t}vscr instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 35/40] Add vmh{,r}addshs instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 38/40] Add vmladduhm instruction., Nathan Froyd, 2008/12/31