summaryrefslogtreecommitdiff
path: root/py/runtime.c
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2021-02-04 15:27:53 +1100
committerDamien George <damien@micropython.org>2021-02-04 22:46:42 +1100
commit8a41ee19c22d7bb85fcbd90c9d06b9937a1b8c87 (patch)
treee62d246dc8a6a7e8016e3dc6d5c3aff698b66b21 /py/runtime.c
parent7c4435459261f1ea93577938b1ab281239d159e7 (diff)
py: Remove BITS_PER_WORD definition.
It's only used in one location, to test if << or >> will overflow when shifting mp_uint_t. For such a test it's clearer to use sizeof(lhs_val), which will be valid even if the type of lhs_val changes. Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'py/runtime.c')
-rw-r--r--py/runtime.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/py/runtime.c b/py/runtime.c
index c12271f4e..2e2fa1d17 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -387,7 +387,9 @@ mp_obj_t mp_binary_op(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs) {
if (rhs_val < 0) {
// negative shift not allowed
mp_raise_ValueError(MP_ERROR_TEXT("negative shift count"));
- } else if (rhs_val >= (mp_int_t)BITS_PER_WORD || lhs_val > (MP_SMALL_INT_MAX >> rhs_val) || lhs_val < (MP_SMALL_INT_MIN >> rhs_val)) {
+ } else if (rhs_val >= (mp_int_t)(sizeof(lhs_val) * BITS_PER_BYTE)
+ || lhs_val > (MP_SMALL_INT_MAX >> rhs_val)
+ || lhs_val < (MP_SMALL_INT_MIN >> rhs_val)) {
// left-shift will overflow, so use higher precision integer
lhs = mp_obj_new_int_from_ll(lhs_val);
goto generic_binary_op;
@@ -404,10 +406,10 @@ mp_obj_t mp_binary_op(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs) {
mp_raise_ValueError(MP_ERROR_TEXT("negative shift count"));
} else {
// standard precision is enough for right-shift
- if (rhs_val >= (mp_int_t)BITS_PER_WORD) {
+ if (rhs_val >= (mp_int_t)(sizeof(lhs_val) * BITS_PER_BYTE)) {
// Shifting to big amounts is underfined behavior
// in C and is CPU-dependent; propagate sign bit.
- rhs_val = BITS_PER_WORD - 1;
+ rhs_val = sizeof(lhs_val) * BITS_PER_BYTE - 1;
}
lhs_val >>= rhs_val;
}