This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[Sim] New primitives for sim/common/cgen-ops.h
- To: gdb-patches at sources dot redhat dot com
- Subject: [Sim] New primitives for sim/common/cgen-ops.h
- From: Ben Elliston <bje at redhat dot com>
- Date: Mon, 20 Nov 2000 09:29:52 +1100
FYI, I have just committed the following patch to the repository.
Cheers, Ben
2000-11-20 Ben Elliston <bje@redhat.com>
* cgen-ops.h (SUBBI): New macro.
(SUBWORDSIQI, SUBWORDSIHI, SUBWORDSIUQI): New functions.
(SUBWORDDIHI, SUBWORDDIUQI, SUBWORDDIDF): Likewise.
*** cgen-ops.h 2000/06/06 04:06:55 1.16
--- cgen-ops.h 2000/11/19 22:26:42
***************
*** 23,28 ****
--- 23,30 ----
#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,44 ****
--- 41,47 ----
#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,313 ****
--- 311,354 ----
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,321 ****
--- 357,369 ----
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,408 ****
#else
! SF SUBWORDSISF (SI);
SI SUBWORDSFSI (SF);
SI SUBWORDDISI (DI, int);
SI SUBWORDDFSI (DF, int);
SI SUBWORDXFSI (XF, int);
SI SUBWORDTFSI (TF, int);
DI JOINSIDI (SI, SI);
DF JOINSIDF (SI, SI);
--- 445,463 ----
#else
! 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);