summaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authorBen Elliston <bje@au.ibm.com>2000-11-19 22:27:14 +0000
committerBen Elliston <bje@au.ibm.com>2000-11-19 22:27:14 +0000
commitee10b312ca3998fbac237f56a1fd00e500109b42 (patch)
tree462c198a27e75f08f6ade91ec0635234632b3796 /sim
parent27f9dfb852868bc9f0c94cad1e1386c1f14c789d (diff)
downloadgdb-ee10b312ca3998fbac237f56a1fd00e500109b42.tar.gz
2000-11-20 Ben Elliston <bje@redhat.com>
* cgen-ops.h (SUBBI): New macro. (SUBWORDSIQI, SUBWORDSIHI, SUBWORDSIUQI): New functions. (SUBWORDDIHI, SUBWORDDIUQI, SUBWORDDIDF): Likewise.
Diffstat (limited to 'sim')
-rw-r--r--sim/common/ChangeLog6
-rw-r--r--sim/common/cgen-ops.h57
2 files changed, 62 insertions, 1 deletions
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index 36e1fbb58e9..bc5a33cefa0 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -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.
diff --git a/sim/common/cgen-ops.h b/sim/common/cgen-ops.h
index c6321777c96..83f4459242f 100644
--- a/sim/common/cgen-ops.h
+++ b/sim/common/cgen-ops.h
@@ -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);