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.
This commit is contained in:
parent
b34c74ab9a
commit
e55c6530db
4 changed files with 43 additions and 31 deletions
|
@ -1,3 +1,9 @@
|
|||
2020-11-15 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* 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 <brobecker@adacore.com>
|
||||
|
||||
* gmp-utils.h, gmp-utils.h: New file.
|
||||
|
|
30
gdb/utils.c
30
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)
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue