* bits.c (LSMASKED64): New inline function.
authorMatthew Green <mrg@redhat.com>
Fri, 4 Jan 2002 00:00:54 +0000 (00:00 +0000)
committerMatthew Green <mrg@redhat.com>
Fri, 4 Jan 2002 00:00:54 +0000 (00:00 +0000)
(LSEXTRACTED64): Likewise.
* bits.h (_LSB_POS, _LSMASKn, LSMASK64): New macros from
sim/common/sim-bits.h
(LSMASKED64, LSEXTRACTED64): New functions definitions.
* Makefile.in (sim-bits.o): Remove target.

* main.c (zalloc): Fix typo in error message.

sim/ppc/ChangeLog
sim/ppc/Makefile.in
sim/ppc/bits.c
sim/ppc/bits.h
sim/ppc/main.c

index 8fdfc439b579e3e8ad2dd51c350eef82462d571d..24db4a9e425669c35d9058af10206d62d9a4f896 100644 (file)
@@ -1,3 +1,14 @@
+2002-01-04  matthew green  <mrg@redhat.com>
+
+       * bits.c (LSMASKED64): New inline function.
+       (LSEXTRACTED64): Likewise.
+       * bits.h (_LSB_POS, _LSMASKn, LSMASK64): New macros from
+       sim/common/sim-bits.h
+       (LSMASKED64, LSEXTRACTED64): New functions definitions.
+       * Makefile.in (sim-bits.o): Remove target.
+
+       * main.c (zalloc): Fix typo in error message.
+
 2001-12-16  Andrew Cagney  <ac131313@redhat.com>
 
        * configure.in (sim_fpu): Don't add sim-bits.o.
index 5aea414fc37662203e57d7aebac32b27c9a35a88..0f7869389f8d415a3d41be4863cee7a467741dd0 100644 (file)
@@ -429,9 +429,6 @@ targ-map.o: targ-map.c targ-vals.h
 sim-fpu.o: $(srcdir)/../common/sim-fpu.c config.h tconfig.h
        $(CC) -c $(STD_CFLAGS) -DHAVE_CONFIG_H $(srcdir)/../common/sim-fpu.c 
 
-sim-bits.o: $(srcdir)/../common/sim-bits.c config.h tconfig.h
-       $(CC) -c $(STD_CFLAGS) -DHAVE_CONFIG_H $(srcdir)/../common/sim-bits.c 
-
 tconfig.h:
        rm -f tconfig.h
        echo > tconfig.h
index 00bba518aac5d2ec54a89e77f97a9681a53e8be6..4a3d9c6f6b4043b6ba83fbec6cd3058fded88fb2 100644 (file)
 
 #include "basics.h"
 
+INLINE_BITS\
+(unsigned64)
+LSMASKED64 (unsigned64 word,
+           int start,
+           int stop)
+{
+  word &= LSMASK64 (start, stop);
+  return word;
+}
 
+INLINE_BITS\
+(unsigned64)
+LSEXTRACTED64 (unsigned64 val,
+              int start,
+              int stop)
+{
+  val <<= (64 - 1 - start); /* drop high bits */
+  val >>= (64 - 1 - start) + (stop); /* drop low bits */
+  return val;
+}
 INLINE_BITS\
 (unsigned32)
 MASKED32(unsigned32 word,
index 06898e07e9b65d6b3ee83bc2afa1cf5ae7ef5ffc..35e4322b81835925896c59459cd2aba268b9d699 100644 (file)
    MASKED*(VALUE, FIRST, LAST): Masks out all but bits [FIRST
    .. LAST].
 
+   LSMASKED*(VALUE, FIRST, LAST): Like MASKED - LS bit is zero.
+
    EXTRACTED*(VALUE, FIRST, LAST): Masks out bits [FIRST .. LAST] but
    also right shifts the masked value so that bit LAST becomes the
    least significant (right most).
 
+   LSEXTRACTED*(VALUE, FIRST, LAST): Same as extracted - LS bit is
+   zero.
+
    SHUFFLED**(VALUE, OLD, NEW): Mask then move a single bit from OLD
    new NEW.
 
 #define _MAKE_SHIFT(WIDTH, pos) ((WIDTH) - 1 - (pos))
 
 
+#if (WITH_TARGET_WORD_MSB == 0)
+#define _LSB_POS(WIDTH, SHIFT) (WIDTH - 1 - SHIFT)
+#else
+#define _LSB_POS(WIDTH, SHIFT) (SHIFT)
+#endif
+
+
 /* MakeBit */
 #define _BITn(WIDTH, pos) (((natural##WIDTH)(1)) \
                           << _MAKE_SHIFT(WIDTH, pos))
 #define MASK32(START, STOP)   _MASKn(32, START, STOP)
 #define MASK64(START, STOP)   _MASKn(64, START, STOP)
 
+/* Multi-bit mask on least significant bits */
+
+#define _LSMASKn(WIDTH, FIRST, LAST) _MASKn (WIDTH, \
+                                            _LSB_POS (WIDTH, FIRST), \
+                                            _LSB_POS (WIDTH, LAST))
+
+#define LSMASK64(FIRST, LAST)  _LSMASKn (64, (FIRST), (LAST))
+
 #if (WITH_TARGET_WORD_BITSIZE == 64)
 #define MASK(START, STOP) \
 (((START) <= (STOP)) \
@@ -149,6 +169,12 @@ INLINE_BITS\
  unsigned start,
  unsigned stop);
 
+INLINE_BITS\
+(unsigned64) LSMASKED64
+(unsigned64 word,
+ int first,
+  int last);
+
 
 /* extract the required bits aligning them with the lsb */
 #define _EXTRACTEDn(WIDTH, WORD, START, STOP) \
@@ -165,6 +191,11 @@ INLINE_BITS\
  unsigned start,
  unsigned stop);
 
+INLINE_BITS\
+(unsigned64) LSEXTRACTED64
+(unsigned64 val,
+ int start,
+ int stop);
 
 /* move a single bit around */
 /* NB: the wierdness (N>O?N-O:0) is to stop a warning from GCC */
index 31444546afbd826c988f9e9bb4f82fde462e0795..f6ac87f45fd1d7adafa3cd2a5a60e0d15c9d3451 100644 (file)
@@ -248,7 +248,7 @@ zalloc(long size)
 {
   void *memory = malloc(size);
   if (memory == NULL)
-    error("zmalloc failed\n");
+    error("zalloc failed\n");
   memset(memory, 0, size);
   return memory;
 }