From 95861dbef966e2cb612b303615681fc29c3acd3d Mon Sep 17 00:00:00 2001 From: Nadesh Ramanathan Date: Wed, 11 Nov 2020 19:47:42 +0000 Subject: polybench edits --- benchmarks/polybench-syn/include/misc.h | 52 ++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 14 deletions(-) (limited to 'benchmarks/polybench-syn/include') diff --git a/benchmarks/polybench-syn/include/misc.h b/benchmarks/polybench-syn/include/misc.h index 55bb059..664677c 100644 --- a/benchmarks/polybench-syn/include/misc.h +++ b/benchmarks/polybench-syn/include/misc.h @@ -39,31 +39,43 @@ int smodulo(int N, int D) { } } -unsigned int divider(unsigned int x, unsigned int y) -{ - unsigned int r0, q0, y0, y1; +unsigned divider_fast(unsigned x, unsigned y) { + unsigned r0, q0, y0, y1; r0 = x; q0 = 0; y0 = y; y1 = y; - do - { + do { y1 = 2 * y1; } while (y1 <= x); - do - { - y1 = y1 / 2; - q0 = 2 * q0; - if (r0 >= y1) - { - r0 = r0 - y1; - q0 = q0 + 1; + do { + y1 /= 2; + q0 *= 2; + if (r0 >= y1) { + r0 -= y1; + q0++; } } while ((int)y1 != (int)y0); return q0; } +unsigned divider(unsigned x, unsigned y) { + unsigned q0, acc; + q0 = 0; + acc = y; + + while (acc <= x) { + q0++; + acc += y; + } + + return q0; +} + +/* + * Signed division operation for faster frequency division. + */ int sdivider(int N, int D) { if (D < 0) { if (N < 0) @@ -78,4 +90,16 @@ int sdivider(int N, int D) { } } - +int sdivider_fast(int N, int D) { + if (D < 0) { + if (N < 0) + return divider_fast(-N, -D); + else + return -divider_fast(N, -D); + } else { + if (N < 0) + return -divider_fast(-N, D); + else + return divider_fast(N, D); + } +} -- cgit