From f0715bbde9cb973977fa3da1bbe07af29ac49260 Mon Sep 17 00:00:00 2001
From: Nicolas Thill <nico@openwrt.org>
Date: Tue, 4 Sep 2007 10:44:45 +0000
Subject: [PATCH] use kernel abs(), remove recursion in gcd() (closes: #2307)

SVN-Revision: 8608
---
 .../linux/ar7-2.6/files/arch/mips/ar7/clock.c | 22 +++++++++++--------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/target/linux/ar7-2.6/files/arch/mips/ar7/clock.c b/target/linux/ar7-2.6/files/arch/mips/ar7/clock.c
index f51c641a3d..c7ae09ecd7 100644
--- a/target/linux/ar7-2.6/files/arch/mips/ar7/clock.c
+++ b/target/linux/ar7-2.6/files/arch/mips/ar7/clock.c
@@ -99,16 +99,20 @@ EXPORT_SYMBOL(ar7_bus_clock);
 int ar7_dsp_clock = 0;
 EXPORT_SYMBOL(ar7_dsp_clock);
 
-static int gcd(int x, int y)
+static int gcd(int a, int b)
 {
-	if (x > y)
-		return (x % y) ? gcd(y, x % y) : y;
-	return (y % x) ? gcd(x, y % x) : x;
-}
+	int c;
 
-static inline int ABS(int x)
-{
-	return (x >= 0) ? x : -x;
+	if ( a < b) {
+		c = a;
+		a = b;
+		b = c;
+	}
+	while (c = (a % b)) {
+		a = b;
+		b = c;
+	}
+	return b;
 }
 
 static void approximate(int base, int target, int *prediv,
@@ -118,7 +122,7 @@ static void approximate(int base, int target, int *prediv,
 	for (i = 1; i <= 16; i++) {
 		for (j = 1; j <= 32; j++) {
 			for (k = 1; k <= 32; k++) {
-				freq = ABS(base / j * i / k - target);
+				freq = abs(base / j * i / k - target);
 				if (freq < res) {
 					res = freq;
 					*mul = i;
-- 
GitLab