diff options
Diffstat (limited to 'sim/common/cgen-ops.h')
-rw-r--r-- | sim/common/cgen-ops.h | 14 |
1 files changed, 11 insertions, 3 deletions
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); |