aboutsummaryrefslogtreecommitdiff
path: root/sim/common/sim-bits.h
diff options
context:
space:
mode:
Diffstat (limited to 'sim/common/sim-bits.h')
-rw-r--r--sim/common/sim-bits.h40
1 files changed, 25 insertions, 15 deletions
diff --git a/sim/common/sim-bits.h b/sim/common/sim-bits.h
index 3170c61..1433c4c 100644
--- a/sim/common/sim-bits.h
+++ b/sim/common/sim-bits.h
@@ -24,7 +24,7 @@
#define _SIM_BITS_H_
-/* bit manipulation routines:
+/* Bit manipulation routines:
Bit numbering: The bits are numbered according to the target ISA's
convention. That being controlled by WITH_TARGET_WORD_MSB. For
@@ -42,15 +42,17 @@
NB: Use EXTRACTED, MSEXTRACTED and LSEXTRACTED as a guideline for
naming. LSMASK and LSMASKED are wrong.
- BIT*(POS): Constant with just 1 bit set.
+ BIT*(POS): `*' bit constant with just 1 bit set.
- LSBIT*(OFFSET): Constant with just 1 bit set - LS bit is zero.
+ LSBIT*(OFFSET): `*' bit constant with just 1 bit set - LS bit is
+ zero.
- MSBIT*(OFFSET): Constant with just 1 bit set - MS bit is zero.
+ MSBIT*(OFFSET): `*' bit constant with just 1 bit set - MS bit is
+ zero.
- MASK*(FIRST, LAST): Constant with bits [FIRST .. LAST] set. The
- <MACRO> (no size) version permits FIRST >= LAST and generates a
- wrapped bit mask vis ([0..LAST] | [FIRST..LSB]).
+ MASK*(FIRST, LAST): `*' bit constant with bits [FIRST .. LAST]
+ set. The <MACRO> (no size) version permits FIRST >= LAST and
+ generates a wrapped bit mask vis ([0..LAST] | [FIRST..LSB]).
LSMASK*(FIRST, LAST): Like MASK - LS bit is zero.
@@ -87,18 +89,26 @@
IEA_MASKED(SHOULD_MASK, ADDR): Convert the address to the targets
natural size. If in 32bit mode, discard the high 32bits.
- EXTENDED*(VALUE): Convert the `*' bit value to the targets natural
- word size. Sign extned the value if needed.
+ EXTEND*(VALUE): Convert the `*' bit value to the targets natural
+ word size. Sign extend the value if needed.
+
+ ALIGN_*(VALUE): Round the value upwards so that it is aligned to a
+ `_*' byte boundary.
- ALIGN_*(VALUE): Round upwards the value so that it is aligned.
+ FLOOR_*(VALUE): Truncate the value so that it is aligned to a `_*'
+ byte boundary.
- FLOOR_*(VALUE): Truncate the value so that it is aligned.
+ ROT*(VALUE, NR_BITS): Return the `*' bit VALUE rotated by NR_BITS
+ right (positive) or left (negative).
- ROTL*(VALUE, NR_BITS): Return the value rotated by NR_BITS left.
+ ROTL*(VALUE, NR_BITS): Return the `*' bit value rotated by NR_BITS
+ left. 0 <= NR_BITS <= `*'.
- ROTR*(VALUE, NR_BITS): Return the value rotated by NR_BITS right.
+ ROTR*(VALUE, NR_BITS): Return the `*' bit value rotated by NR_BITS
+ right. 0 <= NR_BITS <= N.
- SEXT*(VAL, SIGN_BIT): Treat SIGN_BIT as the sign, extend it.
+ SEXT*(VALUE, SIGN_BIT): Treat SIGN_BIT as VALUEs sign, extend it ti
+ `*' bits.
Note: Only the BIT* and MASK* macros return a constant that can be
used in variable declarations.
@@ -542,7 +552,7 @@ INLINE_SIM_BITS(unsigned_word) MSSEXT (signed_word val, int sign_bit);
-#if ((SIM_BITS_INLINE & INCLUDE_MODULE) && (SIM_BITS_INLINE & INCLUDED_BY_MODULE))
+#if H_REVEALS_MODULE_P (SIM_BITS_INLINE)
#include "sim-bits.c"
#endif