From 3a6165f026f1d7af9adfe4a49d9271dacdac422d Mon Sep 17 00:00:00 2001 From: Lephe Date: Mon, 7 Jun 2021 19:16:58 +0200 Subject: [PATCH] std: remove the TinyMT-based rand implementation --- CMakeLists.txt | 2 - README.md | 9 +-- include/gint/std/stdlib.h | 32 +------- src/3rdparty/tinymt32/LICENSE.txt | 29 ------- src/3rdparty/tinymt32/rand.c | 14 ---- src/3rdparty/tinymt32/tinymt32.c | 121 ------------------------------ src/3rdparty/tinymt32/tinymt32.h | 40 ---------- 7 files changed, 5 insertions(+), 242 deletions(-) delete mode 100644 src/3rdparty/tinymt32/LICENSE.txt delete mode 100644 src/3rdparty/tinymt32/rand.c delete mode 100644 src/3rdparty/tinymt32/tinymt32.c delete mode 100644 src/3rdparty/tinymt32/tinymt32.h diff --git a/CMakeLists.txt b/CMakeLists.txt index d960ce7..c20e79c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,8 +74,6 @@ set(SOURCES_COMMON src/usb/setup.c src/usb/string.c src/usb/usb.c - src/3rdparty/tinymt32/rand.c - src/3rdparty/tinymt32/tinymt32.c ) set(SOURCES_FX src/gray/engine.c diff --git a/README.md b/README.md index 1434937..4c2ea50 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,9 @@ new, richer API that takes advantage of the full capabilities of the machine. This is free software: you may use it for any purpose, share it, modify it, and share your changes. Credit is not required, but please let me know! -gint also includes third-party code that is distributed under its own license. -Currently, this includes: - -* A stripped-down version of the [TinyMT random number generator](http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/TINYMT/index.html) - ([GitHub repository](https://github.com/MersenneTwister-Lab/TinyMT)) by - Mutsuo Saito and Makoto Matsumoto. See `src/3rdparty/tinymt32/LICENSE.txt`. +gint used to include third-party code that has now been moved to the FxLibc. If +you stumble upon it in the history, check the README file at that time for +license details. ## Programming interface diff --git a/include/gint/std/stdlib.h b/include/gint/std/stdlib.h index 99cf988..3533326 100644 --- a/include/gint/std/stdlib.h +++ b/include/gint/std/stdlib.h @@ -1,30 +1,2 @@ -//--- -// gint:std:stdlib - a few functions provided by gint -//--- - -#ifndef GINT_STD_STDLIB -#define GINT_STD_STDLIB - -#include - -/* malloc(): Allocate dynamic memory */ -void *malloc(size_t size); - -/* free(): Free dynamic memory */ -void free(void *ptr); - -/* calloc(): Allocate and initialize dynamic memory */ -void *calloc(size_t nmemb, size_t size); - -/* realloc(): Reallocate dynamic memory */ -void *realloc(void *ptr, size_t size); - -#define RAND_MAX 0x7fffffff - -/* srand(): Seed the PRNG */ -void srand(unsigned int seed); - -/* rand(): Generate a pseudo-random number between 0 and RAND_MAX */ -int rand(void); - -#endif /* GINT_STD_STDLIB */ +/* Now provided by fxlibc. */ +#include diff --git a/src/3rdparty/tinymt32/LICENSE.txt b/src/3rdparty/tinymt32/LICENSE.txt deleted file mode 100644 index af03886..0000000 --- a/src/3rdparty/tinymt32/LICENSE.txt +++ /dev/null @@ -1,29 +0,0 @@ -Copyright (c) 2011 Mutsuo Saito, Makoto Matsumoto, Hiroshima -University and The University of Tokyo. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of the Hiroshima University nor the names of - its contributors may be used to endorse or promote products - derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/3rdparty/tinymt32/rand.c b/src/3rdparty/tinymt32/rand.c deleted file mode 100644 index d8d6833..0000000 --- a/src/3rdparty/tinymt32/rand.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "tinymt32.h" - -static tinymt32_t random; - -void srand(unsigned int seed) -{ - tinymt32_init(&random, seed); -} - -int rand(void) -{ - return tinymt32_generate_uint32(&random) & 0x7fffffff; -} diff --git a/src/3rdparty/tinymt32/tinymt32.c b/src/3rdparty/tinymt32/tinymt32.c deleted file mode 100644 index 898ae98..0000000 --- a/src/3rdparty/tinymt32/tinymt32.c +++ /dev/null @@ -1,121 +0,0 @@ -/** - * @file tinymt32.c - * - * @brief Tiny Mersenne Twister only 127 bit internal state - * - * @author Mutsuo Saito (Hiroshima University) - * @author Makoto Matsumoto (The University of Tokyo) - * - * Copyright (C) 2011 Mutsuo Saito, Makoto Matsumoto, - * Hiroshima University and The University of Tokyo. - * All rights reserved. - * - * The 3-clause BSD License is applied to this software, see - * LICENSE.txt - */ - -/* Note: this is a stripped-down version of TinyMT that only includes the - 32-bit integer generator. For the full version, please see - . */ - -#include "tinymt32.h" - -#define TINYMT32_SH0 1 -#define TINYMT32_SH1 10 -#define TINYMT32_SH8 8 -#define TINYMT32_MASK 0x7fffffff - -/** - * This function changes internal state of tinymt32. - * Users should not call this function directly. - * @param random tinymt internal status - */ -static void tinymt32_next_state(tinymt32_t * random) { - uint32_t x; - uint32_t y; - - y = random->status[3]; - x = (random->status[0] & TINYMT32_MASK) - ^ random->status[1] - ^ random->status[2]; - x ^= (x << TINYMT32_SH0); - y ^= (y >> TINYMT32_SH0) ^ x; - random->status[0] = random->status[1]; - random->status[1] = random->status[2]; - random->status[2] = x ^ (y << TINYMT32_SH1); - random->status[3] = y; - random->status[1] ^= -((int32_t)(y & 1)) & random->mat1; - random->status[2] ^= -((int32_t)(y & 1)) & random->mat2; -} - -/** - * This function outputs 32-bit unsigned integer from internal state. - * Users should not call this function directly. - * @param random tinymt internal status - * @return 32-bit unsigned pseudorandom number - */ -static uint32_t tinymt32_temper(tinymt32_t * random) { - uint32_t t0, t1; - t0 = random->status[3]; -#if defined(LINEARITY_CHECK) - t1 = random->status[0] - ^ (random->status[2] >> TINYMT32_SH8); -#else - t1 = random->status[0] - + (random->status[2] >> TINYMT32_SH8); -#endif - t0 ^= t1; - t0 ^= -((int32_t)(t1 & 1)) & random->tmat; - return t0; -} - -/** - * This function outputs 32-bit unsigned integer from internal state. - * @param random tinymt internal status - * @return 32-bit unsigned integer r (0 <= r < 2^32) - */ -uint32_t tinymt32_generate_uint32(tinymt32_t * random) { - tinymt32_next_state(random); - return tinymt32_temper(random); -} - -#define MIN_LOOP 8 -#define PRE_LOOP 8 - -/** - * This function certificate the period of 2^127-1. - * @param random tinymt state vector. - */ -static void period_certification(tinymt32_t * random) { - if ((random->status[0] & TINYMT32_MASK) == 0 && - random->status[1] == 0 && - random->status[2] == 0 && - random->status[3] == 0) { - random->status[0] = 'T'; - random->status[1] = 'I'; - random->status[2] = 'N'; - random->status[3] = 'Y'; - } -} - -/** - * This function initializes the internal state array with a 32-bit - * unsigned integer seed. - * @param random tinymt state vector. - * @param seed a 32-bit unsigned integer used as a seed. - */ -void tinymt32_init(tinymt32_t * random, uint32_t seed) { - random->status[0] = seed; - random->status[1] = random->mat1; - random->status[2] = random->mat2; - random->status[3] = random->tmat; - for (int i = 1; i < MIN_LOOP; i++) { - random->status[i & 3] ^= i + UINT32_C(1812433253) - * (random->status[(i - 1) & 3] - ^ (random->status[(i - 1) & 3] >> 30)); - } - period_certification(random); - for (int i = 0; i < PRE_LOOP; i++) { - tinymt32_next_state(random); - } -} diff --git a/src/3rdparty/tinymt32/tinymt32.h b/src/3rdparty/tinymt32/tinymt32.h deleted file mode 100644 index 9bb2f5c..0000000 --- a/src/3rdparty/tinymt32/tinymt32.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef TINYMT32_H -#define TINYMT32_H -/** - * @file tinymt32.h - * - * @brief Tiny Mersenne Twister only 127 bit internal state - * - * @author Mutsuo Saito (Hiroshima University) - * @author Makoto Matsumoto (University of Tokyo) - * - * Copyright (C) 2011 Mutsuo Saito, Makoto Matsumoto, - * Hiroshima University and The University of Tokyo. - * All rights reserved. - * - * The 3-clause BSD License is applied to this software, see - * LICENSE.txt - */ - -/* Note: this is a stripped-down version of TinyMT that only includes the - 32-bit integer generator. For the full version, please see - . */ - -#include - -/** - * tinymt32 internal state vector and parameters - */ -struct TINYMT32_T { - uint32_t status[4]; - uint32_t mat1; - uint32_t mat2; - uint32_t tmat; -}; - -typedef struct TINYMT32_T tinymt32_t; - -uint32_t tinymt32_generate_uint32(tinymt32_t *random); -void tinymt32_init(tinymt32_t *random, uint32_t seed); - -#endif