diff options
author | Stan Shebs <shebs@codesourcery.com> | 1999-04-16 01:35:26 +0000 |
---|---|---|
committer | Stan Shebs <shebs@codesourcery.com> | 1999-04-16 01:35:26 +0000 |
commit | c906108c21474dfb4ed285bcc0ac6fe02cd400cc (patch) | |
tree | a0015aa5cedc19ccbab307251353a41722a3ae13 /sim/ppc/bits.c | |
parent | cd946cff9ede3f30935803403f06f6ed30cad136 (diff) | |
download | gdb-c906108c21474dfb4ed285bcc0ac6fe02cd400cc.zip gdb-c906108c21474dfb4ed285bcc0ac6fe02cd400cc.tar.gz gdb-c906108c21474dfb4ed285bcc0ac6fe02cd400cc.tar.bz2 |
Initial creation of sourceware repositorygdb-4_18-branchpoint
Diffstat (limited to 'sim/ppc/bits.c')
-rw-r--r-- | sim/ppc/bits.c | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/sim/ppc/bits.c b/sim/ppc/bits.c new file mode 100644 index 0000000..00bba51 --- /dev/null +++ b/sim/ppc/bits.c @@ -0,0 +1,114 @@ +/* This file is part of the program psim. + + Copyright (C) 1994-1995, 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 _BITS_C_ +#define _BITS_C_ + +#include "basics.h" + + +INLINE_BITS\ +(unsigned32) +MASKED32(unsigned32 word, + unsigned start, + unsigned stop) +{ + return (word & MASK32(start, stop)); +} + +INLINE_BITS\ +(unsigned64) +MASKED64(unsigned64 word, + unsigned start, + unsigned stop) +{ + return (word & MASK64(start, stop)); +} + +INLINE_BITS\ +(unsigned_word) +MASKED(unsigned_word word, + unsigned start, + unsigned stop) +{ + return ((word) & MASK(start, stop)); +} + + + +INLINE_BITS\ +(unsigned_word) +EXTRACTED(unsigned_word word, + unsigned start, + unsigned stop) +{ + ASSERT(start <= stop); +#if (WITH_TARGET_WORD_BITSIZE == 64) + return _EXTRACTEDn(64, word, start, stop); +#else + if (stop < 32) + return 0; + else + return ((word >> (63 - stop)) + & MASK(start+(63-stop), 63)); +#endif +} + + +INLINE_BITS\ +(unsigned_word) +INSERTED(unsigned_word word, + unsigned start, + unsigned stop) +{ + ASSERT(start <= stop); +#if (WITH_TARGET_WORD_BITSIZE == 64) + return _INSERTEDn(64, word, start, stop); +#else + if (stop < 32) + return 0; + else + return ((word & MASK(start+(63-stop), 63)) + << (63 - stop)); +#endif +} + + +INLINE_BITS\ +(unsigned32) +ROTL32(unsigned32 val, + long shift) +{ + ASSERT(shift >= 0 && shift <= 32); + return _ROTLn(32, val, shift); +} + + +INLINE_BITS\ +(unsigned64) +ROTL64(unsigned64 val, + long shift) +{ + ASSERT(shift >= 0 && shift <= 64); + return _ROTLn(64, val, shift); +} + +#endif /* _BITS_C_ */ |