riscv_common_tables.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. /* ----------------------------------------------------------------------
  2. * Project: NMSIS DSP Library
  3. * Title: riscv_common_tables.h
  4. * Description: Extern declaration for common tables
  5. *
  6. * @version V1.10.0
  7. * @date 08 July 2021
  8. *
  9. * Target Processor: RISC-V Cores
  10. * -------------------------------------------------------------------- */
  11. /*
  12. * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved.
  13. * Copyright (c) 2019 Nuclei Limited. All rights reserved.
  14. *
  15. * SPDX-License-Identifier: Apache-2.0
  16. *
  17. * Licensed under the Apache License, Version 2.0 (the License); you may
  18. * not use this file except in compliance with the License.
  19. * You may obtain a copy of the License at
  20. *
  21. * www.apache.org/licenses/LICENSE-2.0
  22. *
  23. * Unless required by applicable law or agreed to in writing, software
  24. * distributed under the License is distributed on an AS IS BASIS, WITHOUT
  25. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  26. * See the License for the specific language governing permissions and
  27. * limitations under the License.
  28. */
  29. #ifndef RISCV_COMMON_TABLES_H
  30. #define RISCV_COMMON_TABLES_H
  31. #include "riscv_math_types.h"
  32. #include "dsp/fast_math_functions.h"
  33. #if defined (RISCV_FLOAT16_SUPPORTED)
  34. #include "riscv_common_tables_f16.h"
  35. #endif /* defined (RISCV_FLOAT16_SUPPORTED) */
  36. #ifdef __cplusplus
  37. extern "C"
  38. {
  39. #endif
  40. /* Double Precision Float CFFT twiddles */
  41. extern const uint16_t riscvBitRevTable[1024];
  42. extern const uint64_t twiddleCoefF64_16[32];
  43. extern const uint64_t twiddleCoefF64_32[64];
  44. extern const uint64_t twiddleCoefF64_64[128];
  45. extern const uint64_t twiddleCoefF64_128[256];
  46. extern const uint64_t twiddleCoefF64_256[512];
  47. extern const uint64_t twiddleCoefF64_512[1024];
  48. extern const uint64_t twiddleCoefF64_1024[2048];
  49. extern const uint64_t twiddleCoefF64_2048[4096];
  50. extern const uint64_t twiddleCoefF64_4096[8192];
  51. extern const float32_t twiddleCoef_16[32];
  52. extern const float32_t twiddleCoef_32[64];
  53. extern const float32_t twiddleCoef_64[128];
  54. extern const float32_t twiddleCoef_128[256];
  55. extern const float32_t twiddleCoef_256[512];
  56. extern const float32_t twiddleCoef_512[1024];
  57. extern const float32_t twiddleCoef_1024[2048];
  58. extern const float32_t twiddleCoef_2048[4096];
  59. extern const float32_t twiddleCoef_4096[8192];
  60. #define twiddleCoef twiddleCoef_4096
  61. /* Q31 */
  62. extern const q31_t twiddleCoef_16_q31[24];
  63. extern const q31_t twiddleCoef_32_q31[48];
  64. extern const q31_t twiddleCoef_64_q31[96];
  65. extern const q31_t twiddleCoef_128_q31[192];
  66. extern const q31_t twiddleCoef_256_q31[384];
  67. extern const q31_t twiddleCoef_512_q31[768];
  68. extern const q31_t twiddleCoef_1024_q31[1536];
  69. extern const q31_t twiddleCoef_2048_q31[3072];
  70. extern const q31_t twiddleCoef_4096_q31[6144];
  71. extern const q15_t twiddleCoef_16_q15[24];
  72. extern const q15_t twiddleCoef_32_q15[48];
  73. extern const q15_t twiddleCoef_64_q15[96];
  74. extern const q15_t twiddleCoef_128_q15[192];
  75. extern const q15_t twiddleCoef_256_q15[384];
  76. extern const q15_t twiddleCoef_512_q15[768];
  77. extern const q15_t twiddleCoef_1024_q15[1536];
  78. extern const q15_t twiddleCoef_2048_q15[3072];
  79. extern const q15_t twiddleCoef_4096_q15[6144];
  80. /* Double Precision Float RFFT twiddles */
  81. extern const uint64_t twiddleCoefF64_rfft_32[32];
  82. extern const uint64_t twiddleCoefF64_rfft_64[64];
  83. extern const uint64_t twiddleCoefF64_rfft_128[128];
  84. extern const uint64_t twiddleCoefF64_rfft_256[256];
  85. extern const uint64_t twiddleCoefF64_rfft_512[512];
  86. extern const uint64_t twiddleCoefF64_rfft_1024[1024];
  87. extern const uint64_t twiddleCoefF64_rfft_2048[2048];
  88. extern const uint64_t twiddleCoefF64_rfft_4096[4096];
  89. extern const float32_t twiddleCoef_rfft_32[32];
  90. extern const float32_t twiddleCoef_rfft_64[64];
  91. extern const float32_t twiddleCoef_rfft_128[128];
  92. extern const float32_t twiddleCoef_rfft_256[256];
  93. extern const float32_t twiddleCoef_rfft_512[512];
  94. extern const float32_t twiddleCoef_rfft_1024[1024];
  95. extern const float32_t twiddleCoef_rfft_2048[2048];
  96. extern const float32_t twiddleCoef_rfft_4096[4096];
  97. /* Double precision floating-point bit reversal tables */
  98. #define RISCVBITREVINDEXTABLEF64_16_TABLE_LENGTH ((uint16_t)12)
  99. extern const uint16_t riscvBitRevIndexTableF64_16[RISCVBITREVINDEXTABLEF64_16_TABLE_LENGTH];
  100. #define RISCVBITREVINDEXTABLEF64_32_TABLE_LENGTH ((uint16_t)24)
  101. extern const uint16_t riscvBitRevIndexTableF64_32[RISCVBITREVINDEXTABLEF64_32_TABLE_LENGTH];
  102. #define RISCVBITREVINDEXTABLEF64_64_TABLE_LENGTH ((uint16_t)56)
  103. extern const uint16_t riscvBitRevIndexTableF64_64[RISCVBITREVINDEXTABLEF64_64_TABLE_LENGTH];
  104. #define RISCVBITREVINDEXTABLEF64_128_TABLE_LENGTH ((uint16_t)112)
  105. extern const uint16_t riscvBitRevIndexTableF64_128[RISCVBITREVINDEXTABLEF64_128_TABLE_LENGTH];
  106. #define RISCVBITREVINDEXTABLEF64_256_TABLE_LENGTH ((uint16_t)240)
  107. extern const uint16_t riscvBitRevIndexTableF64_256[RISCVBITREVINDEXTABLEF64_256_TABLE_LENGTH];
  108. #define RISCVBITREVINDEXTABLEF64_512_TABLE_LENGTH ((uint16_t)480)
  109. extern const uint16_t riscvBitRevIndexTableF64_512[RISCVBITREVINDEXTABLEF64_512_TABLE_LENGTH];
  110. #define RISCVBITREVINDEXTABLEF64_1024_TABLE_LENGTH ((uint16_t)992)
  111. extern const uint16_t riscvBitRevIndexTableF64_1024[RISCVBITREVINDEXTABLEF64_1024_TABLE_LENGTH];
  112. #define RISCVBITREVINDEXTABLEF64_2048_TABLE_LENGTH ((uint16_t)1984)
  113. extern const uint16_t riscvBitRevIndexTableF64_2048[RISCVBITREVINDEXTABLEF64_2048_TABLE_LENGTH];
  114. #define RISCVBITREVINDEXTABLEF64_4096_TABLE_LENGTH ((uint16_t)4032)
  115. extern const uint16_t riscvBitRevIndexTableF64_4096[RISCVBITREVINDEXTABLEF64_4096_TABLE_LENGTH];
  116. /* floating-point bit reversal tables */
  117. #define RISCVBITREVINDEXTABLE_16_TABLE_LENGTH ((uint16_t)20)
  118. extern const uint16_t riscvBitRevIndexTable16[RISCVBITREVINDEXTABLE_16_TABLE_LENGTH];
  119. #define RISCVBITREVINDEXTABLE_32_TABLE_LENGTH ((uint16_t)48)
  120. extern const uint16_t riscvBitRevIndexTable32[RISCVBITREVINDEXTABLE_32_TABLE_LENGTH];
  121. #define RISCVBITREVINDEXTABLE_64_TABLE_LENGTH ((uint16_t)56)
  122. extern const uint16_t riscvBitRevIndexTable64[RISCVBITREVINDEXTABLE_64_TABLE_LENGTH];
  123. #define RISCVBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208)
  124. extern const uint16_t riscvBitRevIndexTable128[RISCVBITREVINDEXTABLE_128_TABLE_LENGTH];
  125. #define RISCVBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440)
  126. extern const uint16_t riscvBitRevIndexTable256[RISCVBITREVINDEXTABLE_256_TABLE_LENGTH];
  127. #define RISCVBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448)
  128. extern const uint16_t riscvBitRevIndexTable512[RISCVBITREVINDEXTABLE_512_TABLE_LENGTH];
  129. #define RISCVBITREVINDEXTABLE_1024_TABLE_LENGTH ((uint16_t)1800)
  130. extern const uint16_t riscvBitRevIndexTable1024[RISCVBITREVINDEXTABLE_1024_TABLE_LENGTH];
  131. #define RISCVBITREVINDEXTABLE_2048_TABLE_LENGTH ((uint16_t)3808)
  132. extern const uint16_t riscvBitRevIndexTable2048[RISCVBITREVINDEXTABLE_2048_TABLE_LENGTH];
  133. #define RISCVBITREVINDEXTABLE_4096_TABLE_LENGTH ((uint16_t)4032)
  134. extern const uint16_t riscvBitRevIndexTable4096[RISCVBITREVINDEXTABLE_4096_TABLE_LENGTH];
  135. /* fixed-point bit reversal tables */
  136. #define RISCVBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH ((uint16_t)12)
  137. extern const uint16_t riscvBitRevIndexTable_fixed_16[RISCVBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH];
  138. #define RISCVBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH ((uint16_t)24)
  139. extern const uint16_t riscvBitRevIndexTable_fixed_32[RISCVBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH];
  140. #define RISCVBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH ((uint16_t)56)
  141. extern const uint16_t riscvBitRevIndexTable_fixed_64[RISCVBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH];
  142. #define RISCVBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH ((uint16_t)112)
  143. extern const uint16_t riscvBitRevIndexTable_fixed_128[RISCVBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH];
  144. #define RISCVBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH ((uint16_t)240)
  145. extern const uint16_t riscvBitRevIndexTable_fixed_256[RISCVBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH];
  146. #define RISCVBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH ((uint16_t)480)
  147. extern const uint16_t riscvBitRevIndexTable_fixed_512[RISCVBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH];
  148. #define RISCVBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH ((uint16_t)992)
  149. extern const uint16_t riscvBitRevIndexTable_fixed_1024[RISCVBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH];
  150. #define RISCVBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH ((uint16_t)1984)
  151. extern const uint16_t riscvBitRevIndexTable_fixed_2048[RISCVBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH];
  152. #define RISCVBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH ((uint16_t)4032)
  153. extern const uint16_t riscvBitRevIndexTable_fixed_4096[RISCVBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH];
  154. extern const float32_t realCoefA[8192];
  155. extern const float32_t realCoefB[8192];
  156. extern const q31_t realCoefAQ31[8192];
  157. extern const q31_t realCoefBQ31[8192];
  158. extern const q15_t realCoefAQ15[8192];
  159. extern const q15_t realCoefBQ15[8192];
  160. extern const float32_t Weights_128[256];
  161. extern const float32_t cos_factors_128[128];
  162. extern const float32_t Weights_512[1024];
  163. extern const float32_t cos_factors_512[512];
  164. extern const float32_t Weights_2048[4096];
  165. extern const float32_t cos_factors_2048[2048];
  166. extern const float32_t Weights_8192[16384];
  167. extern const float32_t cos_factors_8192[8192];
  168. extern const q15_t WeightsQ15_128[256];
  169. extern const q15_t cos_factorsQ15_128[128];
  170. extern const q15_t WeightsQ15_512[1024];
  171. extern const q15_t cos_factorsQ15_512[512];
  172. extern const q15_t WeightsQ15_2048[4096];
  173. extern const q15_t cos_factorsQ15_2048[2048];
  174. extern const q15_t WeightsQ15_8192[16384];
  175. extern const q15_t cos_factorsQ15_8192[8192];
  176. extern const q31_t WeightsQ31_128[256];
  177. extern const q31_t cos_factorsQ31_128[128];
  178. extern const q31_t WeightsQ31_512[1024];
  179. extern const q31_t cos_factorsQ31_512[512];
  180. extern const q31_t WeightsQ31_2048[4096];
  181. extern const q31_t cos_factorsQ31_2048[2048];
  182. extern const q31_t WeightsQ31_8192[16384];
  183. extern const q31_t cos_factorsQ31_8192[8192];
  184. extern const q15_t riscvRecipTableQ15[64];
  185. extern const q31_t riscvRecipTableQ31[64];
  186. /* Tables for Fast Math Sine and Cosine */
  187. extern const float32_t sinTable_f32[FAST_MATH_TABLE_SIZE + 1];
  188. extern const q31_t sinTable_q31[FAST_MATH_TABLE_SIZE + 1];
  189. extern const q15_t sinTable_q15[FAST_MATH_TABLE_SIZE + 1];
  190. /* Accurate scalar sqrt */
  191. extern const q31_t sqrt_initial_lut_q31[32];
  192. extern const q15_t sqrt_initial_lut_q15[16];
  193. #ifdef __cplusplus
  194. }
  195. #endif
  196. #endif /* RISCV_COMMON_TABLES_H */