2000-11-20 Ben Elliston <bje@redhat.com>
authorBen Elliston <bje@au.ibm.com>
Sun, 19 Nov 2000 22:27:14 +0000 (22:27 +0000)
committerBen Elliston <bje@au.ibm.com>
Sun, 19 Nov 2000 22:27:14 +0000 (22:27 +0000)
* cgen-ops.h (SUBBI): New macro.
(SUBWORDSIQI, SUBWORDSIHI, SUBWORDSIUQI): New functions.
(SUBWORDDIHI, SUBWORDDIUQI, SUBWORDDIDF): Likewise.

sim/common/ChangeLog
sim/common/cgen-ops.h

index 36e1fbb58e9126ea24e746f6c568bde4237b222b..bc5a33cefa0ccd99e2b5f9e6bc53dd2e6a1fe69e 100644 (file)
@@ -1,3 +1,9 @@
+2000-11-20  Ben Elliston  <bje@redhat.com>
+
+       * cgen-ops.h (SUBBI): New macro.
+       (SUBWORDSIQI, SUBWORDSIHI, SUBWORDSIUQI): New functions.
+       (SUBWORDDIHI, SUBWORDDIUQI, SUBWORDDIDF): Likewise.
+
 2000-11-16  Ben Elliston  <bje@redhat.com>
 
        * cgen-types.h (VOID): New type.
index c6321777c96771a948a5847ee5e4cd07374e2f66..83f4459242f1f94c8eca1555eca53965e3306e94 100644 (file)
@@ -23,6 +23,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #ifndef CGEN_SEM_OPS_H
 #define CGEN_SEM_OPS_H
 
+#include <assert.h>
+
 #if defined (__GNUC__) && ! defined (SEMOPS_DEFINE_INLINE)
 #define SEMOPS_DEFINE_INLINE
 #define SEMOPS_INLINE extern inline
@@ -39,6 +41,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #define ANDIF(x, y) ((x) && (y))
 #define ORIF(x, y) ((x) || (y))
 
+#define SUBBI(x, y) ((x) - (y))
 #define ANDBI(x, y) ((x) & (y))
 #define ORBI(x, y) ((x) | (y))
 #define XORBI(x, y) ((x) ^ (y))
@@ -308,6 +311,44 @@ SUBWORDSISF (SI in)
   return x.out;
 }
 
+SEMOPS_INLINE DF
+SUBWORDDIDF (DI in)
+{
+  union { DI in; DF out; } x;
+  x.in = in;
+  return x.out;
+}
+
+SEMOPS_INLINE QI
+SUBWORDSIQI (SI in, int byte)
+{
+  assert (byte >= 0 && byte <= 3);
+  return (UQI) (in >> (8 * (3 - byte)));
+}
+
+SEMOPS_INLINE UQI
+SUBWORDSIUQI (SI in, int byte)
+{
+  assert (byte >= 0 && byte <= 3);
+  return (UQI) (in >> (8 * (3 - byte)));
+}
+
+SEMOPS_INLINE HI
+SUBWORDDIHI (DI in, int word)
+{
+  assert (word >= 0 && word <= 3);
+  return (UHI) (in >> (16 * (3 - word)));
+}
+
+SEMOPS_INLINE HI
+SUBWORDSIHI (SI in, int word)
+{
+  if (word == 0)
+    return (USI) in >> 16;
+  else
+    return in;
+}
+
 SEMOPS_INLINE SI
 SUBWORDSFSI (SF in)
 {
@@ -316,6 +357,13 @@ SUBWORDSFSI (SF in)
   return x.out;
 }
 
+SEMOPS_INLINE UQI
+SUBWORDDIUQI (DI in, int byte)
+{
+  assert (byte >= 0 && byte <= 7);
+  return (UQI) (in >> (8 * (7 - byte)));
+}
+
 SEMOPS_INLINE SI
 SUBWORDDISI (DI in, int word)
 {
@@ -397,13 +445,20 @@ JOINSITF (SI x0, SI x1, SI x2, SI x3)
 
 #else
 
-SF SUBWORDSISF (SI);
+QI SUBWORDSIQI (SI);
+HI SUBWORDSIHI (HI);
 SI SUBWORDSFSI (SF);
+SF SUBWORDSISF (SI);
+DF SUBWORDDIDF (DI);
+HI SUBWORDDIHI (DI, int);
 SI SUBWORDDISI (DI, int);
 SI SUBWORDDFSI (DF, int);
 SI SUBWORDXFSI (XF, int);
 SI SUBWORDTFSI (TF, int);
 
+UQI SUBWORDSIUQI (SI);
+UQI SUBWORDDIUQI (DI);
+
 DI JOINSIDI (SI, SI);
 DF JOINSIDF (SI, SI);
 XF JOINSIXF (SI, SI, SI);