summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2015-04-25 23:28:10 +0100
committerDamien George <damien.p.george@gmail.com>2015-04-25 23:28:10 +0100
commit0f553fe10b14051aca25818b0aeac175c60889e0 (patch)
tree201b9673fab621f71c8963a0626a4b1ec6ac53d8
parent271d18eb08ec488ee45f8e6cd852e8236074f082 (diff)
downloadmicropython-0f553fe10b14051aca25818b0aeac175c60889e0.tar.gz
micropython-0f553fe10b14051aca25818b0aeac175c60889e0.zip
py: Implement power op for long-long implementation of bignum.
-rw-r--r--py/objint_longlong.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/py/objint_longlong.c b/py/objint_longlong.c
index 5b2c6d3f50..64376e957c 100644
--- a/py/objint_longlong.c
+++ b/py/objint_longlong.c
@@ -179,6 +179,22 @@ mp_obj_t mp_obj_int_binary_op(mp_uint_t op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
case MP_BINARY_OP_INPLACE_RSHIFT:
return mp_obj_new_int_from_ll(lhs_val >> (int)rhs_val);
+ case MP_BINARY_OP_POWER:
+ case MP_BINARY_OP_INPLACE_POWER: {
+ long long ans = 1;
+ while (rhs_val > 0) {
+ if (rhs_val & 1) {
+ ans *= lhs_val;
+ }
+ if (rhs_val == 1) {
+ break;
+ }
+ rhs_val /= 2;
+ lhs_val *= lhs_val;
+ }
+ return mp_obj_new_int_from_ll(ans);
+ }
+
case MP_BINARY_OP_LESS:
return MP_BOOL(lhs_val < rhs_val);
case MP_BINARY_OP_MORE: