]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Extend bit and endian operators.
authorAndrew Cagney <cagney@redhat.com>
Fri, 7 Mar 1997 09:08:07 +0000 (09:08 +0000)
committerAndrew Cagney <cagney@redhat.com>
Fri, 7 Mar 1997 09:08:07 +0000 (09:08 +0000)
sim/common/ChangeLog
sim/common/sim-bits-n.h [new file with mode: 0644]

index a6b664681a88d03fc444815db4265faa1008f22d..1b96df988a6425756af9b82f5965dd781f486eb9 100644 (file)
@@ -1,3 +1,20 @@
+Tue Mar  4 09:35:56 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>
+       
+       * sim-alu.h (ALU_SUB_CA, ALU*_SUB_CA): New alu operation.
+
+       * sim-bits.h, sim-bits-n.h, sim-bits.c (LSMASKED*): New macro's
+       extract the tail or least signifiant bits from an integer of the
+       specified size.
+       
+       * sim-bits.h, sim-bits.c: Clean up conditionally compiled #if
+       WITH_TARGET_BITSIZE so that the compilation will fail when an
+       unsupported bitsize value is defined.
+
+       (INSERTED*): Convert to functions.
+       (EXTRACTED*): Ditto.
+       
+       (SIGN_EXTEND, SEXT): Change to more terse name.
+       
 Tue Mar  4 09:35:56 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>
 
        * sim-inline.h: Allow explicit control over which .c files will be
@@ -10,6 +27,21 @@ Tue Mar  4 09:35:56 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>
        icache.c, idecode.c, semantics.c or support.c.  Those names are
        not generally applicable.
        
+Thu Feb 27 10:17:23 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>
+
+       * sim-bits.c, sim-bits-n.h (new): Split sim-bits.c into two parts
+       in a fashion similar to sim-endian-n.
+
+       * sim-endian.h: (H_word, L_word, AL_*, VL_*): Extend to include
+       both value and address macro's.
+
+Tue Feb 25 18:51:57 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>
+
+       * sim-alu.h (ALU16_BEGIN, ALU16_SET, ...): Fill in.
+
+       * sim-endian.h (L_word, H_word): Replace MS2W_4, LS2W_4 with more
+       generic L_word, H_word macro's.
+
 Thu Feb 20 18:36:55 1997  Andrew Cagney  <cagney@critters.cygnus.com>
 
        * sim-basics.h: Borrow code from ppc directory.
diff --git a/sim/common/sim-bits-n.h b/sim/common/sim-bits-n.h
new file mode 100644 (file)
index 0000000..0359c03
--- /dev/null
@@ -0,0 +1,145 @@
+/*  This file is part of the program psim.
+
+    Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au>
+    Copyright (C) 1997, Free Software Foundation, Inc.
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+    */
+
+
+#ifndef N
+#error "N must be #defined"
+#endif
+
+/* NOTE: See end of file for #undef */
+#define unsignedN XCONCAT2(unsigned,N)
+#define signedN XCONCAT2(signed,N)
+#define MASKEDn XCONCAT2(MASKED,N)
+#define MASKn XCONCAT2(MASK,N)
+#define LSMASKEDn XCONCAT2(LSMASKED,N)
+#define EXTRACTEDn XCONCAT2(EXTRACTED,N)
+#define INSERTEDn XCONCAT2(INSERTED,N)
+#define ROTn XCONCAT2(ROT,N)
+#define ROTLn XCONCAT2(ROTL,N)
+#define ROTRn XCONCAT2(ROTR,N)
+#define SEXTn XCONCAT2(SEXT,N)
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+MASKEDn(unsignedN word,
+       unsigned start,
+       unsigned stop)
+{
+  return (word & MASKn(start, stop));
+}
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+LSMASKEDn(unsignedN word,
+         unsigned nr_bits)
+{
+  return (word & MASKn(N - nr_bits, N - 1));
+}
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+EXTRACTEDn(unsignedN val,
+          unsigned start,
+          unsigned stop)
+{
+  return LSMASKEDn((((unsignedN)(val)) >> (N - stop - 1)),
+                  stop - start + 1);
+}
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+INSERTEDn(unsignedN val,
+         unsigned start,
+         unsigned stop)
+{
+  return (((unsignedN)(val)
+          << _MAKE_SHIFT(N, stop))
+         & MASKn(start, stop));
+}
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+ROTn(unsignedN val,
+     int shift)
+{
+  unsignedN result;
+  if (shift > 0)
+    return ROTRn(val, shift);
+  else if (shift < 0)
+    return ROTLn(val, -shift);
+  else
+    return val;
+}
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+ROTLn(unsignedN val,
+      unsigned shift)
+{
+  unsignedN result;
+  ASSERT(shift <= N);
+  result = (((val) << (shift)) | ((val) >> ((N)-(shift))));
+  return result;
+}
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+ROTRn(unsignedN val,
+      unsigned shift)
+{
+  unsignedN result;
+  ASSERT(shift <= N);
+  result = (((val) >> (shift)) | ((val) << ((N)-(shift))));
+  return result;
+}
+
+
+INLINE_SIM_BITS\
+(unsignedN)
+SEXTn(signedN val,
+            unsigned sign_bit)
+{
+  /* make the sign-bit most significant and then smear it back into
+     position */
+  ASSERT(sign_bit < N);
+  return (val << sign_bit) >> sign_bit;
+}
+
+
+/* NOTE: See start of file for #define */
+#undef SEXTn
+#undef ROTLn
+#undef ROTRn
+#undef ROTn
+#undef INSERTEDn
+#undef EXTRACTEDn
+#undef LSMASKEDn
+#undef MASKn
+#undef MASKEDn
+#undef signedN
+#undef unsignedN