This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[Sim] New primitives for sim/common/cgen-ops.h


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);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]