All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nathan Froyd <froydnj@codesourcery.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 34/42] target-ppc: add saturating arithmetic conversion functions for subsequent instructions.
Date: Sun, 14 Dec 2008 18:15:07 -0800	[thread overview]
Message-ID: <1229307315-16807-35-git-send-email-froydnj@codesourcery.com> (raw)
In-Reply-To: <1229307315-16807-1-git-send-email-froydnj@codesourcery.com>


Signed-off-by: Nathan Froyd <froydnj@codesourcery.com>
---
 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 57182c6..4069e9d 100644
--- a/target-ppc/op_helper.c
+++ b/target-ppc/op_helper.c
@@ -2033,6 +2033,33 @@ target_ulong helper_dlmzb (target_ulong high, target_ulong low, uint32_t update_
   for (index = N_ELEMS(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

  parent reply	other threads:[~2008-12-15  2:22 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-15  2:14 [Qemu-devel] [PATCH] target-ppc: add Altivec instructions, patch-bomb version Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 01/42] target-ppc: add Altivec logical operations Nathan Froyd
2008-12-15 22:11   ` Aurelien Jarno
2008-12-16 19:51     ` Nathan Froyd
2008-12-18 22:48       ` Aurelien Jarno
2008-12-15  2:14 ` [Qemu-devel] [PATCH 02/42] target-ppc: add helper macros for later patches Nathan Froyd
2008-12-15 22:15   ` Aurelien Jarno
2008-12-16 15:25   ` Aurelien Jarno
2008-12-15  2:14 ` [Qemu-devel] [PATCH 03/42] target-ppc: add gen_avr_ptr function Nathan Froyd
2008-12-15 22:16   ` Aurelien Jarno
2008-12-15 22:41     ` Aurelien Jarno
2008-12-15 23:13     ` Paul Brook
2008-12-18 22:51   ` Aurelien Jarno
2008-12-15  2:14 ` [Qemu-devel] [PATCH 04/42] target-ppc: add GEN_VXFORM macro for subsequent instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 05/42] target-ppc: add v{add, sub}u{b, h, w}m instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 06/42] target-ppc: add signed fields to ppc_avr_t Nathan Froyd
2008-12-15  7:04   ` Aurelien Jarno
2008-12-15  2:14 ` [Qemu-devel] [PATCH 07/42] target-ppc: add vavg{s, u}{b, h, w} instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 08/42] target-ppc: add v{min, max}{s, " Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 09/42] target-ppc: add GEN_VXRFORM{, 1} macros for subsequent instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 10/42] target-ppc: add vcmpequ{b, h, w} and vcmpgt{s, u}{b, h, w} instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 11/42] target-ppc: add vscr access macros Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 12/42] target-ppc: add vmrg{l, h}{b, h, w} instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 13/42] target-ppc: add vmul{e, o}{s, u}{b, h} instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 14/42] target-ppc: add vsr{, a}{b, h, w} instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 15/42] target-ppc: add vsl{b, " Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 16/42] target-ppc: add vs{l,r}o instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 17/42] target-ppc: add v{add, sub}cuw instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 18/42] target-ppc: add lvs{l,r} instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 19/42] target-ppc: add m{f, t}vscr instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 20/42] target-ppc: add v{add, sub}{s, u}{b, h, w}s instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 21/42] target-ppc: add vrl{b, h, w} instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 22/42] target-ppc: add vs{l,r} instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 23/42] target-ppc: add vsldoi instruction Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 24/42] target-ppc: add GEN_VXFORM_SIMM macro for subsequent instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 25/42] target-ppc: add vspltis{b, h, w} instructions Nathan Froyd
2008-12-15  2:14 ` [Qemu-devel] [PATCH 26/42] target-ppc: add GEN_VXFORM_UIMM macro for subsequent instructions Nathan Froyd
2008-12-15  2:15 ` [Qemu-devel] [PATCH 27/42] target-ppc: add vsplt{b, h, w} instructions Nathan Froyd
2008-12-15  2:15 ` [Qemu-devel] [PATCH 28/42] target-ppc: add GEN_VXFORM_NOA macro for subsequent instructions Nathan Froyd
2008-12-15  2:15 ` [Qemu-devel] [PATCH 29/42] target-ppc: add vupk{h, l}px instructions Nathan Froyd
2008-12-15  2:15 ` [Qemu-devel] [PATCH 30/42] target-ppc: add vupk{h, l}s{b, h} instructions Nathan Froyd
2008-12-15  2:15 ` [Qemu-devel] [PATCH 31/42] target-ppc: add GEN_VAFORM_PAIRED macro for subsequent instructions Nathan Froyd
2008-12-15  2:15 ` [Qemu-devel] [PATCH 32/42] target-ppc: add vmsum{u, m}bm instructions Nathan Froyd
2008-12-15  2:15 ` [Qemu-devel] [PATCH 33/42] target-ppc: add vsel and vperm instructions Nathan Froyd
2008-12-15  2:15 ` Nathan Froyd [this message]
2008-12-15  2:15 ` [Qemu-devel] [PATCH 35/42] target-ppc: add vpks{h, w}{s, u}s, vpku{h, w}us, and vpku{h, w}um instructions Nathan Froyd
2008-12-15  2:15 ` [Qemu-devel] [PATCH 36/42] target-ppc: add vpkpx instruction Nathan Froyd
2008-12-15  2:15 ` [Qemu-devel] [PATCH 37/42] target-ppc: add vmh{, r}addshs instructions Nathan Froyd
2008-12-15  2:15 ` [Qemu-devel] [PATCH 38/42] target-ppc: add vmsumuh{m, s} instructions Nathan Froyd
2008-12-15  2:15 ` [Qemu-devel] [PATCH 39/42] target-ppc: add vmsumsh{m, " Nathan Froyd
2008-12-15  2:15 ` [Qemu-devel] [PATCH 40/42] target-ppc: add vmladduhm instruction Nathan Froyd
2008-12-15  2:15 ` [Qemu-devel] [PATCH 41/42] target-ppc: add {l, st}ve{b, h, w}x instructions Nathan Froyd
2008-12-15  2:15 ` [Qemu-devel] [PATCH 42/42] target-ppc: add vsumsws, vsum2sws, and vsum4{sbs, shs, ubs} instructions Nathan Froyd
2008-12-15  6:40 ` [Qemu-devel] [PATCH] target-ppc: add Altivec instructions, patch-bomb version Aurelien Jarno
2008-12-15  7:11   ` Laurent Desnogues
2008-12-15 17:38   ` Nathan Froyd

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1229307315-16807-35-git-send-email-froydnj@codesourcery.com \
    --to=froydnj@codesourcery.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.