aboutsummaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
Diffstat (limited to 'sim')
-rw-r--r--sim/common/ChangeLog5
-rw-r--r--sim/common/cgen-ops.h14
2 files changed, 16 insertions, 3 deletions
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index ec82ccb..074fcd7 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -1,5 +1,10 @@
2000-12-04 Ben Elliston <bje@redhat.com>
+ * cgen-ops.h (SUBWORDSIQI): Mask off top bits.
+ (SUBWORDSIUQI): Likewise.
+ (SUBWORDDIHI): Likewise.
+ (SUBWORDDIQI): New function.
+
* cgen-trace.c (disassemble_insn): Remove unused declaration.
* cgen-scache.c (scache_option_handler): Remove unused local var.
diff --git a/sim/common/cgen-ops.h b/sim/common/cgen-ops.h
index 83f4459..d829e93 100644
--- a/sim/common/cgen-ops.h
+++ b/sim/common/cgen-ops.h
@@ -323,21 +323,28 @@ SEMOPS_INLINE QI
SUBWORDSIQI (SI in, int byte)
{
assert (byte >= 0 && byte <= 3);
- return (UQI) (in >> (8 * (3 - byte)));
+ return (UQI) (in >> (8 * (3 - byte))) & 0xFF;
}
SEMOPS_INLINE UQI
SUBWORDSIUQI (SI in, int byte)
{
assert (byte >= 0 && byte <= 3);
- return (UQI) (in >> (8 * (3 - byte)));
+ return (UQI) (in >> (8 * (3 - byte))) & 0xFF;
+}
+
+SEMOPS_INLINE QI
+SUBWORDDIQI (DI in, int byte)
+{
+ assert (byte >= 0 && byte <= 7);
+ return (UQI) (in >> (8 * (7 - byte))) & 0xFF;
}
SEMOPS_INLINE HI
SUBWORDDIHI (DI in, int word)
{
assert (word >= 0 && word <= 3);
- return (UHI) (in >> (16 * (3 - word)));
+ return (UHI) (in >> (16 * (3 - word))) & 0xFFFF;
}
SEMOPS_INLINE HI
@@ -450,6 +457,7 @@ HI SUBWORDSIHI (HI);
SI SUBWORDSFSI (SF);
SF SUBWORDSISF (SI);
DF SUBWORDDIDF (DI);
+QI SUBWORDDIQI (DI, int);
HI SUBWORDDIHI (DI, int);
SI SUBWORDDISI (DI, int);
SI SUBWORDDFSI (DF, int);