diff options
author | Andrew Cagney <cagney@redhat.com> | 1997-03-14 15:13:58 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 1997-03-14 15:13:58 +0000 |
commit | f2de7dfd8cf1ffd6edc7ed650e709c7fa4488da1 (patch) | |
tree | 45023095bbd84ccadf676659aa9cc9220536793f /sim/common/sim-bits.c | |
parent | 35a78bd09b847d649fd42802049b5160ea1cea4a (diff) | |
download | gdb-f2de7dfd8cf1ffd6edc7ed650e709c7fa4488da1.zip gdb-f2de7dfd8cf1ffd6edc7ed650e709c7fa4488da1.tar.gz gdb-f2de7dfd8cf1ffd6edc7ed650e709c7fa4488da1.tar.bz2 |
Add a number of per-simulator options: hostendian, endian, inline, warnings.
Rename *-n.h files to be dos compatible
Diffstat (limited to 'sim/common/sim-bits.c')
-rw-r--r-- | sim/common/sim-bits.c | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/sim/common/sim-bits.c b/sim/common/sim-bits.c new file mode 100644 index 0000000..1f0a8e5 --- /dev/null +++ b/sim/common/sim-bits.c @@ -0,0 +1,105 @@ +/* This file is part of the program psim. + + Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au> + + 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 _SIM_BITS_C_ +#define _SIM_BITS_C_ + +#include "sim-basics.h" + + +INLINE_SIM_BITS\ +(unsigned_word) +MASKED(unsigned_word val, + unsigned start, + unsigned stop) +{ + return ((val) & MASK(start, stop)); +} + + + +INLINE_SIM_BITS\ +(unsigned_word) +LSMASKED(unsigned_word val, + unsigned nr_bits) +{ + return MASKED(val, + WITH_TARGET_WORD_BITSIZE - nr_bits, + WITH_TARGET_WORD_BITSIZE - 1); +} + + + +INLINE_SIM_BITS\ +(unsigned_word) +EXTRACTED(unsigned_word val, + unsigned start, + unsigned stop) +{ + ASSERT(start <= stop); +#if (WITH_TARGET_WORD_BITSIZE == 64) + return EXTRACTED64(val, start, stop); +#endif +#if (WITH_TARGET_WORD_BITSIZE == 32) + if (stop < 32) + return 0; + else + return ((val >> (63 - stop)) + & MASK(start+(63-stop), 63)); +#endif +} + + +INLINE_SIM_BITS\ +(unsigned_word) +INSERTED(unsigned_word val, + unsigned start, + unsigned stop) +{ + ASSERT(start <= stop); +#if (WITH_TARGET_WORD_BITSIZE == 64) + return INSERTED64(val, start, stop); +#endif +#if (WITH_TARGET_WORD_BITSIZE == 32) + if (stop < 32) + return 0; + else + return ((val & MASK(start+(63-stop), 63)) + << (63 - stop)); +#endif +} + + + + +#define N 16 +#include "sim-n-bits.h" +#undef N + +#define N 32 +#include "sim-n-bits.h" +#undef N + +#define N 64 +#include "sim-n-bits.h" +#undef N + +#endif /* _SIM_BITS_C_ */ |