From 823edfad2212aeeb34a44097b64e4876abe090e5 Mon Sep 17 00:00:00 2001 From: Michal Sieron Date: Tue, 10 Aug 2021 15:01:31 +0200 Subject: [PATCH] Remove obsolete div64.c --- litex/soc/software/include/base/div64.h | 39 ------------------ litex/soc/software/libbase/Makefile | 1 - litex/soc/software/libbase/div64.c | 54 ------------------------- litex/soc/software/libbase/progress.c | 5 +-- 4 files changed, 2 insertions(+), 97 deletions(-) delete mode 100644 litex/soc/software/include/base/div64.h delete mode 100644 litex/soc/software/libbase/div64.c diff --git a/litex/soc/software/include/base/div64.h b/litex/soc/software/include/base/div64.h deleted file mode 100644 index 2f0754746..000000000 --- a/litex/soc/software/include/base/div64.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef _ASM_GENERIC_DIV64_H -#define _ASM_GENERIC_DIV64_H -/* - * Copyright (C) 2003 Bernardo Innocenti - * Based on former asm-ppc/div64.h and asm-m68knommu/div64.h - * - * The semantics of do_div() are: - * - * uint32_t do_div(uint64_t *n, uint32_t base) - * { - * uint32_t remainder = *n % base; - * *n = *n / base; - * return remainder; - * } - * - * NOTE: macro parameter n is evaluated multiple times, - * beware of side effects! - */ - -#include - -extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor); - -/* The unnecessary pointer compare is there - * to check for type safety (n must be 64bit) - */ -# define do_div(n,base) ({ \ - uint32_t __base = (base); \ - uint32_t __rem; \ - (void)(((typeof((n)) *)0) == ((uint64_t *)0)); \ - if (((n) >> 32) == 0) { \ - __rem = (uint32_t)(n) % __base; \ - (n) = (uint32_t)(n) / __base; \ - } else \ - __rem = __div64_32(&(n), __base); \ - __rem; \ - }) - -#endif /* _ASM_GENERIC_DIV64_H */ diff --git a/litex/soc/software/libbase/Makefile b/litex/soc/software/libbase/Makefile index 94a90c9af..fd8c2b29a 100755 --- a/litex/soc/software/libbase/Makefile +++ b/litex/soc/software/libbase/Makefile @@ -10,7 +10,6 @@ OBJECTS = exception.o \ time.o \ spiflash.o \ i2c.o \ - div64.o \ progress.o \ memtest.o \ sim_debug.o diff --git a/litex/soc/software/libbase/div64.c b/litex/soc/software/libbase/div64.c deleted file mode 100644 index dc8447869..000000000 --- a/litex/soc/software/libbase/div64.c +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2003 Bernardo Innocenti - * - * Based on former do_div() implementation from asm-parisc/div64.h: - * Copyright (C) 1999 Hewlett-Packard Co - * Copyright (C) 1999 David Mosberger-Tang - * - * - * Generic C version of 64bit/32bit division and modulo, with - * 64bit result and 32bit remainder. - * - * The fast case for (n>>32 == 0) is handled inline by do_div(). - * - * Code generated for this function might be very inefficient - * for some CPUs. __div64_32() can be overridden by linking arch-specific - * assembly versions such as arch/ppc/lib/div64.S and arch/sh/lib/div64.S. - */ - -#include - -#include - -uint32_t __div64_32(uint64_t *n, uint32_t base) -{ - uint64_t rem = *n; - uint64_t b = base; - uint64_t res, d = 1; - uint32_t high = rem >> 32; - - /* Reduce the thing a bit first */ - res = 0; - if (high >= base) { - high /= base; - res = (uint64_t) high << 32; - rem -= (uint64_t) (high*base) << 32; - } - - while ((int64_t)b > 0 && b < rem) { - b = b+b; - d = d+d; - } - - do { - if (rem >= b) { - rem -= b; - res += d; - } - b >>= 1; - d >>= 1; - } while (d); - - *n = res; - return rem; -} diff --git a/litex/soc/software/libbase/progress.c b/litex/soc/software/libbase/progress.c index 35fc8ba72..1b46fb6d8 100644 --- a/litex/soc/software/libbase/progress.c +++ b/litex/soc/software/libbase/progress.c @@ -20,8 +20,8 @@ #include #include #include +#include -#include #include #define FILESIZE_MAX 100000000 @@ -42,8 +42,7 @@ void show_progress(int now) if (progress_max && progress_max != FILESIZE_MAX) { uint64_t tmp = (int64_t)now * HASHES_PER_LINE; - do_div(tmp, progress_max); - now = tmp; + now = lldiv(tmp, progress_max).quot; } while (printed < now) {