mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 09:58:19 +08:00
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:
@ -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>
|
2020-11-15 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
* gmp-utils.h, gmp-utils.h: New file.
|
* 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;
|
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
|
void
|
||||||
print_spaces (int n, struct ui_file *file)
|
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);
|
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. */
|
/* Resource limits used by getrlimit and setrlimit. */
|
||||||
|
|
||||||
enum resource_limit_kind
|
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
|
/* Obtain argument values for binary operation, converting from
|
||||||
other types if one of them is not floating point. */
|
other types if one of them is not floating point. */
|
||||||
static void
|
static void
|
||||||
|
Reference in New Issue
Block a user