34 #ifndef MATHLIB_LUT_H_
35 #define MATHLIB_LUT_H_ 1
45 #include "c7x_scalable.h"
64 #define MATHLIB_KTABLE_OFFSET 0
65 #define MATHLIB_JTABLE_OFFSET 4
66 #define MATHLIB_LOGTABLE_OFFSET 8
67 #define MATHLIB_VTABLE_OFFSET 16
89 vecOut = c7x::reinterpret<c7x::uint_vec>(__lookup_read_int(__LUT_SET0, vecOffset));
113 c7x::uint_vec vecOut;
114 vecOut = c7x::reinterpret<c7x::uint_vec>(__lookup_read_int(__LUT_SET1, vecOffset));
132 const uint32_t tableSize = 20;
136 uint32_t MATHLIB_LUTHigh[tableSize] = {
161 uint32_t MATHLIB_LUTLow[tableSize] = {
185 __sLTCRFlags_t set0flags;
188 set0flags.INTERPOLATION = __LUT_INTERP_OFF;
189 set0flags.SATURATION = __LUT_SAT_OFF;
190 set0flags.SIGNUNSIGN = __LUT_SIGNED;
191 set0flags.ELETYPE = __LUT_ELETYPE_32BIT;
192 set0flags.NUMTBLS = __LUT_NUM_TBL_16;
193 set0flags.TBLSIZE = __LUT_TBL_SIZE_2KBYTES;
194 set0flags.WEIGHTSIZE = __LUT_WSIZE_8BIT;
195 set0flags.PROMOTION = __LUT_PROMOTE_OFF;
198 __LUT_SET_LTCR(__LUT_SET0, __lut_set_param(&set0flags));
201 __LUT_SET_LTBR(__LUT_SET0, 0x0000);
204 __LUT_SET_LTER(__LUT_ENABLE_0);
207 uint64_t *pData = (uint64_t *) &MATHLIB_LUTHigh[0];
208 c7x::ulong_vec vData;
209 uint32_t rowOffset = 0;
210 uint32_t rowIncrement = 2;
212 for (uint32_t j = 0; j < (tableSize / rowIncrement); j++) {
214 vData = (c7x::ulong_vec)(pData[j]);
217 __lookup_init(__LUT_SET0, __as_uint16(vData), rowOffset);
220 rowOffset += rowIncrement;
224 __sLTCRFlags_t set1flags;
227 set1flags.INTERPOLATION = __LUT_INTERP_OFF;
228 set1flags.SATURATION = __LUT_SAT_OFF;
229 set1flags.SIGNUNSIGN = __LUT_SIGNED;
230 set1flags.ELETYPE = __LUT_ELETYPE_32BIT;
231 set1flags.NUMTBLS = __LUT_NUM_TBL_16;
232 set1flags.TBLSIZE = __LUT_TBL_SIZE_2KBYTES;
233 set1flags.WEIGHTSIZE = __LUT_WSIZE_8BIT;
234 set1flags.PROMOTION = __LUT_PROMOTE_OFF;
237 __LUT_SET_LTCR(__LUT_SET1, __lut_set_param(&set1flags));
240 __LUT_SET_LTBR(__LUT_SET1, 0x2000);
243 __LUT_SET_LTER(__LUT_ENABLE_1);
246 pData = (uint64_t *) &MATHLIB_LUTLow[0];
249 for (uint32_t j = 0; j < (tableSize / rowIncrement); j++) {
251 vData = (c7x::ulong_vec)(pData[j]);
254 __lookup_init(__LUT_SET1, __as_uint16(vData), rowOffset);
256 pData = (uint64_t *) &MATHLIB_LUTLow[0];
259 for (uint32_t i = 0; i < (tableSize / rowIncrement); i++) {
261 vData = (c7x::ulong_vec)(pData[i]);
264 __lookup_init(__LUT_SET1, __as_uint16(vData), rowOffset);
267 rowOffset += rowIncrement;
270 #if MATHLIB_DEBUGPRINT
272 c7x::uint_vec indices1 = c7x::uint_vec(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
273 c7x::uint_vec indices2 = c7x::uint_vec(16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
274 printf(
"\nUpper Bits\n");
277 printf(
"\nLower Bits\n");
static void MATHLIB_printVec(vecType vec)
This method prints the contents of a vector datatype variable.
static void MATHLIB_LUTInit()
This method intializes the upper and lower bit lookup tables.
static c7x::uint_vec MATHLIB_LUTReadLowerBits(vecType vecOffset)
This method reads bits 31-0 of LUT value at vecOffset.
static c7x::uint_vec MATHLIB_LUTReadUpperBits(vecType vecOffset)
This method reads bits 63-32 of LUT value at vecOffset.