diff options
author | Ben Elliston <bje@au.ibm.com> | 2000-11-19 22:27:14 +0000 |
---|---|---|
committer | Ben Elliston <bje@au.ibm.com> | 2000-11-19 22:27:14 +0000 |
commit | 4f49fa1bf00660d525a6dd299ac869a8aa45b661 (patch) | |
tree | 7559058cbefd6c2e83e3002d4bc5ed7fe6acda7e /sim | |
parent | b612ab9c43d75a0cc80c8f777ac6257928e6a524 (diff) | |
download | gdb-4f49fa1bf00660d525a6dd299ac869a8aa45b661.zip gdb-4f49fa1bf00660d525a6dd299ac869a8aa45b661.tar.gz gdb-4f49fa1bf00660d525a6dd299ac869a8aa45b661.tar.bz2 |
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/ChangeLog | 6 | ||||
-rw-r--r-- | sim/common/cgen-ops.h | 57 |
2 files changed, 62 insertions, 1 deletions
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog index 36e1fbb..bc5a33c 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 c632177..83f4459 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); |