From e55c6530dbf96bfbe2e4a232c0feb19c0a4a2294 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Sun, 15 Nov 2020 03:10:52 -0500 Subject: [PATCH] Move uinteger_pow gdb/valarith.c to gdb/utils.c and make it public This is a generic function which I would like to use in a followup patch adding support for fixed-point types. So this commit moves it out of valarith.c into util.c, and makes it non-static. gdb/ChangeLog: * utils.h (uinteger_pow): Add declaration. * utils.c (uinteger_pow): Moved here (without changes)... * valarith.c (uinteger_pow): ... from here. --- gdb/ChangeLog | 6 ++++++ gdb/utils.c | 30 ++++++++++++++++++++++++++++++ gdb/utils.h | 7 +++++++ gdb/valarith.c | 31 ------------------------------- 4 files changed, 43 insertions(+), 31 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a0291092e29..5aacbf057f2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2020-11-15 Joel Brobecker + + * utils.h (uinteger_pow): Add declaration. + * utils.c (uinteger_pow): Moved here (without changes)... + * valarith.c (uinteger_pow): ... from here. + 2020-11-15 Joel Brobecker * gmp-utils.h, gmp-utils.h: New file. diff --git a/gdb/utils.c b/gdb/utils.c index ab931c3a9c3..3226656e2c3 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -709,6 +709,36 @@ myread (int desc, char *addr, int len) return orglen; } +/* See utils.h. */ + +ULONGEST +uinteger_pow (ULONGEST v1, LONGEST v2) +{ + if (v2 < 0) + { + if (v1 == 0) + error (_("Attempt to raise 0 to negative power.")); + else + return 0; + } + else + { + /* The Russian Peasant's Algorithm. */ + ULONGEST v; + + v = 1; + for (;;) + { + if (v2 & 1L) + v *= v1; + v2 >>= 1; + if (v2 == 0) + return v; + v1 *= v1; + } + } +} + void print_spaces (int n, struct ui_file *file) { diff --git a/gdb/utils.h b/gdb/utils.h index 6948908a317..a8c65ed8170 100644 --- a/gdb/utils.h +++ b/gdb/utils.h @@ -593,6 +593,13 @@ extern pid_t wait_to_die_with_timeout (pid_t pid, int *status, int timeout); extern int myread (int, char *, int); +/* Integer exponentiation: Return V1**V2, where both arguments + are integers. + + Requires V1 != 0 if V2 < 0. + Returns 1 for 0 ** 0. */ +extern ULONGEST uinteger_pow (ULONGEST v1, LONGEST v2); + /* Resource limits used by getrlimit and setrlimit. */ enum resource_limit_kind diff --git a/gdb/valarith.c b/gdb/valarith.c index 21b597a1b7a..f6caf3d1804 100644 --- a/gdb/valarith.c +++ b/gdb/valarith.c @@ -819,37 +819,6 @@ integer_pow (LONGEST v1, LONGEST v2) } } -/* Integer exponentiation: V1**V2, where both arguments are - integers. Requires V1 != 0 if V2 < 0. Returns 1 for 0 ** 0. */ - -static ULONGEST -uinteger_pow (ULONGEST v1, LONGEST v2) -{ - if (v2 < 0) - { - if (v1 == 0) - error (_("Attempt to raise 0 to negative power.")); - else - return 0; - } - else - { - /* The Russian Peasant's Algorithm. */ - ULONGEST v; - - v = 1; - for (;;) - { - if (v2 & 1L) - v *= v1; - v2 >>= 1; - if (v2 == 0) - return v; - v1 *= v1; - } - } -} - /* Obtain argument values for binary operation, converting from other types if one of them is not floating point. */ static void -- 2.30.2