author: kx <kx@radix-linux.su> 2024-12-20 16:11:07 +0300
committer: kx <kx@radix-linux.su> 2024-12-20 16:11:07 +0300
commit: 868b2b66b564b5c00e3a74d10be45db7151627ac
parent: cce2ae8d3312493b7653358bb4af201d3271377b
Commit Summary:
Diffstat:
1 file changed, 320 insertions, 0 deletions
diff --git a/mpu/st-logtable.c b/mpu/st-logtable.c
new file mode 100644
index 0000000..6a0f7cd
--- /dev/null
+++ b/mpu/st-logtable.c
@@ -0,0 +1,377 @@
+
+/***************************************************************
+ __ST_LOGTABLE.C
+
+ This file contains source code of functions for
+ LOGTABLE constants operations.
+
+ PART OF : MPU - library .
+
+ USAGE : Internal only .
+
+ NOTE : NONE .
+
+ Copyright (C) 2000 - 2024 by Andrew V.Kosteltsev.
+ All Rights Reserved.
+ ***************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <errno.h> /* errno(3) */
+#include <string.h> /* strcpy(3) */
+#include <strings.h> /* bzero(3) */
+#include <stdlib.h>
+
+#include <libmpu.h>
+#include <mpu-context.h>
+
+#include <mpu-emutype.h>
+#include <mpu-integer.h>
+#include <mpu-real.h>
+#include <mpu-floatp.h>
+
+#include <mpu-char.h>
+#include <mpu-symbols.h>
+
+#include <mpu-math-errno.h>
+#include <mpu-mtherr.h>
+
+
+/***************************************************************
+ Кодировка имен файлов:
+
+ Трехзначное десятичное число, представляющее количество
+ 128-и битных слов, из которых состоят вещественные числа
+ размещенные в массивах:
+
+ размер чисел в битах кодировка
+ -------------------- ---------
+ 128 001
+ 256 002
+ 512 004
+ 1024 008
+ 2048 016
+ 4096 032
+ 8192 064
+ 16384 128
+ 32768 256
+ 65536 512 (это предел);
+
+ ПРИМЕРЫ:
+ -------
+ ei_logtable_001_emu32lsb.dfn - 128-бит,
+ ei_logtable_512_emu32lsb.dfn - 65536-бит.
+
+ ***************************************************************/
+
+#if MPU_MATH_FN_LIMIT >= 128
+#if MPU_WORD_ORDER_BIG_ENDIAN == 0
+#include <math/logtable/emu00128/ei_logtable_001_emu32lsb.dfn>
+#else
+#include <math/logtable/emu00128/ei_logtable_001_emu32msb.dfn>
+#endif
+#endif /* MPU_MATH_FN_LIMIT >= 128 */
+
+#if MPU_MATH_FN_LIMIT >= 256
+#if MPU_WORD_ORDER_BIG_ENDIAN == 0
+#include <math/logtable/emu00256/ei_logtable_002_emu32lsb.dfn>
+#else
+#include <math/logtable/emu00256/ei_logtable_002_emu32msb.dfn>
+#endif
+#endif /* MPU_MATH_FN_LIMIT >= 256 */
+
+#if MPU_MATH_FN_LIMIT >= 512
+#if MPU_WORD_ORDER_BIG_ENDIAN == 0
+#include <math/logtable/emu00512/ei_logtable_004_emu32lsb.dfn>
+#else
+#include <math/logtable/emu00512/ei_logtable_004_emu32msb.dfn>
+#endif
+#endif /* MPU_MATH_FN_LIMIT >= 512 */
+
+#if MPU_MATH_FN_LIMIT >= 1024
+#if MPU_WORD_ORDER_BIG_ENDIAN == 0
+#include <math/logtable/emu01024/ei_logtable_008_emu32lsb.dfn>
+#else
+#include <math/logtable/emu01024/ei_logtable_008_emu32msb.dfn>
+#endif
+#endif /* MPU_MATH_FN_LIMIT >= 1024 */
+
+#if MPU_MATH_FN_LIMIT >= 2048
+#if MPU_WORD_ORDER_BIG_ENDIAN == 0
+#include <math/logtable/emu02048/ei_logtable_016_emu32lsb.dfn>
+#else
+#include <math/logtable/emu02048/ei_logtable_016_emu32msb.dfn>
+#endif
+#endif /* MPU_MATH_FN_LIMIT >= 2048 */
+
+#if MPU_MATH_FN_LIMIT >= 4096
+#if MPU_WORD_ORDER_BIG_ENDIAN == 0
+#include <math/logtable/emu04096/ei_logtable_032_emu32lsb.dfn>
+#else
+#include <math/logtable/emu04096/ei_logtable_032_emu32msb.dfn>
+#endif
+#endif /* MPU_MATH_FN_LIMIT >= 4096 */
+
+#if MPU_MATH_FN_LIMIT >= 8192
+#if MPU_WORD_ORDER_BIG_ENDIAN == 0
+#include <math/logtable/emu08192/ei_logtable_064_emu32lsb.dfn>
+#else
+#include <math/logtable/emu08192/ei_logtable_064_emu32msb.dfn>
+#endif
+#endif /* MPU_MATH_FN_LIMIT >= 8192 */
+
+#if MPU_MATH_FN_LIMIT >= 16384
+#if MPU_WORD_ORDER_BIG_ENDIAN == 0
+#include <math/logtable/emu16384/ei_logtable_128_emu32lsb.dfn>
+#else
+#include <math/logtable/emu16384/ei_logtable_128_emu32msb.dfn>
+#endif
+#endif /* MPU_MATH_FN_LIMIT >= 16384 */
+
+#if MPU_MATH_FN_LIMIT >= 32768
+#if MPU_WORD_ORDER_BIG_ENDIAN == 0
+#include <math/logtable/emu32768/ei_logtable_256_emu32lsb.dfn>
+#else
+#include <math/logtable/emu32768/ei_logtable_256_emu32msb.dfn>
+#endif
+#endif /* MPU_MATH_FN_LIMIT >= 32768 */
+
+#if MPU_MATH_FN_LIMIT >= 65536
+#if MPU_WORD_ORDER_BIG_ENDIAN == 0
+#include <math/logtable/emu65536/ei_logtable_512_emu32lsb.dfn>
+#else
+#include <math/logtable/emu65536/ei_logtable_512_emu32msb.dfn>
+#endif
+#endif /* MPU_MATH_FN_LIMIT >= 65536 */
+
+
+int _get_n_log_table( int nb )
+{
+ int rc = 0;
+
+ if( nb < NBR_32 || nb > MPU_MATH_FN_LIMIT )
+ {
+ /* error: Invalid size of operand(s) */
+ __real_error_no = __R_ESIZE__;
+ __STIND; /* Set REAL ind-produsing operation Flag */
+ return( rc );
+ }
+
+ switch( nb )
+ {
+#if MPU_MATH_FN_LIMIT >= 128
+ case NBR_32 :
+ case NBR_64 :
+ case NBR_128 :
+ rc = N_LOG_TABLE128;
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 128 */
+#if MPU_MATH_FN_LIMIT >= 256
+ case NBR_256 :
+ rc = N_LOG_TABLE256;
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 256 */
+#if MPU_MATH_FN_LIMIT >= 512
+ case NBR_512 :
+ rc = N_LOG_TABLE512;
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 512 */
+#if MPU_MATH_FN_LIMIT >= 1024
+ case NBR_1024 :
+ rc = N_LOG_TABLE1024;
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 1024 */
+#if MPU_MATH_FN_LIMIT >= 2048
+ case NBR_2048 :
+ rc = N_LOG_TABLE2048;
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 2048 */
+#if MPU_MATH_FN_LIMIT >= 4096
+ case NBR_4096 :
+ rc = N_LOG_TABLE4096;
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 4096 */
+#if MPU_MATH_FN_LIMIT >= 8192
+ case NBR_8192 :
+ rc = N_LOG_TABLE8192;
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 8192 */
+#if MPU_MATH_FN_LIMIT >= 16384
+ case NBR_16384:
+ rc = N_LOG_TABLE16384;
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 16384 */
+
+ default:
+ {
+ /* error: Invalid size of operand(s) */
+ __real_error_no = __R_ESIZE__;
+ __STIND; /* Set REAL ind-produsing operation Flag */
+ break;
+ }
+
+ } /* End of switch( nb ) */
+
+ return( rc );
+
+} /* End of _get_n_log_table() */
+
+
+EMUSHORT *_get_logF_head_ptr( int nb )
+{
+ EMUSHORT *rc = (EMUSHORT *)NULL;
+
+ if( nb < NBR_32 || nb > MPU_MATH_FN_LIMIT )
+ {
+ /* error: Invalid size of operand(s) */
+ __real_error_no = __R_ESIZE__;
+ __STIND; /* Set REAL ind-produsing operation Flag */
+ return( rc );
+ }
+
+ switch( nb )
+ {
+#if MPU_MATH_FN_LIMIT >= 128
+ case NBR_32 :
+ case NBR_64 :
+ case NBR_128 :
+ rc = (EMUSHORT *)&_ei_logF_head_128_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 128 */
+#if MPU_MATH_FN_LIMIT >= 256
+ case NBR_256 :
+ rc = (EMUSHORT *)&_ei_logF_head_256_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 256 */
+#if MPU_MATH_FN_LIMIT >= 512
+ case NBR_512 :
+ rc = (EMUSHORT *)&_ei_logF_head_512_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 512 */
+#if MPU_MATH_FN_LIMIT >= 1024
+ case NBR_1024 :
+ rc = (EMUSHORT *)&_ei_logF_head_1024_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 1024 */
+#if MPU_MATH_FN_LIMIT >= 2048
+ case NBR_2048 :
+ rc = (EMUSHORT *)&_ei_logF_head_2048_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 2048 */
+#if MPU_MATH_FN_LIMIT >= 4096
+ case NBR_4096 :
+ rc = (EMUSHORT *)&_ei_logF_head_4096_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 4096 */
+#if MPU_MATH_FN_LIMIT >= 8192
+ case NBR_8192 :
+ rc = (EMUSHORT *)&_ei_logF_head_8192_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 8192 */
+#if MPU_MATH_FN_LIMIT >= 16384
+ case NBR_16384:
+ rc = (EMUSHORT *)&_ei_logF_head_16384_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 16384 */
+
+ default:
+ {
+ /* error: Invalid size of operand(s) */
+ __real_error_no = __R_ESIZE__;
+ __STIND; /* Set REAL ind-produsing operation Flag */
+ break;
+ }
+
+ } /* End of switch( nb ) */
+
+ return( rc );
+
+} /* End of _get_logF_head_ptr() */
+
+
+EMUSHORT *_get_logF_tail_ptr( int nb )
+{
+ EMUSHORT *rc = (EMUSHORT *)NULL;
+
+ if( nb < NBR_32 || nb > MPU_MATH_FN_LIMIT )
+ {
+ /* error: Invalid size of operand(s) */
+ __real_error_no = __R_ESIZE__;
+ __STIND; /* Set REAL ind-produsing operation Flag */
+ return( rc );
+ }
+
+ switch( nb )
+ {
+#if MPU_MATH_FN_LIMIT >= 128
+ case NBR_32 :
+ case NBR_64 :
+ case NBR_128 :
+ rc = (EMUSHORT *)&_ei_logF_tail_128_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 128 */
+#if MPU_MATH_FN_LIMIT >= 256
+ case NBR_256 :
+ rc = (EMUSHORT *)&_ei_logF_tail_256_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 256 */
+#if MPU_MATH_FN_LIMIT >= 512
+ case NBR_512 :
+ rc = (EMUSHORT *)&_ei_logF_tail_512_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 512 */
+#if MPU_MATH_FN_LIMIT >= 1024
+ case NBR_1024 :
+ rc = (EMUSHORT *)&_ei_logF_tail_1024_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 1024 */
+#if MPU_MATH_FN_LIMIT >= 2048
+ case NBR_2048 :
+ rc = (EMUSHORT *)&_ei_logF_tail_2048_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 2048 */
+#if MPU_MATH_FN_LIMIT >= 4096
+ case NBR_4096 :
+ rc = (EMUSHORT *)&_ei_logF_tail_4096_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 4096 */
+#if MPU_MATH_FN_LIMIT >= 8192
+ case NBR_8192 :
+ rc = (EMUSHORT *)&_ei_logF_tail_8192_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 8192 */
+#if MPU_MATH_FN_LIMIT >= 16384
+ case NBR_16384:
+ rc = (EMUSHORT *)&_ei_logF_tail_16384_[0][0];
+ break;
+#endif /* MPU_MATH_FN_LIMIT >= 16384 */
+
+ default:
+ {
+ /* error: Invalid size of operand(s) */
+ __real_error_no = __R_ESIZE__;
+ __STIND; /* Set REAL ind-produsing operation Flag */
+ break;
+ }
+
+ } /* End of switch( nb ) */
+
+ return( rc );
+
+} /* End of _get_logF_tail_ptr() */
+
+
+/***************************************************************
+ Hide internal symbols:
+ ***************************************************************/
+
+__mpu_hidden_decl(_get_n_log_table);
+__mpu_hidden_decl(_get_logF_head_ptr);
+__mpu_hidden_decl(_get_logF_tail_ptr);
+
+
+/*
+ End of hide internal symbols.
+ ***************************************************************/