[pushed/v2 4/9] Move uinteger_pow gdb/valarith.c to gdb/utils.c and make it public

Joel Brobecker brobecker@adacore.com
Sun Nov 15 08:35:40 GMT 2020


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 a029109..5aacbf0 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
 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.
 	* unittests/gmp-utils-selftests.c: New file.
 	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
diff --git a/gdb/utils.c b/gdb/utils.c
index ab931c3..3226656 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 6948908..a8c65ed 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 21b597a..f6caf3d 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.1.4



More information about the Gdb-patches mailing list