From 7af54064b23efe1f18fab9e7ee20b0fc811c36b5 Mon Sep 17 00:00:00 2001 From: Mel Date: Sun, 24 May 2026 20:30:11 +0200 Subject: Power operator via runtime library implementation Signed-off-by: Mel --- boot/runtime/core.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'boot/runtime/core.c') diff --git a/boot/runtime/core.c b/boot/runtime/core.c index e377e0a..cc9210e 100644 --- a/boot/runtime/core.c +++ b/boot/runtime/core.c @@ -87,6 +87,26 @@ println(const ascii* s) // `printf` is already linked in via . +// integer exponentiation by squaring. +// see: https://en.wikipedia.org/wiki/Exponentiation_by_squaring +// negative exponent rounds to 0 for any base except 1 / -1. +integer +pow_integer(integer base, integer exponent) +{ + if (exponent < 0) { + if (base == 1) return 1; + if (base == -1) return (exponent & 1) ? -1 : 1; + return 0; + } + integer result = 1; + while (exponent > 0) { + if (exponent & 1) result *= base; + base *= base; + exponent >>= 1; + } + return result; +} + void* allocate(size_t size) { -- cgit 1.4.1