From 7ddcb3b3033ee2c3e71e85f8e653cd4b6fe80eac Mon Sep 17 00:00:00 2001 From: Romain Dolbeau Date: Fri, 6 Sep 2019 11:56:52 -0400 Subject: [PATCH] Multi-width R5V, similar to arm-sve-clean. This is a cleaned-up version of branch riscv-v from rdolbeau/fftw3. No scalability, this is using multiple sets of masked operations to support all width multiple of 128 bits. This goes up to 16384 bits to support the EPAC VPU design. This is now using the official V1.0 intirnsics, and was tested with gcc-14 and clang-18. It can bes tested on qemu, or on hardware with V1.0 support. It was thoroughly tested on a BananaPi F3 with a Spacemit K1 SoC, which supports V1.0 with 256-bits registers. --- Makefile.am | 21 +- api/version.c | 4 + configure.ac | 22 + dft/codelet-dft.h | 9 +- dft/conf.c | 18 + dft/simd/Makefile.am | 2 +- dft/simd/r5v1024/Makefile.am | 12 + dft/simd/r5v128/Makefile.am | 12 + dft/simd/r5v16384/Makefile.am | 12 + dft/simd/r5v2048/Makefile.am | 12 + dft/simd/r5v256/Makefile.am | 12 + dft/simd/r5v4096/Makefile.am | 12 + dft/simd/r5v512/Makefile.am | 12 + dft/simd/r5v8192/Makefile.am | 12 + kernel/ifftw.h | 6 +- rdft/codelet-rdft.h | 8 + rdft/conf.c | 18 + rdft/simd/Makefile.am | 2 +- rdft/simd/r5v1024/Makefile.am | 14 + rdft/simd/r5v128/Makefile.am | 14 + rdft/simd/r5v16384/Makefile.am | 14 + rdft/simd/r5v2048/Makefile.am | 14 + rdft/simd/r5v256/Makefile.am | 14 + rdft/simd/r5v4096/Makefile.am | 14 + rdft/simd/r5v512/Makefile.am | 14 + rdft/simd/r5v8192/Makefile.am | 14 + simd-support/Makefile.am | 3 +- simd-support/generate_vtw.c | 79 + simd-support/generate_vtw.sh | 13 + simd-support/r5v.c | 32 + simd-support/simd-common.h | 8 + simd-support/simd-r5v-split.h | 402 +++++ simd-support/simd-r5v.h | 473 ++++++ simd-support/simd-r5v1024.h | 29 + simd-support/simd-r5v128.h | 29 + simd-support/simd-r5v16384.h | 29 + simd-support/simd-r5v2048.h | 29 + simd-support/simd-r5v256.h | 29 + simd-support/simd-r5v4096.h | 29 + simd-support/simd-r5v512.h | 29 + simd-support/simd-r5v8192.h | 29 + simd-support/vtw.h | 2667 ++++++++++++++++++++++++++++++++ 42 files changed, 4220 insertions(+), 7 deletions(-) create mode 100644 dft/simd/r5v1024/Makefile.am create mode 100644 dft/simd/r5v128/Makefile.am create mode 100644 dft/simd/r5v16384/Makefile.am create mode 100644 dft/simd/r5v2048/Makefile.am create mode 100644 dft/simd/r5v256/Makefile.am create mode 100644 dft/simd/r5v4096/Makefile.am create mode 100644 dft/simd/r5v512/Makefile.am create mode 100644 dft/simd/r5v8192/Makefile.am create mode 100644 rdft/simd/r5v1024/Makefile.am create mode 100644 rdft/simd/r5v128/Makefile.am create mode 100644 rdft/simd/r5v16384/Makefile.am create mode 100644 rdft/simd/r5v2048/Makefile.am create mode 100644 rdft/simd/r5v256/Makefile.am create mode 100644 rdft/simd/r5v4096/Makefile.am create mode 100644 rdft/simd/r5v512/Makefile.am create mode 100644 rdft/simd/r5v8192/Makefile.am create mode 100644 simd-support/generate_vtw.c create mode 100755 simd-support/generate_vtw.sh create mode 100644 simd-support/r5v.c create mode 100644 simd-support/simd-r5v-split.h create mode 100644 simd-support/simd-r5v.h create mode 100644 simd-support/simd-r5v1024.h create mode 100644 simd-support/simd-r5v128.h create mode 100644 simd-support/simd-r5v16384.h create mode 100644 simd-support/simd-r5v2048.h create mode 100644 simd-support/simd-r5v256.h create mode 100644 simd-support/simd-r5v4096.h create mode 100644 simd-support/simd-r5v512.h create mode 100644 simd-support/simd-r5v8192.h create mode 100644 simd-support/vtw.h diff --git a/Makefile.am b/Makefile.am index 402300080..d908577bd 100644 --- a/Makefile.am +++ b/Makefile.am @@ -128,6 +128,25 @@ GENERIC_SIMD256_LIBS = dft/simd/generic-simd256/libdft_generic_simd256_codelets. rdft/simd/generic-simd256/librdft_generic_simd256_codelets.la endif +if HAVE_R5V +R5V_LIBS = dft/simd/r5v128/libdft_r5v128_codelets.la \ +rdft/simd/r5v128/librdft_r5v128_codelets.la \ +dft/simd/r5v256/libdft_r5v256_codelets.la \ +rdft/simd/r5v256/librdft_r5v256_codelets.la \ +dft/simd/r5v512/libdft_r5v512_codelets.la \ +rdft/simd/r5v512/librdft_r5v512_codelets.la \ +dft/simd/r5v1024/libdft_r5v1024_codelets.la \ +rdft/simd/r5v1024/librdft_r5v1024_codelets.la \ +dft/simd/r5v2048/libdft_r5v2048_codelets.la \ +rdft/simd/r5v2048/librdft_r5v2048_codelets.la \ +dft/simd/r5v4096/libdft_r5v4096_codelets.la \ +rdft/simd/r5v4096/librdft_r5v4096_codelets.la \ +dft/simd/r5v8192/libdft_r5v8192_codelets.la \ +rdft/simd/r5v8192/librdft_r5v8192_codelets.la \ +dft/simd/r5v16384/libdft_r5v16384_codelets.la \ +rdft/simd/r5v16384/librdft_r5v16384_codelets.la +endif + if THREADS if COMBINED_THREADS COMBINED_THREADLIBS=threads/libfftw3@PREC_SUFFIX@_threads.la @@ -152,7 +171,7 @@ libfftw3@PREC_SUFFIX@_la_LIBADD = \ $(AVX2_LIBS) $(ALTIVEC_LIBS) \ $(VSX_LIBS) $(NEON_LIBS) $(SVE_LIBS) $(KCVI_LIBS) $(AVX512_LIBS) \ $(LSX_LIBS) $(LASX_LIBS) \ - $(GENERIC_SIMD128_LIBS) $(GENERIC_SIMD256_LIBS) \ + $(GENERIC_SIMD128_LIBS) $(GENERIC_SIMD256_LIBS) $(R5V_LIBS) \ $(COMBINED_THREADLIBS) if QUAD diff --git a/api/version.c b/api/version.c index da36f7d49..4630b1cd2 100644 --- a/api/version.c +++ b/api/version.c @@ -97,4 +97,8 @@ const char X(version)[] = PACKAGE "-" PACKAGE_VERSION "-generic_simd256" #endif +#if defined(HAVE_R5V) + "-r5v" +#endif + ; diff --git a/configure.ac b/configure.ac index 0e28d0115..934fcdb73 100644 --- a/configure.ac +++ b/configure.ac @@ -253,6 +253,12 @@ if test "$have_sve" = "yes"; then fi AM_CONDITIONAL(HAVE_SVE, test "$have_sve" = "yes") +AC_ARG_ENABLE(r5v, [AC_HELP_STRING([--enable-r5v],[enable RISC-V V optimizations])], have_r5v=$enableval, have_r5v=no) +if test "$have_r5v" = "yes"; then + AC_DEFINE(HAVE_R5V,1,[Define to enable RISC-V V optimizations.]) +fi +AM_CONDITIONAL(HAVE_R5V, test "$have_r5v" = "yes") + dnl FIXME: dnl AC_ARG_ENABLE(mips-ps, [AS_HELP_STRING([--enable-mips-ps],[enable MIPS pair-single optimizations])], have_mips_ps=$enableval, have_mips_ps=no) dnl if test "$have_mips_ps" = "yes"; then @@ -825,6 +831,14 @@ AC_CONFIG_FILES([ dft/simd/lasx/Makefile dft/simd/generic-simd128/Makefile dft/simd/generic-simd256/Makefile + dft/simd/r5v128/Makefile + dft/simd/r5v256/Makefile + dft/simd/r5v512/Makefile + dft/simd/r5v1024/Makefile + dft/simd/r5v2048/Makefile + dft/simd/r5v4096/Makefile + dft/simd/r5v8192/Makefile + dft/simd/r5v16384/Makefile rdft/Makefile rdft/scalar/Makefile @@ -852,6 +866,14 @@ AC_CONFIG_FILES([ rdft/simd/lasx/Makefile rdft/simd/generic-simd128/Makefile rdft/simd/generic-simd256/Makefile + rdft/simd/r5v128/Makefile + rdft/simd/r5v256/Makefile + rdft/simd/r5v512/Makefile + rdft/simd/r5v1024/Makefile + rdft/simd/r5v2048/Makefile + rdft/simd/r5v4096/Makefile + rdft/simd/r5v8192/Makefile + rdft/simd/r5v16384/Makefile reodft/Makefile diff --git a/dft/codelet-dft.h b/dft/codelet-dft.h index 05cfee41e..a656cd479 100644 --- a/dft/codelet-dft.h +++ b/dft/codelet-dft.h @@ -115,5 +115,12 @@ extern const solvtab X(solvtab_dft_lsx); extern const solvtab X(solvtab_dft_lasx); extern const solvtab X(solvtab_dft_generic_simd128); extern const solvtab X(solvtab_dft_generic_simd256); - +extern const solvtab X(solvtab_dft_r5v128); +extern const solvtab X(solvtab_dft_r5v256); +extern const solvtab X(solvtab_dft_r5v512); +extern const solvtab X(solvtab_dft_r5v1024); +extern const solvtab X(solvtab_dft_r5v2048); +extern const solvtab X(solvtab_dft_r5v4096); +extern const solvtab X(solvtab_dft_r5v8192); +extern const solvtab X(solvtab_dft_r5v16384); #endif /* __DFT_CODELET_H__ */ diff --git a/dft/conf.c b/dft/conf.c index e6a9c5412..8d9d8ad91 100644 --- a/dft/conf.c +++ b/dft/conf.c @@ -105,4 +105,22 @@ void X(dft_conf_standard)(planner *p) #if HAVE_GENERIC_SIMD256 X(solvtab_exec)(X(solvtab_dft_generic_simd256), p); #endif +#if HAVE_R5V + if (X(have_simd_r5v)(128)) + X(solvtab_exec)(X(solvtab_dft_r5v128), p); + if (X(have_simd_r5v)(256)) + X(solvtab_exec)(X(solvtab_dft_r5v256), p); + if (X(have_simd_r5v)(512)) + X(solvtab_exec)(X(solvtab_dft_r5v512), p); + if (X(have_simd_r5v)(1024)) + X(solvtab_exec)(X(solvtab_dft_r5v1024), p); + if (X(have_simd_r5v)(2048)) + X(solvtab_exec)(X(solvtab_dft_r5v2048), p); + if (X(have_simd_r5v)(4096)) + X(solvtab_exec)(X(solvtab_dft_r5v4096), p); + if (X(have_simd_r5v)(8192)) + X(solvtab_exec)(X(solvtab_dft_r5v8192), p); + if (X(have_simd_r5v)(16384)) + X(solvtab_exec)(X(solvtab_dft_r5v16384), p); +#endif } diff --git a/dft/simd/Makefile.am b/dft/simd/Makefile.am index fe58c38f6..735d658e4 100644 --- a/dft/simd/Makefile.am +++ b/dft/simd/Makefile.am @@ -1,4 +1,4 @@ AM_CPPFLAGS = -I $(top_srcdir) -SUBDIRS = common sse2 avx avx-128-fma avx2 avx2-128 avx512 kcvi altivec vsx neon sve128 sve256 sve512 sve1024 sve2048 lsx lasx generic-simd128 generic-simd256 +SUBDIRS = common sse2 avx avx-128-fma avx2 avx2-128 avx512 kcvi altivec vsx neon sve128 sve256 sve512 sve1024 sve2048 lsx lasx generic-simd128 generic-simd256 r5v128 r5v256 r5v512 r5v1024 r5v2048 r5v4096 r5v8192 r5v16384 EXTRA_DIST = n1b.h n1f.h n2b.h n2f.h n2s.h q1b.h q1f.h t1b.h t1bu.h \ t1f.h t1fu.h t2b.h t2f.h t3b.h t3f.h ts.h codlist.mk simd.mk diff --git a/dft/simd/r5v1024/Makefile.am b/dft/simd/r5v1024/Makefile.am new file mode 100644 index 000000000..fd15fa15e --- /dev/null +++ b/dft/simd/r5v1024/Makefile.am @@ -0,0 +1,12 @@ +SIMD_HEADER=simd-support/simd-r5v1024.h + +include $(top_srcdir)/dft/simd/codlist.mk +include $(top_srcdir)/dft/simd/simd.mk + +if HAVE_R5V + +BUILT_SOURCES = $(EXTRA_DIST) +noinst_LTLIBRARIES = libdft_r5v1024_codelets.la +libdft_r5v1024_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif diff --git a/dft/simd/r5v128/Makefile.am b/dft/simd/r5v128/Makefile.am new file mode 100644 index 000000000..0ec46535a --- /dev/null +++ b/dft/simd/r5v128/Makefile.am @@ -0,0 +1,12 @@ +SIMD_HEADER=simd-support/simd-r5v128.h + +include $(top_srcdir)/dft/simd/codlist.mk +include $(top_srcdir)/dft/simd/simd.mk + +if HAVE_R5V + +BUILT_SOURCES = $(EXTRA_DIST) +noinst_LTLIBRARIES = libdft_r5v128_codelets.la +libdft_r5v128_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif diff --git a/dft/simd/r5v16384/Makefile.am b/dft/simd/r5v16384/Makefile.am new file mode 100644 index 000000000..6cdeef1ca --- /dev/null +++ b/dft/simd/r5v16384/Makefile.am @@ -0,0 +1,12 @@ +SIMD_HEADER=simd-support/simd-r5v16384.h + +include $(top_srcdir)/dft/simd/codlist.mk +include $(top_srcdir)/dft/simd/simd.mk + +if HAVE_R5V + +BUILT_SOURCES = $(EXTRA_DIST) +noinst_LTLIBRARIES = libdft_r5v16384_codelets.la +libdft_r5v16384_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif diff --git a/dft/simd/r5v2048/Makefile.am b/dft/simd/r5v2048/Makefile.am new file mode 100644 index 000000000..933a30e48 --- /dev/null +++ b/dft/simd/r5v2048/Makefile.am @@ -0,0 +1,12 @@ +SIMD_HEADER=simd-support/simd-r5v2048.h + +include $(top_srcdir)/dft/simd/codlist.mk +include $(top_srcdir)/dft/simd/simd.mk + +if HAVE_R5V + +BUILT_SOURCES = $(EXTRA_DIST) +noinst_LTLIBRARIES = libdft_r5v2048_codelets.la +libdft_r5v2048_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif diff --git a/dft/simd/r5v256/Makefile.am b/dft/simd/r5v256/Makefile.am new file mode 100644 index 000000000..0253556d1 --- /dev/null +++ b/dft/simd/r5v256/Makefile.am @@ -0,0 +1,12 @@ +SIMD_HEADER=simd-support/simd-r5v256.h + +include $(top_srcdir)/dft/simd/codlist.mk +include $(top_srcdir)/dft/simd/simd.mk + +if HAVE_R5V + +BUILT_SOURCES = $(EXTRA_DIST) +noinst_LTLIBRARIES = libdft_r5v256_codelets.la +libdft_r5v256_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif diff --git a/dft/simd/r5v4096/Makefile.am b/dft/simd/r5v4096/Makefile.am new file mode 100644 index 000000000..2987fe34f --- /dev/null +++ b/dft/simd/r5v4096/Makefile.am @@ -0,0 +1,12 @@ +SIMD_HEADER=simd-support/simd-r5v4096.h + +include $(top_srcdir)/dft/simd/codlist.mk +include $(top_srcdir)/dft/simd/simd.mk + +if HAVE_R5V + +BUILT_SOURCES = $(EXTRA_DIST) +noinst_LTLIBRARIES = libdft_r5v4096_codelets.la +libdft_r5v4096_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif diff --git a/dft/simd/r5v512/Makefile.am b/dft/simd/r5v512/Makefile.am new file mode 100644 index 000000000..a4a15fe04 --- /dev/null +++ b/dft/simd/r5v512/Makefile.am @@ -0,0 +1,12 @@ +SIMD_HEADER=simd-support/simd-r5v512.h + +include $(top_srcdir)/dft/simd/codlist.mk +include $(top_srcdir)/dft/simd/simd.mk + +if HAVE_R5V + +BUILT_SOURCES = $(EXTRA_DIST) +noinst_LTLIBRARIES = libdft_r5v512_codelets.la +libdft_r5v512_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif diff --git a/dft/simd/r5v8192/Makefile.am b/dft/simd/r5v8192/Makefile.am new file mode 100644 index 000000000..6c7344197 --- /dev/null +++ b/dft/simd/r5v8192/Makefile.am @@ -0,0 +1,12 @@ +SIMD_HEADER=simd-support/simd-r5v8192.h + +include $(top_srcdir)/dft/simd/codlist.mk +include $(top_srcdir)/dft/simd/simd.mk + +if HAVE_R5V + +BUILT_SOURCES = $(EXTRA_DIST) +noinst_LTLIBRARIES = libdft_r5v8192_codelets.la +libdft_r5v8192_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif diff --git a/kernel/ifftw.h b/kernel/ifftw.h index ee8dc557f..467c81056 100644 --- a/kernel/ifftw.h +++ b/kernel/ifftw.h @@ -109,7 +109,8 @@ extern void X(extract_reim)(int sign, R *c, R **r, R **i); defined(HAVE_ALTIVEC) || defined(HAVE_VSX) || \ defined(HAVE_MIPS_PS) || \ defined(HAVE_LSX) || defined(HAVE_LASX) || \ - defined(HAVE_GENERIC_SIMD128) || defined(HAVE_GENERIC_SIMD256) + defined(HAVE_GENERIC_SIMD128) || defined(HAVE_GENERIC_SIMD256) || \ + defined(HAVE_R5V) #define HAVE_SIMD 1 #else #define HAVE_SIMD 0 @@ -127,6 +128,7 @@ extern int X(have_simd_neon)(void); extern int X(have_simd_lsx)(void); extern int X(have_simd_lasx)(void); extern int X(have_simd_sve)(int minwidth); +extern int X(have_simd_r5v)(int); /* forward declarations */ typedef struct problem_s problem; @@ -884,7 +886,7 @@ enum { TW_COS = 0, TW_SIN = 1, TW_CEXP = 2, TW_NEXT = 3, typedef struct { unsigned char op; - signed char v; + short v; short i; } tw_instr; diff --git a/rdft/codelet-rdft.h b/rdft/codelet-rdft.h index 2081a2e80..addddf8e9 100644 --- a/rdft/codelet-rdft.h +++ b/rdft/codelet-rdft.h @@ -154,6 +154,14 @@ extern const solvtab X(solvtab_rdft_lsx); extern const solvtab X(solvtab_rdft_lasx); extern const solvtab X(solvtab_rdft_generic_simd128); extern const solvtab X(solvtab_rdft_generic_simd256); +extern const solvtab X(solvtab_rdft_r5v128); +extern const solvtab X(solvtab_rdft_r5v256); +extern const solvtab X(solvtab_rdft_r5v512); +extern const solvtab X(solvtab_rdft_r5v1024); +extern const solvtab X(solvtab_rdft_r5v2048); +extern const solvtab X(solvtab_rdft_r5v4096); +extern const solvtab X(solvtab_rdft_r5v8192); +extern const solvtab X(solvtab_rdft_r5v16384); /* real-input & output DFT-like codelets (DHT, etc.) */ typedef struct kr2r_desc_s kr2r_desc; diff --git a/rdft/conf.c b/rdft/conf.c index 2124ef87e..5c6d7f94e 100644 --- a/rdft/conf.c +++ b/rdft/conf.c @@ -122,4 +122,22 @@ void X(rdft_conf_standard)(planner *p) #if HAVE_GENERIC_SIMD256 X(solvtab_exec)(X(solvtab_rdft_generic_simd256), p); #endif +#if HAVE_R5V + if (X(have_simd_r5v)(128)) + X(solvtab_exec)(X(solvtab_rdft_r5v128), p); + if (X(have_simd_r5v)(256)) + X(solvtab_exec)(X(solvtab_rdft_r5v256), p); + if (X(have_simd_r5v)(512)) + X(solvtab_exec)(X(solvtab_rdft_r5v512), p); + if (X(have_simd_r5v)(1024)) + X(solvtab_exec)(X(solvtab_rdft_r5v1024), p); + if (X(have_simd_r5v)(2048)) + X(solvtab_exec)(X(solvtab_rdft_r5v2048), p); + if (X(have_simd_r5v)(4096)) + X(solvtab_exec)(X(solvtab_rdft_r5v4096), p); + if (X(have_simd_r5v)(8192)) + X(solvtab_exec)(X(solvtab_rdft_r5v8192), p); + if (X(have_simd_r5v)(16384)) + X(solvtab_exec)(X(solvtab_rdft_r5v16384), p); +#endif } diff --git a/rdft/simd/Makefile.am b/rdft/simd/Makefile.am index 19dc0fd5a..2596eacb6 100644 --- a/rdft/simd/Makefile.am +++ b/rdft/simd/Makefile.am @@ -1,4 +1,4 @@ AM_CPPFLAGS = -I $(top_srcdir) -SUBDIRS = common sse2 avx avx-128-fma avx2 avx2-128 avx512 kcvi altivec vsx neon sve128 sve256 sve512 sve1024 sve2048 lsx lasx generic-simd128 generic-simd256 +SUBDIRS = common sse2 avx avx-128-fma avx2 avx2-128 avx512 kcvi altivec vsx neon sve128 sve256 sve512 sve1024 sve2048 lsx lasx generic-simd128 generic-simd256 r5v128 r5v256 r5v512 r5v1024 r5v2048 r5v4096 r5v8192 r5v16384 EXTRA_DIST = hc2cbv.h hc2cfv.h codlist.mk simd.mk diff --git a/rdft/simd/r5v1024/Makefile.am b/rdft/simd/r5v1024/Makefile.am new file mode 100644 index 000000000..0ad983fb1 --- /dev/null +++ b/rdft/simd/r5v1024/Makefile.am @@ -0,0 +1,14 @@ +SIMD_HEADER=simd-support/simd-r5v1024.h + +include $(top_srcdir)/rdft/simd/codlist.mk +include $(top_srcdir)/rdft/simd/simd.mk + +if HAVE_R5V + +noinst_LTLIBRARIES = librdft_r5v1024_codelets.la +BUILT_SOURCES = $(EXTRA_DIST) +librdft_r5v1024_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif + + diff --git a/rdft/simd/r5v128/Makefile.am b/rdft/simd/r5v128/Makefile.am new file mode 100644 index 000000000..b2b2d0992 --- /dev/null +++ b/rdft/simd/r5v128/Makefile.am @@ -0,0 +1,14 @@ +SIMD_HEADER=simd-support/simd-r5v128.h + +include $(top_srcdir)/rdft/simd/codlist.mk +include $(top_srcdir)/rdft/simd/simd.mk + +if HAVE_R5V + +noinst_LTLIBRARIES = librdft_r5v128_codelets.la +BUILT_SOURCES = $(EXTRA_DIST) +librdft_r5v128_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif + + diff --git a/rdft/simd/r5v16384/Makefile.am b/rdft/simd/r5v16384/Makefile.am new file mode 100644 index 000000000..d42fdee7e --- /dev/null +++ b/rdft/simd/r5v16384/Makefile.am @@ -0,0 +1,14 @@ +SIMD_HEADER=simd-support/simd-r5v16384.h + +include $(top_srcdir)/rdft/simd/codlist.mk +include $(top_srcdir)/rdft/simd/simd.mk + +if HAVE_R5V + +noinst_LTLIBRARIES = librdft_r5v16384_codelets.la +BUILT_SOURCES = $(EXTRA_DIST) +librdft_r5v16384_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif + + diff --git a/rdft/simd/r5v2048/Makefile.am b/rdft/simd/r5v2048/Makefile.am new file mode 100644 index 000000000..a8712b9fa --- /dev/null +++ b/rdft/simd/r5v2048/Makefile.am @@ -0,0 +1,14 @@ +SIMD_HEADER=simd-support/simd-r5v2048.h + +include $(top_srcdir)/rdft/simd/codlist.mk +include $(top_srcdir)/rdft/simd/simd.mk + +if HAVE_R5V + +noinst_LTLIBRARIES = librdft_r5v2048_codelets.la +BUILT_SOURCES = $(EXTRA_DIST) +librdft_r5v2048_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif + + diff --git a/rdft/simd/r5v256/Makefile.am b/rdft/simd/r5v256/Makefile.am new file mode 100644 index 000000000..716f78fe4 --- /dev/null +++ b/rdft/simd/r5v256/Makefile.am @@ -0,0 +1,14 @@ +SIMD_HEADER=simd-support/simd-r5v256.h + +include $(top_srcdir)/rdft/simd/codlist.mk +include $(top_srcdir)/rdft/simd/simd.mk + +if HAVE_R5V + +noinst_LTLIBRARIES = librdft_r5v256_codelets.la +BUILT_SOURCES = $(EXTRA_DIST) +librdft_r5v256_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif + + diff --git a/rdft/simd/r5v4096/Makefile.am b/rdft/simd/r5v4096/Makefile.am new file mode 100644 index 000000000..a68bdccef --- /dev/null +++ b/rdft/simd/r5v4096/Makefile.am @@ -0,0 +1,14 @@ +SIMD_HEADER=simd-support/simd-r5v4096.h + +include $(top_srcdir)/rdft/simd/codlist.mk +include $(top_srcdir)/rdft/simd/simd.mk + +if HAVE_R5V + +noinst_LTLIBRARIES = librdft_r5v4096_codelets.la +BUILT_SOURCES = $(EXTRA_DIST) +librdft_r5v4096_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif + + diff --git a/rdft/simd/r5v512/Makefile.am b/rdft/simd/r5v512/Makefile.am new file mode 100644 index 000000000..61404b937 --- /dev/null +++ b/rdft/simd/r5v512/Makefile.am @@ -0,0 +1,14 @@ +SIMD_HEADER=simd-support/simd-r5v512.h + +include $(top_srcdir)/rdft/simd/codlist.mk +include $(top_srcdir)/rdft/simd/simd.mk + +if HAVE_R5V + +noinst_LTLIBRARIES = librdft_r5v512_codelets.la +BUILT_SOURCES = $(EXTRA_DIST) +librdft_r5v512_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif + + diff --git a/rdft/simd/r5v8192/Makefile.am b/rdft/simd/r5v8192/Makefile.am new file mode 100644 index 000000000..6c6e6a022 --- /dev/null +++ b/rdft/simd/r5v8192/Makefile.am @@ -0,0 +1,14 @@ +SIMD_HEADER=simd-support/simd-r5v8192.h + +include $(top_srcdir)/rdft/simd/codlist.mk +include $(top_srcdir)/rdft/simd/simd.mk + +if HAVE_R5V + +noinst_LTLIBRARIES = librdft_r5v8192_codelets.la +BUILT_SOURCES = $(EXTRA_DIST) +librdft_r5v8192_codelets_la_SOURCES = $(BUILT_SOURCES) + +endif + + diff --git a/simd-support/Makefile.am b/simd-support/Makefile.am index 853ecd2e2..0c4530e99 100644 --- a/simd-support/Makefile.am +++ b/simd-support/Makefile.am @@ -16,4 +16,5 @@ neon.c simd-neon.h \ lsx.c simd-lsx.h \ lasx.c simd-lasx.h \ simd-generic128.h simd-generic256.h \ -sve.c simd-maskedsve.h simd-maskedsve128.h simd-maskedsve256.h simd-maskedsve512.h simd-maskedsve1024.h simd-maskedsve2048.h +sve.c simd-maskedsve.h simd-maskedsve128.h simd-maskedsve256.h simd-maskedsve512.h simd-maskedsve1024.h simd-maskedsve2048.h \ +r5v.c simd-r5v.h simd-r5v128.h simd-r5v256.h simd-r5v512.h simd-r5v1024.h simd-r5v2048.h simd-r5v4096.h simd-r5v8192.h simd-r5v16384.h diff --git a/simd-support/generate_vtw.c b/simd-support/generate_vtw.c new file mode 100644 index 000000000..64488dd09 --- /dev/null +++ b/simd-support/generate_vtw.c @@ -0,0 +1,79 @@ +#include +#include +#include +#include + +unsigned int rp2(unsigned int size) { + size = size | (size >> 1); + size = size | (size >> 2); + size = size | (size >> 4); + size = size | (size >> 8); + size = size | (size >> 16); +// size = size | (size >> 32); + size = size - (size >> 1); + return size; +} + +int main(int argc, char **argv) { + if (argc < 3) { + printf("usage: %s \n", argv[0]); + exit(-1); + } + if (strncmp(argv[1], "VTW1", 4) == 0) { + unsigned int osize = atoi(argv[2]); + unsigned int size = rp2(osize); + if (osize != size) + exit(-4); + if (size < 1) + exit(-2); + if (size > 1024) + exit(-3); + printf("#define VTW1(v,x) "); + for (unsigned int i = 0 ; i < size ; i++) { + printf("{TW_CEXP, v+%d, x}%s%s", i, (i == size-1?"":","), ((i%4==3 && i!=size-1)?" \\\n\t":" ")); + } + printf("\n"); + } + if (strncmp(argv[1], "VTW2", 4) == 0) { + unsigned int osize = atoi(argv[2]); + unsigned int size = rp2(osize); + if (osize != size) + exit(-4); + if (size < 1) + exit(-2); + if (size > 1024) + exit(-3); + printf("#define VTW2(v,x) "); + for (unsigned int i = 0 ; i < size ; i++) { + printf("{TW_COS, v+%d, x}%s%s", i/2, ",", ((i%4==3)?" \\\n\t":" ")); + } + for (unsigned int i = 0 ; i < size ; i++) { + printf("{TW_SIN, v+%d, %sx}%s%s", i/2, (i%2==0?"-":""), (i == size-1?"":","), ((i%4==3 && i!=size-1)?" \\\n\t":" ")); + } + + printf("\n"); + } + if (strncmp(argv[1], "VTWS", 4) == 0) { + unsigned int osize = atoi(argv[2]); + unsigned int size = rp2(osize); + if (osize != size) + exit(-4); + if (size < 1) + exit(-2); + if (size > 1024) + exit(-3); + printf("#define VTWS(v,x) "); + for (unsigned int i = 0 ; i < size ; i++) { + printf("{TW_COS, v+%d, x}%s%s", i, ",", ((i%4==3)?" \\\n\t":" ")); + } + for (unsigned int i = 0 ; i < size ; i++) { + printf("{TW_SIN, v+%d, x}%s%s", i, (i == size-1?"":","), ((i%4==3 && i!=size-1)?" \\\n\t":" ")); + } + + printf("\n"); + } + + + + return 0; +} diff --git a/simd-support/generate_vtw.sh b/simd-support/generate_vtw.sh new file mode 100755 index 000000000..956db1d01 --- /dev/null +++ b/simd-support/generate_vtw.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +echo "/* auto-generated */" +for A in VTW1 VTW2 VTWS; do + echo "#if defined(REQ_$A)" + for X in 1 2 4 8 16 32 64 128 256 512 1024; do + echo "#if defined(VTW_SIZE) && VTW_SIZE == $X" + echo "#warning \"using $A with $X\"" + ./generate_vtw $A $X + echo "#endif // VTW_SIZE == $X" + done + echo "#endif // REQ_$A" +done diff --git a/simd-support/r5v.c b/simd-support/r5v.c new file mode 100644 index 000000000..8dbe94c63 --- /dev/null +++ b/simd-support/r5v.c @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2003, 2007-14 Matteo Frigo + * Copyright (c) 2003, 2007-14 Massachusetts Institute of Technology + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#include "kernel/ifftw.h" + +#if HAVE_R5V +#include + +/* don't know how to autodetect R5V; assume it is present */ + int X(have_simd_r5v)(int rs) + { + return __riscv_vsetvl_e64m1(rs/64) >= (rs/64); + } +#endif diff --git a/simd-support/simd-common.h b/simd-support/simd-common.h index 93965093f..c1b66443e 100644 --- a/simd-support/simd-common.h +++ b/simd-support/simd-common.h @@ -68,6 +68,14 @@ # define ALIGNMENT 16 # define ALIGNMENTA 16 # endif +#elif defined(HAVE_R5V) +# if defined(FFTW_SINGLE) +# define ALIGNMENT 8 +# define ALIGNMENTA 16 +# else +# define ALIGNMENT 16 +# define ALIGNMENTA 16 +# endif #endif #if HAVE_SIMD diff --git a/simd-support/simd-r5v-split.h b/simd-support/simd-r5v-split.h new file mode 100644 index 000000000..0e53834f8 --- /dev/null +++ b/simd-support/simd-r5v-split.h @@ -0,0 +1,402 @@ +/* + * Copyright (c) 2003, 2007-11 Matteo Frigo + * Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology + * + * RISC-V V support implemented by Romain Dolbeau. (c) 2019 Romain Dolbeau + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +#if defined(FFTW_LDOUBLE) || defined(FFTW_QUAD) +#error "RISC-V V vector instructions only works in single or double precision" +#endif + +#ifdef FFTW_SINGLE +# define DS(d,s) s /* single-precision option */ +# define TYPE(name) __riscv_ ## name ## _f32m1 +# define TYPE2(name) __riscv_ ## name ## _f32m1x2 +# define TYPEGET(name) __riscv_ ## name ## _f32m1x2_f32m1 +# define TYPESET(name) __riscv_ ## name ## _f32m1_f32m1x2 +# define TYPEINT(name) __riscv_ ## name ## _u32m1 +# define TYPEMASK(name) __riscv_ ## name ## _f32m1_m +# define TYPEINTERPRETF2U(name) __riscv_ ## name ## _f32m1_u32m1 +# define TYPEINTERPRETU2F(name) __riscv_ ## name ## _u32m1_f32m1 +#else /* !FFTW_SINGLE */ +# define DS(d,s) d /* double-precision option */ +# define TYPE(name) __riscv_ ## name ## _f64m1 +# define TYPE2(name) __riscv_ ## name ## _f64m1x2 +# define TYPEGET(name) __riscv_ ## name ## _f64m1x2_f64m1 +# define TYPESET(name) __riscv_ ## name ## _f64m1_f64m1x2 +# define TYPEINT(name) __riscv_ ## name ## _u64m1 +# define TYPEMASK(name) __riscv_ ## name ## _f64m1_m +# define TYPEINTERPRETF2U(name) __riscv_ ## name ## _f64m1_u64m1 +# define TYPEINTERPRETU2F(name) __riscv_ ## name ## _u64m1_f64m1 +#endif /* FFTW_SINGLE */ + +/* FIXME: this hardwire to 512 bits */ +#if R5V_SIZE == 16384 +#define VL DS(256, 512) /* SIMD complex vector length */ +#elif R5V_SIZE == 8192 +#define VL DS(128, 256) /* SIMD complex vector length */ +#elif R5V_SIZE == 4096 +#define VL DS(64, 128) /* SIMD complex vector length */ +#elif R5V_SIZE == 2048 +#define VL DS(32, 64) /* SIMD complex vector length */ +#elif R5V_SIZE == 1024 +#define VL DS(16, 32) /* SIMD complex vector length */ +#elif R5V_SIZE == 512 +#define VL DS(8, 16) /* SIMD complex vector length */ +#elif R5V_SIZE == 256 +#define VL DS(4, 8) /* SIMD complex vector length */ +#elif R5V_SIZE == 128 +#define VL DS(2, 4) /* SIMD complex vector length */ +#else /* R5V_SIZE */ +#error "R5V_SIZE must be a power of 2 between 128 and 16384 bits" +#endif /* R5V_SIZE */ + +#define SIMD_VSTRIDE_OKA(x) ((x) == 2) +#define SIMD_STRIDE_OKPAIR SIMD_STRIDE_OK + +#if defined(__GNUC__) && !defined(__riscv_vector) /* sanity check */ +#error "compiling simd-r5v.h without RISC-V V support" +#endif + +#include + +typedef DS(vfloat64m1x2_t, vfloat32m1x2_t) V; +typedef DS(vfloat64m1_t, vfloat32m1_t) HALFV; +typedef DS(vuint64m1_t, vuint32m1_t) Vint; +typedef DS(vbool64_t, vbool32_t) Vmask; + +/* +static inline V VLIT(const R re, const R im) { + V v; + v.v0 = TYPE(vfmv_v_f)(re, VL); + v.v1 = TYPE(vfmv_v_f)(im, VL); + return v; +} +*/ + +static inline V VLIT1(const R val) { + HALFV v0 = TYPE(vfmv_v_f)(val, VL); + V v = TYPE2(vcreate_v)(v0, v0); + return v; +} + +#define LDK(x) x +#define DVK(var, val) V var = VLIT1(val) +//#define VZERO VLIT1(DS(0.,0.f)) +//#define VRONE VLIT(DS(1.,1.f),DS(0.,0.f)) +//#define VCI VLIT(DS(0.,0.f),DS(1.,1.f)) +//#define VCONEMI VLIT(DS(1.,1.f),DS(-1.,-1.f)) +//#define VONE VLIT1(DS(1.,1.f)) +//#define VMINUSONE VLIT1(DS(-1.,-1.f)) + +static inline V VDUPL(const V x) { + HALFV v0 = TYPEGET(vget_v)(x, 0); + //HALFV v1 = TYPEGET(vget_v)(x, 1); + V v = TYPE2(vcreate_v)(v0, v0); + return v; +} +static inline V VDUPH(const V x) { + //HALFV v0 = TYPEGET(vget_v)(x, 0); + HALFV v1 = TYPEGET(vget_v)(x, 1); + V v = TYPE2(vcreate_v)(v1, v1); + return v; +} + +static inline V FLIP_RI(const V x) { + HALFV v0 = TYPEGET(vget_v)(x, 0); + HALFV v1 = TYPEGET(vget_v)(x, 1); + V v = TYPE2(vcreate_v)(v1, v0); + return v; +} + +static inline V VCONJ(const V x) { + HALFV v0 = TYPEGET(vget_v)(x, 0); + HALFV v1 = TYPEGET(vget_v)(x, 1); + V v = TYPE2(vcreate_v)(v0, TYPE(vfneg_v)(v1, VL)); + return v; +} + +static inline V VBYI(const V x) +{ + V v; + v = VCONJ(x); + v = FLIP_RI(v); + return v; +} + +static inline V VNEG(const V x) { + HALFV v0 = TYPEGET(vget_v)(x, 0); + HALFV v1 = TYPEGET(vget_v)(x, 1); + V v = TYPE2(vcreate_v)(TYPE(vfneg_v)(v0, VL), TYPE(vfneg_v)(v1, VL)); + return v; +} + +#define BINOP(X,x) \ + static inline V X(const V a, const V b) { \ + HALFV av0 = TYPEGET(vget_v)(a, 0); \ + HALFV av1 = TYPEGET(vget_v)(a, 1); \ + HALFV bv0 = TYPEGET(vget_v)(b, 0); \ + HALFV bv1 = TYPEGET(vget_v)(b, 1); \ + V v = TYPE2(vcreate_v)(TYPE(x)(av0, bv0, VL), TYPE(x)(av1, bv1, VL)); \ + return v; \ + } + +BINOP(VADD,vfadd_vv) +BINOP(VSUB,vfsub_vv) +BINOP(VMUL,vfmul_vv) + +#define TERNOP(X,x) \ + static inline V X(const V a, const V b, const V c) { \ + HALFV av0 = TYPEGET(vget_v)(a, 0); \ + HALFV av1 = TYPEGET(vget_v)(a, 1); \ + HALFV bv0 = TYPEGET(vget_v)(b, 0); \ + HALFV bv1 = TYPEGET(vget_v)(b, 1); \ + HALFV cv0 = TYPEGET(vget_v)(c, 0); \ + HALFV cv1 = TYPEGET(vget_v)(c, 1); \ + V v = TYPE2(vcreate_v)(TYPE(x)(cv0, av0, bv0, VL), TYPE(x)(cv1, av1, bv1, VL)); \ + return v; \ +} + +TERNOP(VFMA,vfmacc_vv) // or vfmadd +TERNOP(VFMS,vfmsac_vv) +TERNOP(VFNMS,vfnmsac_vv) + +#define VFMAI(b, c) VADD(c, VBYI(b)) // fixme: improve +#define VFNMSI(b, c) VSUB(c, VBYI(b)) // fixme: improve +#define VFMACONJ(b,c) VADD(VCONJ(b),c) // fixme: improve +#define VFMSCONJ(b,c) VSUB(VCONJ(b),c) // fixme: improve +#define VFNMSCONJ(b,c) VSUB(c, VCONJ(b)) // fixme: improve + +static inline V VZMUL(V tx, V sr) +{ + V tr = VDUPL(tx); + V ti = VDUPH(tx); + tr = VMUL(sr, tr); + sr = VBYI(sr); + return VFMA(ti, sr, tr); +} + +static inline V VZMULJ(V tx, V sr) +{ + V tr = VDUPL(tx); + V ti = VDUPH(tx); + tr = VMUL(sr, tr); + sr = VBYI(sr); + return VFNMS(ti, sr, tr); +} + +static inline V VZMULI(V tx, V sr) // fixme: improve +{ + V tr = VDUPL(tx); + V ti = VDUPH(tx); + ti = VMUL(ti, sr); + sr = VBYI(sr); + return VFMS(tr, sr, ti); +} + +static inline V VZMULIJ(V tx, V sr) // fixme: improve +{ + V tr = VDUPL(tx); + V ti = VDUPH(tx); + ti = VMUL(ti, sr); + sr = VBYI(sr); + return VFMA(tr, sr, ti); +} + +static inline V LDA(const R *x, INT ivs, const R *aligned_like) { + (void)aligned_like; /* UNUSED */ + (void)ivs; /* UNUSED */ +/* can be done with Zvlsseg instead */ +#if 0 + HALFV v0 = TYPE(vlse64_v)(x, 2*sizeof(R), VL); + HALFV v1 = TYPE(vlse64_v)(x+1, 2*sizeof(R), VL); + V v = TYPE2(vcreate_v)(v0, v1); +#else + V v; +#ifdef FFTW_SINGLE + v = TYPE2(vlseg2e32_v)(x, VL); +#else !FFTW_SINGLE + v = TYPE2(vlseg2e64_v)(x, VL); +#endif +#endif + return v; +} +static inline void STA(R *x, const V v, INT ovs, const R *aligned_like) { + (void)aligned_like; /* UNUSED */ + (void)ovs; /* UNUSED */ +/* can be done with Zvlsseg instead */ +#if 0 + HALFV v0 = TYPEGET(vget_v)(v, 0); + HALFV v1 = TYPEGET(vget_v)(v, 1); + TYPE(vsse64_v)(x, 2*sizeof(R), v0, VL); + TYPE(vsse64_v)(x+1, 2*sizeof(R), v1, VL); +#else +#ifdef FFTW_SINGLE + TYPE2(vsseg2e32_v)(x, v, VL); +#else !FFTW_SINGLE + TYPE2(vsseg2e64_v)(x, v, VL); +#endif +#endif +} + +#if FFTW_SINGLE + +static inline V LDu(const R *x, INT ivs, const R *aligned_like) +{ + (void)aligned_like; /* UNUSED */ + V v = TYPE2(vlsseg2e32_v)(x, ivs*sizeof(R), VL); + return v; +} + +static inline void STu(R *x, V v, INT ovs, const R *aligned_like) +{ + (void)aligned_like; /* UNUSED */ + TYPE2(vssseg2e32_v)(x, ovs*sizeof(R), v, ovs? VL : 1); +} + +#else /* !FFTW_SINGLE */ + +static inline V LDu(const R *x, INT ivs, const R *aligned_like) +{ + (void)aligned_like; /* UNUSED */ +#if 0 + HALFV v0 = TYPE(vlse64_v)(x, ivs*sizeof(R), VL); + HALFV v1 = TYPE(vlse64_v)(x+1, ivs*sizeof(R), VL); + V v = TYPE2(vcreate_v)(v0, v1); +#else + V v = TYPE2(vlsseg2e64_v)(x, ivs*sizeof(R), VL); +#endif + return v; +} + +static inline void STu(R *x, V v, INT ovs, const R *aligned_like) +{ + (void)aligned_like; /* UNUSED */ +#if 0 + HALFV v0 = TYPEGET(vget_v)(v, 0); + HALFV v1 = TYPEGET(vget_v)(v, 1); + TYPE(vsse64_v)(x, ovs*sizeof(R), v0, VL); // fixme: check ovs == 0 ... + TYPE(vsse64_v)(x+1, ovs*sizeof(R), v1, VL); +#else + TYPE2(vssseg2e64_v)(x, ovs*sizeof(R), v, ovs? VL : 1); +#endif +} + +#endif /* FFTW_SINGLE */ + +#define LD LDu +#define ST STu + +#ifdef FFTW_SINGLE +#define STM2(x, v, ovs, a) ST(x, v, ovs, a) +#define STN2(x, v0, v1, ovs) /* nop */ + +static inline void STM4(R *x, V v, INT ovs, const R *aligned_like) +{ + (void)aligned_like; /* UNUSED */ + HALFV v0 = TYPEGET(vget_v)(v, 0); + HALFV v1 = TYPEGET(vget_v)(v, 1); + TYPE(vsse32_v)(x, 2*ovs*sizeof(R), v0, VL); // fixme: check ovs == 0 ... + TYPE(vsse32_v)(x + ovs, 2*ovs*sizeof(R), v1, VL); +} +#define STN4(x, v0, v1, v2, v3, ovs) /* no-op */ +#else /* !FFTW_SINGLE */ +#define STM2(x, v, ovs, a) ST(x, v, ovs, a) +#define STN2(x, v0, v1, ovs) /* nop */ + +static inline void STM4(R *x, V v, INT ovs, const R *aligned_like) +{ + (void)aligned_like; /* UNUSED */ + HALFV v0 = TYPEGET(vget_v)(v, 0); + HALFV v1 = TYPEGET(vget_v)(v, 1); + TYPE(vsse64_v)(x, 2*ovs*sizeof(R), v0, VL); // fixme: check ovs == 0 ... + TYPE(vsse64_v)(x + ovs, 2*ovs*sizeof(R), v1, VL); + // 'segment' are dense so this wouldn't work + // it would put (re,im) next to each other every ovs*sizeof(R) + // it is STu + //TYPE2(vssseg2e64_v)(x, ovs*sizeof(R), v, VL); + // it could work with a vfloat64m2_t indexed store ? + // TYPEM2(vsse64_v)(x, ovs*sizeof(R), v_as_m2, VL * 2); + +} +// maybe would be better to do STN4 with two 4-wide segment store? +#define STN4(x, v0, v1, v2, v3, ovs) /* no-op */ +#endif /* FFTW_SINGLE */ + +/* twiddle storage #1: compact, slower */ +#define REQ_VTW1 +#define VTW_SIZE VL +#include "vtw.h" +#define TWVL1 (VL) +#undef VTW_SIZE +#undef REQ_VTW1 + +static inline V BYTW1(const R *t, V sr) +{ + return VZMUL(LDA(t, 2, t), sr); +} + +static inline V BYTWJ1(const R *t, V sr) +{ + return VZMULJ(LDA(t, 2, t), sr); +} + +/* twiddle storage #2: twice the space, faster (when in cache) */ +#define REQ_VTW2 +#define VTW_SIZE (2*VL) +#include "vtw.h" +#define TWVL2 (2*VL) +#undef VTW_SIZE +#undef REQ_VTW2 + +static inline V BYTW2(const R *t, V sr) +{ + V si = FLIP_RI(sr); + V ti = LDA(t + 2*VL, 2, t + 4*VL); + V tr = LDA(t, 2, t); + return VFMA(tr, sr, VMUL(ti, si)); +} + +static inline V BYTWJ2(const R *t, V sr) +{ + V si = FLIP_RI(sr); + V ti = LDA(t + 2*VL, 2, t + 4*VL); + V tr = LDA(t, 2, t); + return VFNMS(ti, si, VMUL(tr, sr)); +} + +/* twiddle storage #3 */ +#define VTW3(v,x) VTW1(v,x) +#define TWVL3 TWVL1 + +/* twiddle storage for split arrays */ +#define REQ_VTWS +#define VTW_SIZE (2*VL) +#include "vtw.h" +#define TWVLS (2*VL) +#undef VTW_SIZE +#undef REQ_VTWS + +#define VLEAVE() /* nothing */ + +#include "simd-common.h" diff --git a/simd-support/simd-r5v.h b/simd-support/simd-r5v.h new file mode 100644 index 000000000..a8ec0a22f --- /dev/null +++ b/simd-support/simd-r5v.h @@ -0,0 +1,473 @@ +/* + * Copyright (c) 2003, 2007-11 Matteo Frigo + * Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology + * + * RISC-V V support implemented by Romain Dolbeau. (c) 2019 Romain Dolbeau + * Updated to standard intrinsics by Romain Dolbeau. (c) 2024 Romain Dolbeau + * Some of the updated macros originally by Zheng Shuo. (c) 2022 Zheng Shuo + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +#if defined(FFTW_LDOUBLE) || defined(FFTW_QUAD) +#error "RISC-V V vector instructions only works in single or double precision" +#endif + +#ifdef FFTW_SINGLE +# define DS(d,s) s /* single-precision option */ +# define TYPE(name) __riscv_ ## name ## _f32m1 +# define TYPEINT(name) __riscv_ ## name ## _u32m1 +# define TYPEINT64(name) __riscv_ ## name ## _u64m2 +# define TYPEMASK(name) __riscv_ ## name ## _f32m1_m +# define TYPEMERGEDMASK(name) __riscv_ ## name ## _f32m1_mu +# define TYPEINTERPRETF2U(name) __riscv_ ## name ## _f32m1_u32m1 +# define TYPEINTERPRETU2F(name) __riscv_ ## name ## _u32m1_f32m1 +#else /* !FFTW_SINGLE */ +# define DS(d,s) d /* double-precision option */ +# define TYPE(name) __riscv_ ## name ## _f64m1 +# define TYPEINT(name) __riscv_ ## name ## _u64m1 +# define TYPEINT64(name) __riscv_ ## name ## _u64m1 +# define TYPEMASK(name) __riscv_ ## name ## _f64m1_m +# define TYPEMERGEDMASK(name) __riscv_ ## name ## _f64m1_mu +# define TYPEINTERPRETF2U(name) __riscv_ ## name ## _f64m1_u64m1 +# define TYPEINTERPRETU2F(name) __riscv_ ## name ## _u64m1_f64m1 +#endif /* FFTW_SINGLE */ + +#if R5V_SIZE == 16384 +#define VL DS(128, 256) /* SIMD complex vector length */ +#elif R5V_SIZE == 8192 +#define VL DS(64, 128) /* SIMD complex vector length */ +#elif R5V_SIZE == 4096 +#define VL DS(32, 64) /* SIMD complex vector length */ +#elif R5V_SIZE == 2048 +#define VL DS(16, 32) /* SIMD complex vector length */ +#elif R5V_SIZE == 1024 +#define VL DS(8, 16) /* SIMD complex vector length */ +#elif R5V_SIZE == 512 +#define VL DS(4, 8) /* SIMD complex vector length */ +#elif R5V_SIZE == 256 +#define VL DS(2, 4) /* SIMD complex vector length */ +#elif R5V_SIZE == 128 +#define VL DS(1, 2) /* SIMD complex vector length */ +#else /* R5V_SIZE */ +#error "R5V_SIZE must be a power of 2 between 128 and 16384 bits" +#endif /* R5V_SIZE */ + +#define SIMD_VSTRIDE_OKA(x) ((x) == 2) +#define SIMD_STRIDE_OKPAIR SIMD_STRIDE_OK + +#if defined(__GNUC__) && !defined(__riscv_vector) /* sanity check */ +#error "compiling simd-r5v.h without RISC-V V support" +#endif + +#include + +typedef DS(vfloat64m1_t, vfloat32m1_t) V; +typedef DS(vuint64m1_t, vuint32m1_t) Vint; +typedef DS(vuint64m1_t, vuint64m2_t) Vint64; +typedef DS(vbool64_t, vbool32_t) Vmask; +#define INT2MASK(imask) DS(__riscv_vmsne_vx_u64m1_b64, __riscv_vmsne_vx_u32m1_b32)(imask, 0, 2*VL) + +/* unused */ +/* +#ifdef FFTW_SINGLE +#warning "VLIT F32 perhaps should broadcast 64 bits" +#endif +static inline V VLIT(const R re, const R im) { + Vint idx = TYPEINT(vid_v)(2*VL); // (0, 1, 2, 3, ...) + Vint vone = TYPEINT(vmv_v_x)(1, 2*VL); + V vre = TYPE(vfmv_v_f)(re, 2*VL); + V vim = TYPE(vfmv_v_f)(im, 2*VL); + Vint mask = TYPEINT(vand_vv)(idx, vone, 2*VL); // (0, 1, 0, 1, 0, ...) + return TYPE(vmerge_vvm)(vre, vim, INT2MASK(mask), 2*VL); +} +*/ + +#define VLIT1(val) TYPE(vfmv_v_f)(val, 2*VL) +#define LDK(x) x +#define DVK(var, val) V var = VLIT1(val) +#define VZERO VLIT1(DS(0.,0.f)) +/* unused */ +//#define VRONE VLIT(DS(1.,1.f),DS(0.,0.f)) +//#define VCI VLIT(DS(0.,0.f),DS(1.,1.f)) +//#define VCONEMI VLIT(DS(1.,1.f),DS(-1.,-1.f)) +//#define VONE VLIT1(DS(1.,1.f)) +//#define VMINUSONE VLIT1(DS(-1.,-1.f)) +// generate (all 1, 0, all 1, 0, ...) to split real and imagine parts +#define VPARTSPLIT TYPEINT(vsub_vx)(TYPEINT(vand_vx)(TYPEINT(vid_v)(2*VL), 1, 2*VL), 1, 2*VL) + +static inline V VDUPL(const V x) { + Vint idx = TYPEINT(vid_v)(2*VL); // (0, 1, 2, 3, ...) + //Vint vnotone = TYPEINT(vmv_v_x)(DS(~1ull,~1), 2*VL); + Vint hidx = TYPEINT(vand_vx)(idx, DS(~1ull,~1), 2*VL); // (0, 0, 2, 2, ...) + return TYPE(vrgather_vv)(x, hidx, 2*VL); +} +static inline V VDUPH(const V x) { + Vint idx = TYPEINT(vid_v)(2*VL); // (0, 1, 2, 3, ...) + //Vint vone = TYPEINT(vmv_v_x)(1, 2*VL); + Vint hidx = TYPEINT(vor_vx)(idx, 1, 2*VL); // (1, 1, 3, 3, ...) + return TYPE(vrgather_vv)(x, hidx, 2*VL); +} + +static inline V FLIP_RI(const V x) { + Vint idx = TYPEINT(vid_v)(2*VL); // (0, 1, 2, 3, ...) + //Vint vone = TYPEINT(vmv_v_x)(1, 2*VL); + Vint hidx = TYPEINT(vxor_vx)(idx, 1, 2*VL); // (1, 0, 3, 2, ...) + return TYPE(vrgather_vv)(x, hidx, 2*VL); +} + +#define VNEG(a) TYPE(vfsgnjn_vv)(a,a,2*VL) +#define VADD(a,b) TYPE(vfadd_vv)(a,b,2*VL) +#define VSUB(a,b) TYPE(vfsub_vv)(a,b,2*VL) +#define VMUL(a,b) TYPE(vfmul_vv)(a,b,2*VL) +#define VFMA(a, b, c) TYPE(vfmacc_vv)(c,a,b,2*VL) // or vfmadd +#define VFMS(a, b, c) TYPE(vfmsac_vv)(c,a,b,2*VL) +#define VFNMS(a, b, c) TYPE(vfnmsac_vv)(c,a,b,2*VL) // or vfnmsub +#define VFMAI(b, c) VADD(c, VBYI(b)) // fixme: improve +#define VFNMSI(b, c) VSUB(c, VBYI(b)) // fixme: improve +#define VFMACONJ(b,c) VADD(VCONJ(b),c) // fixme: improve +#define VFMSCONJ(b,c) VFMACONJ(b,VNEG(c)) // fixme: improve +#define VFNMSCONJ(b,c) VNEG(VFMSCONJ(b,c)) // fixme: improve + +#if 1 +static inline V VCONJ(const V x) { + Vint idx = TYPEINT(vid_v)(2*VL); // (0, 1, 2, 3, ...) + //Vint vone = TYPEINT(vmv_v_x)(1, 2*VL); + Vint hidx = TYPEINT(vand_vx)(idx, 1, 2*VL); // (0, 1, 0, 1, 0, 1) + //return TYPEMASK(vfsgnjn_vv)(x, x, x, INT2MASK(hidx), 2*VL); + return TYPEMERGEDMASK(vfsgnjn_vv)(INT2MASK(hidx), x, x, x, 2*VL); +} +#else +static inline V VCONJ(const V x) +{ + Vint partr = VPARTSPLIT; // (all 1, 0, all 1, 0, ...) + V xl = TYPEINTERPRETU2F(vreinterpret_v)(TYPEINT(vand_vv)(TYPEINTERPRETF2U(vreinterpret_v)(x), partr, 2*VL)); // set odd elements to 0 + Vint parti = TYPEINT(vnot_v)(partr, 2*VL); // (0, all 1, 0, all 1, ...) + V xh = TYPEINTERPRETU2F(vreinterpret_v)(TYPEINT(vand_vv)(TYPEINTERPRETF2U(vreinterpret_v)(x), parti, 2*VL)); // set even elements to 0 + return VADD(xl, VNEG(xh)); +} +#endif + +/* can probably be done better */ +static inline V VBYI(V x) +{ + x = VCONJ(x); + x = FLIP_RI(x); + return x; +} + +#if 1 +static inline V VZMUL(V tx, V sr) +{ + V tr = VDUPL(tx); + V ti = VDUPH(tx); + tr = VMUL(sr, tr); + sr = VBYI(sr); + return VFMA(ti, sr, tr); +} + +static inline V VZMULJ(V tx, V sr) +{ + V tr = VDUPL(tx); + V ti = VDUPH(tx); + tr = VMUL(sr, tr); + sr = VBYI(sr); + return VFNMS(ti, sr, tr); +} + +static inline V VZMULI(V tx, V sr) +{ + V tr = VDUPL(tx); + V ti = VDUPH(tx); + ti = VMUL(ti, sr); + sr = VBYI(sr); + return VFMS(tr, sr, ti); +} + +static inline V VZMULIJ(V tx, V sr) +{ + V tr = VDUPL(tx); + V ti = VDUPH(tx); + ti = VMUL(ti, sr); + sr = VBYI(sr); + return VFMA(tr, sr, ti); +} +#else +static inline V VZMUL(V tx, V sr) // fixme: improve +{ + V tr; + V ti; + Vint idx = TYPEINT(vid_v)(2*VL); // (0, 1, 2, 3, ...) + //Vint vnotone = TYPEINT(vmv_v_x)(DS(~1ull,~1), 2*VL); + //Vint vone = TYPEINT(vmv_v_x)(1, 2*VL); + Vint hidx; + + hidx = TYPEINT(vand_vx)(idx, DS(-2ull,-2), 2*VL); // (0, 0, 2, 2, ...) + tr = TYPE(vrgather_vv)(tx, hidx, 2*VL); // Real, Real of tx + hidx = TYPEINT(vor_vx)(idx, 1, 2*VL); // (1, 1, 3, 3, ...) // could be hidx + vone, ... + ti = TYPE(vrgather_vv)(tx, hidx, 2*VL); // Imag, Imag of tx + tr = TYPE(vfmul_vv)(sr,tr,2*VL); // (Real, Real)[tx] * (Real,Imag)[sr] + hidx = TYPEINT(vand_vx)(idx, 1, 2*VL); // (0, 1, 0, 1, 0, 1) + //sr = TYPEMASK(vfsgnjn)(sr, sr, sr, INT2MASK(hidx), 2*VL); // conjugate of sr + sr = TYPEMERGEDMASK(vfsgnjn_vv)(INT2MASK(hidx), sr, sr, sr, 2*VL); // conjugate of sr + hidx = TYPEINT(vxor_vx)(idx, 1, 2*VL); // (1, 0, 3, 2, ...) + sr = TYPE(vrgather_vv)(sr, hidx, 2*VL); // Imag, Real of (conjugate of) sr + return TYPE(vfmacc_vv)(tr,ti,sr,2*VL); // (-Imag, Real)[sr] * (Imag, Imag)[tx] + (Real, Real)[tx] * (Real,Imag)[sr] +} + +static inline V VZMULJ(V tx, V sr) // fixme: improve +{ + V tr = VDUPL(tx); + V ti = VDUPH(tx); + tr = VMUL(sr, tr); + sr = VBYI(sr); + return VFNMS(ti, sr, tr); +} + +static inline V VZMULI(V tx, V sr) // fixme: improve +{ + V tr = VDUPL(tx); + V ti = VDUPH(tx); + ti = VMUL(ti, sr); + sr = VBYI(sr); + return VFMS(tr, sr, ti); +} + +static inline V VZMULIJ(V tx, V sr) // fixme: improve +{ + V tr = VDUPL(tx); + V ti = VDUPH(tx); + ti = VMUL(ti, sr); + sr = VBYI(sr); + return VFMA(tr, sr, ti); +} +#endif + +static inline V LDA(const R *x, INT ivs, const R *aligned_like) { + (void)aligned_like; /* UNUSED */ + (void)ivs; /* UNUSED */ + return DS(__riscv_vle64_v_f64m1, __riscv_vle32_v_f32m1)(x, 2*VL); +} +static inline void STA(R *x, V v, INT ovs, const R *aligned_like) { + (void)aligned_like; /* UNUSED */ + (void)ovs; /* UNUSED */ + DS(__riscv_vse64_v_f64m1,__riscv_vse32_v_f32m1)(x,v,2*VL); +} + +#if FFTW_SINGLE +static inline V LDu(const R *x, INT ivs, const R *aligned_like) +{ + (void)aligned_like; /* UNUSED */ +#if 0 +/* "If the vector offset elements are narrower than XLEN, they are zero-extended to XLEN " + => so negative ivs don't work in F32, as the negative i32 indices are zero-extended, not sign-extended... + in this case, we need 64-bits indices (in LMUL=2) + */ + Vint64 idx = TYPEINT64(vid_v)(2*VL); // (0, 1, 2, 3, ...) + //Vint vone = TYPEINT64(vmv_v_x)(1, 2*VL); + Vint64 hidx = TYPEINT64(vsrl_vx)(idx, 1, 2*VL); // (0, 0, 1, 1, ...) + hidx = TYPEINT64(vmul_vx)(hidx, sizeof(R)*ivs, 2*VL); + Vint64 idx2 = TYPEINT64(vand_vx)(idx, 1, 2*VL); // (0, 1, 0, 1, ...) + Vint64 hidx2 = TYPEINT64(vmul_vx)(idx2, sizeof(R), 2*VL); + hidx = TYPEINT64(vadd_vv)(hidx, hidx2, 2*VL); + return TYPE(vluxei64_v)(x, hidx, 2*VL); +#else + /* no intrinsics to convert directly between float vector of different SEW... + so we get this not-very-nice sequence of reinterpret + IN OUT */ + return(__riscv_vreinterpret_v_u32m1_f32m1( + __riscv_vreinterpret_v_u64m1_u32m1( + __riscv_vreinterpret_v_f64m1_u64m1(__riscv_vlse64_v_f64m1((const double*)x, sizeof(R)*ivs, VL))))); +#endif +} + +static inline void STu(R *x, V v, INT ovs, const R *aligned_like) +{ + (void)aligned_like; /* UNUSED */ +#if 0 +/* "If the vector offset elements are narrower than XLEN, they are zero-extended to XLEN " + => so negative ovs don't work in F32, as the negative i32 indices are zero-extended, not sign-extended... + in this case, we need 64-bits indices (in LMUL=2) + */ + Vint64 idx = TYPEINT64(vid_v)(2*VL); // (0, 1, 2, 3, ...) + //Vint vone = TYPEINT64(64vmv_v_x)(1, 2*VL); + Vint64 idx2 = TYPEINT64(vand_vx)(idx, 1, 2*VL); // (0, 1, 0, 1, ...) + if (ovs==0) { // FIXME: hack for extra_iter hack support + v = TYPE(vrgather_vv)(v, idx2, 2*VL);// FIXME: f32 gather takes i32 indices + } + Vint64 hidx = TYPEINT64(vsrl_vx)(idx, 1, 2*VL); // (0, 0, 1, 1, ...) + hidx = TYPEINT64(vmul_vx)(hidx, sizeof(R)*ovs, 2*VL); + Vint64 hidx2 = TYPEINT64(vmul_vx)(idx2, sizeof(R), 2*VL); + hidx = TYPEINT64(vadd_vv)(hidx, hidx2, 2*VL); + TYPE(vsuxei64_v)x, hidx, v, 2*VL); +#else + /* no intrinsics to convert directly between float vector of different SEW... + so we get this not-very-nice sequence of reinterpret + IN OUT */ + __riscv_vsse64_v_f64m1((double*)x, sizeof(R)*ovs, __riscv_vreinterpret_v_u64m1_f64m1( + __riscv_vreinterpret_v_u32m1_u64m1( + __riscv_vreinterpret_v_f32m1_u32m1(v))), ovs ? VL : 1); +#endif +} + +#else /* !FFTW_SINGLE */ + +static inline V LDu(const R *x, INT ivs, const R *aligned_like) +{ + (void)aligned_like; /* UNUSED */ + Vint64 idx = TYPEINT64(vid_v)(2*VL); // (0, 1, 2, 3, ...) + //Vint64 vone = TYPEINT64(vmv_v_x)(1, 2*VL); + Vint64 hidx = TYPEINT64(vsrl_vx)(idx, 1, 2*VL); // (0, 0, 1, 1, ...) + hidx = TYPEINT64(vmul_vx)(hidx, sizeof(R)*ivs, 2*VL); + Vint64 idx2 = TYPEINT64(vand_vx)(idx, 1, 2*VL); // (0, 1, 0, 1, ...) + Vint64 hidx2 = TYPEINT64(vmul_vx)(idx2, sizeof(R), 2*VL); + hidx = TYPEINT64(vadd_vv)(hidx, hidx2, 2*VL); + return TYPE(vluxei64_v)(x, hidx, 2*VL); +} + +static inline void STu(R *x, V v, INT ovs, const R *aligned_like) +{ + (void)aligned_like; /* UNUSED */ + Vint64 idx = TYPEINT64(vid_v)(2*VL); // (0, 1, 2, 3, ...) + //Vint vone = TYPEINT64(vmv_v_x)(1, 2*VL); + Vint64 idx2 = TYPEINT64(vand_vx)(idx, 1, 2*VL); // (0, 1, 0, 1, ...) + /* if (ovs==0) { // FIXME: hack for extra_iter hack support */ + /* v = TYPE(vrgather_vv)(v, idx2, 2*VL); */ + /* } */ + Vint64 hidx = TYPEINT64(vsrl_vx)(idx, 1, 2*VL); // (0, 0, 1, 1, ...) + hidx = TYPEINT64(vmul_vx)(hidx, sizeof(R)*ovs, 2*VL); + Vint64 hidx2 = TYPEINT64(vmul_vx)(idx2, sizeof(R), 2*VL); + hidx = TYPEINT64(vadd_vv)(hidx, hidx2, 2*VL); + TYPE(vsuxei64_v)(x, hidx, v, ovs ? 2*VL : 2); +} + +#endif /* FFTW_SINGLE */ + +#define LD LDu +#define ST STu + +#ifdef FFTW_SINGLE +#define STM2(x, v, ovs, a) ST(x, v, ovs, a) +#define STN2(x, v0, v1, ovs) /* nop */ +#if 0 +static inline void STM4(R *x, V v, INT ovs, const R *aligned_like) +{ + (void)aligned_like; /* UNUSED */ + (void)aligned_like; /* UNUSED */ +#if 0 + Vint64 idx = TYPEINT64(vid_v)(2*VL); // (0, 1, 2, 3, ...) + Vint64 hidx = TYPEINT64(vmul_vx)(idx, sizeof(R)*ovs, 2*VL); + TYPE(vsuxei64_v)(x, hidx, v, 2*VL); +#else + TYPE(vsse32_v)(x, sizeof(R)*ovs, v, 2*VL); +#endif +} +#define STN4(x, v0, v1, v2, v3, ovs) /* no-op */ +#else +#define STM4(x,v,ovs,aligned_like) /* no-op */ +static inline void STN4(R *x, V v0, V v1, V v2, V v3, INT ovs) { + vfloat32m1x4_t v = __riscv_vcreate_v_f32m1x4(v0, v1, v2, v3); + __riscv_vssseg4e32_v_f32m1x4(x, ovs*sizeof(R), v, 2*VL); +} +#endif +#else /* !FFTW_SINGLE */ +#define STM2(x, v, ovs, a) ST(x, v, ovs, a) +#define STN2(x, v0, v1, ovs) /* nop */ + +#if 0 +static inline void STM4(R *x, V v, INT ovs, const R *aligned_like) +{ + (void)aligned_like; /* UNUSED */ + (void)aligned_like; /* UNUSED */ +#if 0 + Vint64 idx = TYPEINT64(vid_v)(2*VL); // (0, 1, 2, 3, ...) + Vint64 hidx = TYPEINT64(vmul_vx)(idx, sizeof(R)*ovs, 2*VL); + TYPE(vsuxei64_v)(x, hidx, v, 2*VL); +#else + TYPE(vsse64_v)(x, sizeof(R)*ovs, v, 2*VL); +#endif +} +#define STN4(x, v0, v1, v2, v3, ovs) /* no-op */ +#else +#define STM4(x,v,ovs,aligned_like) /* no-op */ +static inline void STN4(R *x, V v0, V v1, V v2, V v3, INT ovs) { + vfloat64m1x4_t v = __riscv_vcreate_v_f64m1x4(v0, v1, v2, v3); + __riscv_vssseg4e64_v_f64m1x4(x, ovs*sizeof(R), v, 2*VL); +} +#endif +#endif /* FFTW_SINGLE */ + +/* twiddle storage #1: compact, slower */ +#define REQ_VTW1 +#define VTW_SIZE VL +#include "vtw.h" +#define TWVL1 (VL) +#undef VTW_SIZE +#undef REQ_VTW1 + +static inline V BYTW1(const R *t, V sr) +{ + return VZMUL(LDA(t, 2, t), sr); +} + +static inline V BYTWJ1(const R *t, V sr) +{ + return VZMULJ(LDA(t, 2, t), sr); +} + +/* twiddle storage #2: twice the space, faster (when in cache) */ +#define REQ_VTW2 +#define VTW_SIZE (2*VL) +#include "vtw.h" +#define TWVL2 (2*VL) +#undef VTW_SIZE +#undef REQ_VTW2 + +static inline V BYTW2(const R *t, V sr) +{ + V si = FLIP_RI(sr); + V ti = LDA(t + 2*VL, 2, t + 4*VL); + V tr = LDA(t, 2, t); + return VFMA(tr, sr, VMUL(ti, si)); +} + +static inline V BYTWJ2(const R *t, V sr) +{ + V si = FLIP_RI(sr); + V ti = LDA(t + 2*VL, 2, t + 4*VL); + V tr = LDA(t, 2, t); + return VFNMS(ti, si, VMUL(tr, sr)); +} + +/* twiddle storage #3 */ +#define VTW3(v,x) VTW1(v,x) +#define TWVL3 TWVL1 + +/* twiddle storage for split arrays */ +#define REQ_VTWS +#define VTW_SIZE (2*VL) +#include "vtw.h" +#define TWVLS (2*VL) +#undef VTW_SIZE +#undef REQ_VTWS + +#define VLEAVE() /* nothing */ + +#include "simd-common.h" diff --git a/simd-support/simd-r5v1024.h b/simd-support/simd-r5v1024.h new file mode 100644 index 000000000..98862ae4d --- /dev/null +++ b/simd-support/simd-r5v1024.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2003, 2007-11 Matteo Frigo + * Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology + * + * RISC-V V support implemented by Romain Dolbeau. (c) 2019 Romain Dolbeau + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +#define SIMD_SUFFIX _r5v1024 /* for renaming */ +#define R5V_SIZE 1024 +#include "simd-r5v.h" diff --git a/simd-support/simd-r5v128.h b/simd-support/simd-r5v128.h new file mode 100644 index 000000000..3cc25ac59 --- /dev/null +++ b/simd-support/simd-r5v128.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2003, 2007-11 Matteo Frigo + * Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology + * + * RISC-V V support implemented by Romain Dolbeau. (c) 2019 Romain Dolbeau + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +#define SIMD_SUFFIX _r5v128 /* for renaming */ +#define R5V_SIZE 128 +#include "simd-r5v.h" diff --git a/simd-support/simd-r5v16384.h b/simd-support/simd-r5v16384.h new file mode 100644 index 000000000..34ed6e665 --- /dev/null +++ b/simd-support/simd-r5v16384.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2003, 2007-11 Matteo Frigo + * Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology + * + * RISC-V V support implemented by Romain Dolbeau. (c) 2019 Romain Dolbeau + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +#define SIMD_SUFFIX _r5v16384 /* for renaming */ +#define R5V_SIZE 16384 +#include "simd-r5v.h" diff --git a/simd-support/simd-r5v2048.h b/simd-support/simd-r5v2048.h new file mode 100644 index 000000000..712c20779 --- /dev/null +++ b/simd-support/simd-r5v2048.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2003, 2007-11 Matteo Frigo + * Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology + * + * RISC-V V support implemented by Romain Dolbeau. (c) 2019 Romain Dolbeau + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +#define SIMD_SUFFIX _r5v2048 /* for renaming */ +#define R5V_SIZE 2048 +#include "simd-r5v.h" diff --git a/simd-support/simd-r5v256.h b/simd-support/simd-r5v256.h new file mode 100644 index 000000000..cb278012f --- /dev/null +++ b/simd-support/simd-r5v256.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2003, 2007-11 Matteo Frigo + * Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology + * + * RISC-V V support implemented by Romain Dolbeau. (c) 2019 Romain Dolbeau + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +#define SIMD_SUFFIX _r5v256 /* for renaming */ +#define R5V_SIZE 256 +#include "simd-r5v.h" diff --git a/simd-support/simd-r5v4096.h b/simd-support/simd-r5v4096.h new file mode 100644 index 000000000..4d3c73384 --- /dev/null +++ b/simd-support/simd-r5v4096.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2003, 2007-11 Matteo Frigo + * Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology + * + * RISC-V V support implemented by Romain Dolbeau. (c) 2019 Romain Dolbeau + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +#define SIMD_SUFFIX _r5v4096 /* for renaming */ +#define R5V_SIZE 4096 +#include "simd-r5v.h" diff --git a/simd-support/simd-r5v512.h b/simd-support/simd-r5v512.h new file mode 100644 index 000000000..978c5d423 --- /dev/null +++ b/simd-support/simd-r5v512.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2003, 2007-11 Matteo Frigo + * Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology + * + * RISC-V V support implemented by Romain Dolbeau. (c) 2019 Romain Dolbeau + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +#define SIMD_SUFFIX _r5v512 /* for renaming */ +#define R5V_SIZE 512 +#include "simd-r5v.h" diff --git a/simd-support/simd-r5v8192.h b/simd-support/simd-r5v8192.h new file mode 100644 index 000000000..5913fb0ed --- /dev/null +++ b/simd-support/simd-r5v8192.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2003, 2007-11 Matteo Frigo + * Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology + * + * RISC-V V support implemented by Romain Dolbeau. (c) 2019 Romain Dolbeau + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +#define SIMD_SUFFIX _r5v8192 /* for renaming */ +#define R5V_SIZE 8192 +#include "simd-r5v.h" diff --git a/simd-support/vtw.h b/simd-support/vtw.h new file mode 100644 index 000000000..4ba2357e2 --- /dev/null +++ b/simd-support/vtw.h @@ -0,0 +1,2667 @@ +/* auto-generated */ +#if defined(REQ_VTW1) +#if defined(VTW_SIZE) && VTW_SIZE == 1 +#warning "using VTW1 with 1" +#define VTW1(v,x) {TW_CEXP, v+0, x} +#endif // VTW_SIZE == 1 +#if defined(VTW_SIZE) && VTW_SIZE == 2 +#warning "using VTW1 with 2" +#define VTW1(v,x) {TW_CEXP, v+0, x}, {TW_CEXP, v+1, x} +#endif // VTW_SIZE == 2 +#if defined(VTW_SIZE) && VTW_SIZE == 4 +#warning "using VTW1 with 4" +#define VTW1(v,x) {TW_CEXP, v+0, x}, {TW_CEXP, v+1, x}, {TW_CEXP, v+2, x}, {TW_CEXP, v+3, x} +#endif // VTW_SIZE == 4 +#if defined(VTW_SIZE) && VTW_SIZE == 8 +#warning "using VTW1 with 8" +#define VTW1(v,x) {TW_CEXP, v+0, x}, {TW_CEXP, v+1, x}, {TW_CEXP, v+2, x}, {TW_CEXP, v+3, x}, \ + {TW_CEXP, v+4, x}, {TW_CEXP, v+5, x}, {TW_CEXP, v+6, x}, {TW_CEXP, v+7, x} +#endif // VTW_SIZE == 8 +#if defined(VTW_SIZE) && VTW_SIZE == 16 +#warning "using VTW1 with 16" +#define VTW1(v,x) {TW_CEXP, v+0, x}, {TW_CEXP, v+1, x}, {TW_CEXP, v+2, x}, {TW_CEXP, v+3, x}, \ + {TW_CEXP, v+4, x}, {TW_CEXP, v+5, x}, {TW_CEXP, v+6, x}, {TW_CEXP, v+7, x}, \ + {TW_CEXP, v+8, x}, {TW_CEXP, v+9, x}, {TW_CEXP, v+10, x}, {TW_CEXP, v+11, x}, \ + {TW_CEXP, v+12, x}, {TW_CEXP, v+13, x}, {TW_CEXP, v+14, x}, {TW_CEXP, v+15, x} +#endif // VTW_SIZE == 16 +#if defined(VTW_SIZE) && VTW_SIZE == 32 +#warning "using VTW1 with 32" +#define VTW1(v,x) {TW_CEXP, v+0, x}, {TW_CEXP, v+1, x}, {TW_CEXP, v+2, x}, {TW_CEXP, v+3, x}, \ + {TW_CEXP, v+4, x}, {TW_CEXP, v+5, x}, {TW_CEXP, v+6, x}, {TW_CEXP, v+7, x}, \ + {TW_CEXP, v+8, x}, {TW_CEXP, v+9, x}, {TW_CEXP, v+10, x}, {TW_CEXP, v+11, x}, \ + {TW_CEXP, v+12, x}, {TW_CEXP, v+13, x}, {TW_CEXP, v+14, x}, {TW_CEXP, v+15, x}, \ + {TW_CEXP, v+16, x}, {TW_CEXP, v+17, x}, {TW_CEXP, v+18, x}, {TW_CEXP, v+19, x}, \ + {TW_CEXP, v+20, x}, {TW_CEXP, v+21, x}, {TW_CEXP, v+22, x}, {TW_CEXP, v+23, x}, \ + {TW_CEXP, v+24, x}, {TW_CEXP, v+25, x}, {TW_CEXP, v+26, x}, {TW_CEXP, v+27, x}, \ + {TW_CEXP, v+28, x}, {TW_CEXP, v+29, x}, {TW_CEXP, v+30, x}, {TW_CEXP, v+31, x} +#endif // VTW_SIZE == 32 +#if defined(VTW_SIZE) && VTW_SIZE == 64 +#warning "using VTW1 with 64" +#define VTW1(v,x) {TW_CEXP, v+0, x}, {TW_CEXP, v+1, x}, {TW_CEXP, v+2, x}, {TW_CEXP, v+3, x}, \ + {TW_CEXP, v+4, x}, {TW_CEXP, v+5, x}, {TW_CEXP, v+6, x}, {TW_CEXP, v+7, x}, \ + {TW_CEXP, v+8, x}, {TW_CEXP, v+9, x}, {TW_CEXP, v+10, x}, {TW_CEXP, v+11, x}, \ + {TW_CEXP, v+12, x}, {TW_CEXP, v+13, x}, {TW_CEXP, v+14, x}, {TW_CEXP, v+15, x}, \ + {TW_CEXP, v+16, x}, {TW_CEXP, v+17, x}, {TW_CEXP, v+18, x}, {TW_CEXP, v+19, x}, \ + {TW_CEXP, v+20, x}, {TW_CEXP, v+21, x}, {TW_CEXP, v+22, x}, {TW_CEXP, v+23, x}, \ + {TW_CEXP, v+24, x}, {TW_CEXP, v+25, x}, {TW_CEXP, v+26, x}, {TW_CEXP, v+27, x}, \ + {TW_CEXP, v+28, x}, {TW_CEXP, v+29, x}, {TW_CEXP, v+30, x}, {TW_CEXP, v+31, x}, \ + {TW_CEXP, v+32, x}, {TW_CEXP, v+33, x}, {TW_CEXP, v+34, x}, {TW_CEXP, v+35, x}, \ + {TW_CEXP, v+36, x}, {TW_CEXP, v+37, x}, {TW_CEXP, v+38, x}, {TW_CEXP, v+39, x}, \ + {TW_CEXP, v+40, x}, {TW_CEXP, v+41, x}, {TW_CEXP, v+42, x}, {TW_CEXP, v+43, x}, \ + {TW_CEXP, v+44, x}, {TW_CEXP, v+45, x}, {TW_CEXP, v+46, x}, {TW_CEXP, v+47, x}, \ + {TW_CEXP, v+48, x}, {TW_CEXP, v+49, x}, {TW_CEXP, v+50, x}, {TW_CEXP, v+51, x}, \ + {TW_CEXP, v+52, x}, {TW_CEXP, v+53, x}, {TW_CEXP, v+54, x}, {TW_CEXP, v+55, x}, \ + {TW_CEXP, v+56, x}, {TW_CEXP, v+57, x}, {TW_CEXP, v+58, x}, {TW_CEXP, v+59, x}, \ + {TW_CEXP, v+60, x}, {TW_CEXP, v+61, x}, {TW_CEXP, v+62, x}, {TW_CEXP, v+63, x} +#endif // VTW_SIZE == 64 +#if defined(VTW_SIZE) && VTW_SIZE == 128 +#warning "using VTW1 with 128" +#define VTW1(v,x) {TW_CEXP, v+0, x}, {TW_CEXP, v+1, x}, {TW_CEXP, v+2, x}, {TW_CEXP, v+3, x}, \ + {TW_CEXP, v+4, x}, {TW_CEXP, v+5, x}, {TW_CEXP, v+6, x}, {TW_CEXP, v+7, x}, \ + {TW_CEXP, v+8, x}, {TW_CEXP, v+9, x}, {TW_CEXP, v+10, x}, {TW_CEXP, v+11, x}, \ + {TW_CEXP, v+12, x}, {TW_CEXP, v+13, x}, {TW_CEXP, v+14, x}, {TW_CEXP, v+15, x}, \ + {TW_CEXP, v+16, x}, {TW_CEXP, v+17, x}, {TW_CEXP, v+18, x}, {TW_CEXP, v+19, x}, \ + {TW_CEXP, v+20, x}, {TW_CEXP, v+21, x}, {TW_CEXP, v+22, x}, {TW_CEXP, v+23, x}, \ + {TW_CEXP, v+24, x}, {TW_CEXP, v+25, x}, {TW_CEXP, v+26, x}, {TW_CEXP, v+27, x}, \ + {TW_CEXP, v+28, x}, {TW_CEXP, v+29, x}, {TW_CEXP, v+30, x}, {TW_CEXP, v+31, x}, \ + {TW_CEXP, v+32, x}, {TW_CEXP, v+33, x}, {TW_CEXP, v+34, x}, {TW_CEXP, v+35, x}, \ + {TW_CEXP, v+36, x}, {TW_CEXP, v+37, x}, {TW_CEXP, v+38, x}, {TW_CEXP, v+39, x}, \ + {TW_CEXP, v+40, x}, {TW_CEXP, v+41, x}, {TW_CEXP, v+42, x}, {TW_CEXP, v+43, x}, \ + {TW_CEXP, v+44, x}, {TW_CEXP, v+45, x}, {TW_CEXP, v+46, x}, {TW_CEXP, v+47, x}, \ + {TW_CEXP, v+48, x}, {TW_CEXP, v+49, x}, {TW_CEXP, v+50, x}, {TW_CEXP, v+51, x}, \ + {TW_CEXP, v+52, x}, {TW_CEXP, v+53, x}, {TW_CEXP, v+54, x}, {TW_CEXP, v+55, x}, \ + {TW_CEXP, v+56, x}, {TW_CEXP, v+57, x}, {TW_CEXP, v+58, x}, {TW_CEXP, v+59, x}, \ + {TW_CEXP, v+60, x}, {TW_CEXP, v+61, x}, {TW_CEXP, v+62, x}, {TW_CEXP, v+63, x}, \ + {TW_CEXP, v+64, x}, {TW_CEXP, v+65, x}, {TW_CEXP, v+66, x}, {TW_CEXP, v+67, x}, \ + {TW_CEXP, v+68, x}, {TW_CEXP, v+69, x}, {TW_CEXP, v+70, x}, {TW_CEXP, v+71, x}, \ + {TW_CEXP, v+72, x}, {TW_CEXP, v+73, x}, {TW_CEXP, v+74, x}, {TW_CEXP, v+75, x}, \ + {TW_CEXP, v+76, x}, {TW_CEXP, v+77, x}, {TW_CEXP, v+78, x}, {TW_CEXP, v+79, x}, \ + {TW_CEXP, v+80, x}, {TW_CEXP, v+81, x}, {TW_CEXP, v+82, x}, {TW_CEXP, v+83, x}, \ + {TW_CEXP, v+84, x}, {TW_CEXP, v+85, x}, {TW_CEXP, v+86, x}, {TW_CEXP, v+87, x}, \ + {TW_CEXP, v+88, x}, {TW_CEXP, v+89, x}, {TW_CEXP, v+90, x}, {TW_CEXP, v+91, x}, \ + {TW_CEXP, v+92, x}, {TW_CEXP, v+93, x}, {TW_CEXP, v+94, x}, {TW_CEXP, v+95, x}, \ + {TW_CEXP, v+96, x}, {TW_CEXP, v+97, x}, {TW_CEXP, v+98, x}, {TW_CEXP, v+99, x}, \ + {TW_CEXP, v+100, x}, {TW_CEXP, v+101, x}, {TW_CEXP, v+102, x}, {TW_CEXP, v+103, x}, \ + {TW_CEXP, v+104, x}, {TW_CEXP, v+105, x}, {TW_CEXP, v+106, x}, {TW_CEXP, v+107, x}, \ + {TW_CEXP, v+108, x}, {TW_CEXP, v+109, x}, {TW_CEXP, v+110, x}, {TW_CEXP, v+111, x}, \ + {TW_CEXP, v+112, x}, {TW_CEXP, v+113, x}, {TW_CEXP, v+114, x}, {TW_CEXP, v+115, x}, \ + {TW_CEXP, v+116, x}, {TW_CEXP, v+117, x}, {TW_CEXP, v+118, x}, {TW_CEXP, v+119, x}, \ + {TW_CEXP, v+120, x}, {TW_CEXP, v+121, x}, {TW_CEXP, v+122, x}, {TW_CEXP, v+123, x}, \ + {TW_CEXP, v+124, x}, {TW_CEXP, v+125, x}, {TW_CEXP, v+126, x}, {TW_CEXP, v+127, x} +#endif // VTW_SIZE == 128 +#if defined(VTW_SIZE) && VTW_SIZE == 256 +#warning "using VTW1 with 256" +#define VTW1(v,x) {TW_CEXP, v+0, x}, {TW_CEXP, v+1, x}, {TW_CEXP, v+2, x}, {TW_CEXP, v+3, x}, \ + {TW_CEXP, v+4, x}, {TW_CEXP, v+5, x}, {TW_CEXP, v+6, x}, {TW_CEXP, v+7, x}, \ + {TW_CEXP, v+8, x}, {TW_CEXP, v+9, x}, {TW_CEXP, v+10, x}, {TW_CEXP, v+11, x}, \ + {TW_CEXP, v+12, x}, {TW_CEXP, v+13, x}, {TW_CEXP, v+14, x}, {TW_CEXP, v+15, x}, \ + {TW_CEXP, v+16, x}, {TW_CEXP, v+17, x}, {TW_CEXP, v+18, x}, {TW_CEXP, v+19, x}, \ + {TW_CEXP, v+20, x}, {TW_CEXP, v+21, x}, {TW_CEXP, v+22, x}, {TW_CEXP, v+23, x}, \ + {TW_CEXP, v+24, x}, {TW_CEXP, v+25, x}, {TW_CEXP, v+26, x}, {TW_CEXP, v+27, x}, \ + {TW_CEXP, v+28, x}, {TW_CEXP, v+29, x}, {TW_CEXP, v+30, x}, {TW_CEXP, v+31, x}, \ + {TW_CEXP, v+32, x}, {TW_CEXP, v+33, x}, {TW_CEXP, v+34, x}, {TW_CEXP, v+35, x}, \ + {TW_CEXP, v+36, x}, {TW_CEXP, v+37, x}, {TW_CEXP, v+38, x}, {TW_CEXP, v+39, x}, \ + {TW_CEXP, v+40, x}, {TW_CEXP, v+41, x}, {TW_CEXP, v+42, x}, {TW_CEXP, v+43, x}, \ + {TW_CEXP, v+44, x}, {TW_CEXP, v+45, x}, {TW_CEXP, v+46, x}, {TW_CEXP, v+47, x}, \ + {TW_CEXP, v+48, x}, {TW_CEXP, v+49, x}, {TW_CEXP, v+50, x}, {TW_CEXP, v+51, x}, \ + {TW_CEXP, v+52, x}, {TW_CEXP, v+53, x}, {TW_CEXP, v+54, x}, {TW_CEXP, v+55, x}, \ + {TW_CEXP, v+56, x}, {TW_CEXP, v+57, x}, {TW_CEXP, v+58, x}, {TW_CEXP, v+59, x}, \ + {TW_CEXP, v+60, x}, {TW_CEXP, v+61, x}, {TW_CEXP, v+62, x}, {TW_CEXP, v+63, x}, \ + {TW_CEXP, v+64, x}, {TW_CEXP, v+65, x}, {TW_CEXP, v+66, x}, {TW_CEXP, v+67, x}, \ + {TW_CEXP, v+68, x}, {TW_CEXP, v+69, x}, {TW_CEXP, v+70, x}, {TW_CEXP, v+71, x}, \ + {TW_CEXP, v+72, x}, {TW_CEXP, v+73, x}, {TW_CEXP, v+74, x}, {TW_CEXP, v+75, x}, \ + {TW_CEXP, v+76, x}, {TW_CEXP, v+77, x}, {TW_CEXP, v+78, x}, {TW_CEXP, v+79, x}, \ + {TW_CEXP, v+80, x}, {TW_CEXP, v+81, x}, {TW_CEXP, v+82, x}, {TW_CEXP, v+83, x}, \ + {TW_CEXP, v+84, x}, {TW_CEXP, v+85, x}, {TW_CEXP, v+86, x}, {TW_CEXP, v+87, x}, \ + {TW_CEXP, v+88, x}, {TW_CEXP, v+89, x}, {TW_CEXP, v+90, x}, {TW_CEXP, v+91, x}, \ + {TW_CEXP, v+92, x}, {TW_CEXP, v+93, x}, {TW_CEXP, v+94, x}, {TW_CEXP, v+95, x}, \ + {TW_CEXP, v+96, x}, {TW_CEXP, v+97, x}, {TW_CEXP, v+98, x}, {TW_CEXP, v+99, x}, \ + {TW_CEXP, v+100, x}, {TW_CEXP, v+101, x}, {TW_CEXP, v+102, x}, {TW_CEXP, v+103, x}, \ + {TW_CEXP, v+104, x}, {TW_CEXP, v+105, x}, {TW_CEXP, v+106, x}, {TW_CEXP, v+107, x}, \ + {TW_CEXP, v+108, x}, {TW_CEXP, v+109, x}, {TW_CEXP, v+110, x}, {TW_CEXP, v+111, x}, \ + {TW_CEXP, v+112, x}, {TW_CEXP, v+113, x}, {TW_CEXP, v+114, x}, {TW_CEXP, v+115, x}, \ + {TW_CEXP, v+116, x}, {TW_CEXP, v+117, x}, {TW_CEXP, v+118, x}, {TW_CEXP, v+119, x}, \ + {TW_CEXP, v+120, x}, {TW_CEXP, v+121, x}, {TW_CEXP, v+122, x}, {TW_CEXP, v+123, x}, \ + {TW_CEXP, v+124, x}, {TW_CEXP, v+125, x}, {TW_CEXP, v+126, x}, {TW_CEXP, v+127, x}, \ + {TW_CEXP, v+128, x}, {TW_CEXP, v+129, x}, {TW_CEXP, v+130, x}, {TW_CEXP, v+131, x}, \ + {TW_CEXP, v+132, x}, {TW_CEXP, v+133, x}, {TW_CEXP, v+134, x}, {TW_CEXP, v+135, x}, \ + {TW_CEXP, v+136, x}, {TW_CEXP, v+137, x}, {TW_CEXP, v+138, x}, {TW_CEXP, v+139, x}, \ + {TW_CEXP, v+140, x}, {TW_CEXP, v+141, x}, {TW_CEXP, v+142, x}, {TW_CEXP, v+143, x}, \ + {TW_CEXP, v+144, x}, {TW_CEXP, v+145, x}, {TW_CEXP, v+146, x}, {TW_CEXP, v+147, x}, \ + {TW_CEXP, v+148, x}, {TW_CEXP, v+149, x}, {TW_CEXP, v+150, x}, {TW_CEXP, v+151, x}, \ + {TW_CEXP, v+152, x}, {TW_CEXP, v+153, x}, {TW_CEXP, v+154, x}, {TW_CEXP, v+155, x}, \ + {TW_CEXP, v+156, x}, {TW_CEXP, v+157, x}, {TW_CEXP, v+158, x}, {TW_CEXP, v+159, x}, \ + {TW_CEXP, v+160, x}, {TW_CEXP, v+161, x}, {TW_CEXP, v+162, x}, {TW_CEXP, v+163, x}, \ + {TW_CEXP, v+164, x}, {TW_CEXP, v+165, x}, {TW_CEXP, v+166, x}, {TW_CEXP, v+167, x}, \ + {TW_CEXP, v+168, x}, {TW_CEXP, v+169, x}, {TW_CEXP, v+170, x}, {TW_CEXP, v+171, x}, \ + {TW_CEXP, v+172, x}, {TW_CEXP, v+173, x}, {TW_CEXP, v+174, x}, {TW_CEXP, v+175, x}, \ + {TW_CEXP, v+176, x}, {TW_CEXP, v+177, x}, {TW_CEXP, v+178, x}, {TW_CEXP, v+179, x}, \ + {TW_CEXP, v+180, x}, {TW_CEXP, v+181, x}, {TW_CEXP, v+182, x}, {TW_CEXP, v+183, x}, \ + {TW_CEXP, v+184, x}, {TW_CEXP, v+185, x}, {TW_CEXP, v+186, x}, {TW_CEXP, v+187, x}, \ + {TW_CEXP, v+188, x}, {TW_CEXP, v+189, x}, {TW_CEXP, v+190, x}, {TW_CEXP, v+191, x}, \ + {TW_CEXP, v+192, x}, {TW_CEXP, v+193, x}, {TW_CEXP, v+194, x}, {TW_CEXP, v+195, x}, \ + {TW_CEXP, v+196, x}, {TW_CEXP, v+197, x}, {TW_CEXP, v+198, x}, {TW_CEXP, v+199, x}, \ + {TW_CEXP, v+200, x}, {TW_CEXP, v+201, x}, {TW_CEXP, v+202, x}, {TW_CEXP, v+203, x}, \ + {TW_CEXP, v+204, x}, {TW_CEXP, v+205, x}, {TW_CEXP, v+206, x}, {TW_CEXP, v+207, x}, \ + {TW_CEXP, v+208, x}, {TW_CEXP, v+209, x}, {TW_CEXP, v+210, x}, {TW_CEXP, v+211, x}, \ + {TW_CEXP, v+212, x}, {TW_CEXP, v+213, x}, {TW_CEXP, v+214, x}, {TW_CEXP, v+215, x}, \ + {TW_CEXP, v+216, x}, {TW_CEXP, v+217, x}, {TW_CEXP, v+218, x}, {TW_CEXP, v+219, x}, \ + {TW_CEXP, v+220, x}, {TW_CEXP, v+221, x}, {TW_CEXP, v+222, x}, {TW_CEXP, v+223, x}, \ + {TW_CEXP, v+224, x}, {TW_CEXP, v+225, x}, {TW_CEXP, v+226, x}, {TW_CEXP, v+227, x}, \ + {TW_CEXP, v+228, x}, {TW_CEXP, v+229, x}, {TW_CEXP, v+230, x}, {TW_CEXP, v+231, x}, \ + {TW_CEXP, v+232, x}, {TW_CEXP, v+233, x}, {TW_CEXP, v+234, x}, {TW_CEXP, v+235, x}, \ + {TW_CEXP, v+236, x}, {TW_CEXP, v+237, x}, {TW_CEXP, v+238, x}, {TW_CEXP, v+239, x}, \ + {TW_CEXP, v+240, x}, {TW_CEXP, v+241, x}, {TW_CEXP, v+242, x}, {TW_CEXP, v+243, x}, \ + {TW_CEXP, v+244, x}, {TW_CEXP, v+245, x}, {TW_CEXP, v+246, x}, {TW_CEXP, v+247, x}, \ + {TW_CEXP, v+248, x}, {TW_CEXP, v+249, x}, {TW_CEXP, v+250, x}, {TW_CEXP, v+251, x}, \ + {TW_CEXP, v+252, x}, {TW_CEXP, v+253, x}, {TW_CEXP, v+254, x}, {TW_CEXP, v+255, x} +#endif // VTW_SIZE == 256 +#if defined(VTW_SIZE) && VTW_SIZE == 512 +#warning "using VTW1 with 512" +#define VTW1(v,x) {TW_CEXP, v+0, x}, {TW_CEXP, v+1, x}, {TW_CEXP, v+2, x}, {TW_CEXP, v+3, x}, \ + {TW_CEXP, v+4, x}, {TW_CEXP, v+5, x}, {TW_CEXP, v+6, x}, {TW_CEXP, v+7, x}, \ + {TW_CEXP, v+8, x}, {TW_CEXP, v+9, x}, {TW_CEXP, v+10, x}, {TW_CEXP, v+11, x}, \ + {TW_CEXP, v+12, x}, {TW_CEXP, v+13, x}, {TW_CEXP, v+14, x}, {TW_CEXP, v+15, x}, \ + {TW_CEXP, v+16, x}, {TW_CEXP, v+17, x}, {TW_CEXP, v+18, x}, {TW_CEXP, v+19, x}, \ + {TW_CEXP, v+20, x}, {TW_CEXP, v+21, x}, {TW_CEXP, v+22, x}, {TW_CEXP, v+23, x}, \ + {TW_CEXP, v+24, x}, {TW_CEXP, v+25, x}, {TW_CEXP, v+26, x}, {TW_CEXP, v+27, x}, \ + {TW_CEXP, v+28, x}, {TW_CEXP, v+29, x}, {TW_CEXP, v+30, x}, {TW_CEXP, v+31, x}, \ + {TW_CEXP, v+32, x}, {TW_CEXP, v+33, x}, {TW_CEXP, v+34, x}, {TW_CEXP, v+35, x}, \ + {TW_CEXP, v+36, x}, {TW_CEXP, v+37, x}, {TW_CEXP, v+38, x}, {TW_CEXP, v+39, x}, \ + {TW_CEXP, v+40, x}, {TW_CEXP, v+41, x}, {TW_CEXP, v+42, x}, {TW_CEXP, v+43, x}, \ + {TW_CEXP, v+44, x}, {TW_CEXP, v+45, x}, {TW_CEXP, v+46, x}, {TW_CEXP, v+47, x}, \ + {TW_CEXP, v+48, x}, {TW_CEXP, v+49, x}, {TW_CEXP, v+50, x}, {TW_CEXP, v+51, x}, \ + {TW_CEXP, v+52, x}, {TW_CEXP, v+53, x}, {TW_CEXP, v+54, x}, {TW_CEXP, v+55, x}, \ + {TW_CEXP, v+56, x}, {TW_CEXP, v+57, x}, {TW_CEXP, v+58, x}, {TW_CEXP, v+59, x}, \ + {TW_CEXP, v+60, x}, {TW_CEXP, v+61, x}, {TW_CEXP, v+62, x}, {TW_CEXP, v+63, x}, \ + {TW_CEXP, v+64, x}, {TW_CEXP, v+65, x}, {TW_CEXP, v+66, x}, {TW_CEXP, v+67, x}, \ + {TW_CEXP, v+68, x}, {TW_CEXP, v+69, x}, {TW_CEXP, v+70, x}, {TW_CEXP, v+71, x}, \ + {TW_CEXP, v+72, x}, {TW_CEXP, v+73, x}, {TW_CEXP, v+74, x}, {TW_CEXP, v+75, x}, \ + {TW_CEXP, v+76, x}, {TW_CEXP, v+77, x}, {TW_CEXP, v+78, x}, {TW_CEXP, v+79, x}, \ + {TW_CEXP, v+80, x}, {TW_CEXP, v+81, x}, {TW_CEXP, v+82, x}, {TW_CEXP, v+83, x}, \ + {TW_CEXP, v+84, x}, {TW_CEXP, v+85, x}, {TW_CEXP, v+86, x}, {TW_CEXP, v+87, x}, \ + {TW_CEXP, v+88, x}, {TW_CEXP, v+89, x}, {TW_CEXP, v+90, x}, {TW_CEXP, v+91, x}, \ + {TW_CEXP, v+92, x}, {TW_CEXP, v+93, x}, {TW_CEXP, v+94, x}, {TW_CEXP, v+95, x}, \ + {TW_CEXP, v+96, x}, {TW_CEXP, v+97, x}, {TW_CEXP, v+98, x}, {TW_CEXP, v+99, x}, \ + {TW_CEXP, v+100, x}, {TW_CEXP, v+101, x}, {TW_CEXP, v+102, x}, {TW_CEXP, v+103, x}, \ + {TW_CEXP, v+104, x}, {TW_CEXP, v+105, x}, {TW_CEXP, v+106, x}, {TW_CEXP, v+107, x}, \ + {TW_CEXP, v+108, x}, {TW_CEXP, v+109, x}, {TW_CEXP, v+110, x}, {TW_CEXP, v+111, x}, \ + {TW_CEXP, v+112, x}, {TW_CEXP, v+113, x}, {TW_CEXP, v+114, x}, {TW_CEXP, v+115, x}, \ + {TW_CEXP, v+116, x}, {TW_CEXP, v+117, x}, {TW_CEXP, v+118, x}, {TW_CEXP, v+119, x}, \ + {TW_CEXP, v+120, x}, {TW_CEXP, v+121, x}, {TW_CEXP, v+122, x}, {TW_CEXP, v+123, x}, \ + {TW_CEXP, v+124, x}, {TW_CEXP, v+125, x}, {TW_CEXP, v+126, x}, {TW_CEXP, v+127, x}, \ + {TW_CEXP, v+128, x}, {TW_CEXP, v+129, x}, {TW_CEXP, v+130, x}, {TW_CEXP, v+131, x}, \ + {TW_CEXP, v+132, x}, {TW_CEXP, v+133, x}, {TW_CEXP, v+134, x}, {TW_CEXP, v+135, x}, \ + {TW_CEXP, v+136, x}, {TW_CEXP, v+137, x}, {TW_CEXP, v+138, x}, {TW_CEXP, v+139, x}, \ + {TW_CEXP, v+140, x}, {TW_CEXP, v+141, x}, {TW_CEXP, v+142, x}, {TW_CEXP, v+143, x}, \ + {TW_CEXP, v+144, x}, {TW_CEXP, v+145, x}, {TW_CEXP, v+146, x}, {TW_CEXP, v+147, x}, \ + {TW_CEXP, v+148, x}, {TW_CEXP, v+149, x}, {TW_CEXP, v+150, x}, {TW_CEXP, v+151, x}, \ + {TW_CEXP, v+152, x}, {TW_CEXP, v+153, x}, {TW_CEXP, v+154, x}, {TW_CEXP, v+155, x}, \ + {TW_CEXP, v+156, x}, {TW_CEXP, v+157, x}, {TW_CEXP, v+158, x}, {TW_CEXP, v+159, x}, \ + {TW_CEXP, v+160, x}, {TW_CEXP, v+161, x}, {TW_CEXP, v+162, x}, {TW_CEXP, v+163, x}, \ + {TW_CEXP, v+164, x}, {TW_CEXP, v+165, x}, {TW_CEXP, v+166, x}, {TW_CEXP, v+167, x}, \ + {TW_CEXP, v+168, x}, {TW_CEXP, v+169, x}, {TW_CEXP, v+170, x}, {TW_CEXP, v+171, x}, \ + {TW_CEXP, v+172, x}, {TW_CEXP, v+173, x}, {TW_CEXP, v+174, x}, {TW_CEXP, v+175, x}, \ + {TW_CEXP, v+176, x}, {TW_CEXP, v+177, x}, {TW_CEXP, v+178, x}, {TW_CEXP, v+179, x}, \ + {TW_CEXP, v+180, x}, {TW_CEXP, v+181, x}, {TW_CEXP, v+182, x}, {TW_CEXP, v+183, x}, \ + {TW_CEXP, v+184, x}, {TW_CEXP, v+185, x}, {TW_CEXP, v+186, x}, {TW_CEXP, v+187, x}, \ + {TW_CEXP, v+188, x}, {TW_CEXP, v+189, x}, {TW_CEXP, v+190, x}, {TW_CEXP, v+191, x}, \ + {TW_CEXP, v+192, x}, {TW_CEXP, v+193, x}, {TW_CEXP, v+194, x}, {TW_CEXP, v+195, x}, \ + {TW_CEXP, v+196, x}, {TW_CEXP, v+197, x}, {TW_CEXP, v+198, x}, {TW_CEXP, v+199, x}, \ + {TW_CEXP, v+200, x}, {TW_CEXP, v+201, x}, {TW_CEXP, v+202, x}, {TW_CEXP, v+203, x}, \ + {TW_CEXP, v+204, x}, {TW_CEXP, v+205, x}, {TW_CEXP, v+206, x}, {TW_CEXP, v+207, x}, \ + {TW_CEXP, v+208, x}, {TW_CEXP, v+209, x}, {TW_CEXP, v+210, x}, {TW_CEXP, v+211, x}, \ + {TW_CEXP, v+212, x}, {TW_CEXP, v+213, x}, {TW_CEXP, v+214, x}, {TW_CEXP, v+215, x}, \ + {TW_CEXP, v+216, x}, {TW_CEXP, v+217, x}, {TW_CEXP, v+218, x}, {TW_CEXP, v+219, x}, \ + {TW_CEXP, v+220, x}, {TW_CEXP, v+221, x}, {TW_CEXP, v+222, x}, {TW_CEXP, v+223, x}, \ + {TW_CEXP, v+224, x}, {TW_CEXP, v+225, x}, {TW_CEXP, v+226, x}, {TW_CEXP, v+227, x}, \ + {TW_CEXP, v+228, x}, {TW_CEXP, v+229, x}, {TW_CEXP, v+230, x}, {TW_CEXP, v+231, x}, \ + {TW_CEXP, v+232, x}, {TW_CEXP, v+233, x}, {TW_CEXP, v+234, x}, {TW_CEXP, v+235, x}, \ + {TW_CEXP, v+236, x}, {TW_CEXP, v+237, x}, {TW_CEXP, v+238, x}, {TW_CEXP, v+239, x}, \ + {TW_CEXP, v+240, x}, {TW_CEXP, v+241, x}, {TW_CEXP, v+242, x}, {TW_CEXP, v+243, x}, \ + {TW_CEXP, v+244, x}, {TW_CEXP, v+245, x}, {TW_CEXP, v+246, x}, {TW_CEXP, v+247, x}, \ + {TW_CEXP, v+248, x}, {TW_CEXP, v+249, x}, {TW_CEXP, v+250, x}, {TW_CEXP, v+251, x}, \ + {TW_CEXP, v+252, x}, {TW_CEXP, v+253, x}, {TW_CEXP, v+254, x}, {TW_CEXP, v+255, x}, \ + {TW_CEXP, v+256, x}, {TW_CEXP, v+257, x}, {TW_CEXP, v+258, x}, {TW_CEXP, v+259, x}, \ + {TW_CEXP, v+260, x}, {TW_CEXP, v+261, x}, {TW_CEXP, v+262, x}, {TW_CEXP, v+263, x}, \ + {TW_CEXP, v+264, x}, {TW_CEXP, v+265, x}, {TW_CEXP, v+266, x}, {TW_CEXP, v+267, x}, \ + {TW_CEXP, v+268, x}, {TW_CEXP, v+269, x}, {TW_CEXP, v+270, x}, {TW_CEXP, v+271, x}, \ + {TW_CEXP, v+272, x}, {TW_CEXP, v+273, x}, {TW_CEXP, v+274, x}, {TW_CEXP, v+275, x}, \ + {TW_CEXP, v+276, x}, {TW_CEXP, v+277, x}, {TW_CEXP, v+278, x}, {TW_CEXP, v+279, x}, \ + {TW_CEXP, v+280, x}, {TW_CEXP, v+281, x}, {TW_CEXP, v+282, x}, {TW_CEXP, v+283, x}, \ + {TW_CEXP, v+284, x}, {TW_CEXP, v+285, x}, {TW_CEXP, v+286, x}, {TW_CEXP, v+287, x}, \ + {TW_CEXP, v+288, x}, {TW_CEXP, v+289, x}, {TW_CEXP, v+290, x}, {TW_CEXP, v+291, x}, \ + {TW_CEXP, v+292, x}, {TW_CEXP, v+293, x}, {TW_CEXP, v+294, x}, {TW_CEXP, v+295, x}, \ + {TW_CEXP, v+296, x}, {TW_CEXP, v+297, x}, {TW_CEXP, v+298, x}, {TW_CEXP, v+299, x}, \ + {TW_CEXP, v+300, x}, {TW_CEXP, v+301, x}, {TW_CEXP, v+302, x}, {TW_CEXP, v+303, x}, \ + {TW_CEXP, v+304, x}, {TW_CEXP, v+305, x}, {TW_CEXP, v+306, x}, {TW_CEXP, v+307, x}, \ + {TW_CEXP, v+308, x}, {TW_CEXP, v+309, x}, {TW_CEXP, v+310, x}, {TW_CEXP, v+311, x}, \ + {TW_CEXP, v+312, x}, {TW_CEXP, v+313, x}, {TW_CEXP, v+314, x}, {TW_CEXP, v+315, x}, \ + {TW_CEXP, v+316, x}, {TW_CEXP, v+317, x}, {TW_CEXP, v+318, x}, {TW_CEXP, v+319, x}, \ + {TW_CEXP, v+320, x}, {TW_CEXP, v+321, x}, {TW_CEXP, v+322, x}, {TW_CEXP, v+323, x}, \ + {TW_CEXP, v+324, x}, {TW_CEXP, v+325, x}, {TW_CEXP, v+326, x}, {TW_CEXP, v+327, x}, \ + {TW_CEXP, v+328, x}, {TW_CEXP, v+329, x}, {TW_CEXP, v+330, x}, {TW_CEXP, v+331, x}, \ + {TW_CEXP, v+332, x}, {TW_CEXP, v+333, x}, {TW_CEXP, v+334, x}, {TW_CEXP, v+335, x}, \ + {TW_CEXP, v+336, x}, {TW_CEXP, v+337, x}, {TW_CEXP, v+338, x}, {TW_CEXP, v+339, x}, \ + {TW_CEXP, v+340, x}, {TW_CEXP, v+341, x}, {TW_CEXP, v+342, x}, {TW_CEXP, v+343, x}, \ + {TW_CEXP, v+344, x}, {TW_CEXP, v+345, x}, {TW_CEXP, v+346, x}, {TW_CEXP, v+347, x}, \ + {TW_CEXP, v+348, x}, {TW_CEXP, v+349, x}, {TW_CEXP, v+350, x}, {TW_CEXP, v+351, x}, \ + {TW_CEXP, v+352, x}, {TW_CEXP, v+353, x}, {TW_CEXP, v+354, x}, {TW_CEXP, v+355, x}, \ + {TW_CEXP, v+356, x}, {TW_CEXP, v+357, x}, {TW_CEXP, v+358, x}, {TW_CEXP, v+359, x}, \ + {TW_CEXP, v+360, x}, {TW_CEXP, v+361, x}, {TW_CEXP, v+362, x}, {TW_CEXP, v+363, x}, \ + {TW_CEXP, v+364, x}, {TW_CEXP, v+365, x}, {TW_CEXP, v+366, x}, {TW_CEXP, v+367, x}, \ + {TW_CEXP, v+368, x}, {TW_CEXP, v+369, x}, {TW_CEXP, v+370, x}, {TW_CEXP, v+371, x}, \ + {TW_CEXP, v+372, x}, {TW_CEXP, v+373, x}, {TW_CEXP, v+374, x}, {TW_CEXP, v+375, x}, \ + {TW_CEXP, v+376, x}, {TW_CEXP, v+377, x}, {TW_CEXP, v+378, x}, {TW_CEXP, v+379, x}, \ + {TW_CEXP, v+380, x}, {TW_CEXP, v+381, x}, {TW_CEXP, v+382, x}, {TW_CEXP, v+383, x}, \ + {TW_CEXP, v+384, x}, {TW_CEXP, v+385, x}, {TW_CEXP, v+386, x}, {TW_CEXP, v+387, x}, \ + {TW_CEXP, v+388, x}, {TW_CEXP, v+389, x}, {TW_CEXP, v+390, x}, {TW_CEXP, v+391, x}, \ + {TW_CEXP, v+392, x}, {TW_CEXP, v+393, x}, {TW_CEXP, v+394, x}, {TW_CEXP, v+395, x}, \ + {TW_CEXP, v+396, x}, {TW_CEXP, v+397, x}, {TW_CEXP, v+398, x}, {TW_CEXP, v+399, x}, \ + {TW_CEXP, v+400, x}, {TW_CEXP, v+401, x}, {TW_CEXP, v+402, x}, {TW_CEXP, v+403, x}, \ + {TW_CEXP, v+404, x}, {TW_CEXP, v+405, x}, {TW_CEXP, v+406, x}, {TW_CEXP, v+407, x}, \ + {TW_CEXP, v+408, x}, {TW_CEXP, v+409, x}, {TW_CEXP, v+410, x}, {TW_CEXP, v+411, x}, \ + {TW_CEXP, v+412, x}, {TW_CEXP, v+413, x}, {TW_CEXP, v+414, x}, {TW_CEXP, v+415, x}, \ + {TW_CEXP, v+416, x}, {TW_CEXP, v+417, x}, {TW_CEXP, v+418, x}, {TW_CEXP, v+419, x}, \ + {TW_CEXP, v+420, x}, {TW_CEXP, v+421, x}, {TW_CEXP, v+422, x}, {TW_CEXP, v+423, x}, \ + {TW_CEXP, v+424, x}, {TW_CEXP, v+425, x}, {TW_CEXP, v+426, x}, {TW_CEXP, v+427, x}, \ + {TW_CEXP, v+428, x}, {TW_CEXP, v+429, x}, {TW_CEXP, v+430, x}, {TW_CEXP, v+431, x}, \ + {TW_CEXP, v+432, x}, {TW_CEXP, v+433, x}, {TW_CEXP, v+434, x}, {TW_CEXP, v+435, x}, \ + {TW_CEXP, v+436, x}, {TW_CEXP, v+437, x}, {TW_CEXP, v+438, x}, {TW_CEXP, v+439, x}, \ + {TW_CEXP, v+440, x}, {TW_CEXP, v+441, x}, {TW_CEXP, v+442, x}, {TW_CEXP, v+443, x}, \ + {TW_CEXP, v+444, x}, {TW_CEXP, v+445, x}, {TW_CEXP, v+446, x}, {TW_CEXP, v+447, x}, \ + {TW_CEXP, v+448, x}, {TW_CEXP, v+449, x}, {TW_CEXP, v+450, x}, {TW_CEXP, v+451, x}, \ + {TW_CEXP, v+452, x}, {TW_CEXP, v+453, x}, {TW_CEXP, v+454, x}, {TW_CEXP, v+455, x}, \ + {TW_CEXP, v+456, x}, {TW_CEXP, v+457, x}, {TW_CEXP, v+458, x}, {TW_CEXP, v+459, x}, \ + {TW_CEXP, v+460, x}, {TW_CEXP, v+461, x}, {TW_CEXP, v+462, x}, {TW_CEXP, v+463, x}, \ + {TW_CEXP, v+464, x}, {TW_CEXP, v+465, x}, {TW_CEXP, v+466, x}, {TW_CEXP, v+467, x}, \ + {TW_CEXP, v+468, x}, {TW_CEXP, v+469, x}, {TW_CEXP, v+470, x}, {TW_CEXP, v+471, x}, \ + {TW_CEXP, v+472, x}, {TW_CEXP, v+473, x}, {TW_CEXP, v+474, x}, {TW_CEXP, v+475, x}, \ + {TW_CEXP, v+476, x}, {TW_CEXP, v+477, x}, {TW_CEXP, v+478, x}, {TW_CEXP, v+479, x}, \ + {TW_CEXP, v+480, x}, {TW_CEXP, v+481, x}, {TW_CEXP, v+482, x}, {TW_CEXP, v+483, x}, \ + {TW_CEXP, v+484, x}, {TW_CEXP, v+485, x}, {TW_CEXP, v+486, x}, {TW_CEXP, v+487, x}, \ + {TW_CEXP, v+488, x}, {TW_CEXP, v+489, x}, {TW_CEXP, v+490, x}, {TW_CEXP, v+491, x}, \ + {TW_CEXP, v+492, x}, {TW_CEXP, v+493, x}, {TW_CEXP, v+494, x}, {TW_CEXP, v+495, x}, \ + {TW_CEXP, v+496, x}, {TW_CEXP, v+497, x}, {TW_CEXP, v+498, x}, {TW_CEXP, v+499, x}, \ + {TW_CEXP, v+500, x}, {TW_CEXP, v+501, x}, {TW_CEXP, v+502, x}, {TW_CEXP, v+503, x}, \ + {TW_CEXP, v+504, x}, {TW_CEXP, v+505, x}, {TW_CEXP, v+506, x}, {TW_CEXP, v+507, x}, \ + {TW_CEXP, v+508, x}, {TW_CEXP, v+509, x}, {TW_CEXP, v+510, x}, {TW_CEXP, v+511, x} +#endif // VTW_SIZE == 512 +#if defined(VTW_SIZE) && VTW_SIZE == 1024 +#warning "using VTW1 with 1024" +#define VTW1(v,x) {TW_CEXP, v+0, x}, {TW_CEXP, v+1, x}, {TW_CEXP, v+2, x}, {TW_CEXP, v+3, x}, \ + {TW_CEXP, v+4, x}, {TW_CEXP, v+5, x}, {TW_CEXP, v+6, x}, {TW_CEXP, v+7, x}, \ + {TW_CEXP, v+8, x}, {TW_CEXP, v+9, x}, {TW_CEXP, v+10, x}, {TW_CEXP, v+11, x}, \ + {TW_CEXP, v+12, x}, {TW_CEXP, v+13, x}, {TW_CEXP, v+14, x}, {TW_CEXP, v+15, x}, \ + {TW_CEXP, v+16, x}, {TW_CEXP, v+17, x}, {TW_CEXP, v+18, x}, {TW_CEXP, v+19, x}, \ + {TW_CEXP, v+20, x}, {TW_CEXP, v+21, x}, {TW_CEXP, v+22, x}, {TW_CEXP, v+23, x}, \ + {TW_CEXP, v+24, x}, {TW_CEXP, v+25, x}, {TW_CEXP, v+26, x}, {TW_CEXP, v+27, x}, \ + {TW_CEXP, v+28, x}, {TW_CEXP, v+29, x}, {TW_CEXP, v+30, x}, {TW_CEXP, v+31, x}, \ + {TW_CEXP, v+32, x}, {TW_CEXP, v+33, x}, {TW_CEXP, v+34, x}, {TW_CEXP, v+35, x}, \ + {TW_CEXP, v+36, x}, {TW_CEXP, v+37, x}, {TW_CEXP, v+38, x}, {TW_CEXP, v+39, x}, \ + {TW_CEXP, v+40, x}, {TW_CEXP, v+41, x}, {TW_CEXP, v+42, x}, {TW_CEXP, v+43, x}, \ + {TW_CEXP, v+44, x}, {TW_CEXP, v+45, x}, {TW_CEXP, v+46, x}, {TW_CEXP, v+47, x}, \ + {TW_CEXP, v+48, x}, {TW_CEXP, v+49, x}, {TW_CEXP, v+50, x}, {TW_CEXP, v+51, x}, \ + {TW_CEXP, v+52, x}, {TW_CEXP, v+53, x}, {TW_CEXP, v+54, x}, {TW_CEXP, v+55, x}, \ + {TW_CEXP, v+56, x}, {TW_CEXP, v+57, x}, {TW_CEXP, v+58, x}, {TW_CEXP, v+59, x}, \ + {TW_CEXP, v+60, x}, {TW_CEXP, v+61, x}, {TW_CEXP, v+62, x}, {TW_CEXP, v+63, x}, \ + {TW_CEXP, v+64, x}, {TW_CEXP, v+65, x}, {TW_CEXP, v+66, x}, {TW_CEXP, v+67, x}, \ + {TW_CEXP, v+68, x}, {TW_CEXP, v+69, x}, {TW_CEXP, v+70, x}, {TW_CEXP, v+71, x}, \ + {TW_CEXP, v+72, x}, {TW_CEXP, v+73, x}, {TW_CEXP, v+74, x}, {TW_CEXP, v+75, x}, \ + {TW_CEXP, v+76, x}, {TW_CEXP, v+77, x}, {TW_CEXP, v+78, x}, {TW_CEXP, v+79, x}, \ + {TW_CEXP, v+80, x}, {TW_CEXP, v+81, x}, {TW_CEXP, v+82, x}, {TW_CEXP, v+83, x}, \ + {TW_CEXP, v+84, x}, {TW_CEXP, v+85, x}, {TW_CEXP, v+86, x}, {TW_CEXP, v+87, x}, \ + {TW_CEXP, v+88, x}, {TW_CEXP, v+89, x}, {TW_CEXP, v+90, x}, {TW_CEXP, v+91, x}, \ + {TW_CEXP, v+92, x}, {TW_CEXP, v+93, x}, {TW_CEXP, v+94, x}, {TW_CEXP, v+95, x}, \ + {TW_CEXP, v+96, x}, {TW_CEXP, v+97, x}, {TW_CEXP, v+98, x}, {TW_CEXP, v+99, x}, \ + {TW_CEXP, v+100, x}, {TW_CEXP, v+101, x}, {TW_CEXP, v+102, x}, {TW_CEXP, v+103, x}, \ + {TW_CEXP, v+104, x}, {TW_CEXP, v+105, x}, {TW_CEXP, v+106, x}, {TW_CEXP, v+107, x}, \ + {TW_CEXP, v+108, x}, {TW_CEXP, v+109, x}, {TW_CEXP, v+110, x}, {TW_CEXP, v+111, x}, \ + {TW_CEXP, v+112, x}, {TW_CEXP, v+113, x}, {TW_CEXP, v+114, x}, {TW_CEXP, v+115, x}, \ + {TW_CEXP, v+116, x}, {TW_CEXP, v+117, x}, {TW_CEXP, v+118, x}, {TW_CEXP, v+119, x}, \ + {TW_CEXP, v+120, x}, {TW_CEXP, v+121, x}, {TW_CEXP, v+122, x}, {TW_CEXP, v+123, x}, \ + {TW_CEXP, v+124, x}, {TW_CEXP, v+125, x}, {TW_CEXP, v+126, x}, {TW_CEXP, v+127, x}, \ + {TW_CEXP, v+128, x}, {TW_CEXP, v+129, x}, {TW_CEXP, v+130, x}, {TW_CEXP, v+131, x}, \ + {TW_CEXP, v+132, x}, {TW_CEXP, v+133, x}, {TW_CEXP, v+134, x}, {TW_CEXP, v+135, x}, \ + {TW_CEXP, v+136, x}, {TW_CEXP, v+137, x}, {TW_CEXP, v+138, x}, {TW_CEXP, v+139, x}, \ + {TW_CEXP, v+140, x}, {TW_CEXP, v+141, x}, {TW_CEXP, v+142, x}, {TW_CEXP, v+143, x}, \ + {TW_CEXP, v+144, x}, {TW_CEXP, v+145, x}, {TW_CEXP, v+146, x}, {TW_CEXP, v+147, x}, \ + {TW_CEXP, v+148, x}, {TW_CEXP, v+149, x}, {TW_CEXP, v+150, x}, {TW_CEXP, v+151, x}, \ + {TW_CEXP, v+152, x}, {TW_CEXP, v+153, x}, {TW_CEXP, v+154, x}, {TW_CEXP, v+155, x}, \ + {TW_CEXP, v+156, x}, {TW_CEXP, v+157, x}, {TW_CEXP, v+158, x}, {TW_CEXP, v+159, x}, \ + {TW_CEXP, v+160, x}, {TW_CEXP, v+161, x}, {TW_CEXP, v+162, x}, {TW_CEXP, v+163, x}, \ + {TW_CEXP, v+164, x}, {TW_CEXP, v+165, x}, {TW_CEXP, v+166, x}, {TW_CEXP, v+167, x}, \ + {TW_CEXP, v+168, x}, {TW_CEXP, v+169, x}, {TW_CEXP, v+170, x}, {TW_CEXP, v+171, x}, \ + {TW_CEXP, v+172, x}, {TW_CEXP, v+173, x}, {TW_CEXP, v+174, x}, {TW_CEXP, v+175, x}, \ + {TW_CEXP, v+176, x}, {TW_CEXP, v+177, x}, {TW_CEXP, v+178, x}, {TW_CEXP, v+179, x}, \ + {TW_CEXP, v+180, x}, {TW_CEXP, v+181, x}, {TW_CEXP, v+182, x}, {TW_CEXP, v+183, x}, \ + {TW_CEXP, v+184, x}, {TW_CEXP, v+185, x}, {TW_CEXP, v+186, x}, {TW_CEXP, v+187, x}, \ + {TW_CEXP, v+188, x}, {TW_CEXP, v+189, x}, {TW_CEXP, v+190, x}, {TW_CEXP, v+191, x}, \ + {TW_CEXP, v+192, x}, {TW_CEXP, v+193, x}, {TW_CEXP, v+194, x}, {TW_CEXP, v+195, x}, \ + {TW_CEXP, v+196, x}, {TW_CEXP, v+197, x}, {TW_CEXP, v+198, x}, {TW_CEXP, v+199, x}, \ + {TW_CEXP, v+200, x}, {TW_CEXP, v+201, x}, {TW_CEXP, v+202, x}, {TW_CEXP, v+203, x}, \ + {TW_CEXP, v+204, x}, {TW_CEXP, v+205, x}, {TW_CEXP, v+206, x}, {TW_CEXP, v+207, x}, \ + {TW_CEXP, v+208, x}, {TW_CEXP, v+209, x}, {TW_CEXP, v+210, x}, {TW_CEXP, v+211, x}, \ + {TW_CEXP, v+212, x}, {TW_CEXP, v+213, x}, {TW_CEXP, v+214, x}, {TW_CEXP, v+215, x}, \ + {TW_CEXP, v+216, x}, {TW_CEXP, v+217, x}, {TW_CEXP, v+218, x}, {TW_CEXP, v+219, x}, \ + {TW_CEXP, v+220, x}, {TW_CEXP, v+221, x}, {TW_CEXP, v+222, x}, {TW_CEXP, v+223, x}, \ + {TW_CEXP, v+224, x}, {TW_CEXP, v+225, x}, {TW_CEXP, v+226, x}, {TW_CEXP, v+227, x}, \ + {TW_CEXP, v+228, x}, {TW_CEXP, v+229, x}, {TW_CEXP, v+230, x}, {TW_CEXP, v+231, x}, \ + {TW_CEXP, v+232, x}, {TW_CEXP, v+233, x}, {TW_CEXP, v+234, x}, {TW_CEXP, v+235, x}, \ + {TW_CEXP, v+236, x}, {TW_CEXP, v+237, x}, {TW_CEXP, v+238, x}, {TW_CEXP, v+239, x}, \ + {TW_CEXP, v+240, x}, {TW_CEXP, v+241, x}, {TW_CEXP, v+242, x}, {TW_CEXP, v+243, x}, \ + {TW_CEXP, v+244, x}, {TW_CEXP, v+245, x}, {TW_CEXP, v+246, x}, {TW_CEXP, v+247, x}, \ + {TW_CEXP, v+248, x}, {TW_CEXP, v+249, x}, {TW_CEXP, v+250, x}, {TW_CEXP, v+251, x}, \ + {TW_CEXP, v+252, x}, {TW_CEXP, v+253, x}, {TW_CEXP, v+254, x}, {TW_CEXP, v+255, x}, \ + {TW_CEXP, v+256, x}, {TW_CEXP, v+257, x}, {TW_CEXP, v+258, x}, {TW_CEXP, v+259, x}, \ + {TW_CEXP, v+260, x}, {TW_CEXP, v+261, x}, {TW_CEXP, v+262, x}, {TW_CEXP, v+263, x}, \ + {TW_CEXP, v+264, x}, {TW_CEXP, v+265, x}, {TW_CEXP, v+266, x}, {TW_CEXP, v+267, x}, \ + {TW_CEXP, v+268, x}, {TW_CEXP, v+269, x}, {TW_CEXP, v+270, x}, {TW_CEXP, v+271, x}, \ + {TW_CEXP, v+272, x}, {TW_CEXP, v+273, x}, {TW_CEXP, v+274, x}, {TW_CEXP, v+275, x}, \ + {TW_CEXP, v+276, x}, {TW_CEXP, v+277, x}, {TW_CEXP, v+278, x}, {TW_CEXP, v+279, x}, \ + {TW_CEXP, v+280, x}, {TW_CEXP, v+281, x}, {TW_CEXP, v+282, x}, {TW_CEXP, v+283, x}, \ + {TW_CEXP, v+284, x}, {TW_CEXP, v+285, x}, {TW_CEXP, v+286, x}, {TW_CEXP, v+287, x}, \ + {TW_CEXP, v+288, x}, {TW_CEXP, v+289, x}, {TW_CEXP, v+290, x}, {TW_CEXP, v+291, x}, \ + {TW_CEXP, v+292, x}, {TW_CEXP, v+293, x}, {TW_CEXP, v+294, x}, {TW_CEXP, v+295, x}, \ + {TW_CEXP, v+296, x}, {TW_CEXP, v+297, x}, {TW_CEXP, v+298, x}, {TW_CEXP, v+299, x}, \ + {TW_CEXP, v+300, x}, {TW_CEXP, v+301, x}, {TW_CEXP, v+302, x}, {TW_CEXP, v+303, x}, \ + {TW_CEXP, v+304, x}, {TW_CEXP, v+305, x}, {TW_CEXP, v+306, x}, {TW_CEXP, v+307, x}, \ + {TW_CEXP, v+308, x}, {TW_CEXP, v+309, x}, {TW_CEXP, v+310, x}, {TW_CEXP, v+311, x}, \ + {TW_CEXP, v+312, x}, {TW_CEXP, v+313, x}, {TW_CEXP, v+314, x}, {TW_CEXP, v+315, x}, \ + {TW_CEXP, v+316, x}, {TW_CEXP, v+317, x}, {TW_CEXP, v+318, x}, {TW_CEXP, v+319, x}, \ + {TW_CEXP, v+320, x}, {TW_CEXP, v+321, x}, {TW_CEXP, v+322, x}, {TW_CEXP, v+323, x}, \ + {TW_CEXP, v+324, x}, {TW_CEXP, v+325, x}, {TW_CEXP, v+326, x}, {TW_CEXP, v+327, x}, \ + {TW_CEXP, v+328, x}, {TW_CEXP, v+329, x}, {TW_CEXP, v+330, x}, {TW_CEXP, v+331, x}, \ + {TW_CEXP, v+332, x}, {TW_CEXP, v+333, x}, {TW_CEXP, v+334, x}, {TW_CEXP, v+335, x}, \ + {TW_CEXP, v+336, x}, {TW_CEXP, v+337, x}, {TW_CEXP, v+338, x}, {TW_CEXP, v+339, x}, \ + {TW_CEXP, v+340, x}, {TW_CEXP, v+341, x}, {TW_CEXP, v+342, x}, {TW_CEXP, v+343, x}, \ + {TW_CEXP, v+344, x}, {TW_CEXP, v+345, x}, {TW_CEXP, v+346, x}, {TW_CEXP, v+347, x}, \ + {TW_CEXP, v+348, x}, {TW_CEXP, v+349, x}, {TW_CEXP, v+350, x}, {TW_CEXP, v+351, x}, \ + {TW_CEXP, v+352, x}, {TW_CEXP, v+353, x}, {TW_CEXP, v+354, x}, {TW_CEXP, v+355, x}, \ + {TW_CEXP, v+356, x}, {TW_CEXP, v+357, x}, {TW_CEXP, v+358, x}, {TW_CEXP, v+359, x}, \ + {TW_CEXP, v+360, x}, {TW_CEXP, v+361, x}, {TW_CEXP, v+362, x}, {TW_CEXP, v+363, x}, \ + {TW_CEXP, v+364, x}, {TW_CEXP, v+365, x}, {TW_CEXP, v+366, x}, {TW_CEXP, v+367, x}, \ + {TW_CEXP, v+368, x}, {TW_CEXP, v+369, x}, {TW_CEXP, v+370, x}, {TW_CEXP, v+371, x}, \ + {TW_CEXP, v+372, x}, {TW_CEXP, v+373, x}, {TW_CEXP, v+374, x}, {TW_CEXP, v+375, x}, \ + {TW_CEXP, v+376, x}, {TW_CEXP, v+377, x}, {TW_CEXP, v+378, x}, {TW_CEXP, v+379, x}, \ + {TW_CEXP, v+380, x}, {TW_CEXP, v+381, x}, {TW_CEXP, v+382, x}, {TW_CEXP, v+383, x}, \ + {TW_CEXP, v+384, x}, {TW_CEXP, v+385, x}, {TW_CEXP, v+386, x}, {TW_CEXP, v+387, x}, \ + {TW_CEXP, v+388, x}, {TW_CEXP, v+389, x}, {TW_CEXP, v+390, x}, {TW_CEXP, v+391, x}, \ + {TW_CEXP, v+392, x}, {TW_CEXP, v+393, x}, {TW_CEXP, v+394, x}, {TW_CEXP, v+395, x}, \ + {TW_CEXP, v+396, x}, {TW_CEXP, v+397, x}, {TW_CEXP, v+398, x}, {TW_CEXP, v+399, x}, \ + {TW_CEXP, v+400, x}, {TW_CEXP, v+401, x}, {TW_CEXP, v+402, x}, {TW_CEXP, v+403, x}, \ + {TW_CEXP, v+404, x}, {TW_CEXP, v+405, x}, {TW_CEXP, v+406, x}, {TW_CEXP, v+407, x}, \ + {TW_CEXP, v+408, x}, {TW_CEXP, v+409, x}, {TW_CEXP, v+410, x}, {TW_CEXP, v+411, x}, \ + {TW_CEXP, v+412, x}, {TW_CEXP, v+413, x}, {TW_CEXP, v+414, x}, {TW_CEXP, v+415, x}, \ + {TW_CEXP, v+416, x}, {TW_CEXP, v+417, x}, {TW_CEXP, v+418, x}, {TW_CEXP, v+419, x}, \ + {TW_CEXP, v+420, x}, {TW_CEXP, v+421, x}, {TW_CEXP, v+422, x}, {TW_CEXP, v+423, x}, \ + {TW_CEXP, v+424, x}, {TW_CEXP, v+425, x}, {TW_CEXP, v+426, x}, {TW_CEXP, v+427, x}, \ + {TW_CEXP, v+428, x}, {TW_CEXP, v+429, x}, {TW_CEXP, v+430, x}, {TW_CEXP, v+431, x}, \ + {TW_CEXP, v+432, x}, {TW_CEXP, v+433, x}, {TW_CEXP, v+434, x}, {TW_CEXP, v+435, x}, \ + {TW_CEXP, v+436, x}, {TW_CEXP, v+437, x}, {TW_CEXP, v+438, x}, {TW_CEXP, v+439, x}, \ + {TW_CEXP, v+440, x}, {TW_CEXP, v+441, x}, {TW_CEXP, v+442, x}, {TW_CEXP, v+443, x}, \ + {TW_CEXP, v+444, x}, {TW_CEXP, v+445, x}, {TW_CEXP, v+446, x}, {TW_CEXP, v+447, x}, \ + {TW_CEXP, v+448, x}, {TW_CEXP, v+449, x}, {TW_CEXP, v+450, x}, {TW_CEXP, v+451, x}, \ + {TW_CEXP, v+452, x}, {TW_CEXP, v+453, x}, {TW_CEXP, v+454, x}, {TW_CEXP, v+455, x}, \ + {TW_CEXP, v+456, x}, {TW_CEXP, v+457, x}, {TW_CEXP, v+458, x}, {TW_CEXP, v+459, x}, \ + {TW_CEXP, v+460, x}, {TW_CEXP, v+461, x}, {TW_CEXP, v+462, x}, {TW_CEXP, v+463, x}, \ + {TW_CEXP, v+464, x}, {TW_CEXP, v+465, x}, {TW_CEXP, v+466, x}, {TW_CEXP, v+467, x}, \ + {TW_CEXP, v+468, x}, {TW_CEXP, v+469, x}, {TW_CEXP, v+470, x}, {TW_CEXP, v+471, x}, \ + {TW_CEXP, v+472, x}, {TW_CEXP, v+473, x}, {TW_CEXP, v+474, x}, {TW_CEXP, v+475, x}, \ + {TW_CEXP, v+476, x}, {TW_CEXP, v+477, x}, {TW_CEXP, v+478, x}, {TW_CEXP, v+479, x}, \ + {TW_CEXP, v+480, x}, {TW_CEXP, v+481, x}, {TW_CEXP, v+482, x}, {TW_CEXP, v+483, x}, \ + {TW_CEXP, v+484, x}, {TW_CEXP, v+485, x}, {TW_CEXP, v+486, x}, {TW_CEXP, v+487, x}, \ + {TW_CEXP, v+488, x}, {TW_CEXP, v+489, x}, {TW_CEXP, v+490, x}, {TW_CEXP, v+491, x}, \ + {TW_CEXP, v+492, x}, {TW_CEXP, v+493, x}, {TW_CEXP, v+494, x}, {TW_CEXP, v+495, x}, \ + {TW_CEXP, v+496, x}, {TW_CEXP, v+497, x}, {TW_CEXP, v+498, x}, {TW_CEXP, v+499, x}, \ + {TW_CEXP, v+500, x}, {TW_CEXP, v+501, x}, {TW_CEXP, v+502, x}, {TW_CEXP, v+503, x}, \ + {TW_CEXP, v+504, x}, {TW_CEXP, v+505, x}, {TW_CEXP, v+506, x}, {TW_CEXP, v+507, x}, \ + {TW_CEXP, v+508, x}, {TW_CEXP, v+509, x}, {TW_CEXP, v+510, x}, {TW_CEXP, v+511, x}, \ + {TW_CEXP, v+512, x}, {TW_CEXP, v+513, x}, {TW_CEXP, v+514, x}, {TW_CEXP, v+515, x}, \ + {TW_CEXP, v+516, x}, {TW_CEXP, v+517, x}, {TW_CEXP, v+518, x}, {TW_CEXP, v+519, x}, \ + {TW_CEXP, v+520, x}, {TW_CEXP, v+521, x}, {TW_CEXP, v+522, x}, {TW_CEXP, v+523, x}, \ + {TW_CEXP, v+524, x}, {TW_CEXP, v+525, x}, {TW_CEXP, v+526, x}, {TW_CEXP, v+527, x}, \ + {TW_CEXP, v+528, x}, {TW_CEXP, v+529, x}, {TW_CEXP, v+530, x}, {TW_CEXP, v+531, x}, \ + {TW_CEXP, v+532, x}, {TW_CEXP, v+533, x}, {TW_CEXP, v+534, x}, {TW_CEXP, v+535, x}, \ + {TW_CEXP, v+536, x}, {TW_CEXP, v+537, x}, {TW_CEXP, v+538, x}, {TW_CEXP, v+539, x}, \ + {TW_CEXP, v+540, x}, {TW_CEXP, v+541, x}, {TW_CEXP, v+542, x}, {TW_CEXP, v+543, x}, \ + {TW_CEXP, v+544, x}, {TW_CEXP, v+545, x}, {TW_CEXP, v+546, x}, {TW_CEXP, v+547, x}, \ + {TW_CEXP, v+548, x}, {TW_CEXP, v+549, x}, {TW_CEXP, v+550, x}, {TW_CEXP, v+551, x}, \ + {TW_CEXP, v+552, x}, {TW_CEXP, v+553, x}, {TW_CEXP, v+554, x}, {TW_CEXP, v+555, x}, \ + {TW_CEXP, v+556, x}, {TW_CEXP, v+557, x}, {TW_CEXP, v+558, x}, {TW_CEXP, v+559, x}, \ + {TW_CEXP, v+560, x}, {TW_CEXP, v+561, x}, {TW_CEXP, v+562, x}, {TW_CEXP, v+563, x}, \ + {TW_CEXP, v+564, x}, {TW_CEXP, v+565, x}, {TW_CEXP, v+566, x}, {TW_CEXP, v+567, x}, \ + {TW_CEXP, v+568, x}, {TW_CEXP, v+569, x}, {TW_CEXP, v+570, x}, {TW_CEXP, v+571, x}, \ + {TW_CEXP, v+572, x}, {TW_CEXP, v+573, x}, {TW_CEXP, v+574, x}, {TW_CEXP, v+575, x}, \ + {TW_CEXP, v+576, x}, {TW_CEXP, v+577, x}, {TW_CEXP, v+578, x}, {TW_CEXP, v+579, x}, \ + {TW_CEXP, v+580, x}, {TW_CEXP, v+581, x}, {TW_CEXP, v+582, x}, {TW_CEXP, v+583, x}, \ + {TW_CEXP, v+584, x}, {TW_CEXP, v+585, x}, {TW_CEXP, v+586, x}, {TW_CEXP, v+587, x}, \ + {TW_CEXP, v+588, x}, {TW_CEXP, v+589, x}, {TW_CEXP, v+590, x}, {TW_CEXP, v+591, x}, \ + {TW_CEXP, v+592, x}, {TW_CEXP, v+593, x}, {TW_CEXP, v+594, x}, {TW_CEXP, v+595, x}, \ + {TW_CEXP, v+596, x}, {TW_CEXP, v+597, x}, {TW_CEXP, v+598, x}, {TW_CEXP, v+599, x}, \ + {TW_CEXP, v+600, x}, {TW_CEXP, v+601, x}, {TW_CEXP, v+602, x}, {TW_CEXP, v+603, x}, \ + {TW_CEXP, v+604, x}, {TW_CEXP, v+605, x}, {TW_CEXP, v+606, x}, {TW_CEXP, v+607, x}, \ + {TW_CEXP, v+608, x}, {TW_CEXP, v+609, x}, {TW_CEXP, v+610, x}, {TW_CEXP, v+611, x}, \ + {TW_CEXP, v+612, x}, {TW_CEXP, v+613, x}, {TW_CEXP, v+614, x}, {TW_CEXP, v+615, x}, \ + {TW_CEXP, v+616, x}, {TW_CEXP, v+617, x}, {TW_CEXP, v+618, x}, {TW_CEXP, v+619, x}, \ + {TW_CEXP, v+620, x}, {TW_CEXP, v+621, x}, {TW_CEXP, v+622, x}, {TW_CEXP, v+623, x}, \ + {TW_CEXP, v+624, x}, {TW_CEXP, v+625, x}, {TW_CEXP, v+626, x}, {TW_CEXP, v+627, x}, \ + {TW_CEXP, v+628, x}, {TW_CEXP, v+629, x}, {TW_CEXP, v+630, x}, {TW_CEXP, v+631, x}, \ + {TW_CEXP, v+632, x}, {TW_CEXP, v+633, x}, {TW_CEXP, v+634, x}, {TW_CEXP, v+635, x}, \ + {TW_CEXP, v+636, x}, {TW_CEXP, v+637, x}, {TW_CEXP, v+638, x}, {TW_CEXP, v+639, x}, \ + {TW_CEXP, v+640, x}, {TW_CEXP, v+641, x}, {TW_CEXP, v+642, x}, {TW_CEXP, v+643, x}, \ + {TW_CEXP, v+644, x}, {TW_CEXP, v+645, x}, {TW_CEXP, v+646, x}, {TW_CEXP, v+647, x}, \ + {TW_CEXP, v+648, x}, {TW_CEXP, v+649, x}, {TW_CEXP, v+650, x}, {TW_CEXP, v+651, x}, \ + {TW_CEXP, v+652, x}, {TW_CEXP, v+653, x}, {TW_CEXP, v+654, x}, {TW_CEXP, v+655, x}, \ + {TW_CEXP, v+656, x}, {TW_CEXP, v+657, x}, {TW_CEXP, v+658, x}, {TW_CEXP, v+659, x}, \ + {TW_CEXP, v+660, x}, {TW_CEXP, v+661, x}, {TW_CEXP, v+662, x}, {TW_CEXP, v+663, x}, \ + {TW_CEXP, v+664, x}, {TW_CEXP, v+665, x}, {TW_CEXP, v+666, x}, {TW_CEXP, v+667, x}, \ + {TW_CEXP, v+668, x}, {TW_CEXP, v+669, x}, {TW_CEXP, v+670, x}, {TW_CEXP, v+671, x}, \ + {TW_CEXP, v+672, x}, {TW_CEXP, v+673, x}, {TW_CEXP, v+674, x}, {TW_CEXP, v+675, x}, \ + {TW_CEXP, v+676, x}, {TW_CEXP, v+677, x}, {TW_CEXP, v+678, x}, {TW_CEXP, v+679, x}, \ + {TW_CEXP, v+680, x}, {TW_CEXP, v+681, x}, {TW_CEXP, v+682, x}, {TW_CEXP, v+683, x}, \ + {TW_CEXP, v+684, x}, {TW_CEXP, v+685, x}, {TW_CEXP, v+686, x}, {TW_CEXP, v+687, x}, \ + {TW_CEXP, v+688, x}, {TW_CEXP, v+689, x}, {TW_CEXP, v+690, x}, {TW_CEXP, v+691, x}, \ + {TW_CEXP, v+692, x}, {TW_CEXP, v+693, x}, {TW_CEXP, v+694, x}, {TW_CEXP, v+695, x}, \ + {TW_CEXP, v+696, x}, {TW_CEXP, v+697, x}, {TW_CEXP, v+698, x}, {TW_CEXP, v+699, x}, \ + {TW_CEXP, v+700, x}, {TW_CEXP, v+701, x}, {TW_CEXP, v+702, x}, {TW_CEXP, v+703, x}, \ + {TW_CEXP, v+704, x}, {TW_CEXP, v+705, x}, {TW_CEXP, v+706, x}, {TW_CEXP, v+707, x}, \ + {TW_CEXP, v+708, x}, {TW_CEXP, v+709, x}, {TW_CEXP, v+710, x}, {TW_CEXP, v+711, x}, \ + {TW_CEXP, v+712, x}, {TW_CEXP, v+713, x}, {TW_CEXP, v+714, x}, {TW_CEXP, v+715, x}, \ + {TW_CEXP, v+716, x}, {TW_CEXP, v+717, x}, {TW_CEXP, v+718, x}, {TW_CEXP, v+719, x}, \ + {TW_CEXP, v+720, x}, {TW_CEXP, v+721, x}, {TW_CEXP, v+722, x}, {TW_CEXP, v+723, x}, \ + {TW_CEXP, v+724, x}, {TW_CEXP, v+725, x}, {TW_CEXP, v+726, x}, {TW_CEXP, v+727, x}, \ + {TW_CEXP, v+728, x}, {TW_CEXP, v+729, x}, {TW_CEXP, v+730, x}, {TW_CEXP, v+731, x}, \ + {TW_CEXP, v+732, x}, {TW_CEXP, v+733, x}, {TW_CEXP, v+734, x}, {TW_CEXP, v+735, x}, \ + {TW_CEXP, v+736, x}, {TW_CEXP, v+737, x}, {TW_CEXP, v+738, x}, {TW_CEXP, v+739, x}, \ + {TW_CEXP, v+740, x}, {TW_CEXP, v+741, x}, {TW_CEXP, v+742, x}, {TW_CEXP, v+743, x}, \ + {TW_CEXP, v+744, x}, {TW_CEXP, v+745, x}, {TW_CEXP, v+746, x}, {TW_CEXP, v+747, x}, \ + {TW_CEXP, v+748, x}, {TW_CEXP, v+749, x}, {TW_CEXP, v+750, x}, {TW_CEXP, v+751, x}, \ + {TW_CEXP, v+752, x}, {TW_CEXP, v+753, x}, {TW_CEXP, v+754, x}, {TW_CEXP, v+755, x}, \ + {TW_CEXP, v+756, x}, {TW_CEXP, v+757, x}, {TW_CEXP, v+758, x}, {TW_CEXP, v+759, x}, \ + {TW_CEXP, v+760, x}, {TW_CEXP, v+761, x}, {TW_CEXP, v+762, x}, {TW_CEXP, v+763, x}, \ + {TW_CEXP, v+764, x}, {TW_CEXP, v+765, x}, {TW_CEXP, v+766, x}, {TW_CEXP, v+767, x}, \ + {TW_CEXP, v+768, x}, {TW_CEXP, v+769, x}, {TW_CEXP, v+770, x}, {TW_CEXP, v+771, x}, \ + {TW_CEXP, v+772, x}, {TW_CEXP, v+773, x}, {TW_CEXP, v+774, x}, {TW_CEXP, v+775, x}, \ + {TW_CEXP, v+776, x}, {TW_CEXP, v+777, x}, {TW_CEXP, v+778, x}, {TW_CEXP, v+779, x}, \ + {TW_CEXP, v+780, x}, {TW_CEXP, v+781, x}, {TW_CEXP, v+782, x}, {TW_CEXP, v+783, x}, \ + {TW_CEXP, v+784, x}, {TW_CEXP, v+785, x}, {TW_CEXP, v+786, x}, {TW_CEXP, v+787, x}, \ + {TW_CEXP, v+788, x}, {TW_CEXP, v+789, x}, {TW_CEXP, v+790, x}, {TW_CEXP, v+791, x}, \ + {TW_CEXP, v+792, x}, {TW_CEXP, v+793, x}, {TW_CEXP, v+794, x}, {TW_CEXP, v+795, x}, \ + {TW_CEXP, v+796, x}, {TW_CEXP, v+797, x}, {TW_CEXP, v+798, x}, {TW_CEXP, v+799, x}, \ + {TW_CEXP, v+800, x}, {TW_CEXP, v+801, x}, {TW_CEXP, v+802, x}, {TW_CEXP, v+803, x}, \ + {TW_CEXP, v+804, x}, {TW_CEXP, v+805, x}, {TW_CEXP, v+806, x}, {TW_CEXP, v+807, x}, \ + {TW_CEXP, v+808, x}, {TW_CEXP, v+809, x}, {TW_CEXP, v+810, x}, {TW_CEXP, v+811, x}, \ + {TW_CEXP, v+812, x}, {TW_CEXP, v+813, x}, {TW_CEXP, v+814, x}, {TW_CEXP, v+815, x}, \ + {TW_CEXP, v+816, x}, {TW_CEXP, v+817, x}, {TW_CEXP, v+818, x}, {TW_CEXP, v+819, x}, \ + {TW_CEXP, v+820, x}, {TW_CEXP, v+821, x}, {TW_CEXP, v+822, x}, {TW_CEXP, v+823, x}, \ + {TW_CEXP, v+824, x}, {TW_CEXP, v+825, x}, {TW_CEXP, v+826, x}, {TW_CEXP, v+827, x}, \ + {TW_CEXP, v+828, x}, {TW_CEXP, v+829, x}, {TW_CEXP, v+830, x}, {TW_CEXP, v+831, x}, \ + {TW_CEXP, v+832, x}, {TW_CEXP, v+833, x}, {TW_CEXP, v+834, x}, {TW_CEXP, v+835, x}, \ + {TW_CEXP, v+836, x}, {TW_CEXP, v+837, x}, {TW_CEXP, v+838, x}, {TW_CEXP, v+839, x}, \ + {TW_CEXP, v+840, x}, {TW_CEXP, v+841, x}, {TW_CEXP, v+842, x}, {TW_CEXP, v+843, x}, \ + {TW_CEXP, v+844, x}, {TW_CEXP, v+845, x}, {TW_CEXP, v+846, x}, {TW_CEXP, v+847, x}, \ + {TW_CEXP, v+848, x}, {TW_CEXP, v+849, x}, {TW_CEXP, v+850, x}, {TW_CEXP, v+851, x}, \ + {TW_CEXP, v+852, x}, {TW_CEXP, v+853, x}, {TW_CEXP, v+854, x}, {TW_CEXP, v+855, x}, \ + {TW_CEXP, v+856, x}, {TW_CEXP, v+857, x}, {TW_CEXP, v+858, x}, {TW_CEXP, v+859, x}, \ + {TW_CEXP, v+860, x}, {TW_CEXP, v+861, x}, {TW_CEXP, v+862, x}, {TW_CEXP, v+863, x}, \ + {TW_CEXP, v+864, x}, {TW_CEXP, v+865, x}, {TW_CEXP, v+866, x}, {TW_CEXP, v+867, x}, \ + {TW_CEXP, v+868, x}, {TW_CEXP, v+869, x}, {TW_CEXP, v+870, x}, {TW_CEXP, v+871, x}, \ + {TW_CEXP, v+872, x}, {TW_CEXP, v+873, x}, {TW_CEXP, v+874, x}, {TW_CEXP, v+875, x}, \ + {TW_CEXP, v+876, x}, {TW_CEXP, v+877, x}, {TW_CEXP, v+878, x}, {TW_CEXP, v+879, x}, \ + {TW_CEXP, v+880, x}, {TW_CEXP, v+881, x}, {TW_CEXP, v+882, x}, {TW_CEXP, v+883, x}, \ + {TW_CEXP, v+884, x}, {TW_CEXP, v+885, x}, {TW_CEXP, v+886, x}, {TW_CEXP, v+887, x}, \ + {TW_CEXP, v+888, x}, {TW_CEXP, v+889, x}, {TW_CEXP, v+890, x}, {TW_CEXP, v+891, x}, \ + {TW_CEXP, v+892, x}, {TW_CEXP, v+893, x}, {TW_CEXP, v+894, x}, {TW_CEXP, v+895, x}, \ + {TW_CEXP, v+896, x}, {TW_CEXP, v+897, x}, {TW_CEXP, v+898, x}, {TW_CEXP, v+899, x}, \ + {TW_CEXP, v+900, x}, {TW_CEXP, v+901, x}, {TW_CEXP, v+902, x}, {TW_CEXP, v+903, x}, \ + {TW_CEXP, v+904, x}, {TW_CEXP, v+905, x}, {TW_CEXP, v+906, x}, {TW_CEXP, v+907, x}, \ + {TW_CEXP, v+908, x}, {TW_CEXP, v+909, x}, {TW_CEXP, v+910, x}, {TW_CEXP, v+911, x}, \ + {TW_CEXP, v+912, x}, {TW_CEXP, v+913, x}, {TW_CEXP, v+914, x}, {TW_CEXP, v+915, x}, \ + {TW_CEXP, v+916, x}, {TW_CEXP, v+917, x}, {TW_CEXP, v+918, x}, {TW_CEXP, v+919, x}, \ + {TW_CEXP, v+920, x}, {TW_CEXP, v+921, x}, {TW_CEXP, v+922, x}, {TW_CEXP, v+923, x}, \ + {TW_CEXP, v+924, x}, {TW_CEXP, v+925, x}, {TW_CEXP, v+926, x}, {TW_CEXP, v+927, x}, \ + {TW_CEXP, v+928, x}, {TW_CEXP, v+929, x}, {TW_CEXP, v+930, x}, {TW_CEXP, v+931, x}, \ + {TW_CEXP, v+932, x}, {TW_CEXP, v+933, x}, {TW_CEXP, v+934, x}, {TW_CEXP, v+935, x}, \ + {TW_CEXP, v+936, x}, {TW_CEXP, v+937, x}, {TW_CEXP, v+938, x}, {TW_CEXP, v+939, x}, \ + {TW_CEXP, v+940, x}, {TW_CEXP, v+941, x}, {TW_CEXP, v+942, x}, {TW_CEXP, v+943, x}, \ + {TW_CEXP, v+944, x}, {TW_CEXP, v+945, x}, {TW_CEXP, v+946, x}, {TW_CEXP, v+947, x}, \ + {TW_CEXP, v+948, x}, {TW_CEXP, v+949, x}, {TW_CEXP, v+950, x}, {TW_CEXP, v+951, x}, \ + {TW_CEXP, v+952, x}, {TW_CEXP, v+953, x}, {TW_CEXP, v+954, x}, {TW_CEXP, v+955, x}, \ + {TW_CEXP, v+956, x}, {TW_CEXP, v+957, x}, {TW_CEXP, v+958, x}, {TW_CEXP, v+959, x}, \ + {TW_CEXP, v+960, x}, {TW_CEXP, v+961, x}, {TW_CEXP, v+962, x}, {TW_CEXP, v+963, x}, \ + {TW_CEXP, v+964, x}, {TW_CEXP, v+965, x}, {TW_CEXP, v+966, x}, {TW_CEXP, v+967, x}, \ + {TW_CEXP, v+968, x}, {TW_CEXP, v+969, x}, {TW_CEXP, v+970, x}, {TW_CEXP, v+971, x}, \ + {TW_CEXP, v+972, x}, {TW_CEXP, v+973, x}, {TW_CEXP, v+974, x}, {TW_CEXP, v+975, x}, \ + {TW_CEXP, v+976, x}, {TW_CEXP, v+977, x}, {TW_CEXP, v+978, x}, {TW_CEXP, v+979, x}, \ + {TW_CEXP, v+980, x}, {TW_CEXP, v+981, x}, {TW_CEXP, v+982, x}, {TW_CEXP, v+983, x}, \ + {TW_CEXP, v+984, x}, {TW_CEXP, v+985, x}, {TW_CEXP, v+986, x}, {TW_CEXP, v+987, x}, \ + {TW_CEXP, v+988, x}, {TW_CEXP, v+989, x}, {TW_CEXP, v+990, x}, {TW_CEXP, v+991, x}, \ + {TW_CEXP, v+992, x}, {TW_CEXP, v+993, x}, {TW_CEXP, v+994, x}, {TW_CEXP, v+995, x}, \ + {TW_CEXP, v+996, x}, {TW_CEXP, v+997, x}, {TW_CEXP, v+998, x}, {TW_CEXP, v+999, x}, \ + {TW_CEXP, v+1000, x}, {TW_CEXP, v+1001, x}, {TW_CEXP, v+1002, x}, {TW_CEXP, v+1003, x}, \ + {TW_CEXP, v+1004, x}, {TW_CEXP, v+1005, x}, {TW_CEXP, v+1006, x}, {TW_CEXP, v+1007, x}, \ + {TW_CEXP, v+1008, x}, {TW_CEXP, v+1009, x}, {TW_CEXP, v+1010, x}, {TW_CEXP, v+1011, x}, \ + {TW_CEXP, v+1012, x}, {TW_CEXP, v+1013, x}, {TW_CEXP, v+1014, x}, {TW_CEXP, v+1015, x}, \ + {TW_CEXP, v+1016, x}, {TW_CEXP, v+1017, x}, {TW_CEXP, v+1018, x}, {TW_CEXP, v+1019, x}, \ + {TW_CEXP, v+1020, x}, {TW_CEXP, v+1021, x}, {TW_CEXP, v+1022, x}, {TW_CEXP, v+1023, x} +#endif // VTW_SIZE == 1024 +#endif // REQ_VTW1 +#if defined(REQ_VTW2) +#if defined(VTW_SIZE) && VTW_SIZE == 1 +#warning "using VTW2 with 1" +#define VTW2(v,x) {TW_COS, v+0, x}, {TW_SIN, v+0, -x} +#endif // VTW_SIZE == 1 +#if defined(VTW_SIZE) && VTW_SIZE == 2 +#warning "using VTW2 with 2" +#define VTW2(v,x) {TW_COS, v+0, x}, {TW_COS, v+0, x}, {TW_SIN, v+0, -x}, {TW_SIN, v+0, x} +#endif // VTW_SIZE == 2 +#if defined(VTW_SIZE) && VTW_SIZE == 4 +#warning "using VTW2 with 4" +#define VTW2(v,x) {TW_COS, v+0, x}, {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+1, x}, \ + {TW_SIN, v+0, -x}, {TW_SIN, v+0, x}, {TW_SIN, v+1, -x}, {TW_SIN, v+1, x} +#endif // VTW_SIZE == 4 +#if defined(VTW_SIZE) && VTW_SIZE == 8 +#warning "using VTW2 with 8" +#define VTW2(v,x) {TW_COS, v+0, x}, {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+1, x}, \ + {TW_COS, v+2, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, {TW_COS, v+3, x}, \ + {TW_SIN, v+0, -x}, {TW_SIN, v+0, x}, {TW_SIN, v+1, -x}, {TW_SIN, v+1, x}, \ + {TW_SIN, v+2, -x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, -x}, {TW_SIN, v+3, x} +#endif // VTW_SIZE == 8 +#if defined(VTW_SIZE) && VTW_SIZE == 16 +#warning "using VTW2 with 16" +#define VTW2(v,x) {TW_COS, v+0, x}, {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+1, x}, \ + {TW_COS, v+2, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+5, x}, \ + {TW_COS, v+6, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, {TW_COS, v+7, x}, \ + {TW_SIN, v+0, -x}, {TW_SIN, v+0, x}, {TW_SIN, v+1, -x}, {TW_SIN, v+1, x}, \ + {TW_SIN, v+2, -x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, -x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, -x}, {TW_SIN, v+4, x}, {TW_SIN, v+5, -x}, {TW_SIN, v+5, x}, \ + {TW_SIN, v+6, -x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, -x}, {TW_SIN, v+7, x} +#endif // VTW_SIZE == 16 +#if defined(VTW_SIZE) && VTW_SIZE == 32 +#warning "using VTW2 with 32" +#define VTW2(v,x) {TW_COS, v+0, x}, {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+1, x}, \ + {TW_COS, v+2, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+5, x}, \ + {TW_COS, v+6, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, {TW_COS, v+7, x}, \ + {TW_COS, v+8, x}, {TW_COS, v+8, x}, {TW_COS, v+9, x}, {TW_COS, v+9, x}, \ + {TW_COS, v+10, x}, {TW_COS, v+10, x}, {TW_COS, v+11, x}, {TW_COS, v+11, x}, \ + {TW_COS, v+12, x}, {TW_COS, v+12, x}, {TW_COS, v+13, x}, {TW_COS, v+13, x}, \ + {TW_COS, v+14, x}, {TW_COS, v+14, x}, {TW_COS, v+15, x}, {TW_COS, v+15, x}, \ + {TW_SIN, v+0, -x}, {TW_SIN, v+0, x}, {TW_SIN, v+1, -x}, {TW_SIN, v+1, x}, \ + {TW_SIN, v+2, -x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, -x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, -x}, {TW_SIN, v+4, x}, {TW_SIN, v+5, -x}, {TW_SIN, v+5, x}, \ + {TW_SIN, v+6, -x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, -x}, {TW_SIN, v+7, x}, \ + {TW_SIN, v+8, -x}, {TW_SIN, v+8, x}, {TW_SIN, v+9, -x}, {TW_SIN, v+9, x}, \ + {TW_SIN, v+10, -x}, {TW_SIN, v+10, x}, {TW_SIN, v+11, -x}, {TW_SIN, v+11, x}, \ + {TW_SIN, v+12, -x}, {TW_SIN, v+12, x}, {TW_SIN, v+13, -x}, {TW_SIN, v+13, x}, \ + {TW_SIN, v+14, -x}, {TW_SIN, v+14, x}, {TW_SIN, v+15, -x}, {TW_SIN, v+15, x} +#endif // VTW_SIZE == 32 +#if defined(VTW_SIZE) && VTW_SIZE == 64 +#warning "using VTW2 with 64" +#define VTW2(v,x) {TW_COS, v+0, x}, {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+1, x}, \ + {TW_COS, v+2, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+5, x}, \ + {TW_COS, v+6, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, {TW_COS, v+7, x}, \ + {TW_COS, v+8, x}, {TW_COS, v+8, x}, {TW_COS, v+9, x}, {TW_COS, v+9, x}, \ + {TW_COS, v+10, x}, {TW_COS, v+10, x}, {TW_COS, v+11, x}, {TW_COS, v+11, x}, \ + {TW_COS, v+12, x}, {TW_COS, v+12, x}, {TW_COS, v+13, x}, {TW_COS, v+13, x}, \ + {TW_COS, v+14, x}, {TW_COS, v+14, x}, {TW_COS, v+15, x}, {TW_COS, v+15, x}, \ + {TW_COS, v+16, x}, {TW_COS, v+16, x}, {TW_COS, v+17, x}, {TW_COS, v+17, x}, \ + {TW_COS, v+18, x}, {TW_COS, v+18, x}, {TW_COS, v+19, x}, {TW_COS, v+19, x}, \ + {TW_COS, v+20, x}, {TW_COS, v+20, x}, {TW_COS, v+21, x}, {TW_COS, v+21, x}, \ + {TW_COS, v+22, x}, {TW_COS, v+22, x}, {TW_COS, v+23, x}, {TW_COS, v+23, x}, \ + {TW_COS, v+24, x}, {TW_COS, v+24, x}, {TW_COS, v+25, x}, {TW_COS, v+25, x}, \ + {TW_COS, v+26, x}, {TW_COS, v+26, x}, {TW_COS, v+27, x}, {TW_COS, v+27, x}, \ + {TW_COS, v+28, x}, {TW_COS, v+28, x}, {TW_COS, v+29, x}, {TW_COS, v+29, x}, \ + {TW_COS, v+30, x}, {TW_COS, v+30, x}, {TW_COS, v+31, x}, {TW_COS, v+31, x}, \ + {TW_SIN, v+0, -x}, {TW_SIN, v+0, x}, {TW_SIN, v+1, -x}, {TW_SIN, v+1, x}, \ + {TW_SIN, v+2, -x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, -x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, -x}, {TW_SIN, v+4, x}, {TW_SIN, v+5, -x}, {TW_SIN, v+5, x}, \ + {TW_SIN, v+6, -x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, -x}, {TW_SIN, v+7, x}, \ + {TW_SIN, v+8, -x}, {TW_SIN, v+8, x}, {TW_SIN, v+9, -x}, {TW_SIN, v+9, x}, \ + {TW_SIN, v+10, -x}, {TW_SIN, v+10, x}, {TW_SIN, v+11, -x}, {TW_SIN, v+11, x}, \ + {TW_SIN, v+12, -x}, {TW_SIN, v+12, x}, {TW_SIN, v+13, -x}, {TW_SIN, v+13, x}, \ + {TW_SIN, v+14, -x}, {TW_SIN, v+14, x}, {TW_SIN, v+15, -x}, {TW_SIN, v+15, x}, \ + {TW_SIN, v+16, -x}, {TW_SIN, v+16, x}, {TW_SIN, v+17, -x}, {TW_SIN, v+17, x}, \ + {TW_SIN, v+18, -x}, {TW_SIN, v+18, x}, {TW_SIN, v+19, -x}, {TW_SIN, v+19, x}, \ + {TW_SIN, v+20, -x}, {TW_SIN, v+20, x}, {TW_SIN, v+21, -x}, {TW_SIN, v+21, x}, \ + {TW_SIN, v+22, -x}, {TW_SIN, v+22, x}, {TW_SIN, v+23, -x}, {TW_SIN, v+23, x}, \ + {TW_SIN, v+24, -x}, {TW_SIN, v+24, x}, {TW_SIN, v+25, -x}, {TW_SIN, v+25, x}, \ + {TW_SIN, v+26, -x}, {TW_SIN, v+26, x}, {TW_SIN, v+27, -x}, {TW_SIN, v+27, x}, \ + {TW_SIN, v+28, -x}, {TW_SIN, v+28, x}, {TW_SIN, v+29, -x}, {TW_SIN, v+29, x}, \ + {TW_SIN, v+30, -x}, {TW_SIN, v+30, x}, {TW_SIN, v+31, -x}, {TW_SIN, v+31, x} +#endif // VTW_SIZE == 64 +#if defined(VTW_SIZE) && VTW_SIZE == 128 +#warning "using VTW2 with 128" +#define VTW2(v,x) {TW_COS, v+0, x}, {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+1, x}, \ + {TW_COS, v+2, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+5, x}, \ + {TW_COS, v+6, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, {TW_COS, v+7, x}, \ + {TW_COS, v+8, x}, {TW_COS, v+8, x}, {TW_COS, v+9, x}, {TW_COS, v+9, x}, \ + {TW_COS, v+10, x}, {TW_COS, v+10, x}, {TW_COS, v+11, x}, {TW_COS, v+11, x}, \ + {TW_COS, v+12, x}, {TW_COS, v+12, x}, {TW_COS, v+13, x}, {TW_COS, v+13, x}, \ + {TW_COS, v+14, x}, {TW_COS, v+14, x}, {TW_COS, v+15, x}, {TW_COS, v+15, x}, \ + {TW_COS, v+16, x}, {TW_COS, v+16, x}, {TW_COS, v+17, x}, {TW_COS, v+17, x}, \ + {TW_COS, v+18, x}, {TW_COS, v+18, x}, {TW_COS, v+19, x}, {TW_COS, v+19, x}, \ + {TW_COS, v+20, x}, {TW_COS, v+20, x}, {TW_COS, v+21, x}, {TW_COS, v+21, x}, \ + {TW_COS, v+22, x}, {TW_COS, v+22, x}, {TW_COS, v+23, x}, {TW_COS, v+23, x}, \ + {TW_COS, v+24, x}, {TW_COS, v+24, x}, {TW_COS, v+25, x}, {TW_COS, v+25, x}, \ + {TW_COS, v+26, x}, {TW_COS, v+26, x}, {TW_COS, v+27, x}, {TW_COS, v+27, x}, \ + {TW_COS, v+28, x}, {TW_COS, v+28, x}, {TW_COS, v+29, x}, {TW_COS, v+29, x}, \ + {TW_COS, v+30, x}, {TW_COS, v+30, x}, {TW_COS, v+31, x}, {TW_COS, v+31, x}, \ + {TW_COS, v+32, x}, {TW_COS, v+32, x}, {TW_COS, v+33, x}, {TW_COS, v+33, x}, \ + {TW_COS, v+34, x}, {TW_COS, v+34, x}, {TW_COS, v+35, x}, {TW_COS, v+35, x}, \ + {TW_COS, v+36, x}, {TW_COS, v+36, x}, {TW_COS, v+37, x}, {TW_COS, v+37, x}, \ + {TW_COS, v+38, x}, {TW_COS, v+38, x}, {TW_COS, v+39, x}, {TW_COS, v+39, x}, \ + {TW_COS, v+40, x}, {TW_COS, v+40, x}, {TW_COS, v+41, x}, {TW_COS, v+41, x}, \ + {TW_COS, v+42, x}, {TW_COS, v+42, x}, {TW_COS, v+43, x}, {TW_COS, v+43, x}, \ + {TW_COS, v+44, x}, {TW_COS, v+44, x}, {TW_COS, v+45, x}, {TW_COS, v+45, x}, \ + {TW_COS, v+46, x}, {TW_COS, v+46, x}, {TW_COS, v+47, x}, {TW_COS, v+47, x}, \ + {TW_COS, v+48, x}, {TW_COS, v+48, x}, {TW_COS, v+49, x}, {TW_COS, v+49, x}, \ + {TW_COS, v+50, x}, {TW_COS, v+50, x}, {TW_COS, v+51, x}, {TW_COS, v+51, x}, \ + {TW_COS, v+52, x}, {TW_COS, v+52, x}, {TW_COS, v+53, x}, {TW_COS, v+53, x}, \ + {TW_COS, v+54, x}, {TW_COS, v+54, x}, {TW_COS, v+55, x}, {TW_COS, v+55, x}, \ + {TW_COS, v+56, x}, {TW_COS, v+56, x}, {TW_COS, v+57, x}, {TW_COS, v+57, x}, \ + {TW_COS, v+58, x}, {TW_COS, v+58, x}, {TW_COS, v+59, x}, {TW_COS, v+59, x}, \ + {TW_COS, v+60, x}, {TW_COS, v+60, x}, {TW_COS, v+61, x}, {TW_COS, v+61, x}, \ + {TW_COS, v+62, x}, {TW_COS, v+62, x}, {TW_COS, v+63, x}, {TW_COS, v+63, x}, \ + {TW_SIN, v+0, -x}, {TW_SIN, v+0, x}, {TW_SIN, v+1, -x}, {TW_SIN, v+1, x}, \ + {TW_SIN, v+2, -x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, -x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, -x}, {TW_SIN, v+4, x}, {TW_SIN, v+5, -x}, {TW_SIN, v+5, x}, \ + {TW_SIN, v+6, -x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, -x}, {TW_SIN, v+7, x}, \ + {TW_SIN, v+8, -x}, {TW_SIN, v+8, x}, {TW_SIN, v+9, -x}, {TW_SIN, v+9, x}, \ + {TW_SIN, v+10, -x}, {TW_SIN, v+10, x}, {TW_SIN, v+11, -x}, {TW_SIN, v+11, x}, \ + {TW_SIN, v+12, -x}, {TW_SIN, v+12, x}, {TW_SIN, v+13, -x}, {TW_SIN, v+13, x}, \ + {TW_SIN, v+14, -x}, {TW_SIN, v+14, x}, {TW_SIN, v+15, -x}, {TW_SIN, v+15, x}, \ + {TW_SIN, v+16, -x}, {TW_SIN, v+16, x}, {TW_SIN, v+17, -x}, {TW_SIN, v+17, x}, \ + {TW_SIN, v+18, -x}, {TW_SIN, v+18, x}, {TW_SIN, v+19, -x}, {TW_SIN, v+19, x}, \ + {TW_SIN, v+20, -x}, {TW_SIN, v+20, x}, {TW_SIN, v+21, -x}, {TW_SIN, v+21, x}, \ + {TW_SIN, v+22, -x}, {TW_SIN, v+22, x}, {TW_SIN, v+23, -x}, {TW_SIN, v+23, x}, \ + {TW_SIN, v+24, -x}, {TW_SIN, v+24, x}, {TW_SIN, v+25, -x}, {TW_SIN, v+25, x}, \ + {TW_SIN, v+26, -x}, {TW_SIN, v+26, x}, {TW_SIN, v+27, -x}, {TW_SIN, v+27, x}, \ + {TW_SIN, v+28, -x}, {TW_SIN, v+28, x}, {TW_SIN, v+29, -x}, {TW_SIN, v+29, x}, \ + {TW_SIN, v+30, -x}, {TW_SIN, v+30, x}, {TW_SIN, v+31, -x}, {TW_SIN, v+31, x}, \ + {TW_SIN, v+32, -x}, {TW_SIN, v+32, x}, {TW_SIN, v+33, -x}, {TW_SIN, v+33, x}, \ + {TW_SIN, v+34, -x}, {TW_SIN, v+34, x}, {TW_SIN, v+35, -x}, {TW_SIN, v+35, x}, \ + {TW_SIN, v+36, -x}, {TW_SIN, v+36, x}, {TW_SIN, v+37, -x}, {TW_SIN, v+37, x}, \ + {TW_SIN, v+38, -x}, {TW_SIN, v+38, x}, {TW_SIN, v+39, -x}, {TW_SIN, v+39, x}, \ + {TW_SIN, v+40, -x}, {TW_SIN, v+40, x}, {TW_SIN, v+41, -x}, {TW_SIN, v+41, x}, \ + {TW_SIN, v+42, -x}, {TW_SIN, v+42, x}, {TW_SIN, v+43, -x}, {TW_SIN, v+43, x}, \ + {TW_SIN, v+44, -x}, {TW_SIN, v+44, x}, {TW_SIN, v+45, -x}, {TW_SIN, v+45, x}, \ + {TW_SIN, v+46, -x}, {TW_SIN, v+46, x}, {TW_SIN, v+47, -x}, {TW_SIN, v+47, x}, \ + {TW_SIN, v+48, -x}, {TW_SIN, v+48, x}, {TW_SIN, v+49, -x}, {TW_SIN, v+49, x}, \ + {TW_SIN, v+50, -x}, {TW_SIN, v+50, x}, {TW_SIN, v+51, -x}, {TW_SIN, v+51, x}, \ + {TW_SIN, v+52, -x}, {TW_SIN, v+52, x}, {TW_SIN, v+53, -x}, {TW_SIN, v+53, x}, \ + {TW_SIN, v+54, -x}, {TW_SIN, v+54, x}, {TW_SIN, v+55, -x}, {TW_SIN, v+55, x}, \ + {TW_SIN, v+56, -x}, {TW_SIN, v+56, x}, {TW_SIN, v+57, -x}, {TW_SIN, v+57, x}, \ + {TW_SIN, v+58, -x}, {TW_SIN, v+58, x}, {TW_SIN, v+59, -x}, {TW_SIN, v+59, x}, \ + {TW_SIN, v+60, -x}, {TW_SIN, v+60, x}, {TW_SIN, v+61, -x}, {TW_SIN, v+61, x}, \ + {TW_SIN, v+62, -x}, {TW_SIN, v+62, x}, {TW_SIN, v+63, -x}, {TW_SIN, v+63, x} +#endif // VTW_SIZE == 128 +#if defined(VTW_SIZE) && VTW_SIZE == 256 +#warning "using VTW2 with 256" +#define VTW2(v,x) {TW_COS, v+0, x}, {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+1, x}, \ + {TW_COS, v+2, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+5, x}, \ + {TW_COS, v+6, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, {TW_COS, v+7, x}, \ + {TW_COS, v+8, x}, {TW_COS, v+8, x}, {TW_COS, v+9, x}, {TW_COS, v+9, x}, \ + {TW_COS, v+10, x}, {TW_COS, v+10, x}, {TW_COS, v+11, x}, {TW_COS, v+11, x}, \ + {TW_COS, v+12, x}, {TW_COS, v+12, x}, {TW_COS, v+13, x}, {TW_COS, v+13, x}, \ + {TW_COS, v+14, x}, {TW_COS, v+14, x}, {TW_COS, v+15, x}, {TW_COS, v+15, x}, \ + {TW_COS, v+16, x}, {TW_COS, v+16, x}, {TW_COS, v+17, x}, {TW_COS, v+17, x}, \ + {TW_COS, v+18, x}, {TW_COS, v+18, x}, {TW_COS, v+19, x}, {TW_COS, v+19, x}, \ + {TW_COS, v+20, x}, {TW_COS, v+20, x}, {TW_COS, v+21, x}, {TW_COS, v+21, x}, \ + {TW_COS, v+22, x}, {TW_COS, v+22, x}, {TW_COS, v+23, x}, {TW_COS, v+23, x}, \ + {TW_COS, v+24, x}, {TW_COS, v+24, x}, {TW_COS, v+25, x}, {TW_COS, v+25, x}, \ + {TW_COS, v+26, x}, {TW_COS, v+26, x}, {TW_COS, v+27, x}, {TW_COS, v+27, x}, \ + {TW_COS, v+28, x}, {TW_COS, v+28, x}, {TW_COS, v+29, x}, {TW_COS, v+29, x}, \ + {TW_COS, v+30, x}, {TW_COS, v+30, x}, {TW_COS, v+31, x}, {TW_COS, v+31, x}, \ + {TW_COS, v+32, x}, {TW_COS, v+32, x}, {TW_COS, v+33, x}, {TW_COS, v+33, x}, \ + {TW_COS, v+34, x}, {TW_COS, v+34, x}, {TW_COS, v+35, x}, {TW_COS, v+35, x}, \ + {TW_COS, v+36, x}, {TW_COS, v+36, x}, {TW_COS, v+37, x}, {TW_COS, v+37, x}, \ + {TW_COS, v+38, x}, {TW_COS, v+38, x}, {TW_COS, v+39, x}, {TW_COS, v+39, x}, \ + {TW_COS, v+40, x}, {TW_COS, v+40, x}, {TW_COS, v+41, x}, {TW_COS, v+41, x}, \ + {TW_COS, v+42, x}, {TW_COS, v+42, x}, {TW_COS, v+43, x}, {TW_COS, v+43, x}, \ + {TW_COS, v+44, x}, {TW_COS, v+44, x}, {TW_COS, v+45, x}, {TW_COS, v+45, x}, \ + {TW_COS, v+46, x}, {TW_COS, v+46, x}, {TW_COS, v+47, x}, {TW_COS, v+47, x}, \ + {TW_COS, v+48, x}, {TW_COS, v+48, x}, {TW_COS, v+49, x}, {TW_COS, v+49, x}, \ + {TW_COS, v+50, x}, {TW_COS, v+50, x}, {TW_COS, v+51, x}, {TW_COS, v+51, x}, \ + {TW_COS, v+52, x}, {TW_COS, v+52, x}, {TW_COS, v+53, x}, {TW_COS, v+53, x}, \ + {TW_COS, v+54, x}, {TW_COS, v+54, x}, {TW_COS, v+55, x}, {TW_COS, v+55, x}, \ + {TW_COS, v+56, x}, {TW_COS, v+56, x}, {TW_COS, v+57, x}, {TW_COS, v+57, x}, \ + {TW_COS, v+58, x}, {TW_COS, v+58, x}, {TW_COS, v+59, x}, {TW_COS, v+59, x}, \ + {TW_COS, v+60, x}, {TW_COS, v+60, x}, {TW_COS, v+61, x}, {TW_COS, v+61, x}, \ + {TW_COS, v+62, x}, {TW_COS, v+62, x}, {TW_COS, v+63, x}, {TW_COS, v+63, x}, \ + {TW_COS, v+64, x}, {TW_COS, v+64, x}, {TW_COS, v+65, x}, {TW_COS, v+65, x}, \ + {TW_COS, v+66, x}, {TW_COS, v+66, x}, {TW_COS, v+67, x}, {TW_COS, v+67, x}, \ + {TW_COS, v+68, x}, {TW_COS, v+68, x}, {TW_COS, v+69, x}, {TW_COS, v+69, x}, \ + {TW_COS, v+70, x}, {TW_COS, v+70, x}, {TW_COS, v+71, x}, {TW_COS, v+71, x}, \ + {TW_COS, v+72, x}, {TW_COS, v+72, x}, {TW_COS, v+73, x}, {TW_COS, v+73, x}, \ + {TW_COS, v+74, x}, {TW_COS, v+74, x}, {TW_COS, v+75, x}, {TW_COS, v+75, x}, \ + {TW_COS, v+76, x}, {TW_COS, v+76, x}, {TW_COS, v+77, x}, {TW_COS, v+77, x}, \ + {TW_COS, v+78, x}, {TW_COS, v+78, x}, {TW_COS, v+79, x}, {TW_COS, v+79, x}, \ + {TW_COS, v+80, x}, {TW_COS, v+80, x}, {TW_COS, v+81, x}, {TW_COS, v+81, x}, \ + {TW_COS, v+82, x}, {TW_COS, v+82, x}, {TW_COS, v+83, x}, {TW_COS, v+83, x}, \ + {TW_COS, v+84, x}, {TW_COS, v+84, x}, {TW_COS, v+85, x}, {TW_COS, v+85, x}, \ + {TW_COS, v+86, x}, {TW_COS, v+86, x}, {TW_COS, v+87, x}, {TW_COS, v+87, x}, \ + {TW_COS, v+88, x}, {TW_COS, v+88, x}, {TW_COS, v+89, x}, {TW_COS, v+89, x}, \ + {TW_COS, v+90, x}, {TW_COS, v+90, x}, {TW_COS, v+91, x}, {TW_COS, v+91, x}, \ + {TW_COS, v+92, x}, {TW_COS, v+92, x}, {TW_COS, v+93, x}, {TW_COS, v+93, x}, \ + {TW_COS, v+94, x}, {TW_COS, v+94, x}, {TW_COS, v+95, x}, {TW_COS, v+95, x}, \ + {TW_COS, v+96, x}, {TW_COS, v+96, x}, {TW_COS, v+97, x}, {TW_COS, v+97, x}, \ + {TW_COS, v+98, x}, {TW_COS, v+98, x}, {TW_COS, v+99, x}, {TW_COS, v+99, x}, \ + {TW_COS, v+100, x}, {TW_COS, v+100, x}, {TW_COS, v+101, x}, {TW_COS, v+101, x}, \ + {TW_COS, v+102, x}, {TW_COS, v+102, x}, {TW_COS, v+103, x}, {TW_COS, v+103, x}, \ + {TW_COS, v+104, x}, {TW_COS, v+104, x}, {TW_COS, v+105, x}, {TW_COS, v+105, x}, \ + {TW_COS, v+106, x}, {TW_COS, v+106, x}, {TW_COS, v+107, x}, {TW_COS, v+107, x}, \ + {TW_COS, v+108, x}, {TW_COS, v+108, x}, {TW_COS, v+109, x}, {TW_COS, v+109, x}, \ + {TW_COS, v+110, x}, {TW_COS, v+110, x}, {TW_COS, v+111, x}, {TW_COS, v+111, x}, \ + {TW_COS, v+112, x}, {TW_COS, v+112, x}, {TW_COS, v+113, x}, {TW_COS, v+113, x}, \ + {TW_COS, v+114, x}, {TW_COS, v+114, x}, {TW_COS, v+115, x}, {TW_COS, v+115, x}, \ + {TW_COS, v+116, x}, {TW_COS, v+116, x}, {TW_COS, v+117, x}, {TW_COS, v+117, x}, \ + {TW_COS, v+118, x}, {TW_COS, v+118, x}, {TW_COS, v+119, x}, {TW_COS, v+119, x}, \ + {TW_COS, v+120, x}, {TW_COS, v+120, x}, {TW_COS, v+121, x}, {TW_COS, v+121, x}, \ + {TW_COS, v+122, x}, {TW_COS, v+122, x}, {TW_COS, v+123, x}, {TW_COS, v+123, x}, \ + {TW_COS, v+124, x}, {TW_COS, v+124, x}, {TW_COS, v+125, x}, {TW_COS, v+125, x}, \ + {TW_COS, v+126, x}, {TW_COS, v+126, x}, {TW_COS, v+127, x}, {TW_COS, v+127, x}, \ + {TW_SIN, v+0, -x}, {TW_SIN, v+0, x}, {TW_SIN, v+1, -x}, {TW_SIN, v+1, x}, \ + {TW_SIN, v+2, -x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, -x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, -x}, {TW_SIN, v+4, x}, {TW_SIN, v+5, -x}, {TW_SIN, v+5, x}, \ + {TW_SIN, v+6, -x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, -x}, {TW_SIN, v+7, x}, \ + {TW_SIN, v+8, -x}, {TW_SIN, v+8, x}, {TW_SIN, v+9, -x}, {TW_SIN, v+9, x}, \ + {TW_SIN, v+10, -x}, {TW_SIN, v+10, x}, {TW_SIN, v+11, -x}, {TW_SIN, v+11, x}, \ + {TW_SIN, v+12, -x}, {TW_SIN, v+12, x}, {TW_SIN, v+13, -x}, {TW_SIN, v+13, x}, \ + {TW_SIN, v+14, -x}, {TW_SIN, v+14, x}, {TW_SIN, v+15, -x}, {TW_SIN, v+15, x}, \ + {TW_SIN, v+16, -x}, {TW_SIN, v+16, x}, {TW_SIN, v+17, -x}, {TW_SIN, v+17, x}, \ + {TW_SIN, v+18, -x}, {TW_SIN, v+18, x}, {TW_SIN, v+19, -x}, {TW_SIN, v+19, x}, \ + {TW_SIN, v+20, -x}, {TW_SIN, v+20, x}, {TW_SIN, v+21, -x}, {TW_SIN, v+21, x}, \ + {TW_SIN, v+22, -x}, {TW_SIN, v+22, x}, {TW_SIN, v+23, -x}, {TW_SIN, v+23, x}, \ + {TW_SIN, v+24, -x}, {TW_SIN, v+24, x}, {TW_SIN, v+25, -x}, {TW_SIN, v+25, x}, \ + {TW_SIN, v+26, -x}, {TW_SIN, v+26, x}, {TW_SIN, v+27, -x}, {TW_SIN, v+27, x}, \ + {TW_SIN, v+28, -x}, {TW_SIN, v+28, x}, {TW_SIN, v+29, -x}, {TW_SIN, v+29, x}, \ + {TW_SIN, v+30, -x}, {TW_SIN, v+30, x}, {TW_SIN, v+31, -x}, {TW_SIN, v+31, x}, \ + {TW_SIN, v+32, -x}, {TW_SIN, v+32, x}, {TW_SIN, v+33, -x}, {TW_SIN, v+33, x}, \ + {TW_SIN, v+34, -x}, {TW_SIN, v+34, x}, {TW_SIN, v+35, -x}, {TW_SIN, v+35, x}, \ + {TW_SIN, v+36, -x}, {TW_SIN, v+36, x}, {TW_SIN, v+37, -x}, {TW_SIN, v+37, x}, \ + {TW_SIN, v+38, -x}, {TW_SIN, v+38, x}, {TW_SIN, v+39, -x}, {TW_SIN, v+39, x}, \ + {TW_SIN, v+40, -x}, {TW_SIN, v+40, x}, {TW_SIN, v+41, -x}, {TW_SIN, v+41, x}, \ + {TW_SIN, v+42, -x}, {TW_SIN, v+42, x}, {TW_SIN, v+43, -x}, {TW_SIN, v+43, x}, \ + {TW_SIN, v+44, -x}, {TW_SIN, v+44, x}, {TW_SIN, v+45, -x}, {TW_SIN, v+45, x}, \ + {TW_SIN, v+46, -x}, {TW_SIN, v+46, x}, {TW_SIN, v+47, -x}, {TW_SIN, v+47, x}, \ + {TW_SIN, v+48, -x}, {TW_SIN, v+48, x}, {TW_SIN, v+49, -x}, {TW_SIN, v+49, x}, \ + {TW_SIN, v+50, -x}, {TW_SIN, v+50, x}, {TW_SIN, v+51, -x}, {TW_SIN, v+51, x}, \ + {TW_SIN, v+52, -x}, {TW_SIN, v+52, x}, {TW_SIN, v+53, -x}, {TW_SIN, v+53, x}, \ + {TW_SIN, v+54, -x}, {TW_SIN, v+54, x}, {TW_SIN, v+55, -x}, {TW_SIN, v+55, x}, \ + {TW_SIN, v+56, -x}, {TW_SIN, v+56, x}, {TW_SIN, v+57, -x}, {TW_SIN, v+57, x}, \ + {TW_SIN, v+58, -x}, {TW_SIN, v+58, x}, {TW_SIN, v+59, -x}, {TW_SIN, v+59, x}, \ + {TW_SIN, v+60, -x}, {TW_SIN, v+60, x}, {TW_SIN, v+61, -x}, {TW_SIN, v+61, x}, \ + {TW_SIN, v+62, -x}, {TW_SIN, v+62, x}, {TW_SIN, v+63, -x}, {TW_SIN, v+63, x}, \ + {TW_SIN, v+64, -x}, {TW_SIN, v+64, x}, {TW_SIN, v+65, -x}, {TW_SIN, v+65, x}, \ + {TW_SIN, v+66, -x}, {TW_SIN, v+66, x}, {TW_SIN, v+67, -x}, {TW_SIN, v+67, x}, \ + {TW_SIN, v+68, -x}, {TW_SIN, v+68, x}, {TW_SIN, v+69, -x}, {TW_SIN, v+69, x}, \ + {TW_SIN, v+70, -x}, {TW_SIN, v+70, x}, {TW_SIN, v+71, -x}, {TW_SIN, v+71, x}, \ + {TW_SIN, v+72, -x}, {TW_SIN, v+72, x}, {TW_SIN, v+73, -x}, {TW_SIN, v+73, x}, \ + {TW_SIN, v+74, -x}, {TW_SIN, v+74, x}, {TW_SIN, v+75, -x}, {TW_SIN, v+75, x}, \ + {TW_SIN, v+76, -x}, {TW_SIN, v+76, x}, {TW_SIN, v+77, -x}, {TW_SIN, v+77, x}, \ + {TW_SIN, v+78, -x}, {TW_SIN, v+78, x}, {TW_SIN, v+79, -x}, {TW_SIN, v+79, x}, \ + {TW_SIN, v+80, -x}, {TW_SIN, v+80, x}, {TW_SIN, v+81, -x}, {TW_SIN, v+81, x}, \ + {TW_SIN, v+82, -x}, {TW_SIN, v+82, x}, {TW_SIN, v+83, -x}, {TW_SIN, v+83, x}, \ + {TW_SIN, v+84, -x}, {TW_SIN, v+84, x}, {TW_SIN, v+85, -x}, {TW_SIN, v+85, x}, \ + {TW_SIN, v+86, -x}, {TW_SIN, v+86, x}, {TW_SIN, v+87, -x}, {TW_SIN, v+87, x}, \ + {TW_SIN, v+88, -x}, {TW_SIN, v+88, x}, {TW_SIN, v+89, -x}, {TW_SIN, v+89, x}, \ + {TW_SIN, v+90, -x}, {TW_SIN, v+90, x}, {TW_SIN, v+91, -x}, {TW_SIN, v+91, x}, \ + {TW_SIN, v+92, -x}, {TW_SIN, v+92, x}, {TW_SIN, v+93, -x}, {TW_SIN, v+93, x}, \ + {TW_SIN, v+94, -x}, {TW_SIN, v+94, x}, {TW_SIN, v+95, -x}, {TW_SIN, v+95, x}, \ + {TW_SIN, v+96, -x}, {TW_SIN, v+96, x}, {TW_SIN, v+97, -x}, {TW_SIN, v+97, x}, \ + {TW_SIN, v+98, -x}, {TW_SIN, v+98, x}, {TW_SIN, v+99, -x}, {TW_SIN, v+99, x}, \ + {TW_SIN, v+100, -x}, {TW_SIN, v+100, x}, {TW_SIN, v+101, -x}, {TW_SIN, v+101, x}, \ + {TW_SIN, v+102, -x}, {TW_SIN, v+102, x}, {TW_SIN, v+103, -x}, {TW_SIN, v+103, x}, \ + {TW_SIN, v+104, -x}, {TW_SIN, v+104, x}, {TW_SIN, v+105, -x}, {TW_SIN, v+105, x}, \ + {TW_SIN, v+106, -x}, {TW_SIN, v+106, x}, {TW_SIN, v+107, -x}, {TW_SIN, v+107, x}, \ + {TW_SIN, v+108, -x}, {TW_SIN, v+108, x}, {TW_SIN, v+109, -x}, {TW_SIN, v+109, x}, \ + {TW_SIN, v+110, -x}, {TW_SIN, v+110, x}, {TW_SIN, v+111, -x}, {TW_SIN, v+111, x}, \ + {TW_SIN, v+112, -x}, {TW_SIN, v+112, x}, {TW_SIN, v+113, -x}, {TW_SIN, v+113, x}, \ + {TW_SIN, v+114, -x}, {TW_SIN, v+114, x}, {TW_SIN, v+115, -x}, {TW_SIN, v+115, x}, \ + {TW_SIN, v+116, -x}, {TW_SIN, v+116, x}, {TW_SIN, v+117, -x}, {TW_SIN, v+117, x}, \ + {TW_SIN, v+118, -x}, {TW_SIN, v+118, x}, {TW_SIN, v+119, -x}, {TW_SIN, v+119, x}, \ + {TW_SIN, v+120, -x}, {TW_SIN, v+120, x}, {TW_SIN, v+121, -x}, {TW_SIN, v+121, x}, \ + {TW_SIN, v+122, -x}, {TW_SIN, v+122, x}, {TW_SIN, v+123, -x}, {TW_SIN, v+123, x}, \ + {TW_SIN, v+124, -x}, {TW_SIN, v+124, x}, {TW_SIN, v+125, -x}, {TW_SIN, v+125, x}, \ + {TW_SIN, v+126, -x}, {TW_SIN, v+126, x}, {TW_SIN, v+127, -x}, {TW_SIN, v+127, x} +#endif // VTW_SIZE == 256 +#if defined(VTW_SIZE) && VTW_SIZE == 512 +#warning "using VTW2 with 512" +#define VTW2(v,x) {TW_COS, v+0, x}, {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+1, x}, \ + {TW_COS, v+2, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+5, x}, \ + {TW_COS, v+6, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, {TW_COS, v+7, x}, \ + {TW_COS, v+8, x}, {TW_COS, v+8, x}, {TW_COS, v+9, x}, {TW_COS, v+9, x}, \ + {TW_COS, v+10, x}, {TW_COS, v+10, x}, {TW_COS, v+11, x}, {TW_COS, v+11, x}, \ + {TW_COS, v+12, x}, {TW_COS, v+12, x}, {TW_COS, v+13, x}, {TW_COS, v+13, x}, \ + {TW_COS, v+14, x}, {TW_COS, v+14, x}, {TW_COS, v+15, x}, {TW_COS, v+15, x}, \ + {TW_COS, v+16, x}, {TW_COS, v+16, x}, {TW_COS, v+17, x}, {TW_COS, v+17, x}, \ + {TW_COS, v+18, x}, {TW_COS, v+18, x}, {TW_COS, v+19, x}, {TW_COS, v+19, x}, \ + {TW_COS, v+20, x}, {TW_COS, v+20, x}, {TW_COS, v+21, x}, {TW_COS, v+21, x}, \ + {TW_COS, v+22, x}, {TW_COS, v+22, x}, {TW_COS, v+23, x}, {TW_COS, v+23, x}, \ + {TW_COS, v+24, x}, {TW_COS, v+24, x}, {TW_COS, v+25, x}, {TW_COS, v+25, x}, \ + {TW_COS, v+26, x}, {TW_COS, v+26, x}, {TW_COS, v+27, x}, {TW_COS, v+27, x}, \ + {TW_COS, v+28, x}, {TW_COS, v+28, x}, {TW_COS, v+29, x}, {TW_COS, v+29, x}, \ + {TW_COS, v+30, x}, {TW_COS, v+30, x}, {TW_COS, v+31, x}, {TW_COS, v+31, x}, \ + {TW_COS, v+32, x}, {TW_COS, v+32, x}, {TW_COS, v+33, x}, {TW_COS, v+33, x}, \ + {TW_COS, v+34, x}, {TW_COS, v+34, x}, {TW_COS, v+35, x}, {TW_COS, v+35, x}, \ + {TW_COS, v+36, x}, {TW_COS, v+36, x}, {TW_COS, v+37, x}, {TW_COS, v+37, x}, \ + {TW_COS, v+38, x}, {TW_COS, v+38, x}, {TW_COS, v+39, x}, {TW_COS, v+39, x}, \ + {TW_COS, v+40, x}, {TW_COS, v+40, x}, {TW_COS, v+41, x}, {TW_COS, v+41, x}, \ + {TW_COS, v+42, x}, {TW_COS, v+42, x}, {TW_COS, v+43, x}, {TW_COS, v+43, x}, \ + {TW_COS, v+44, x}, {TW_COS, v+44, x}, {TW_COS, v+45, x}, {TW_COS, v+45, x}, \ + {TW_COS, v+46, x}, {TW_COS, v+46, x}, {TW_COS, v+47, x}, {TW_COS, v+47, x}, \ + {TW_COS, v+48, x}, {TW_COS, v+48, x}, {TW_COS, v+49, x}, {TW_COS, v+49, x}, \ + {TW_COS, v+50, x}, {TW_COS, v+50, x}, {TW_COS, v+51, x}, {TW_COS, v+51, x}, \ + {TW_COS, v+52, x}, {TW_COS, v+52, x}, {TW_COS, v+53, x}, {TW_COS, v+53, x}, \ + {TW_COS, v+54, x}, {TW_COS, v+54, x}, {TW_COS, v+55, x}, {TW_COS, v+55, x}, \ + {TW_COS, v+56, x}, {TW_COS, v+56, x}, {TW_COS, v+57, x}, {TW_COS, v+57, x}, \ + {TW_COS, v+58, x}, {TW_COS, v+58, x}, {TW_COS, v+59, x}, {TW_COS, v+59, x}, \ + {TW_COS, v+60, x}, {TW_COS, v+60, x}, {TW_COS, v+61, x}, {TW_COS, v+61, x}, \ + {TW_COS, v+62, x}, {TW_COS, v+62, x}, {TW_COS, v+63, x}, {TW_COS, v+63, x}, \ + {TW_COS, v+64, x}, {TW_COS, v+64, x}, {TW_COS, v+65, x}, {TW_COS, v+65, x}, \ + {TW_COS, v+66, x}, {TW_COS, v+66, x}, {TW_COS, v+67, x}, {TW_COS, v+67, x}, \ + {TW_COS, v+68, x}, {TW_COS, v+68, x}, {TW_COS, v+69, x}, {TW_COS, v+69, x}, \ + {TW_COS, v+70, x}, {TW_COS, v+70, x}, {TW_COS, v+71, x}, {TW_COS, v+71, x}, \ + {TW_COS, v+72, x}, {TW_COS, v+72, x}, {TW_COS, v+73, x}, {TW_COS, v+73, x}, \ + {TW_COS, v+74, x}, {TW_COS, v+74, x}, {TW_COS, v+75, x}, {TW_COS, v+75, x}, \ + {TW_COS, v+76, x}, {TW_COS, v+76, x}, {TW_COS, v+77, x}, {TW_COS, v+77, x}, \ + {TW_COS, v+78, x}, {TW_COS, v+78, x}, {TW_COS, v+79, x}, {TW_COS, v+79, x}, \ + {TW_COS, v+80, x}, {TW_COS, v+80, x}, {TW_COS, v+81, x}, {TW_COS, v+81, x}, \ + {TW_COS, v+82, x}, {TW_COS, v+82, x}, {TW_COS, v+83, x}, {TW_COS, v+83, x}, \ + {TW_COS, v+84, x}, {TW_COS, v+84, x}, {TW_COS, v+85, x}, {TW_COS, v+85, x}, \ + {TW_COS, v+86, x}, {TW_COS, v+86, x}, {TW_COS, v+87, x}, {TW_COS, v+87, x}, \ + {TW_COS, v+88, x}, {TW_COS, v+88, x}, {TW_COS, v+89, x}, {TW_COS, v+89, x}, \ + {TW_COS, v+90, x}, {TW_COS, v+90, x}, {TW_COS, v+91, x}, {TW_COS, v+91, x}, \ + {TW_COS, v+92, x}, {TW_COS, v+92, x}, {TW_COS, v+93, x}, {TW_COS, v+93, x}, \ + {TW_COS, v+94, x}, {TW_COS, v+94, x}, {TW_COS, v+95, x}, {TW_COS, v+95, x}, \ + {TW_COS, v+96, x}, {TW_COS, v+96, x}, {TW_COS, v+97, x}, {TW_COS, v+97, x}, \ + {TW_COS, v+98, x}, {TW_COS, v+98, x}, {TW_COS, v+99, x}, {TW_COS, v+99, x}, \ + {TW_COS, v+100, x}, {TW_COS, v+100, x}, {TW_COS, v+101, x}, {TW_COS, v+101, x}, \ + {TW_COS, v+102, x}, {TW_COS, v+102, x}, {TW_COS, v+103, x}, {TW_COS, v+103, x}, \ + {TW_COS, v+104, x}, {TW_COS, v+104, x}, {TW_COS, v+105, x}, {TW_COS, v+105, x}, \ + {TW_COS, v+106, x}, {TW_COS, v+106, x}, {TW_COS, v+107, x}, {TW_COS, v+107, x}, \ + {TW_COS, v+108, x}, {TW_COS, v+108, x}, {TW_COS, v+109, x}, {TW_COS, v+109, x}, \ + {TW_COS, v+110, x}, {TW_COS, v+110, x}, {TW_COS, v+111, x}, {TW_COS, v+111, x}, \ + {TW_COS, v+112, x}, {TW_COS, v+112, x}, {TW_COS, v+113, x}, {TW_COS, v+113, x}, \ + {TW_COS, v+114, x}, {TW_COS, v+114, x}, {TW_COS, v+115, x}, {TW_COS, v+115, x}, \ + {TW_COS, v+116, x}, {TW_COS, v+116, x}, {TW_COS, v+117, x}, {TW_COS, v+117, x}, \ + {TW_COS, v+118, x}, {TW_COS, v+118, x}, {TW_COS, v+119, x}, {TW_COS, v+119, x}, \ + {TW_COS, v+120, x}, {TW_COS, v+120, x}, {TW_COS, v+121, x}, {TW_COS, v+121, x}, \ + {TW_COS, v+122, x}, {TW_COS, v+122, x}, {TW_COS, v+123, x}, {TW_COS, v+123, x}, \ + {TW_COS, v+124, x}, {TW_COS, v+124, x}, {TW_COS, v+125, x}, {TW_COS, v+125, x}, \ + {TW_COS, v+126, x}, {TW_COS, v+126, x}, {TW_COS, v+127, x}, {TW_COS, v+127, x}, \ + {TW_COS, v+128, x}, {TW_COS, v+128, x}, {TW_COS, v+129, x}, {TW_COS, v+129, x}, \ + {TW_COS, v+130, x}, {TW_COS, v+130, x}, {TW_COS, v+131, x}, {TW_COS, v+131, x}, \ + {TW_COS, v+132, x}, {TW_COS, v+132, x}, {TW_COS, v+133, x}, {TW_COS, v+133, x}, \ + {TW_COS, v+134, x}, {TW_COS, v+134, x}, {TW_COS, v+135, x}, {TW_COS, v+135, x}, \ + {TW_COS, v+136, x}, {TW_COS, v+136, x}, {TW_COS, v+137, x}, {TW_COS, v+137, x}, \ + {TW_COS, v+138, x}, {TW_COS, v+138, x}, {TW_COS, v+139, x}, {TW_COS, v+139, x}, \ + {TW_COS, v+140, x}, {TW_COS, v+140, x}, {TW_COS, v+141, x}, {TW_COS, v+141, x}, \ + {TW_COS, v+142, x}, {TW_COS, v+142, x}, {TW_COS, v+143, x}, {TW_COS, v+143, x}, \ + {TW_COS, v+144, x}, {TW_COS, v+144, x}, {TW_COS, v+145, x}, {TW_COS, v+145, x}, \ + {TW_COS, v+146, x}, {TW_COS, v+146, x}, {TW_COS, v+147, x}, {TW_COS, v+147, x}, \ + {TW_COS, v+148, x}, {TW_COS, v+148, x}, {TW_COS, v+149, x}, {TW_COS, v+149, x}, \ + {TW_COS, v+150, x}, {TW_COS, v+150, x}, {TW_COS, v+151, x}, {TW_COS, v+151, x}, \ + {TW_COS, v+152, x}, {TW_COS, v+152, x}, {TW_COS, v+153, x}, {TW_COS, v+153, x}, \ + {TW_COS, v+154, x}, {TW_COS, v+154, x}, {TW_COS, v+155, x}, {TW_COS, v+155, x}, \ + {TW_COS, v+156, x}, {TW_COS, v+156, x}, {TW_COS, v+157, x}, {TW_COS, v+157, x}, \ + {TW_COS, v+158, x}, {TW_COS, v+158, x}, {TW_COS, v+159, x}, {TW_COS, v+159, x}, \ + {TW_COS, v+160, x}, {TW_COS, v+160, x}, {TW_COS, v+161, x}, {TW_COS, v+161, x}, \ + {TW_COS, v+162, x}, {TW_COS, v+162, x}, {TW_COS, v+163, x}, {TW_COS, v+163, x}, \ + {TW_COS, v+164, x}, {TW_COS, v+164, x}, {TW_COS, v+165, x}, {TW_COS, v+165, x}, \ + {TW_COS, v+166, x}, {TW_COS, v+166, x}, {TW_COS, v+167, x}, {TW_COS, v+167, x}, \ + {TW_COS, v+168, x}, {TW_COS, v+168, x}, {TW_COS, v+169, x}, {TW_COS, v+169, x}, \ + {TW_COS, v+170, x}, {TW_COS, v+170, x}, {TW_COS, v+171, x}, {TW_COS, v+171, x}, \ + {TW_COS, v+172, x}, {TW_COS, v+172, x}, {TW_COS, v+173, x}, {TW_COS, v+173, x}, \ + {TW_COS, v+174, x}, {TW_COS, v+174, x}, {TW_COS, v+175, x}, {TW_COS, v+175, x}, \ + {TW_COS, v+176, x}, {TW_COS, v+176, x}, {TW_COS, v+177, x}, {TW_COS, v+177, x}, \ + {TW_COS, v+178, x}, {TW_COS, v+178, x}, {TW_COS, v+179, x}, {TW_COS, v+179, x}, \ + {TW_COS, v+180, x}, {TW_COS, v+180, x}, {TW_COS, v+181, x}, {TW_COS, v+181, x}, \ + {TW_COS, v+182, x}, {TW_COS, v+182, x}, {TW_COS, v+183, x}, {TW_COS, v+183, x}, \ + {TW_COS, v+184, x}, {TW_COS, v+184, x}, {TW_COS, v+185, x}, {TW_COS, v+185, x}, \ + {TW_COS, v+186, x}, {TW_COS, v+186, x}, {TW_COS, v+187, x}, {TW_COS, v+187, x}, \ + {TW_COS, v+188, x}, {TW_COS, v+188, x}, {TW_COS, v+189, x}, {TW_COS, v+189, x}, \ + {TW_COS, v+190, x}, {TW_COS, v+190, x}, {TW_COS, v+191, x}, {TW_COS, v+191, x}, \ + {TW_COS, v+192, x}, {TW_COS, v+192, x}, {TW_COS, v+193, x}, {TW_COS, v+193, x}, \ + {TW_COS, v+194, x}, {TW_COS, v+194, x}, {TW_COS, v+195, x}, {TW_COS, v+195, x}, \ + {TW_COS, v+196, x}, {TW_COS, v+196, x}, {TW_COS, v+197, x}, {TW_COS, v+197, x}, \ + {TW_COS, v+198, x}, {TW_COS, v+198, x}, {TW_COS, v+199, x}, {TW_COS, v+199, x}, \ + {TW_COS, v+200, x}, {TW_COS, v+200, x}, {TW_COS, v+201, x}, {TW_COS, v+201, x}, \ + {TW_COS, v+202, x}, {TW_COS, v+202, x}, {TW_COS, v+203, x}, {TW_COS, v+203, x}, \ + {TW_COS, v+204, x}, {TW_COS, v+204, x}, {TW_COS, v+205, x}, {TW_COS, v+205, x}, \ + {TW_COS, v+206, x}, {TW_COS, v+206, x}, {TW_COS, v+207, x}, {TW_COS, v+207, x}, \ + {TW_COS, v+208, x}, {TW_COS, v+208, x}, {TW_COS, v+209, x}, {TW_COS, v+209, x}, \ + {TW_COS, v+210, x}, {TW_COS, v+210, x}, {TW_COS, v+211, x}, {TW_COS, v+211, x}, \ + {TW_COS, v+212, x}, {TW_COS, v+212, x}, {TW_COS, v+213, x}, {TW_COS, v+213, x}, \ + {TW_COS, v+214, x}, {TW_COS, v+214, x}, {TW_COS, v+215, x}, {TW_COS, v+215, x}, \ + {TW_COS, v+216, x}, {TW_COS, v+216, x}, {TW_COS, v+217, x}, {TW_COS, v+217, x}, \ + {TW_COS, v+218, x}, {TW_COS, v+218, x}, {TW_COS, v+219, x}, {TW_COS, v+219, x}, \ + {TW_COS, v+220, x}, {TW_COS, v+220, x}, {TW_COS, v+221, x}, {TW_COS, v+221, x}, \ + {TW_COS, v+222, x}, {TW_COS, v+222, x}, {TW_COS, v+223, x}, {TW_COS, v+223, x}, \ + {TW_COS, v+224, x}, {TW_COS, v+224, x}, {TW_COS, v+225, x}, {TW_COS, v+225, x}, \ + {TW_COS, v+226, x}, {TW_COS, v+226, x}, {TW_COS, v+227, x}, {TW_COS, v+227, x}, \ + {TW_COS, v+228, x}, {TW_COS, v+228, x}, {TW_COS, v+229, x}, {TW_COS, v+229, x}, \ + {TW_COS, v+230, x}, {TW_COS, v+230, x}, {TW_COS, v+231, x}, {TW_COS, v+231, x}, \ + {TW_COS, v+232, x}, {TW_COS, v+232, x}, {TW_COS, v+233, x}, {TW_COS, v+233, x}, \ + {TW_COS, v+234, x}, {TW_COS, v+234, x}, {TW_COS, v+235, x}, {TW_COS, v+235, x}, \ + {TW_COS, v+236, x}, {TW_COS, v+236, x}, {TW_COS, v+237, x}, {TW_COS, v+237, x}, \ + {TW_COS, v+238, x}, {TW_COS, v+238, x}, {TW_COS, v+239, x}, {TW_COS, v+239, x}, \ + {TW_COS, v+240, x}, {TW_COS, v+240, x}, {TW_COS, v+241, x}, {TW_COS, v+241, x}, \ + {TW_COS, v+242, x}, {TW_COS, v+242, x}, {TW_COS, v+243, x}, {TW_COS, v+243, x}, \ + {TW_COS, v+244, x}, {TW_COS, v+244, x}, {TW_COS, v+245, x}, {TW_COS, v+245, x}, \ + {TW_COS, v+246, x}, {TW_COS, v+246, x}, {TW_COS, v+247, x}, {TW_COS, v+247, x}, \ + {TW_COS, v+248, x}, {TW_COS, v+248, x}, {TW_COS, v+249, x}, {TW_COS, v+249, x}, \ + {TW_COS, v+250, x}, {TW_COS, v+250, x}, {TW_COS, v+251, x}, {TW_COS, v+251, x}, \ + {TW_COS, v+252, x}, {TW_COS, v+252, x}, {TW_COS, v+253, x}, {TW_COS, v+253, x}, \ + {TW_COS, v+254, x}, {TW_COS, v+254, x}, {TW_COS, v+255, x}, {TW_COS, v+255, x}, \ + {TW_SIN, v+0, -x}, {TW_SIN, v+0, x}, {TW_SIN, v+1, -x}, {TW_SIN, v+1, x}, \ + {TW_SIN, v+2, -x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, -x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, -x}, {TW_SIN, v+4, x}, {TW_SIN, v+5, -x}, {TW_SIN, v+5, x}, \ + {TW_SIN, v+6, -x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, -x}, {TW_SIN, v+7, x}, \ + {TW_SIN, v+8, -x}, {TW_SIN, v+8, x}, {TW_SIN, v+9, -x}, {TW_SIN, v+9, x}, \ + {TW_SIN, v+10, -x}, {TW_SIN, v+10, x}, {TW_SIN, v+11, -x}, {TW_SIN, v+11, x}, \ + {TW_SIN, v+12, -x}, {TW_SIN, v+12, x}, {TW_SIN, v+13, -x}, {TW_SIN, v+13, x}, \ + {TW_SIN, v+14, -x}, {TW_SIN, v+14, x}, {TW_SIN, v+15, -x}, {TW_SIN, v+15, x}, \ + {TW_SIN, v+16, -x}, {TW_SIN, v+16, x}, {TW_SIN, v+17, -x}, {TW_SIN, v+17, x}, \ + {TW_SIN, v+18, -x}, {TW_SIN, v+18, x}, {TW_SIN, v+19, -x}, {TW_SIN, v+19, x}, \ + {TW_SIN, v+20, -x}, {TW_SIN, v+20, x}, {TW_SIN, v+21, -x}, {TW_SIN, v+21, x}, \ + {TW_SIN, v+22, -x}, {TW_SIN, v+22, x}, {TW_SIN, v+23, -x}, {TW_SIN, v+23, x}, \ + {TW_SIN, v+24, -x}, {TW_SIN, v+24, x}, {TW_SIN, v+25, -x}, {TW_SIN, v+25, x}, \ + {TW_SIN, v+26, -x}, {TW_SIN, v+26, x}, {TW_SIN, v+27, -x}, {TW_SIN, v+27, x}, \ + {TW_SIN, v+28, -x}, {TW_SIN, v+28, x}, {TW_SIN, v+29, -x}, {TW_SIN, v+29, x}, \ + {TW_SIN, v+30, -x}, {TW_SIN, v+30, x}, {TW_SIN, v+31, -x}, {TW_SIN, v+31, x}, \ + {TW_SIN, v+32, -x}, {TW_SIN, v+32, x}, {TW_SIN, v+33, -x}, {TW_SIN, v+33, x}, \ + {TW_SIN, v+34, -x}, {TW_SIN, v+34, x}, {TW_SIN, v+35, -x}, {TW_SIN, v+35, x}, \ + {TW_SIN, v+36, -x}, {TW_SIN, v+36, x}, {TW_SIN, v+37, -x}, {TW_SIN, v+37, x}, \ + {TW_SIN, v+38, -x}, {TW_SIN, v+38, x}, {TW_SIN, v+39, -x}, {TW_SIN, v+39, x}, \ + {TW_SIN, v+40, -x}, {TW_SIN, v+40, x}, {TW_SIN, v+41, -x}, {TW_SIN, v+41, x}, \ + {TW_SIN, v+42, -x}, {TW_SIN, v+42, x}, {TW_SIN, v+43, -x}, {TW_SIN, v+43, x}, \ + {TW_SIN, v+44, -x}, {TW_SIN, v+44, x}, {TW_SIN, v+45, -x}, {TW_SIN, v+45, x}, \ + {TW_SIN, v+46, -x}, {TW_SIN, v+46, x}, {TW_SIN, v+47, -x}, {TW_SIN, v+47, x}, \ + {TW_SIN, v+48, -x}, {TW_SIN, v+48, x}, {TW_SIN, v+49, -x}, {TW_SIN, v+49, x}, \ + {TW_SIN, v+50, -x}, {TW_SIN, v+50, x}, {TW_SIN, v+51, -x}, {TW_SIN, v+51, x}, \ + {TW_SIN, v+52, -x}, {TW_SIN, v+52, x}, {TW_SIN, v+53, -x}, {TW_SIN, v+53, x}, \ + {TW_SIN, v+54, -x}, {TW_SIN, v+54, x}, {TW_SIN, v+55, -x}, {TW_SIN, v+55, x}, \ + {TW_SIN, v+56, -x}, {TW_SIN, v+56, x}, {TW_SIN, v+57, -x}, {TW_SIN, v+57, x}, \ + {TW_SIN, v+58, -x}, {TW_SIN, v+58, x}, {TW_SIN, v+59, -x}, {TW_SIN, v+59, x}, \ + {TW_SIN, v+60, -x}, {TW_SIN, v+60, x}, {TW_SIN, v+61, -x}, {TW_SIN, v+61, x}, \ + {TW_SIN, v+62, -x}, {TW_SIN, v+62, x}, {TW_SIN, v+63, -x}, {TW_SIN, v+63, x}, \ + {TW_SIN, v+64, -x}, {TW_SIN, v+64, x}, {TW_SIN, v+65, -x}, {TW_SIN, v+65, x}, \ + {TW_SIN, v+66, -x}, {TW_SIN, v+66, x}, {TW_SIN, v+67, -x}, {TW_SIN, v+67, x}, \ + {TW_SIN, v+68, -x}, {TW_SIN, v+68, x}, {TW_SIN, v+69, -x}, {TW_SIN, v+69, x}, \ + {TW_SIN, v+70, -x}, {TW_SIN, v+70, x}, {TW_SIN, v+71, -x}, {TW_SIN, v+71, x}, \ + {TW_SIN, v+72, -x}, {TW_SIN, v+72, x}, {TW_SIN, v+73, -x}, {TW_SIN, v+73, x}, \ + {TW_SIN, v+74, -x}, {TW_SIN, v+74, x}, {TW_SIN, v+75, -x}, {TW_SIN, v+75, x}, \ + {TW_SIN, v+76, -x}, {TW_SIN, v+76, x}, {TW_SIN, v+77, -x}, {TW_SIN, v+77, x}, \ + {TW_SIN, v+78, -x}, {TW_SIN, v+78, x}, {TW_SIN, v+79, -x}, {TW_SIN, v+79, x}, \ + {TW_SIN, v+80, -x}, {TW_SIN, v+80, x}, {TW_SIN, v+81, -x}, {TW_SIN, v+81, x}, \ + {TW_SIN, v+82, -x}, {TW_SIN, v+82, x}, {TW_SIN, v+83, -x}, {TW_SIN, v+83, x}, \ + {TW_SIN, v+84, -x}, {TW_SIN, v+84, x}, {TW_SIN, v+85, -x}, {TW_SIN, v+85, x}, \ + {TW_SIN, v+86, -x}, {TW_SIN, v+86, x}, {TW_SIN, v+87, -x}, {TW_SIN, v+87, x}, \ + {TW_SIN, v+88, -x}, {TW_SIN, v+88, x}, {TW_SIN, v+89, -x}, {TW_SIN, v+89, x}, \ + {TW_SIN, v+90, -x}, {TW_SIN, v+90, x}, {TW_SIN, v+91, -x}, {TW_SIN, v+91, x}, \ + {TW_SIN, v+92, -x}, {TW_SIN, v+92, x}, {TW_SIN, v+93, -x}, {TW_SIN, v+93, x}, \ + {TW_SIN, v+94, -x}, {TW_SIN, v+94, x}, {TW_SIN, v+95, -x}, {TW_SIN, v+95, x}, \ + {TW_SIN, v+96, -x}, {TW_SIN, v+96, x}, {TW_SIN, v+97, -x}, {TW_SIN, v+97, x}, \ + {TW_SIN, v+98, -x}, {TW_SIN, v+98, x}, {TW_SIN, v+99, -x}, {TW_SIN, v+99, x}, \ + {TW_SIN, v+100, -x}, {TW_SIN, v+100, x}, {TW_SIN, v+101, -x}, {TW_SIN, v+101, x}, \ + {TW_SIN, v+102, -x}, {TW_SIN, v+102, x}, {TW_SIN, v+103, -x}, {TW_SIN, v+103, x}, \ + {TW_SIN, v+104, -x}, {TW_SIN, v+104, x}, {TW_SIN, v+105, -x}, {TW_SIN, v+105, x}, \ + {TW_SIN, v+106, -x}, {TW_SIN, v+106, x}, {TW_SIN, v+107, -x}, {TW_SIN, v+107, x}, \ + {TW_SIN, v+108, -x}, {TW_SIN, v+108, x}, {TW_SIN, v+109, -x}, {TW_SIN, v+109, x}, \ + {TW_SIN, v+110, -x}, {TW_SIN, v+110, x}, {TW_SIN, v+111, -x}, {TW_SIN, v+111, x}, \ + {TW_SIN, v+112, -x}, {TW_SIN, v+112, x}, {TW_SIN, v+113, -x}, {TW_SIN, v+113, x}, \ + {TW_SIN, v+114, -x}, {TW_SIN, v+114, x}, {TW_SIN, v+115, -x}, {TW_SIN, v+115, x}, \ + {TW_SIN, v+116, -x}, {TW_SIN, v+116, x}, {TW_SIN, v+117, -x}, {TW_SIN, v+117, x}, \ + {TW_SIN, v+118, -x}, {TW_SIN, v+118, x}, {TW_SIN, v+119, -x}, {TW_SIN, v+119, x}, \ + {TW_SIN, v+120, -x}, {TW_SIN, v+120, x}, {TW_SIN, v+121, -x}, {TW_SIN, v+121, x}, \ + {TW_SIN, v+122, -x}, {TW_SIN, v+122, x}, {TW_SIN, v+123, -x}, {TW_SIN, v+123, x}, \ + {TW_SIN, v+124, -x}, {TW_SIN, v+124, x}, {TW_SIN, v+125, -x}, {TW_SIN, v+125, x}, \ + {TW_SIN, v+126, -x}, {TW_SIN, v+126, x}, {TW_SIN, v+127, -x}, {TW_SIN, v+127, x}, \ + {TW_SIN, v+128, -x}, {TW_SIN, v+128, x}, {TW_SIN, v+129, -x}, {TW_SIN, v+129, x}, \ + {TW_SIN, v+130, -x}, {TW_SIN, v+130, x}, {TW_SIN, v+131, -x}, {TW_SIN, v+131, x}, \ + {TW_SIN, v+132, -x}, {TW_SIN, v+132, x}, {TW_SIN, v+133, -x}, {TW_SIN, v+133, x}, \ + {TW_SIN, v+134, -x}, {TW_SIN, v+134, x}, {TW_SIN, v+135, -x}, {TW_SIN, v+135, x}, \ + {TW_SIN, v+136, -x}, {TW_SIN, v+136, x}, {TW_SIN, v+137, -x}, {TW_SIN, v+137, x}, \ + {TW_SIN, v+138, -x}, {TW_SIN, v+138, x}, {TW_SIN, v+139, -x}, {TW_SIN, v+139, x}, \ + {TW_SIN, v+140, -x}, {TW_SIN, v+140, x}, {TW_SIN, v+141, -x}, {TW_SIN, v+141, x}, \ + {TW_SIN, v+142, -x}, {TW_SIN, v+142, x}, {TW_SIN, v+143, -x}, {TW_SIN, v+143, x}, \ + {TW_SIN, v+144, -x}, {TW_SIN, v+144, x}, {TW_SIN, v+145, -x}, {TW_SIN, v+145, x}, \ + {TW_SIN, v+146, -x}, {TW_SIN, v+146, x}, {TW_SIN, v+147, -x}, {TW_SIN, v+147, x}, \ + {TW_SIN, v+148, -x}, {TW_SIN, v+148, x}, {TW_SIN, v+149, -x}, {TW_SIN, v+149, x}, \ + {TW_SIN, v+150, -x}, {TW_SIN, v+150, x}, {TW_SIN, v+151, -x}, {TW_SIN, v+151, x}, \ + {TW_SIN, v+152, -x}, {TW_SIN, v+152, x}, {TW_SIN, v+153, -x}, {TW_SIN, v+153, x}, \ + {TW_SIN, v+154, -x}, {TW_SIN, v+154, x}, {TW_SIN, v+155, -x}, {TW_SIN, v+155, x}, \ + {TW_SIN, v+156, -x}, {TW_SIN, v+156, x}, {TW_SIN, v+157, -x}, {TW_SIN, v+157, x}, \ + {TW_SIN, v+158, -x}, {TW_SIN, v+158, x}, {TW_SIN, v+159, -x}, {TW_SIN, v+159, x}, \ + {TW_SIN, v+160, -x}, {TW_SIN, v+160, x}, {TW_SIN, v+161, -x}, {TW_SIN, v+161, x}, \ + {TW_SIN, v+162, -x}, {TW_SIN, v+162, x}, {TW_SIN, v+163, -x}, {TW_SIN, v+163, x}, \ + {TW_SIN, v+164, -x}, {TW_SIN, v+164, x}, {TW_SIN, v+165, -x}, {TW_SIN, v+165, x}, \ + {TW_SIN, v+166, -x}, {TW_SIN, v+166, x}, {TW_SIN, v+167, -x}, {TW_SIN, v+167, x}, \ + {TW_SIN, v+168, -x}, {TW_SIN, v+168, x}, {TW_SIN, v+169, -x}, {TW_SIN, v+169, x}, \ + {TW_SIN, v+170, -x}, {TW_SIN, v+170, x}, {TW_SIN, v+171, -x}, {TW_SIN, v+171, x}, \ + {TW_SIN, v+172, -x}, {TW_SIN, v+172, x}, {TW_SIN, v+173, -x}, {TW_SIN, v+173, x}, \ + {TW_SIN, v+174, -x}, {TW_SIN, v+174, x}, {TW_SIN, v+175, -x}, {TW_SIN, v+175, x}, \ + {TW_SIN, v+176, -x}, {TW_SIN, v+176, x}, {TW_SIN, v+177, -x}, {TW_SIN, v+177, x}, \ + {TW_SIN, v+178, -x}, {TW_SIN, v+178, x}, {TW_SIN, v+179, -x}, {TW_SIN, v+179, x}, \ + {TW_SIN, v+180, -x}, {TW_SIN, v+180, x}, {TW_SIN, v+181, -x}, {TW_SIN, v+181, x}, \ + {TW_SIN, v+182, -x}, {TW_SIN, v+182, x}, {TW_SIN, v+183, -x}, {TW_SIN, v+183, x}, \ + {TW_SIN, v+184, -x}, {TW_SIN, v+184, x}, {TW_SIN, v+185, -x}, {TW_SIN, v+185, x}, \ + {TW_SIN, v+186, -x}, {TW_SIN, v+186, x}, {TW_SIN, v+187, -x}, {TW_SIN, v+187, x}, \ + {TW_SIN, v+188, -x}, {TW_SIN, v+188, x}, {TW_SIN, v+189, -x}, {TW_SIN, v+189, x}, \ + {TW_SIN, v+190, -x}, {TW_SIN, v+190, x}, {TW_SIN, v+191, -x}, {TW_SIN, v+191, x}, \ + {TW_SIN, v+192, -x}, {TW_SIN, v+192, x}, {TW_SIN, v+193, -x}, {TW_SIN, v+193, x}, \ + {TW_SIN, v+194, -x}, {TW_SIN, v+194, x}, {TW_SIN, v+195, -x}, {TW_SIN, v+195, x}, \ + {TW_SIN, v+196, -x}, {TW_SIN, v+196, x}, {TW_SIN, v+197, -x}, {TW_SIN, v+197, x}, \ + {TW_SIN, v+198, -x}, {TW_SIN, v+198, x}, {TW_SIN, v+199, -x}, {TW_SIN, v+199, x}, \ + {TW_SIN, v+200, -x}, {TW_SIN, v+200, x}, {TW_SIN, v+201, -x}, {TW_SIN, v+201, x}, \ + {TW_SIN, v+202, -x}, {TW_SIN, v+202, x}, {TW_SIN, v+203, -x}, {TW_SIN, v+203, x}, \ + {TW_SIN, v+204, -x}, {TW_SIN, v+204, x}, {TW_SIN, v+205, -x}, {TW_SIN, v+205, x}, \ + {TW_SIN, v+206, -x}, {TW_SIN, v+206, x}, {TW_SIN, v+207, -x}, {TW_SIN, v+207, x}, \ + {TW_SIN, v+208, -x}, {TW_SIN, v+208, x}, {TW_SIN, v+209, -x}, {TW_SIN, v+209, x}, \ + {TW_SIN, v+210, -x}, {TW_SIN, v+210, x}, {TW_SIN, v+211, -x}, {TW_SIN, v+211, x}, \ + {TW_SIN, v+212, -x}, {TW_SIN, v+212, x}, {TW_SIN, v+213, -x}, {TW_SIN, v+213, x}, \ + {TW_SIN, v+214, -x}, {TW_SIN, v+214, x}, {TW_SIN, v+215, -x}, {TW_SIN, v+215, x}, \ + {TW_SIN, v+216, -x}, {TW_SIN, v+216, x}, {TW_SIN, v+217, -x}, {TW_SIN, v+217, x}, \ + {TW_SIN, v+218, -x}, {TW_SIN, v+218, x}, {TW_SIN, v+219, -x}, {TW_SIN, v+219, x}, \ + {TW_SIN, v+220, -x}, {TW_SIN, v+220, x}, {TW_SIN, v+221, -x}, {TW_SIN, v+221, x}, \ + {TW_SIN, v+222, -x}, {TW_SIN, v+222, x}, {TW_SIN, v+223, -x}, {TW_SIN, v+223, x}, \ + {TW_SIN, v+224, -x}, {TW_SIN, v+224, x}, {TW_SIN, v+225, -x}, {TW_SIN, v+225, x}, \ + {TW_SIN, v+226, -x}, {TW_SIN, v+226, x}, {TW_SIN, v+227, -x}, {TW_SIN, v+227, x}, \ + {TW_SIN, v+228, -x}, {TW_SIN, v+228, x}, {TW_SIN, v+229, -x}, {TW_SIN, v+229, x}, \ + {TW_SIN, v+230, -x}, {TW_SIN, v+230, x}, {TW_SIN, v+231, -x}, {TW_SIN, v+231, x}, \ + {TW_SIN, v+232, -x}, {TW_SIN, v+232, x}, {TW_SIN, v+233, -x}, {TW_SIN, v+233, x}, \ + {TW_SIN, v+234, -x}, {TW_SIN, v+234, x}, {TW_SIN, v+235, -x}, {TW_SIN, v+235, x}, \ + {TW_SIN, v+236, -x}, {TW_SIN, v+236, x}, {TW_SIN, v+237, -x}, {TW_SIN, v+237, x}, \ + {TW_SIN, v+238, -x}, {TW_SIN, v+238, x}, {TW_SIN, v+239, -x}, {TW_SIN, v+239, x}, \ + {TW_SIN, v+240, -x}, {TW_SIN, v+240, x}, {TW_SIN, v+241, -x}, {TW_SIN, v+241, x}, \ + {TW_SIN, v+242, -x}, {TW_SIN, v+242, x}, {TW_SIN, v+243, -x}, {TW_SIN, v+243, x}, \ + {TW_SIN, v+244, -x}, {TW_SIN, v+244, x}, {TW_SIN, v+245, -x}, {TW_SIN, v+245, x}, \ + {TW_SIN, v+246, -x}, {TW_SIN, v+246, x}, {TW_SIN, v+247, -x}, {TW_SIN, v+247, x}, \ + {TW_SIN, v+248, -x}, {TW_SIN, v+248, x}, {TW_SIN, v+249, -x}, {TW_SIN, v+249, x}, \ + {TW_SIN, v+250, -x}, {TW_SIN, v+250, x}, {TW_SIN, v+251, -x}, {TW_SIN, v+251, x}, \ + {TW_SIN, v+252, -x}, {TW_SIN, v+252, x}, {TW_SIN, v+253, -x}, {TW_SIN, v+253, x}, \ + {TW_SIN, v+254, -x}, {TW_SIN, v+254, x}, {TW_SIN, v+255, -x}, {TW_SIN, v+255, x} +#endif // VTW_SIZE == 512 +#if defined(VTW_SIZE) && VTW_SIZE == 1024 +#warning "using VTW2 with 1024" +#define VTW2(v,x) {TW_COS, v+0, x}, {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+1, x}, \ + {TW_COS, v+2, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+5, x}, \ + {TW_COS, v+6, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, {TW_COS, v+7, x}, \ + {TW_COS, v+8, x}, {TW_COS, v+8, x}, {TW_COS, v+9, x}, {TW_COS, v+9, x}, \ + {TW_COS, v+10, x}, {TW_COS, v+10, x}, {TW_COS, v+11, x}, {TW_COS, v+11, x}, \ + {TW_COS, v+12, x}, {TW_COS, v+12, x}, {TW_COS, v+13, x}, {TW_COS, v+13, x}, \ + {TW_COS, v+14, x}, {TW_COS, v+14, x}, {TW_COS, v+15, x}, {TW_COS, v+15, x}, \ + {TW_COS, v+16, x}, {TW_COS, v+16, x}, {TW_COS, v+17, x}, {TW_COS, v+17, x}, \ + {TW_COS, v+18, x}, {TW_COS, v+18, x}, {TW_COS, v+19, x}, {TW_COS, v+19, x}, \ + {TW_COS, v+20, x}, {TW_COS, v+20, x}, {TW_COS, v+21, x}, {TW_COS, v+21, x}, \ + {TW_COS, v+22, x}, {TW_COS, v+22, x}, {TW_COS, v+23, x}, {TW_COS, v+23, x}, \ + {TW_COS, v+24, x}, {TW_COS, v+24, x}, {TW_COS, v+25, x}, {TW_COS, v+25, x}, \ + {TW_COS, v+26, x}, {TW_COS, v+26, x}, {TW_COS, v+27, x}, {TW_COS, v+27, x}, \ + {TW_COS, v+28, x}, {TW_COS, v+28, x}, {TW_COS, v+29, x}, {TW_COS, v+29, x}, \ + {TW_COS, v+30, x}, {TW_COS, v+30, x}, {TW_COS, v+31, x}, {TW_COS, v+31, x}, \ + {TW_COS, v+32, x}, {TW_COS, v+32, x}, {TW_COS, v+33, x}, {TW_COS, v+33, x}, \ + {TW_COS, v+34, x}, {TW_COS, v+34, x}, {TW_COS, v+35, x}, {TW_COS, v+35, x}, \ + {TW_COS, v+36, x}, {TW_COS, v+36, x}, {TW_COS, v+37, x}, {TW_COS, v+37, x}, \ + {TW_COS, v+38, x}, {TW_COS, v+38, x}, {TW_COS, v+39, x}, {TW_COS, v+39, x}, \ + {TW_COS, v+40, x}, {TW_COS, v+40, x}, {TW_COS, v+41, x}, {TW_COS, v+41, x}, \ + {TW_COS, v+42, x}, {TW_COS, v+42, x}, {TW_COS, v+43, x}, {TW_COS, v+43, x}, \ + {TW_COS, v+44, x}, {TW_COS, v+44, x}, {TW_COS, v+45, x}, {TW_COS, v+45, x}, \ + {TW_COS, v+46, x}, {TW_COS, v+46, x}, {TW_COS, v+47, x}, {TW_COS, v+47, x}, \ + {TW_COS, v+48, x}, {TW_COS, v+48, x}, {TW_COS, v+49, x}, {TW_COS, v+49, x}, \ + {TW_COS, v+50, x}, {TW_COS, v+50, x}, {TW_COS, v+51, x}, {TW_COS, v+51, x}, \ + {TW_COS, v+52, x}, {TW_COS, v+52, x}, {TW_COS, v+53, x}, {TW_COS, v+53, x}, \ + {TW_COS, v+54, x}, {TW_COS, v+54, x}, {TW_COS, v+55, x}, {TW_COS, v+55, x}, \ + {TW_COS, v+56, x}, {TW_COS, v+56, x}, {TW_COS, v+57, x}, {TW_COS, v+57, x}, \ + {TW_COS, v+58, x}, {TW_COS, v+58, x}, {TW_COS, v+59, x}, {TW_COS, v+59, x}, \ + {TW_COS, v+60, x}, {TW_COS, v+60, x}, {TW_COS, v+61, x}, {TW_COS, v+61, x}, \ + {TW_COS, v+62, x}, {TW_COS, v+62, x}, {TW_COS, v+63, x}, {TW_COS, v+63, x}, \ + {TW_COS, v+64, x}, {TW_COS, v+64, x}, {TW_COS, v+65, x}, {TW_COS, v+65, x}, \ + {TW_COS, v+66, x}, {TW_COS, v+66, x}, {TW_COS, v+67, x}, {TW_COS, v+67, x}, \ + {TW_COS, v+68, x}, {TW_COS, v+68, x}, {TW_COS, v+69, x}, {TW_COS, v+69, x}, \ + {TW_COS, v+70, x}, {TW_COS, v+70, x}, {TW_COS, v+71, x}, {TW_COS, v+71, x}, \ + {TW_COS, v+72, x}, {TW_COS, v+72, x}, {TW_COS, v+73, x}, {TW_COS, v+73, x}, \ + {TW_COS, v+74, x}, {TW_COS, v+74, x}, {TW_COS, v+75, x}, {TW_COS, v+75, x}, \ + {TW_COS, v+76, x}, {TW_COS, v+76, x}, {TW_COS, v+77, x}, {TW_COS, v+77, x}, \ + {TW_COS, v+78, x}, {TW_COS, v+78, x}, {TW_COS, v+79, x}, {TW_COS, v+79, x}, \ + {TW_COS, v+80, x}, {TW_COS, v+80, x}, {TW_COS, v+81, x}, {TW_COS, v+81, x}, \ + {TW_COS, v+82, x}, {TW_COS, v+82, x}, {TW_COS, v+83, x}, {TW_COS, v+83, x}, \ + {TW_COS, v+84, x}, {TW_COS, v+84, x}, {TW_COS, v+85, x}, {TW_COS, v+85, x}, \ + {TW_COS, v+86, x}, {TW_COS, v+86, x}, {TW_COS, v+87, x}, {TW_COS, v+87, x}, \ + {TW_COS, v+88, x}, {TW_COS, v+88, x}, {TW_COS, v+89, x}, {TW_COS, v+89, x}, \ + {TW_COS, v+90, x}, {TW_COS, v+90, x}, {TW_COS, v+91, x}, {TW_COS, v+91, x}, \ + {TW_COS, v+92, x}, {TW_COS, v+92, x}, {TW_COS, v+93, x}, {TW_COS, v+93, x}, \ + {TW_COS, v+94, x}, {TW_COS, v+94, x}, {TW_COS, v+95, x}, {TW_COS, v+95, x}, \ + {TW_COS, v+96, x}, {TW_COS, v+96, x}, {TW_COS, v+97, x}, {TW_COS, v+97, x}, \ + {TW_COS, v+98, x}, {TW_COS, v+98, x}, {TW_COS, v+99, x}, {TW_COS, v+99, x}, \ + {TW_COS, v+100, x}, {TW_COS, v+100, x}, {TW_COS, v+101, x}, {TW_COS, v+101, x}, \ + {TW_COS, v+102, x}, {TW_COS, v+102, x}, {TW_COS, v+103, x}, {TW_COS, v+103, x}, \ + {TW_COS, v+104, x}, {TW_COS, v+104, x}, {TW_COS, v+105, x}, {TW_COS, v+105, x}, \ + {TW_COS, v+106, x}, {TW_COS, v+106, x}, {TW_COS, v+107, x}, {TW_COS, v+107, x}, \ + {TW_COS, v+108, x}, {TW_COS, v+108, x}, {TW_COS, v+109, x}, {TW_COS, v+109, x}, \ + {TW_COS, v+110, x}, {TW_COS, v+110, x}, {TW_COS, v+111, x}, {TW_COS, v+111, x}, \ + {TW_COS, v+112, x}, {TW_COS, v+112, x}, {TW_COS, v+113, x}, {TW_COS, v+113, x}, \ + {TW_COS, v+114, x}, {TW_COS, v+114, x}, {TW_COS, v+115, x}, {TW_COS, v+115, x}, \ + {TW_COS, v+116, x}, {TW_COS, v+116, x}, {TW_COS, v+117, x}, {TW_COS, v+117, x}, \ + {TW_COS, v+118, x}, {TW_COS, v+118, x}, {TW_COS, v+119, x}, {TW_COS, v+119, x}, \ + {TW_COS, v+120, x}, {TW_COS, v+120, x}, {TW_COS, v+121, x}, {TW_COS, v+121, x}, \ + {TW_COS, v+122, x}, {TW_COS, v+122, x}, {TW_COS, v+123, x}, {TW_COS, v+123, x}, \ + {TW_COS, v+124, x}, {TW_COS, v+124, x}, {TW_COS, v+125, x}, {TW_COS, v+125, x}, \ + {TW_COS, v+126, x}, {TW_COS, v+126, x}, {TW_COS, v+127, x}, {TW_COS, v+127, x}, \ + {TW_COS, v+128, x}, {TW_COS, v+128, x}, {TW_COS, v+129, x}, {TW_COS, v+129, x}, \ + {TW_COS, v+130, x}, {TW_COS, v+130, x}, {TW_COS, v+131, x}, {TW_COS, v+131, x}, \ + {TW_COS, v+132, x}, {TW_COS, v+132, x}, {TW_COS, v+133, x}, {TW_COS, v+133, x}, \ + {TW_COS, v+134, x}, {TW_COS, v+134, x}, {TW_COS, v+135, x}, {TW_COS, v+135, x}, \ + {TW_COS, v+136, x}, {TW_COS, v+136, x}, {TW_COS, v+137, x}, {TW_COS, v+137, x}, \ + {TW_COS, v+138, x}, {TW_COS, v+138, x}, {TW_COS, v+139, x}, {TW_COS, v+139, x}, \ + {TW_COS, v+140, x}, {TW_COS, v+140, x}, {TW_COS, v+141, x}, {TW_COS, v+141, x}, \ + {TW_COS, v+142, x}, {TW_COS, v+142, x}, {TW_COS, v+143, x}, {TW_COS, v+143, x}, \ + {TW_COS, v+144, x}, {TW_COS, v+144, x}, {TW_COS, v+145, x}, {TW_COS, v+145, x}, \ + {TW_COS, v+146, x}, {TW_COS, v+146, x}, {TW_COS, v+147, x}, {TW_COS, v+147, x}, \ + {TW_COS, v+148, x}, {TW_COS, v+148, x}, {TW_COS, v+149, x}, {TW_COS, v+149, x}, \ + {TW_COS, v+150, x}, {TW_COS, v+150, x}, {TW_COS, v+151, x}, {TW_COS, v+151, x}, \ + {TW_COS, v+152, x}, {TW_COS, v+152, x}, {TW_COS, v+153, x}, {TW_COS, v+153, x}, \ + {TW_COS, v+154, x}, {TW_COS, v+154, x}, {TW_COS, v+155, x}, {TW_COS, v+155, x}, \ + {TW_COS, v+156, x}, {TW_COS, v+156, x}, {TW_COS, v+157, x}, {TW_COS, v+157, x}, \ + {TW_COS, v+158, x}, {TW_COS, v+158, x}, {TW_COS, v+159, x}, {TW_COS, v+159, x}, \ + {TW_COS, v+160, x}, {TW_COS, v+160, x}, {TW_COS, v+161, x}, {TW_COS, v+161, x}, \ + {TW_COS, v+162, x}, {TW_COS, v+162, x}, {TW_COS, v+163, x}, {TW_COS, v+163, x}, \ + {TW_COS, v+164, x}, {TW_COS, v+164, x}, {TW_COS, v+165, x}, {TW_COS, v+165, x}, \ + {TW_COS, v+166, x}, {TW_COS, v+166, x}, {TW_COS, v+167, x}, {TW_COS, v+167, x}, \ + {TW_COS, v+168, x}, {TW_COS, v+168, x}, {TW_COS, v+169, x}, {TW_COS, v+169, x}, \ + {TW_COS, v+170, x}, {TW_COS, v+170, x}, {TW_COS, v+171, x}, {TW_COS, v+171, x}, \ + {TW_COS, v+172, x}, {TW_COS, v+172, x}, {TW_COS, v+173, x}, {TW_COS, v+173, x}, \ + {TW_COS, v+174, x}, {TW_COS, v+174, x}, {TW_COS, v+175, x}, {TW_COS, v+175, x}, \ + {TW_COS, v+176, x}, {TW_COS, v+176, x}, {TW_COS, v+177, x}, {TW_COS, v+177, x}, \ + {TW_COS, v+178, x}, {TW_COS, v+178, x}, {TW_COS, v+179, x}, {TW_COS, v+179, x}, \ + {TW_COS, v+180, x}, {TW_COS, v+180, x}, {TW_COS, v+181, x}, {TW_COS, v+181, x}, \ + {TW_COS, v+182, x}, {TW_COS, v+182, x}, {TW_COS, v+183, x}, {TW_COS, v+183, x}, \ + {TW_COS, v+184, x}, {TW_COS, v+184, x}, {TW_COS, v+185, x}, {TW_COS, v+185, x}, \ + {TW_COS, v+186, x}, {TW_COS, v+186, x}, {TW_COS, v+187, x}, {TW_COS, v+187, x}, \ + {TW_COS, v+188, x}, {TW_COS, v+188, x}, {TW_COS, v+189, x}, {TW_COS, v+189, x}, \ + {TW_COS, v+190, x}, {TW_COS, v+190, x}, {TW_COS, v+191, x}, {TW_COS, v+191, x}, \ + {TW_COS, v+192, x}, {TW_COS, v+192, x}, {TW_COS, v+193, x}, {TW_COS, v+193, x}, \ + {TW_COS, v+194, x}, {TW_COS, v+194, x}, {TW_COS, v+195, x}, {TW_COS, v+195, x}, \ + {TW_COS, v+196, x}, {TW_COS, v+196, x}, {TW_COS, v+197, x}, {TW_COS, v+197, x}, \ + {TW_COS, v+198, x}, {TW_COS, v+198, x}, {TW_COS, v+199, x}, {TW_COS, v+199, x}, \ + {TW_COS, v+200, x}, {TW_COS, v+200, x}, {TW_COS, v+201, x}, {TW_COS, v+201, x}, \ + {TW_COS, v+202, x}, {TW_COS, v+202, x}, {TW_COS, v+203, x}, {TW_COS, v+203, x}, \ + {TW_COS, v+204, x}, {TW_COS, v+204, x}, {TW_COS, v+205, x}, {TW_COS, v+205, x}, \ + {TW_COS, v+206, x}, {TW_COS, v+206, x}, {TW_COS, v+207, x}, {TW_COS, v+207, x}, \ + {TW_COS, v+208, x}, {TW_COS, v+208, x}, {TW_COS, v+209, x}, {TW_COS, v+209, x}, \ + {TW_COS, v+210, x}, {TW_COS, v+210, x}, {TW_COS, v+211, x}, {TW_COS, v+211, x}, \ + {TW_COS, v+212, x}, {TW_COS, v+212, x}, {TW_COS, v+213, x}, {TW_COS, v+213, x}, \ + {TW_COS, v+214, x}, {TW_COS, v+214, x}, {TW_COS, v+215, x}, {TW_COS, v+215, x}, \ + {TW_COS, v+216, x}, {TW_COS, v+216, x}, {TW_COS, v+217, x}, {TW_COS, v+217, x}, \ + {TW_COS, v+218, x}, {TW_COS, v+218, x}, {TW_COS, v+219, x}, {TW_COS, v+219, x}, \ + {TW_COS, v+220, x}, {TW_COS, v+220, x}, {TW_COS, v+221, x}, {TW_COS, v+221, x}, \ + {TW_COS, v+222, x}, {TW_COS, v+222, x}, {TW_COS, v+223, x}, {TW_COS, v+223, x}, \ + {TW_COS, v+224, x}, {TW_COS, v+224, x}, {TW_COS, v+225, x}, {TW_COS, v+225, x}, \ + {TW_COS, v+226, x}, {TW_COS, v+226, x}, {TW_COS, v+227, x}, {TW_COS, v+227, x}, \ + {TW_COS, v+228, x}, {TW_COS, v+228, x}, {TW_COS, v+229, x}, {TW_COS, v+229, x}, \ + {TW_COS, v+230, x}, {TW_COS, v+230, x}, {TW_COS, v+231, x}, {TW_COS, v+231, x}, \ + {TW_COS, v+232, x}, {TW_COS, v+232, x}, {TW_COS, v+233, x}, {TW_COS, v+233, x}, \ + {TW_COS, v+234, x}, {TW_COS, v+234, x}, {TW_COS, v+235, x}, {TW_COS, v+235, x}, \ + {TW_COS, v+236, x}, {TW_COS, v+236, x}, {TW_COS, v+237, x}, {TW_COS, v+237, x}, \ + {TW_COS, v+238, x}, {TW_COS, v+238, x}, {TW_COS, v+239, x}, {TW_COS, v+239, x}, \ + {TW_COS, v+240, x}, {TW_COS, v+240, x}, {TW_COS, v+241, x}, {TW_COS, v+241, x}, \ + {TW_COS, v+242, x}, {TW_COS, v+242, x}, {TW_COS, v+243, x}, {TW_COS, v+243, x}, \ + {TW_COS, v+244, x}, {TW_COS, v+244, x}, {TW_COS, v+245, x}, {TW_COS, v+245, x}, \ + {TW_COS, v+246, x}, {TW_COS, v+246, x}, {TW_COS, v+247, x}, {TW_COS, v+247, x}, \ + {TW_COS, v+248, x}, {TW_COS, v+248, x}, {TW_COS, v+249, x}, {TW_COS, v+249, x}, \ + {TW_COS, v+250, x}, {TW_COS, v+250, x}, {TW_COS, v+251, x}, {TW_COS, v+251, x}, \ + {TW_COS, v+252, x}, {TW_COS, v+252, x}, {TW_COS, v+253, x}, {TW_COS, v+253, x}, \ + {TW_COS, v+254, x}, {TW_COS, v+254, x}, {TW_COS, v+255, x}, {TW_COS, v+255, x}, \ + {TW_COS, v+256, x}, {TW_COS, v+256, x}, {TW_COS, v+257, x}, {TW_COS, v+257, x}, \ + {TW_COS, v+258, x}, {TW_COS, v+258, x}, {TW_COS, v+259, x}, {TW_COS, v+259, x}, \ + {TW_COS, v+260, x}, {TW_COS, v+260, x}, {TW_COS, v+261, x}, {TW_COS, v+261, x}, \ + {TW_COS, v+262, x}, {TW_COS, v+262, x}, {TW_COS, v+263, x}, {TW_COS, v+263, x}, \ + {TW_COS, v+264, x}, {TW_COS, v+264, x}, {TW_COS, v+265, x}, {TW_COS, v+265, x}, \ + {TW_COS, v+266, x}, {TW_COS, v+266, x}, {TW_COS, v+267, x}, {TW_COS, v+267, x}, \ + {TW_COS, v+268, x}, {TW_COS, v+268, x}, {TW_COS, v+269, x}, {TW_COS, v+269, x}, \ + {TW_COS, v+270, x}, {TW_COS, v+270, x}, {TW_COS, v+271, x}, {TW_COS, v+271, x}, \ + {TW_COS, v+272, x}, {TW_COS, v+272, x}, {TW_COS, v+273, x}, {TW_COS, v+273, x}, \ + {TW_COS, v+274, x}, {TW_COS, v+274, x}, {TW_COS, v+275, x}, {TW_COS, v+275, x}, \ + {TW_COS, v+276, x}, {TW_COS, v+276, x}, {TW_COS, v+277, x}, {TW_COS, v+277, x}, \ + {TW_COS, v+278, x}, {TW_COS, v+278, x}, {TW_COS, v+279, x}, {TW_COS, v+279, x}, \ + {TW_COS, v+280, x}, {TW_COS, v+280, x}, {TW_COS, v+281, x}, {TW_COS, v+281, x}, \ + {TW_COS, v+282, x}, {TW_COS, v+282, x}, {TW_COS, v+283, x}, {TW_COS, v+283, x}, \ + {TW_COS, v+284, x}, {TW_COS, v+284, x}, {TW_COS, v+285, x}, {TW_COS, v+285, x}, \ + {TW_COS, v+286, x}, {TW_COS, v+286, x}, {TW_COS, v+287, x}, {TW_COS, v+287, x}, \ + {TW_COS, v+288, x}, {TW_COS, v+288, x}, {TW_COS, v+289, x}, {TW_COS, v+289, x}, \ + {TW_COS, v+290, x}, {TW_COS, v+290, x}, {TW_COS, v+291, x}, {TW_COS, v+291, x}, \ + {TW_COS, v+292, x}, {TW_COS, v+292, x}, {TW_COS, v+293, x}, {TW_COS, v+293, x}, \ + {TW_COS, v+294, x}, {TW_COS, v+294, x}, {TW_COS, v+295, x}, {TW_COS, v+295, x}, \ + {TW_COS, v+296, x}, {TW_COS, v+296, x}, {TW_COS, v+297, x}, {TW_COS, v+297, x}, \ + {TW_COS, v+298, x}, {TW_COS, v+298, x}, {TW_COS, v+299, x}, {TW_COS, v+299, x}, \ + {TW_COS, v+300, x}, {TW_COS, v+300, x}, {TW_COS, v+301, x}, {TW_COS, v+301, x}, \ + {TW_COS, v+302, x}, {TW_COS, v+302, x}, {TW_COS, v+303, x}, {TW_COS, v+303, x}, \ + {TW_COS, v+304, x}, {TW_COS, v+304, x}, {TW_COS, v+305, x}, {TW_COS, v+305, x}, \ + {TW_COS, v+306, x}, {TW_COS, v+306, x}, {TW_COS, v+307, x}, {TW_COS, v+307, x}, \ + {TW_COS, v+308, x}, {TW_COS, v+308, x}, {TW_COS, v+309, x}, {TW_COS, v+309, x}, \ + {TW_COS, v+310, x}, {TW_COS, v+310, x}, {TW_COS, v+311, x}, {TW_COS, v+311, x}, \ + {TW_COS, v+312, x}, {TW_COS, v+312, x}, {TW_COS, v+313, x}, {TW_COS, v+313, x}, \ + {TW_COS, v+314, x}, {TW_COS, v+314, x}, {TW_COS, v+315, x}, {TW_COS, v+315, x}, \ + {TW_COS, v+316, x}, {TW_COS, v+316, x}, {TW_COS, v+317, x}, {TW_COS, v+317, x}, \ + {TW_COS, v+318, x}, {TW_COS, v+318, x}, {TW_COS, v+319, x}, {TW_COS, v+319, x}, \ + {TW_COS, v+320, x}, {TW_COS, v+320, x}, {TW_COS, v+321, x}, {TW_COS, v+321, x}, \ + {TW_COS, v+322, x}, {TW_COS, v+322, x}, {TW_COS, v+323, x}, {TW_COS, v+323, x}, \ + {TW_COS, v+324, x}, {TW_COS, v+324, x}, {TW_COS, v+325, x}, {TW_COS, v+325, x}, \ + {TW_COS, v+326, x}, {TW_COS, v+326, x}, {TW_COS, v+327, x}, {TW_COS, v+327, x}, \ + {TW_COS, v+328, x}, {TW_COS, v+328, x}, {TW_COS, v+329, x}, {TW_COS, v+329, x}, \ + {TW_COS, v+330, x}, {TW_COS, v+330, x}, {TW_COS, v+331, x}, {TW_COS, v+331, x}, \ + {TW_COS, v+332, x}, {TW_COS, v+332, x}, {TW_COS, v+333, x}, {TW_COS, v+333, x}, \ + {TW_COS, v+334, x}, {TW_COS, v+334, x}, {TW_COS, v+335, x}, {TW_COS, v+335, x}, \ + {TW_COS, v+336, x}, {TW_COS, v+336, x}, {TW_COS, v+337, x}, {TW_COS, v+337, x}, \ + {TW_COS, v+338, x}, {TW_COS, v+338, x}, {TW_COS, v+339, x}, {TW_COS, v+339, x}, \ + {TW_COS, v+340, x}, {TW_COS, v+340, x}, {TW_COS, v+341, x}, {TW_COS, v+341, x}, \ + {TW_COS, v+342, x}, {TW_COS, v+342, x}, {TW_COS, v+343, x}, {TW_COS, v+343, x}, \ + {TW_COS, v+344, x}, {TW_COS, v+344, x}, {TW_COS, v+345, x}, {TW_COS, v+345, x}, \ + {TW_COS, v+346, x}, {TW_COS, v+346, x}, {TW_COS, v+347, x}, {TW_COS, v+347, x}, \ + {TW_COS, v+348, x}, {TW_COS, v+348, x}, {TW_COS, v+349, x}, {TW_COS, v+349, x}, \ + {TW_COS, v+350, x}, {TW_COS, v+350, x}, {TW_COS, v+351, x}, {TW_COS, v+351, x}, \ + {TW_COS, v+352, x}, {TW_COS, v+352, x}, {TW_COS, v+353, x}, {TW_COS, v+353, x}, \ + {TW_COS, v+354, x}, {TW_COS, v+354, x}, {TW_COS, v+355, x}, {TW_COS, v+355, x}, \ + {TW_COS, v+356, x}, {TW_COS, v+356, x}, {TW_COS, v+357, x}, {TW_COS, v+357, x}, \ + {TW_COS, v+358, x}, {TW_COS, v+358, x}, {TW_COS, v+359, x}, {TW_COS, v+359, x}, \ + {TW_COS, v+360, x}, {TW_COS, v+360, x}, {TW_COS, v+361, x}, {TW_COS, v+361, x}, \ + {TW_COS, v+362, x}, {TW_COS, v+362, x}, {TW_COS, v+363, x}, {TW_COS, v+363, x}, \ + {TW_COS, v+364, x}, {TW_COS, v+364, x}, {TW_COS, v+365, x}, {TW_COS, v+365, x}, \ + {TW_COS, v+366, x}, {TW_COS, v+366, x}, {TW_COS, v+367, x}, {TW_COS, v+367, x}, \ + {TW_COS, v+368, x}, {TW_COS, v+368, x}, {TW_COS, v+369, x}, {TW_COS, v+369, x}, \ + {TW_COS, v+370, x}, {TW_COS, v+370, x}, {TW_COS, v+371, x}, {TW_COS, v+371, x}, \ + {TW_COS, v+372, x}, {TW_COS, v+372, x}, {TW_COS, v+373, x}, {TW_COS, v+373, x}, \ + {TW_COS, v+374, x}, {TW_COS, v+374, x}, {TW_COS, v+375, x}, {TW_COS, v+375, x}, \ + {TW_COS, v+376, x}, {TW_COS, v+376, x}, {TW_COS, v+377, x}, {TW_COS, v+377, x}, \ + {TW_COS, v+378, x}, {TW_COS, v+378, x}, {TW_COS, v+379, x}, {TW_COS, v+379, x}, \ + {TW_COS, v+380, x}, {TW_COS, v+380, x}, {TW_COS, v+381, x}, {TW_COS, v+381, x}, \ + {TW_COS, v+382, x}, {TW_COS, v+382, x}, {TW_COS, v+383, x}, {TW_COS, v+383, x}, \ + {TW_COS, v+384, x}, {TW_COS, v+384, x}, {TW_COS, v+385, x}, {TW_COS, v+385, x}, \ + {TW_COS, v+386, x}, {TW_COS, v+386, x}, {TW_COS, v+387, x}, {TW_COS, v+387, x}, \ + {TW_COS, v+388, x}, {TW_COS, v+388, x}, {TW_COS, v+389, x}, {TW_COS, v+389, x}, \ + {TW_COS, v+390, x}, {TW_COS, v+390, x}, {TW_COS, v+391, x}, {TW_COS, v+391, x}, \ + {TW_COS, v+392, x}, {TW_COS, v+392, x}, {TW_COS, v+393, x}, {TW_COS, v+393, x}, \ + {TW_COS, v+394, x}, {TW_COS, v+394, x}, {TW_COS, v+395, x}, {TW_COS, v+395, x}, \ + {TW_COS, v+396, x}, {TW_COS, v+396, x}, {TW_COS, v+397, x}, {TW_COS, v+397, x}, \ + {TW_COS, v+398, x}, {TW_COS, v+398, x}, {TW_COS, v+399, x}, {TW_COS, v+399, x}, \ + {TW_COS, v+400, x}, {TW_COS, v+400, x}, {TW_COS, v+401, x}, {TW_COS, v+401, x}, \ + {TW_COS, v+402, x}, {TW_COS, v+402, x}, {TW_COS, v+403, x}, {TW_COS, v+403, x}, \ + {TW_COS, v+404, x}, {TW_COS, v+404, x}, {TW_COS, v+405, x}, {TW_COS, v+405, x}, \ + {TW_COS, v+406, x}, {TW_COS, v+406, x}, {TW_COS, v+407, x}, {TW_COS, v+407, x}, \ + {TW_COS, v+408, x}, {TW_COS, v+408, x}, {TW_COS, v+409, x}, {TW_COS, v+409, x}, \ + {TW_COS, v+410, x}, {TW_COS, v+410, x}, {TW_COS, v+411, x}, {TW_COS, v+411, x}, \ + {TW_COS, v+412, x}, {TW_COS, v+412, x}, {TW_COS, v+413, x}, {TW_COS, v+413, x}, \ + {TW_COS, v+414, x}, {TW_COS, v+414, x}, {TW_COS, v+415, x}, {TW_COS, v+415, x}, \ + {TW_COS, v+416, x}, {TW_COS, v+416, x}, {TW_COS, v+417, x}, {TW_COS, v+417, x}, \ + {TW_COS, v+418, x}, {TW_COS, v+418, x}, {TW_COS, v+419, x}, {TW_COS, v+419, x}, \ + {TW_COS, v+420, x}, {TW_COS, v+420, x}, {TW_COS, v+421, x}, {TW_COS, v+421, x}, \ + {TW_COS, v+422, x}, {TW_COS, v+422, x}, {TW_COS, v+423, x}, {TW_COS, v+423, x}, \ + {TW_COS, v+424, x}, {TW_COS, v+424, x}, {TW_COS, v+425, x}, {TW_COS, v+425, x}, \ + {TW_COS, v+426, x}, {TW_COS, v+426, x}, {TW_COS, v+427, x}, {TW_COS, v+427, x}, \ + {TW_COS, v+428, x}, {TW_COS, v+428, x}, {TW_COS, v+429, x}, {TW_COS, v+429, x}, \ + {TW_COS, v+430, x}, {TW_COS, v+430, x}, {TW_COS, v+431, x}, {TW_COS, v+431, x}, \ + {TW_COS, v+432, x}, {TW_COS, v+432, x}, {TW_COS, v+433, x}, {TW_COS, v+433, x}, \ + {TW_COS, v+434, x}, {TW_COS, v+434, x}, {TW_COS, v+435, x}, {TW_COS, v+435, x}, \ + {TW_COS, v+436, x}, {TW_COS, v+436, x}, {TW_COS, v+437, x}, {TW_COS, v+437, x}, \ + {TW_COS, v+438, x}, {TW_COS, v+438, x}, {TW_COS, v+439, x}, {TW_COS, v+439, x}, \ + {TW_COS, v+440, x}, {TW_COS, v+440, x}, {TW_COS, v+441, x}, {TW_COS, v+441, x}, \ + {TW_COS, v+442, x}, {TW_COS, v+442, x}, {TW_COS, v+443, x}, {TW_COS, v+443, x}, \ + {TW_COS, v+444, x}, {TW_COS, v+444, x}, {TW_COS, v+445, x}, {TW_COS, v+445, x}, \ + {TW_COS, v+446, x}, {TW_COS, v+446, x}, {TW_COS, v+447, x}, {TW_COS, v+447, x}, \ + {TW_COS, v+448, x}, {TW_COS, v+448, x}, {TW_COS, v+449, x}, {TW_COS, v+449, x}, \ + {TW_COS, v+450, x}, {TW_COS, v+450, x}, {TW_COS, v+451, x}, {TW_COS, v+451, x}, \ + {TW_COS, v+452, x}, {TW_COS, v+452, x}, {TW_COS, v+453, x}, {TW_COS, v+453, x}, \ + {TW_COS, v+454, x}, {TW_COS, v+454, x}, {TW_COS, v+455, x}, {TW_COS, v+455, x}, \ + {TW_COS, v+456, x}, {TW_COS, v+456, x}, {TW_COS, v+457, x}, {TW_COS, v+457, x}, \ + {TW_COS, v+458, x}, {TW_COS, v+458, x}, {TW_COS, v+459, x}, {TW_COS, v+459, x}, \ + {TW_COS, v+460, x}, {TW_COS, v+460, x}, {TW_COS, v+461, x}, {TW_COS, v+461, x}, \ + {TW_COS, v+462, x}, {TW_COS, v+462, x}, {TW_COS, v+463, x}, {TW_COS, v+463, x}, \ + {TW_COS, v+464, x}, {TW_COS, v+464, x}, {TW_COS, v+465, x}, {TW_COS, v+465, x}, \ + {TW_COS, v+466, x}, {TW_COS, v+466, x}, {TW_COS, v+467, x}, {TW_COS, v+467, x}, \ + {TW_COS, v+468, x}, {TW_COS, v+468, x}, {TW_COS, v+469, x}, {TW_COS, v+469, x}, \ + {TW_COS, v+470, x}, {TW_COS, v+470, x}, {TW_COS, v+471, x}, {TW_COS, v+471, x}, \ + {TW_COS, v+472, x}, {TW_COS, v+472, x}, {TW_COS, v+473, x}, {TW_COS, v+473, x}, \ + {TW_COS, v+474, x}, {TW_COS, v+474, x}, {TW_COS, v+475, x}, {TW_COS, v+475, x}, \ + {TW_COS, v+476, x}, {TW_COS, v+476, x}, {TW_COS, v+477, x}, {TW_COS, v+477, x}, \ + {TW_COS, v+478, x}, {TW_COS, v+478, x}, {TW_COS, v+479, x}, {TW_COS, v+479, x}, \ + {TW_COS, v+480, x}, {TW_COS, v+480, x}, {TW_COS, v+481, x}, {TW_COS, v+481, x}, \ + {TW_COS, v+482, x}, {TW_COS, v+482, x}, {TW_COS, v+483, x}, {TW_COS, v+483, x}, \ + {TW_COS, v+484, x}, {TW_COS, v+484, x}, {TW_COS, v+485, x}, {TW_COS, v+485, x}, \ + {TW_COS, v+486, x}, {TW_COS, v+486, x}, {TW_COS, v+487, x}, {TW_COS, v+487, x}, \ + {TW_COS, v+488, x}, {TW_COS, v+488, x}, {TW_COS, v+489, x}, {TW_COS, v+489, x}, \ + {TW_COS, v+490, x}, {TW_COS, v+490, x}, {TW_COS, v+491, x}, {TW_COS, v+491, x}, \ + {TW_COS, v+492, x}, {TW_COS, v+492, x}, {TW_COS, v+493, x}, {TW_COS, v+493, x}, \ + {TW_COS, v+494, x}, {TW_COS, v+494, x}, {TW_COS, v+495, x}, {TW_COS, v+495, x}, \ + {TW_COS, v+496, x}, {TW_COS, v+496, x}, {TW_COS, v+497, x}, {TW_COS, v+497, x}, \ + {TW_COS, v+498, x}, {TW_COS, v+498, x}, {TW_COS, v+499, x}, {TW_COS, v+499, x}, \ + {TW_COS, v+500, x}, {TW_COS, v+500, x}, {TW_COS, v+501, x}, {TW_COS, v+501, x}, \ + {TW_COS, v+502, x}, {TW_COS, v+502, x}, {TW_COS, v+503, x}, {TW_COS, v+503, x}, \ + {TW_COS, v+504, x}, {TW_COS, v+504, x}, {TW_COS, v+505, x}, {TW_COS, v+505, x}, \ + {TW_COS, v+506, x}, {TW_COS, v+506, x}, {TW_COS, v+507, x}, {TW_COS, v+507, x}, \ + {TW_COS, v+508, x}, {TW_COS, v+508, x}, {TW_COS, v+509, x}, {TW_COS, v+509, x}, \ + {TW_COS, v+510, x}, {TW_COS, v+510, x}, {TW_COS, v+511, x}, {TW_COS, v+511, x}, \ + {TW_SIN, v+0, -x}, {TW_SIN, v+0, x}, {TW_SIN, v+1, -x}, {TW_SIN, v+1, x}, \ + {TW_SIN, v+2, -x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, -x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, -x}, {TW_SIN, v+4, x}, {TW_SIN, v+5, -x}, {TW_SIN, v+5, x}, \ + {TW_SIN, v+6, -x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, -x}, {TW_SIN, v+7, x}, \ + {TW_SIN, v+8, -x}, {TW_SIN, v+8, x}, {TW_SIN, v+9, -x}, {TW_SIN, v+9, x}, \ + {TW_SIN, v+10, -x}, {TW_SIN, v+10, x}, {TW_SIN, v+11, -x}, {TW_SIN, v+11, x}, \ + {TW_SIN, v+12, -x}, {TW_SIN, v+12, x}, {TW_SIN, v+13, -x}, {TW_SIN, v+13, x}, \ + {TW_SIN, v+14, -x}, {TW_SIN, v+14, x}, {TW_SIN, v+15, -x}, {TW_SIN, v+15, x}, \ + {TW_SIN, v+16, -x}, {TW_SIN, v+16, x}, {TW_SIN, v+17, -x}, {TW_SIN, v+17, x}, \ + {TW_SIN, v+18, -x}, {TW_SIN, v+18, x}, {TW_SIN, v+19, -x}, {TW_SIN, v+19, x}, \ + {TW_SIN, v+20, -x}, {TW_SIN, v+20, x}, {TW_SIN, v+21, -x}, {TW_SIN, v+21, x}, \ + {TW_SIN, v+22, -x}, {TW_SIN, v+22, x}, {TW_SIN, v+23, -x}, {TW_SIN, v+23, x}, \ + {TW_SIN, v+24, -x}, {TW_SIN, v+24, x}, {TW_SIN, v+25, -x}, {TW_SIN, v+25, x}, \ + {TW_SIN, v+26, -x}, {TW_SIN, v+26, x}, {TW_SIN, v+27, -x}, {TW_SIN, v+27, x}, \ + {TW_SIN, v+28, -x}, {TW_SIN, v+28, x}, {TW_SIN, v+29, -x}, {TW_SIN, v+29, x}, \ + {TW_SIN, v+30, -x}, {TW_SIN, v+30, x}, {TW_SIN, v+31, -x}, {TW_SIN, v+31, x}, \ + {TW_SIN, v+32, -x}, {TW_SIN, v+32, x}, {TW_SIN, v+33, -x}, {TW_SIN, v+33, x}, \ + {TW_SIN, v+34, -x}, {TW_SIN, v+34, x}, {TW_SIN, v+35, -x}, {TW_SIN, v+35, x}, \ + {TW_SIN, v+36, -x}, {TW_SIN, v+36, x}, {TW_SIN, v+37, -x}, {TW_SIN, v+37, x}, \ + {TW_SIN, v+38, -x}, {TW_SIN, v+38, x}, {TW_SIN, v+39, -x}, {TW_SIN, v+39, x}, \ + {TW_SIN, v+40, -x}, {TW_SIN, v+40, x}, {TW_SIN, v+41, -x}, {TW_SIN, v+41, x}, \ + {TW_SIN, v+42, -x}, {TW_SIN, v+42, x}, {TW_SIN, v+43, -x}, {TW_SIN, v+43, x}, \ + {TW_SIN, v+44, -x}, {TW_SIN, v+44, x}, {TW_SIN, v+45, -x}, {TW_SIN, v+45, x}, \ + {TW_SIN, v+46, -x}, {TW_SIN, v+46, x}, {TW_SIN, v+47, -x}, {TW_SIN, v+47, x}, \ + {TW_SIN, v+48, -x}, {TW_SIN, v+48, x}, {TW_SIN, v+49, -x}, {TW_SIN, v+49, x}, \ + {TW_SIN, v+50, -x}, {TW_SIN, v+50, x}, {TW_SIN, v+51, -x}, {TW_SIN, v+51, x}, \ + {TW_SIN, v+52, -x}, {TW_SIN, v+52, x}, {TW_SIN, v+53, -x}, {TW_SIN, v+53, x}, \ + {TW_SIN, v+54, -x}, {TW_SIN, v+54, x}, {TW_SIN, v+55, -x}, {TW_SIN, v+55, x}, \ + {TW_SIN, v+56, -x}, {TW_SIN, v+56, x}, {TW_SIN, v+57, -x}, {TW_SIN, v+57, x}, \ + {TW_SIN, v+58, -x}, {TW_SIN, v+58, x}, {TW_SIN, v+59, -x}, {TW_SIN, v+59, x}, \ + {TW_SIN, v+60, -x}, {TW_SIN, v+60, x}, {TW_SIN, v+61, -x}, {TW_SIN, v+61, x}, \ + {TW_SIN, v+62, -x}, {TW_SIN, v+62, x}, {TW_SIN, v+63, -x}, {TW_SIN, v+63, x}, \ + {TW_SIN, v+64, -x}, {TW_SIN, v+64, x}, {TW_SIN, v+65, -x}, {TW_SIN, v+65, x}, \ + {TW_SIN, v+66, -x}, {TW_SIN, v+66, x}, {TW_SIN, v+67, -x}, {TW_SIN, v+67, x}, \ + {TW_SIN, v+68, -x}, {TW_SIN, v+68, x}, {TW_SIN, v+69, -x}, {TW_SIN, v+69, x}, \ + {TW_SIN, v+70, -x}, {TW_SIN, v+70, x}, {TW_SIN, v+71, -x}, {TW_SIN, v+71, x}, \ + {TW_SIN, v+72, -x}, {TW_SIN, v+72, x}, {TW_SIN, v+73, -x}, {TW_SIN, v+73, x}, \ + {TW_SIN, v+74, -x}, {TW_SIN, v+74, x}, {TW_SIN, v+75, -x}, {TW_SIN, v+75, x}, \ + {TW_SIN, v+76, -x}, {TW_SIN, v+76, x}, {TW_SIN, v+77, -x}, {TW_SIN, v+77, x}, \ + {TW_SIN, v+78, -x}, {TW_SIN, v+78, x}, {TW_SIN, v+79, -x}, {TW_SIN, v+79, x}, \ + {TW_SIN, v+80, -x}, {TW_SIN, v+80, x}, {TW_SIN, v+81, -x}, {TW_SIN, v+81, x}, \ + {TW_SIN, v+82, -x}, {TW_SIN, v+82, x}, {TW_SIN, v+83, -x}, {TW_SIN, v+83, x}, \ + {TW_SIN, v+84, -x}, {TW_SIN, v+84, x}, {TW_SIN, v+85, -x}, {TW_SIN, v+85, x}, \ + {TW_SIN, v+86, -x}, {TW_SIN, v+86, x}, {TW_SIN, v+87, -x}, {TW_SIN, v+87, x}, \ + {TW_SIN, v+88, -x}, {TW_SIN, v+88, x}, {TW_SIN, v+89, -x}, {TW_SIN, v+89, x}, \ + {TW_SIN, v+90, -x}, {TW_SIN, v+90, x}, {TW_SIN, v+91, -x}, {TW_SIN, v+91, x}, \ + {TW_SIN, v+92, -x}, {TW_SIN, v+92, x}, {TW_SIN, v+93, -x}, {TW_SIN, v+93, x}, \ + {TW_SIN, v+94, -x}, {TW_SIN, v+94, x}, {TW_SIN, v+95, -x}, {TW_SIN, v+95, x}, \ + {TW_SIN, v+96, -x}, {TW_SIN, v+96, x}, {TW_SIN, v+97, -x}, {TW_SIN, v+97, x}, \ + {TW_SIN, v+98, -x}, {TW_SIN, v+98, x}, {TW_SIN, v+99, -x}, {TW_SIN, v+99, x}, \ + {TW_SIN, v+100, -x}, {TW_SIN, v+100, x}, {TW_SIN, v+101, -x}, {TW_SIN, v+101, x}, \ + {TW_SIN, v+102, -x}, {TW_SIN, v+102, x}, {TW_SIN, v+103, -x}, {TW_SIN, v+103, x}, \ + {TW_SIN, v+104, -x}, {TW_SIN, v+104, x}, {TW_SIN, v+105, -x}, {TW_SIN, v+105, x}, \ + {TW_SIN, v+106, -x}, {TW_SIN, v+106, x}, {TW_SIN, v+107, -x}, {TW_SIN, v+107, x}, \ + {TW_SIN, v+108, -x}, {TW_SIN, v+108, x}, {TW_SIN, v+109, -x}, {TW_SIN, v+109, x}, \ + {TW_SIN, v+110, -x}, {TW_SIN, v+110, x}, {TW_SIN, v+111, -x}, {TW_SIN, v+111, x}, \ + {TW_SIN, v+112, -x}, {TW_SIN, v+112, x}, {TW_SIN, v+113, -x}, {TW_SIN, v+113, x}, \ + {TW_SIN, v+114, -x}, {TW_SIN, v+114, x}, {TW_SIN, v+115, -x}, {TW_SIN, v+115, x}, \ + {TW_SIN, v+116, -x}, {TW_SIN, v+116, x}, {TW_SIN, v+117, -x}, {TW_SIN, v+117, x}, \ + {TW_SIN, v+118, -x}, {TW_SIN, v+118, x}, {TW_SIN, v+119, -x}, {TW_SIN, v+119, x}, \ + {TW_SIN, v+120, -x}, {TW_SIN, v+120, x}, {TW_SIN, v+121, -x}, {TW_SIN, v+121, x}, \ + {TW_SIN, v+122, -x}, {TW_SIN, v+122, x}, {TW_SIN, v+123, -x}, {TW_SIN, v+123, x}, \ + {TW_SIN, v+124, -x}, {TW_SIN, v+124, x}, {TW_SIN, v+125, -x}, {TW_SIN, v+125, x}, \ + {TW_SIN, v+126, -x}, {TW_SIN, v+126, x}, {TW_SIN, v+127, -x}, {TW_SIN, v+127, x}, \ + {TW_SIN, v+128, -x}, {TW_SIN, v+128, x}, {TW_SIN, v+129, -x}, {TW_SIN, v+129, x}, \ + {TW_SIN, v+130, -x}, {TW_SIN, v+130, x}, {TW_SIN, v+131, -x}, {TW_SIN, v+131, x}, \ + {TW_SIN, v+132, -x}, {TW_SIN, v+132, x}, {TW_SIN, v+133, -x}, {TW_SIN, v+133, x}, \ + {TW_SIN, v+134, -x}, {TW_SIN, v+134, x}, {TW_SIN, v+135, -x}, {TW_SIN, v+135, x}, \ + {TW_SIN, v+136, -x}, {TW_SIN, v+136, x}, {TW_SIN, v+137, -x}, {TW_SIN, v+137, x}, \ + {TW_SIN, v+138, -x}, {TW_SIN, v+138, x}, {TW_SIN, v+139, -x}, {TW_SIN, v+139, x}, \ + {TW_SIN, v+140, -x}, {TW_SIN, v+140, x}, {TW_SIN, v+141, -x}, {TW_SIN, v+141, x}, \ + {TW_SIN, v+142, -x}, {TW_SIN, v+142, x}, {TW_SIN, v+143, -x}, {TW_SIN, v+143, x}, \ + {TW_SIN, v+144, -x}, {TW_SIN, v+144, x}, {TW_SIN, v+145, -x}, {TW_SIN, v+145, x}, \ + {TW_SIN, v+146, -x}, {TW_SIN, v+146, x}, {TW_SIN, v+147, -x}, {TW_SIN, v+147, x}, \ + {TW_SIN, v+148, -x}, {TW_SIN, v+148, x}, {TW_SIN, v+149, -x}, {TW_SIN, v+149, x}, \ + {TW_SIN, v+150, -x}, {TW_SIN, v+150, x}, {TW_SIN, v+151, -x}, {TW_SIN, v+151, x}, \ + {TW_SIN, v+152, -x}, {TW_SIN, v+152, x}, {TW_SIN, v+153, -x}, {TW_SIN, v+153, x}, \ + {TW_SIN, v+154, -x}, {TW_SIN, v+154, x}, {TW_SIN, v+155, -x}, {TW_SIN, v+155, x}, \ + {TW_SIN, v+156, -x}, {TW_SIN, v+156, x}, {TW_SIN, v+157, -x}, {TW_SIN, v+157, x}, \ + {TW_SIN, v+158, -x}, {TW_SIN, v+158, x}, {TW_SIN, v+159, -x}, {TW_SIN, v+159, x}, \ + {TW_SIN, v+160, -x}, {TW_SIN, v+160, x}, {TW_SIN, v+161, -x}, {TW_SIN, v+161, x}, \ + {TW_SIN, v+162, -x}, {TW_SIN, v+162, x}, {TW_SIN, v+163, -x}, {TW_SIN, v+163, x}, \ + {TW_SIN, v+164, -x}, {TW_SIN, v+164, x}, {TW_SIN, v+165, -x}, {TW_SIN, v+165, x}, \ + {TW_SIN, v+166, -x}, {TW_SIN, v+166, x}, {TW_SIN, v+167, -x}, {TW_SIN, v+167, x}, \ + {TW_SIN, v+168, -x}, {TW_SIN, v+168, x}, {TW_SIN, v+169, -x}, {TW_SIN, v+169, x}, \ + {TW_SIN, v+170, -x}, {TW_SIN, v+170, x}, {TW_SIN, v+171, -x}, {TW_SIN, v+171, x}, \ + {TW_SIN, v+172, -x}, {TW_SIN, v+172, x}, {TW_SIN, v+173, -x}, {TW_SIN, v+173, x}, \ + {TW_SIN, v+174, -x}, {TW_SIN, v+174, x}, {TW_SIN, v+175, -x}, {TW_SIN, v+175, x}, \ + {TW_SIN, v+176, -x}, {TW_SIN, v+176, x}, {TW_SIN, v+177, -x}, {TW_SIN, v+177, x}, \ + {TW_SIN, v+178, -x}, {TW_SIN, v+178, x}, {TW_SIN, v+179, -x}, {TW_SIN, v+179, x}, \ + {TW_SIN, v+180, -x}, {TW_SIN, v+180, x}, {TW_SIN, v+181, -x}, {TW_SIN, v+181, x}, \ + {TW_SIN, v+182, -x}, {TW_SIN, v+182, x}, {TW_SIN, v+183, -x}, {TW_SIN, v+183, x}, \ + {TW_SIN, v+184, -x}, {TW_SIN, v+184, x}, {TW_SIN, v+185, -x}, {TW_SIN, v+185, x}, \ + {TW_SIN, v+186, -x}, {TW_SIN, v+186, x}, {TW_SIN, v+187, -x}, {TW_SIN, v+187, x}, \ + {TW_SIN, v+188, -x}, {TW_SIN, v+188, x}, {TW_SIN, v+189, -x}, {TW_SIN, v+189, x}, \ + {TW_SIN, v+190, -x}, {TW_SIN, v+190, x}, {TW_SIN, v+191, -x}, {TW_SIN, v+191, x}, \ + {TW_SIN, v+192, -x}, {TW_SIN, v+192, x}, {TW_SIN, v+193, -x}, {TW_SIN, v+193, x}, \ + {TW_SIN, v+194, -x}, {TW_SIN, v+194, x}, {TW_SIN, v+195, -x}, {TW_SIN, v+195, x}, \ + {TW_SIN, v+196, -x}, {TW_SIN, v+196, x}, {TW_SIN, v+197, -x}, {TW_SIN, v+197, x}, \ + {TW_SIN, v+198, -x}, {TW_SIN, v+198, x}, {TW_SIN, v+199, -x}, {TW_SIN, v+199, x}, \ + {TW_SIN, v+200, -x}, {TW_SIN, v+200, x}, {TW_SIN, v+201, -x}, {TW_SIN, v+201, x}, \ + {TW_SIN, v+202, -x}, {TW_SIN, v+202, x}, {TW_SIN, v+203, -x}, {TW_SIN, v+203, x}, \ + {TW_SIN, v+204, -x}, {TW_SIN, v+204, x}, {TW_SIN, v+205, -x}, {TW_SIN, v+205, x}, \ + {TW_SIN, v+206, -x}, {TW_SIN, v+206, x}, {TW_SIN, v+207, -x}, {TW_SIN, v+207, x}, \ + {TW_SIN, v+208, -x}, {TW_SIN, v+208, x}, {TW_SIN, v+209, -x}, {TW_SIN, v+209, x}, \ + {TW_SIN, v+210, -x}, {TW_SIN, v+210, x}, {TW_SIN, v+211, -x}, {TW_SIN, v+211, x}, \ + {TW_SIN, v+212, -x}, {TW_SIN, v+212, x}, {TW_SIN, v+213, -x}, {TW_SIN, v+213, x}, \ + {TW_SIN, v+214, -x}, {TW_SIN, v+214, x}, {TW_SIN, v+215, -x}, {TW_SIN, v+215, x}, \ + {TW_SIN, v+216, -x}, {TW_SIN, v+216, x}, {TW_SIN, v+217, -x}, {TW_SIN, v+217, x}, \ + {TW_SIN, v+218, -x}, {TW_SIN, v+218, x}, {TW_SIN, v+219, -x}, {TW_SIN, v+219, x}, \ + {TW_SIN, v+220, -x}, {TW_SIN, v+220, x}, {TW_SIN, v+221, -x}, {TW_SIN, v+221, x}, \ + {TW_SIN, v+222, -x}, {TW_SIN, v+222, x}, {TW_SIN, v+223, -x}, {TW_SIN, v+223, x}, \ + {TW_SIN, v+224, -x}, {TW_SIN, v+224, x}, {TW_SIN, v+225, -x}, {TW_SIN, v+225, x}, \ + {TW_SIN, v+226, -x}, {TW_SIN, v+226, x}, {TW_SIN, v+227, -x}, {TW_SIN, v+227, x}, \ + {TW_SIN, v+228, -x}, {TW_SIN, v+228, x}, {TW_SIN, v+229, -x}, {TW_SIN, v+229, x}, \ + {TW_SIN, v+230, -x}, {TW_SIN, v+230, x}, {TW_SIN, v+231, -x}, {TW_SIN, v+231, x}, \ + {TW_SIN, v+232, -x}, {TW_SIN, v+232, x}, {TW_SIN, v+233, -x}, {TW_SIN, v+233, x}, \ + {TW_SIN, v+234, -x}, {TW_SIN, v+234, x}, {TW_SIN, v+235, -x}, {TW_SIN, v+235, x}, \ + {TW_SIN, v+236, -x}, {TW_SIN, v+236, x}, {TW_SIN, v+237, -x}, {TW_SIN, v+237, x}, \ + {TW_SIN, v+238, -x}, {TW_SIN, v+238, x}, {TW_SIN, v+239, -x}, {TW_SIN, v+239, x}, \ + {TW_SIN, v+240, -x}, {TW_SIN, v+240, x}, {TW_SIN, v+241, -x}, {TW_SIN, v+241, x}, \ + {TW_SIN, v+242, -x}, {TW_SIN, v+242, x}, {TW_SIN, v+243, -x}, {TW_SIN, v+243, x}, \ + {TW_SIN, v+244, -x}, {TW_SIN, v+244, x}, {TW_SIN, v+245, -x}, {TW_SIN, v+245, x}, \ + {TW_SIN, v+246, -x}, {TW_SIN, v+246, x}, {TW_SIN, v+247, -x}, {TW_SIN, v+247, x}, \ + {TW_SIN, v+248, -x}, {TW_SIN, v+248, x}, {TW_SIN, v+249, -x}, {TW_SIN, v+249, x}, \ + {TW_SIN, v+250, -x}, {TW_SIN, v+250, x}, {TW_SIN, v+251, -x}, {TW_SIN, v+251, x}, \ + {TW_SIN, v+252, -x}, {TW_SIN, v+252, x}, {TW_SIN, v+253, -x}, {TW_SIN, v+253, x}, \ + {TW_SIN, v+254, -x}, {TW_SIN, v+254, x}, {TW_SIN, v+255, -x}, {TW_SIN, v+255, x}, \ + {TW_SIN, v+256, -x}, {TW_SIN, v+256, x}, {TW_SIN, v+257, -x}, {TW_SIN, v+257, x}, \ + {TW_SIN, v+258, -x}, {TW_SIN, v+258, x}, {TW_SIN, v+259, -x}, {TW_SIN, v+259, x}, \ + {TW_SIN, v+260, -x}, {TW_SIN, v+260, x}, {TW_SIN, v+261, -x}, {TW_SIN, v+261, x}, \ + {TW_SIN, v+262, -x}, {TW_SIN, v+262, x}, {TW_SIN, v+263, -x}, {TW_SIN, v+263, x}, \ + {TW_SIN, v+264, -x}, {TW_SIN, v+264, x}, {TW_SIN, v+265, -x}, {TW_SIN, v+265, x}, \ + {TW_SIN, v+266, -x}, {TW_SIN, v+266, x}, {TW_SIN, v+267, -x}, {TW_SIN, v+267, x}, \ + {TW_SIN, v+268, -x}, {TW_SIN, v+268, x}, {TW_SIN, v+269, -x}, {TW_SIN, v+269, x}, \ + {TW_SIN, v+270, -x}, {TW_SIN, v+270, x}, {TW_SIN, v+271, -x}, {TW_SIN, v+271, x}, \ + {TW_SIN, v+272, -x}, {TW_SIN, v+272, x}, {TW_SIN, v+273, -x}, {TW_SIN, v+273, x}, \ + {TW_SIN, v+274, -x}, {TW_SIN, v+274, x}, {TW_SIN, v+275, -x}, {TW_SIN, v+275, x}, \ + {TW_SIN, v+276, -x}, {TW_SIN, v+276, x}, {TW_SIN, v+277, -x}, {TW_SIN, v+277, x}, \ + {TW_SIN, v+278, -x}, {TW_SIN, v+278, x}, {TW_SIN, v+279, -x}, {TW_SIN, v+279, x}, \ + {TW_SIN, v+280, -x}, {TW_SIN, v+280, x}, {TW_SIN, v+281, -x}, {TW_SIN, v+281, x}, \ + {TW_SIN, v+282, -x}, {TW_SIN, v+282, x}, {TW_SIN, v+283, -x}, {TW_SIN, v+283, x}, \ + {TW_SIN, v+284, -x}, {TW_SIN, v+284, x}, {TW_SIN, v+285, -x}, {TW_SIN, v+285, x}, \ + {TW_SIN, v+286, -x}, {TW_SIN, v+286, x}, {TW_SIN, v+287, -x}, {TW_SIN, v+287, x}, \ + {TW_SIN, v+288, -x}, {TW_SIN, v+288, x}, {TW_SIN, v+289, -x}, {TW_SIN, v+289, x}, \ + {TW_SIN, v+290, -x}, {TW_SIN, v+290, x}, {TW_SIN, v+291, -x}, {TW_SIN, v+291, x}, \ + {TW_SIN, v+292, -x}, {TW_SIN, v+292, x}, {TW_SIN, v+293, -x}, {TW_SIN, v+293, x}, \ + {TW_SIN, v+294, -x}, {TW_SIN, v+294, x}, {TW_SIN, v+295, -x}, {TW_SIN, v+295, x}, \ + {TW_SIN, v+296, -x}, {TW_SIN, v+296, x}, {TW_SIN, v+297, -x}, {TW_SIN, v+297, x}, \ + {TW_SIN, v+298, -x}, {TW_SIN, v+298, x}, {TW_SIN, v+299, -x}, {TW_SIN, v+299, x}, \ + {TW_SIN, v+300, -x}, {TW_SIN, v+300, x}, {TW_SIN, v+301, -x}, {TW_SIN, v+301, x}, \ + {TW_SIN, v+302, -x}, {TW_SIN, v+302, x}, {TW_SIN, v+303, -x}, {TW_SIN, v+303, x}, \ + {TW_SIN, v+304, -x}, {TW_SIN, v+304, x}, {TW_SIN, v+305, -x}, {TW_SIN, v+305, x}, \ + {TW_SIN, v+306, -x}, {TW_SIN, v+306, x}, {TW_SIN, v+307, -x}, {TW_SIN, v+307, x}, \ + {TW_SIN, v+308, -x}, {TW_SIN, v+308, x}, {TW_SIN, v+309, -x}, {TW_SIN, v+309, x}, \ + {TW_SIN, v+310, -x}, {TW_SIN, v+310, x}, {TW_SIN, v+311, -x}, {TW_SIN, v+311, x}, \ + {TW_SIN, v+312, -x}, {TW_SIN, v+312, x}, {TW_SIN, v+313, -x}, {TW_SIN, v+313, x}, \ + {TW_SIN, v+314, -x}, {TW_SIN, v+314, x}, {TW_SIN, v+315, -x}, {TW_SIN, v+315, x}, \ + {TW_SIN, v+316, -x}, {TW_SIN, v+316, x}, {TW_SIN, v+317, -x}, {TW_SIN, v+317, x}, \ + {TW_SIN, v+318, -x}, {TW_SIN, v+318, x}, {TW_SIN, v+319, -x}, {TW_SIN, v+319, x}, \ + {TW_SIN, v+320, -x}, {TW_SIN, v+320, x}, {TW_SIN, v+321, -x}, {TW_SIN, v+321, x}, \ + {TW_SIN, v+322, -x}, {TW_SIN, v+322, x}, {TW_SIN, v+323, -x}, {TW_SIN, v+323, x}, \ + {TW_SIN, v+324, -x}, {TW_SIN, v+324, x}, {TW_SIN, v+325, -x}, {TW_SIN, v+325, x}, \ + {TW_SIN, v+326, -x}, {TW_SIN, v+326, x}, {TW_SIN, v+327, -x}, {TW_SIN, v+327, x}, \ + {TW_SIN, v+328, -x}, {TW_SIN, v+328, x}, {TW_SIN, v+329, -x}, {TW_SIN, v+329, x}, \ + {TW_SIN, v+330, -x}, {TW_SIN, v+330, x}, {TW_SIN, v+331, -x}, {TW_SIN, v+331, x}, \ + {TW_SIN, v+332, -x}, {TW_SIN, v+332, x}, {TW_SIN, v+333, -x}, {TW_SIN, v+333, x}, \ + {TW_SIN, v+334, -x}, {TW_SIN, v+334, x}, {TW_SIN, v+335, -x}, {TW_SIN, v+335, x}, \ + {TW_SIN, v+336, -x}, {TW_SIN, v+336, x}, {TW_SIN, v+337, -x}, {TW_SIN, v+337, x}, \ + {TW_SIN, v+338, -x}, {TW_SIN, v+338, x}, {TW_SIN, v+339, -x}, {TW_SIN, v+339, x}, \ + {TW_SIN, v+340, -x}, {TW_SIN, v+340, x}, {TW_SIN, v+341, -x}, {TW_SIN, v+341, x}, \ + {TW_SIN, v+342, -x}, {TW_SIN, v+342, x}, {TW_SIN, v+343, -x}, {TW_SIN, v+343, x}, \ + {TW_SIN, v+344, -x}, {TW_SIN, v+344, x}, {TW_SIN, v+345, -x}, {TW_SIN, v+345, x}, \ + {TW_SIN, v+346, -x}, {TW_SIN, v+346, x}, {TW_SIN, v+347, -x}, {TW_SIN, v+347, x}, \ + {TW_SIN, v+348, -x}, {TW_SIN, v+348, x}, {TW_SIN, v+349, -x}, {TW_SIN, v+349, x}, \ + {TW_SIN, v+350, -x}, {TW_SIN, v+350, x}, {TW_SIN, v+351, -x}, {TW_SIN, v+351, x}, \ + {TW_SIN, v+352, -x}, {TW_SIN, v+352, x}, {TW_SIN, v+353, -x}, {TW_SIN, v+353, x}, \ + {TW_SIN, v+354, -x}, {TW_SIN, v+354, x}, {TW_SIN, v+355, -x}, {TW_SIN, v+355, x}, \ + {TW_SIN, v+356, -x}, {TW_SIN, v+356, x}, {TW_SIN, v+357, -x}, {TW_SIN, v+357, x}, \ + {TW_SIN, v+358, -x}, {TW_SIN, v+358, x}, {TW_SIN, v+359, -x}, {TW_SIN, v+359, x}, \ + {TW_SIN, v+360, -x}, {TW_SIN, v+360, x}, {TW_SIN, v+361, -x}, {TW_SIN, v+361, x}, \ + {TW_SIN, v+362, -x}, {TW_SIN, v+362, x}, {TW_SIN, v+363, -x}, {TW_SIN, v+363, x}, \ + {TW_SIN, v+364, -x}, {TW_SIN, v+364, x}, {TW_SIN, v+365, -x}, {TW_SIN, v+365, x}, \ + {TW_SIN, v+366, -x}, {TW_SIN, v+366, x}, {TW_SIN, v+367, -x}, {TW_SIN, v+367, x}, \ + {TW_SIN, v+368, -x}, {TW_SIN, v+368, x}, {TW_SIN, v+369, -x}, {TW_SIN, v+369, x}, \ + {TW_SIN, v+370, -x}, {TW_SIN, v+370, x}, {TW_SIN, v+371, -x}, {TW_SIN, v+371, x}, \ + {TW_SIN, v+372, -x}, {TW_SIN, v+372, x}, {TW_SIN, v+373, -x}, {TW_SIN, v+373, x}, \ + {TW_SIN, v+374, -x}, {TW_SIN, v+374, x}, {TW_SIN, v+375, -x}, {TW_SIN, v+375, x}, \ + {TW_SIN, v+376, -x}, {TW_SIN, v+376, x}, {TW_SIN, v+377, -x}, {TW_SIN, v+377, x}, \ + {TW_SIN, v+378, -x}, {TW_SIN, v+378, x}, {TW_SIN, v+379, -x}, {TW_SIN, v+379, x}, \ + {TW_SIN, v+380, -x}, {TW_SIN, v+380, x}, {TW_SIN, v+381, -x}, {TW_SIN, v+381, x}, \ + {TW_SIN, v+382, -x}, {TW_SIN, v+382, x}, {TW_SIN, v+383, -x}, {TW_SIN, v+383, x}, \ + {TW_SIN, v+384, -x}, {TW_SIN, v+384, x}, {TW_SIN, v+385, -x}, {TW_SIN, v+385, x}, \ + {TW_SIN, v+386, -x}, {TW_SIN, v+386, x}, {TW_SIN, v+387, -x}, {TW_SIN, v+387, x}, \ + {TW_SIN, v+388, -x}, {TW_SIN, v+388, x}, {TW_SIN, v+389, -x}, {TW_SIN, v+389, x}, \ + {TW_SIN, v+390, -x}, {TW_SIN, v+390, x}, {TW_SIN, v+391, -x}, {TW_SIN, v+391, x}, \ + {TW_SIN, v+392, -x}, {TW_SIN, v+392, x}, {TW_SIN, v+393, -x}, {TW_SIN, v+393, x}, \ + {TW_SIN, v+394, -x}, {TW_SIN, v+394, x}, {TW_SIN, v+395, -x}, {TW_SIN, v+395, x}, \ + {TW_SIN, v+396, -x}, {TW_SIN, v+396, x}, {TW_SIN, v+397, -x}, {TW_SIN, v+397, x}, \ + {TW_SIN, v+398, -x}, {TW_SIN, v+398, x}, {TW_SIN, v+399, -x}, {TW_SIN, v+399, x}, \ + {TW_SIN, v+400, -x}, {TW_SIN, v+400, x}, {TW_SIN, v+401, -x}, {TW_SIN, v+401, x}, \ + {TW_SIN, v+402, -x}, {TW_SIN, v+402, x}, {TW_SIN, v+403, -x}, {TW_SIN, v+403, x}, \ + {TW_SIN, v+404, -x}, {TW_SIN, v+404, x}, {TW_SIN, v+405, -x}, {TW_SIN, v+405, x}, \ + {TW_SIN, v+406, -x}, {TW_SIN, v+406, x}, {TW_SIN, v+407, -x}, {TW_SIN, v+407, x}, \ + {TW_SIN, v+408, -x}, {TW_SIN, v+408, x}, {TW_SIN, v+409, -x}, {TW_SIN, v+409, x}, \ + {TW_SIN, v+410, -x}, {TW_SIN, v+410, x}, {TW_SIN, v+411, -x}, {TW_SIN, v+411, x}, \ + {TW_SIN, v+412, -x}, {TW_SIN, v+412, x}, {TW_SIN, v+413, -x}, {TW_SIN, v+413, x}, \ + {TW_SIN, v+414, -x}, {TW_SIN, v+414, x}, {TW_SIN, v+415, -x}, {TW_SIN, v+415, x}, \ + {TW_SIN, v+416, -x}, {TW_SIN, v+416, x}, {TW_SIN, v+417, -x}, {TW_SIN, v+417, x}, \ + {TW_SIN, v+418, -x}, {TW_SIN, v+418, x}, {TW_SIN, v+419, -x}, {TW_SIN, v+419, x}, \ + {TW_SIN, v+420, -x}, {TW_SIN, v+420, x}, {TW_SIN, v+421, -x}, {TW_SIN, v+421, x}, \ + {TW_SIN, v+422, -x}, {TW_SIN, v+422, x}, {TW_SIN, v+423, -x}, {TW_SIN, v+423, x}, \ + {TW_SIN, v+424, -x}, {TW_SIN, v+424, x}, {TW_SIN, v+425, -x}, {TW_SIN, v+425, x}, \ + {TW_SIN, v+426, -x}, {TW_SIN, v+426, x}, {TW_SIN, v+427, -x}, {TW_SIN, v+427, x}, \ + {TW_SIN, v+428, -x}, {TW_SIN, v+428, x}, {TW_SIN, v+429, -x}, {TW_SIN, v+429, x}, \ + {TW_SIN, v+430, -x}, {TW_SIN, v+430, x}, {TW_SIN, v+431, -x}, {TW_SIN, v+431, x}, \ + {TW_SIN, v+432, -x}, {TW_SIN, v+432, x}, {TW_SIN, v+433, -x}, {TW_SIN, v+433, x}, \ + {TW_SIN, v+434, -x}, {TW_SIN, v+434, x}, {TW_SIN, v+435, -x}, {TW_SIN, v+435, x}, \ + {TW_SIN, v+436, -x}, {TW_SIN, v+436, x}, {TW_SIN, v+437, -x}, {TW_SIN, v+437, x}, \ + {TW_SIN, v+438, -x}, {TW_SIN, v+438, x}, {TW_SIN, v+439, -x}, {TW_SIN, v+439, x}, \ + {TW_SIN, v+440, -x}, {TW_SIN, v+440, x}, {TW_SIN, v+441, -x}, {TW_SIN, v+441, x}, \ + {TW_SIN, v+442, -x}, {TW_SIN, v+442, x}, {TW_SIN, v+443, -x}, {TW_SIN, v+443, x}, \ + {TW_SIN, v+444, -x}, {TW_SIN, v+444, x}, {TW_SIN, v+445, -x}, {TW_SIN, v+445, x}, \ + {TW_SIN, v+446, -x}, {TW_SIN, v+446, x}, {TW_SIN, v+447, -x}, {TW_SIN, v+447, x}, \ + {TW_SIN, v+448, -x}, {TW_SIN, v+448, x}, {TW_SIN, v+449, -x}, {TW_SIN, v+449, x}, \ + {TW_SIN, v+450, -x}, {TW_SIN, v+450, x}, {TW_SIN, v+451, -x}, {TW_SIN, v+451, x}, \ + {TW_SIN, v+452, -x}, {TW_SIN, v+452, x}, {TW_SIN, v+453, -x}, {TW_SIN, v+453, x}, \ + {TW_SIN, v+454, -x}, {TW_SIN, v+454, x}, {TW_SIN, v+455, -x}, {TW_SIN, v+455, x}, \ + {TW_SIN, v+456, -x}, {TW_SIN, v+456, x}, {TW_SIN, v+457, -x}, {TW_SIN, v+457, x}, \ + {TW_SIN, v+458, -x}, {TW_SIN, v+458, x}, {TW_SIN, v+459, -x}, {TW_SIN, v+459, x}, \ + {TW_SIN, v+460, -x}, {TW_SIN, v+460, x}, {TW_SIN, v+461, -x}, {TW_SIN, v+461, x}, \ + {TW_SIN, v+462, -x}, {TW_SIN, v+462, x}, {TW_SIN, v+463, -x}, {TW_SIN, v+463, x}, \ + {TW_SIN, v+464, -x}, {TW_SIN, v+464, x}, {TW_SIN, v+465, -x}, {TW_SIN, v+465, x}, \ + {TW_SIN, v+466, -x}, {TW_SIN, v+466, x}, {TW_SIN, v+467, -x}, {TW_SIN, v+467, x}, \ + {TW_SIN, v+468, -x}, {TW_SIN, v+468, x}, {TW_SIN, v+469, -x}, {TW_SIN, v+469, x}, \ + {TW_SIN, v+470, -x}, {TW_SIN, v+470, x}, {TW_SIN, v+471, -x}, {TW_SIN, v+471, x}, \ + {TW_SIN, v+472, -x}, {TW_SIN, v+472, x}, {TW_SIN, v+473, -x}, {TW_SIN, v+473, x}, \ + {TW_SIN, v+474, -x}, {TW_SIN, v+474, x}, {TW_SIN, v+475, -x}, {TW_SIN, v+475, x}, \ + {TW_SIN, v+476, -x}, {TW_SIN, v+476, x}, {TW_SIN, v+477, -x}, {TW_SIN, v+477, x}, \ + {TW_SIN, v+478, -x}, {TW_SIN, v+478, x}, {TW_SIN, v+479, -x}, {TW_SIN, v+479, x}, \ + {TW_SIN, v+480, -x}, {TW_SIN, v+480, x}, {TW_SIN, v+481, -x}, {TW_SIN, v+481, x}, \ + {TW_SIN, v+482, -x}, {TW_SIN, v+482, x}, {TW_SIN, v+483, -x}, {TW_SIN, v+483, x}, \ + {TW_SIN, v+484, -x}, {TW_SIN, v+484, x}, {TW_SIN, v+485, -x}, {TW_SIN, v+485, x}, \ + {TW_SIN, v+486, -x}, {TW_SIN, v+486, x}, {TW_SIN, v+487, -x}, {TW_SIN, v+487, x}, \ + {TW_SIN, v+488, -x}, {TW_SIN, v+488, x}, {TW_SIN, v+489, -x}, {TW_SIN, v+489, x}, \ + {TW_SIN, v+490, -x}, {TW_SIN, v+490, x}, {TW_SIN, v+491, -x}, {TW_SIN, v+491, x}, \ + {TW_SIN, v+492, -x}, {TW_SIN, v+492, x}, {TW_SIN, v+493, -x}, {TW_SIN, v+493, x}, \ + {TW_SIN, v+494, -x}, {TW_SIN, v+494, x}, {TW_SIN, v+495, -x}, {TW_SIN, v+495, x}, \ + {TW_SIN, v+496, -x}, {TW_SIN, v+496, x}, {TW_SIN, v+497, -x}, {TW_SIN, v+497, x}, \ + {TW_SIN, v+498, -x}, {TW_SIN, v+498, x}, {TW_SIN, v+499, -x}, {TW_SIN, v+499, x}, \ + {TW_SIN, v+500, -x}, {TW_SIN, v+500, x}, {TW_SIN, v+501, -x}, {TW_SIN, v+501, x}, \ + {TW_SIN, v+502, -x}, {TW_SIN, v+502, x}, {TW_SIN, v+503, -x}, {TW_SIN, v+503, x}, \ + {TW_SIN, v+504, -x}, {TW_SIN, v+504, x}, {TW_SIN, v+505, -x}, {TW_SIN, v+505, x}, \ + {TW_SIN, v+506, -x}, {TW_SIN, v+506, x}, {TW_SIN, v+507, -x}, {TW_SIN, v+507, x}, \ + {TW_SIN, v+508, -x}, {TW_SIN, v+508, x}, {TW_SIN, v+509, -x}, {TW_SIN, v+509, x}, \ + {TW_SIN, v+510, -x}, {TW_SIN, v+510, x}, {TW_SIN, v+511, -x}, {TW_SIN, v+511, x} +#endif // VTW_SIZE == 1024 +#endif // REQ_VTW2 +#if defined(REQ_VTWS) +#if defined(VTW_SIZE) && VTW_SIZE == 1 +#warning "using VTWS with 1" +#define VTWS(v,x) {TW_COS, v+0, x}, {TW_SIN, v+0, x} +#endif // VTW_SIZE == 1 +#if defined(VTW_SIZE) && VTW_SIZE == 2 +#warning "using VTWS with 2" +#define VTWS(v,x) {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_SIN, v+0, x}, {TW_SIN, v+1, x} +#endif // VTW_SIZE == 2 +#if defined(VTW_SIZE) && VTW_SIZE == 4 +#warning "using VTWS with 4" +#define VTWS(v,x) {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, \ + {TW_SIN, v+0, x}, {TW_SIN, v+1, x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, x} +#endif // VTW_SIZE == 4 +#if defined(VTW_SIZE) && VTW_SIZE == 8 +#warning "using VTWS with 8" +#define VTWS(v,x) {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, \ + {TW_SIN, v+0, x}, {TW_SIN, v+1, x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, x}, {TW_SIN, v+5, x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, x} +#endif // VTW_SIZE == 8 +#if defined(VTW_SIZE) && VTW_SIZE == 16 +#warning "using VTWS with 16" +#define VTWS(v,x) {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, \ + {TW_COS, v+8, x}, {TW_COS, v+9, x}, {TW_COS, v+10, x}, {TW_COS, v+11, x}, \ + {TW_COS, v+12, x}, {TW_COS, v+13, x}, {TW_COS, v+14, x}, {TW_COS, v+15, x}, \ + {TW_SIN, v+0, x}, {TW_SIN, v+1, x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, x}, {TW_SIN, v+5, x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, x}, \ + {TW_SIN, v+8, x}, {TW_SIN, v+9, x}, {TW_SIN, v+10, x}, {TW_SIN, v+11, x}, \ + {TW_SIN, v+12, x}, {TW_SIN, v+13, x}, {TW_SIN, v+14, x}, {TW_SIN, v+15, x} +#endif // VTW_SIZE == 16 +#if defined(VTW_SIZE) && VTW_SIZE == 32 +#warning "using VTWS with 32" +#define VTWS(v,x) {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, \ + {TW_COS, v+8, x}, {TW_COS, v+9, x}, {TW_COS, v+10, x}, {TW_COS, v+11, x}, \ + {TW_COS, v+12, x}, {TW_COS, v+13, x}, {TW_COS, v+14, x}, {TW_COS, v+15, x}, \ + {TW_COS, v+16, x}, {TW_COS, v+17, x}, {TW_COS, v+18, x}, {TW_COS, v+19, x}, \ + {TW_COS, v+20, x}, {TW_COS, v+21, x}, {TW_COS, v+22, x}, {TW_COS, v+23, x}, \ + {TW_COS, v+24, x}, {TW_COS, v+25, x}, {TW_COS, v+26, x}, {TW_COS, v+27, x}, \ + {TW_COS, v+28, x}, {TW_COS, v+29, x}, {TW_COS, v+30, x}, {TW_COS, v+31, x}, \ + {TW_SIN, v+0, x}, {TW_SIN, v+1, x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, x}, {TW_SIN, v+5, x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, x}, \ + {TW_SIN, v+8, x}, {TW_SIN, v+9, x}, {TW_SIN, v+10, x}, {TW_SIN, v+11, x}, \ + {TW_SIN, v+12, x}, {TW_SIN, v+13, x}, {TW_SIN, v+14, x}, {TW_SIN, v+15, x}, \ + {TW_SIN, v+16, x}, {TW_SIN, v+17, x}, {TW_SIN, v+18, x}, {TW_SIN, v+19, x}, \ + {TW_SIN, v+20, x}, {TW_SIN, v+21, x}, {TW_SIN, v+22, x}, {TW_SIN, v+23, x}, \ + {TW_SIN, v+24, x}, {TW_SIN, v+25, x}, {TW_SIN, v+26, x}, {TW_SIN, v+27, x}, \ + {TW_SIN, v+28, x}, {TW_SIN, v+29, x}, {TW_SIN, v+30, x}, {TW_SIN, v+31, x} +#endif // VTW_SIZE == 32 +#if defined(VTW_SIZE) && VTW_SIZE == 64 +#warning "using VTWS with 64" +#define VTWS(v,x) {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, \ + {TW_COS, v+8, x}, {TW_COS, v+9, x}, {TW_COS, v+10, x}, {TW_COS, v+11, x}, \ + {TW_COS, v+12, x}, {TW_COS, v+13, x}, {TW_COS, v+14, x}, {TW_COS, v+15, x}, \ + {TW_COS, v+16, x}, {TW_COS, v+17, x}, {TW_COS, v+18, x}, {TW_COS, v+19, x}, \ + {TW_COS, v+20, x}, {TW_COS, v+21, x}, {TW_COS, v+22, x}, {TW_COS, v+23, x}, \ + {TW_COS, v+24, x}, {TW_COS, v+25, x}, {TW_COS, v+26, x}, {TW_COS, v+27, x}, \ + {TW_COS, v+28, x}, {TW_COS, v+29, x}, {TW_COS, v+30, x}, {TW_COS, v+31, x}, \ + {TW_COS, v+32, x}, {TW_COS, v+33, x}, {TW_COS, v+34, x}, {TW_COS, v+35, x}, \ + {TW_COS, v+36, x}, {TW_COS, v+37, x}, {TW_COS, v+38, x}, {TW_COS, v+39, x}, \ + {TW_COS, v+40, x}, {TW_COS, v+41, x}, {TW_COS, v+42, x}, {TW_COS, v+43, x}, \ + {TW_COS, v+44, x}, {TW_COS, v+45, x}, {TW_COS, v+46, x}, {TW_COS, v+47, x}, \ + {TW_COS, v+48, x}, {TW_COS, v+49, x}, {TW_COS, v+50, x}, {TW_COS, v+51, x}, \ + {TW_COS, v+52, x}, {TW_COS, v+53, x}, {TW_COS, v+54, x}, {TW_COS, v+55, x}, \ + {TW_COS, v+56, x}, {TW_COS, v+57, x}, {TW_COS, v+58, x}, {TW_COS, v+59, x}, \ + {TW_COS, v+60, x}, {TW_COS, v+61, x}, {TW_COS, v+62, x}, {TW_COS, v+63, x}, \ + {TW_SIN, v+0, x}, {TW_SIN, v+1, x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, x}, {TW_SIN, v+5, x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, x}, \ + {TW_SIN, v+8, x}, {TW_SIN, v+9, x}, {TW_SIN, v+10, x}, {TW_SIN, v+11, x}, \ + {TW_SIN, v+12, x}, {TW_SIN, v+13, x}, {TW_SIN, v+14, x}, {TW_SIN, v+15, x}, \ + {TW_SIN, v+16, x}, {TW_SIN, v+17, x}, {TW_SIN, v+18, x}, {TW_SIN, v+19, x}, \ + {TW_SIN, v+20, x}, {TW_SIN, v+21, x}, {TW_SIN, v+22, x}, {TW_SIN, v+23, x}, \ + {TW_SIN, v+24, x}, {TW_SIN, v+25, x}, {TW_SIN, v+26, x}, {TW_SIN, v+27, x}, \ + {TW_SIN, v+28, x}, {TW_SIN, v+29, x}, {TW_SIN, v+30, x}, {TW_SIN, v+31, x}, \ + {TW_SIN, v+32, x}, {TW_SIN, v+33, x}, {TW_SIN, v+34, x}, {TW_SIN, v+35, x}, \ + {TW_SIN, v+36, x}, {TW_SIN, v+37, x}, {TW_SIN, v+38, x}, {TW_SIN, v+39, x}, \ + {TW_SIN, v+40, x}, {TW_SIN, v+41, x}, {TW_SIN, v+42, x}, {TW_SIN, v+43, x}, \ + {TW_SIN, v+44, x}, {TW_SIN, v+45, x}, {TW_SIN, v+46, x}, {TW_SIN, v+47, x}, \ + {TW_SIN, v+48, x}, {TW_SIN, v+49, x}, {TW_SIN, v+50, x}, {TW_SIN, v+51, x}, \ + {TW_SIN, v+52, x}, {TW_SIN, v+53, x}, {TW_SIN, v+54, x}, {TW_SIN, v+55, x}, \ + {TW_SIN, v+56, x}, {TW_SIN, v+57, x}, {TW_SIN, v+58, x}, {TW_SIN, v+59, x}, \ + {TW_SIN, v+60, x}, {TW_SIN, v+61, x}, {TW_SIN, v+62, x}, {TW_SIN, v+63, x} +#endif // VTW_SIZE == 64 +#if defined(VTW_SIZE) && VTW_SIZE == 128 +#warning "using VTWS with 128" +#define VTWS(v,x) {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, \ + {TW_COS, v+8, x}, {TW_COS, v+9, x}, {TW_COS, v+10, x}, {TW_COS, v+11, x}, \ + {TW_COS, v+12, x}, {TW_COS, v+13, x}, {TW_COS, v+14, x}, {TW_COS, v+15, x}, \ + {TW_COS, v+16, x}, {TW_COS, v+17, x}, {TW_COS, v+18, x}, {TW_COS, v+19, x}, \ + {TW_COS, v+20, x}, {TW_COS, v+21, x}, {TW_COS, v+22, x}, {TW_COS, v+23, x}, \ + {TW_COS, v+24, x}, {TW_COS, v+25, x}, {TW_COS, v+26, x}, {TW_COS, v+27, x}, \ + {TW_COS, v+28, x}, {TW_COS, v+29, x}, {TW_COS, v+30, x}, {TW_COS, v+31, x}, \ + {TW_COS, v+32, x}, {TW_COS, v+33, x}, {TW_COS, v+34, x}, {TW_COS, v+35, x}, \ + {TW_COS, v+36, x}, {TW_COS, v+37, x}, {TW_COS, v+38, x}, {TW_COS, v+39, x}, \ + {TW_COS, v+40, x}, {TW_COS, v+41, x}, {TW_COS, v+42, x}, {TW_COS, v+43, x}, \ + {TW_COS, v+44, x}, {TW_COS, v+45, x}, {TW_COS, v+46, x}, {TW_COS, v+47, x}, \ + {TW_COS, v+48, x}, {TW_COS, v+49, x}, {TW_COS, v+50, x}, {TW_COS, v+51, x}, \ + {TW_COS, v+52, x}, {TW_COS, v+53, x}, {TW_COS, v+54, x}, {TW_COS, v+55, x}, \ + {TW_COS, v+56, x}, {TW_COS, v+57, x}, {TW_COS, v+58, x}, {TW_COS, v+59, x}, \ + {TW_COS, v+60, x}, {TW_COS, v+61, x}, {TW_COS, v+62, x}, {TW_COS, v+63, x}, \ + {TW_COS, v+64, x}, {TW_COS, v+65, x}, {TW_COS, v+66, x}, {TW_COS, v+67, x}, \ + {TW_COS, v+68, x}, {TW_COS, v+69, x}, {TW_COS, v+70, x}, {TW_COS, v+71, x}, \ + {TW_COS, v+72, x}, {TW_COS, v+73, x}, {TW_COS, v+74, x}, {TW_COS, v+75, x}, \ + {TW_COS, v+76, x}, {TW_COS, v+77, x}, {TW_COS, v+78, x}, {TW_COS, v+79, x}, \ + {TW_COS, v+80, x}, {TW_COS, v+81, x}, {TW_COS, v+82, x}, {TW_COS, v+83, x}, \ + {TW_COS, v+84, x}, {TW_COS, v+85, x}, {TW_COS, v+86, x}, {TW_COS, v+87, x}, \ + {TW_COS, v+88, x}, {TW_COS, v+89, x}, {TW_COS, v+90, x}, {TW_COS, v+91, x}, \ + {TW_COS, v+92, x}, {TW_COS, v+93, x}, {TW_COS, v+94, x}, {TW_COS, v+95, x}, \ + {TW_COS, v+96, x}, {TW_COS, v+97, x}, {TW_COS, v+98, x}, {TW_COS, v+99, x}, \ + {TW_COS, v+100, x}, {TW_COS, v+101, x}, {TW_COS, v+102, x}, {TW_COS, v+103, x}, \ + {TW_COS, v+104, x}, {TW_COS, v+105, x}, {TW_COS, v+106, x}, {TW_COS, v+107, x}, \ + {TW_COS, v+108, x}, {TW_COS, v+109, x}, {TW_COS, v+110, x}, {TW_COS, v+111, x}, \ + {TW_COS, v+112, x}, {TW_COS, v+113, x}, {TW_COS, v+114, x}, {TW_COS, v+115, x}, \ + {TW_COS, v+116, x}, {TW_COS, v+117, x}, {TW_COS, v+118, x}, {TW_COS, v+119, x}, \ + {TW_COS, v+120, x}, {TW_COS, v+121, x}, {TW_COS, v+122, x}, {TW_COS, v+123, x}, \ + {TW_COS, v+124, x}, {TW_COS, v+125, x}, {TW_COS, v+126, x}, {TW_COS, v+127, x}, \ + {TW_SIN, v+0, x}, {TW_SIN, v+1, x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, x}, {TW_SIN, v+5, x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, x}, \ + {TW_SIN, v+8, x}, {TW_SIN, v+9, x}, {TW_SIN, v+10, x}, {TW_SIN, v+11, x}, \ + {TW_SIN, v+12, x}, {TW_SIN, v+13, x}, {TW_SIN, v+14, x}, {TW_SIN, v+15, x}, \ + {TW_SIN, v+16, x}, {TW_SIN, v+17, x}, {TW_SIN, v+18, x}, {TW_SIN, v+19, x}, \ + {TW_SIN, v+20, x}, {TW_SIN, v+21, x}, {TW_SIN, v+22, x}, {TW_SIN, v+23, x}, \ + {TW_SIN, v+24, x}, {TW_SIN, v+25, x}, {TW_SIN, v+26, x}, {TW_SIN, v+27, x}, \ + {TW_SIN, v+28, x}, {TW_SIN, v+29, x}, {TW_SIN, v+30, x}, {TW_SIN, v+31, x}, \ + {TW_SIN, v+32, x}, {TW_SIN, v+33, x}, {TW_SIN, v+34, x}, {TW_SIN, v+35, x}, \ + {TW_SIN, v+36, x}, {TW_SIN, v+37, x}, {TW_SIN, v+38, x}, {TW_SIN, v+39, x}, \ + {TW_SIN, v+40, x}, {TW_SIN, v+41, x}, {TW_SIN, v+42, x}, {TW_SIN, v+43, x}, \ + {TW_SIN, v+44, x}, {TW_SIN, v+45, x}, {TW_SIN, v+46, x}, {TW_SIN, v+47, x}, \ + {TW_SIN, v+48, x}, {TW_SIN, v+49, x}, {TW_SIN, v+50, x}, {TW_SIN, v+51, x}, \ + {TW_SIN, v+52, x}, {TW_SIN, v+53, x}, {TW_SIN, v+54, x}, {TW_SIN, v+55, x}, \ + {TW_SIN, v+56, x}, {TW_SIN, v+57, x}, {TW_SIN, v+58, x}, {TW_SIN, v+59, x}, \ + {TW_SIN, v+60, x}, {TW_SIN, v+61, x}, {TW_SIN, v+62, x}, {TW_SIN, v+63, x}, \ + {TW_SIN, v+64, x}, {TW_SIN, v+65, x}, {TW_SIN, v+66, x}, {TW_SIN, v+67, x}, \ + {TW_SIN, v+68, x}, {TW_SIN, v+69, x}, {TW_SIN, v+70, x}, {TW_SIN, v+71, x}, \ + {TW_SIN, v+72, x}, {TW_SIN, v+73, x}, {TW_SIN, v+74, x}, {TW_SIN, v+75, x}, \ + {TW_SIN, v+76, x}, {TW_SIN, v+77, x}, {TW_SIN, v+78, x}, {TW_SIN, v+79, x}, \ + {TW_SIN, v+80, x}, {TW_SIN, v+81, x}, {TW_SIN, v+82, x}, {TW_SIN, v+83, x}, \ + {TW_SIN, v+84, x}, {TW_SIN, v+85, x}, {TW_SIN, v+86, x}, {TW_SIN, v+87, x}, \ + {TW_SIN, v+88, x}, {TW_SIN, v+89, x}, {TW_SIN, v+90, x}, {TW_SIN, v+91, x}, \ + {TW_SIN, v+92, x}, {TW_SIN, v+93, x}, {TW_SIN, v+94, x}, {TW_SIN, v+95, x}, \ + {TW_SIN, v+96, x}, {TW_SIN, v+97, x}, {TW_SIN, v+98, x}, {TW_SIN, v+99, x}, \ + {TW_SIN, v+100, x}, {TW_SIN, v+101, x}, {TW_SIN, v+102, x}, {TW_SIN, v+103, x}, \ + {TW_SIN, v+104, x}, {TW_SIN, v+105, x}, {TW_SIN, v+106, x}, {TW_SIN, v+107, x}, \ + {TW_SIN, v+108, x}, {TW_SIN, v+109, x}, {TW_SIN, v+110, x}, {TW_SIN, v+111, x}, \ + {TW_SIN, v+112, x}, {TW_SIN, v+113, x}, {TW_SIN, v+114, x}, {TW_SIN, v+115, x}, \ + {TW_SIN, v+116, x}, {TW_SIN, v+117, x}, {TW_SIN, v+118, x}, {TW_SIN, v+119, x}, \ + {TW_SIN, v+120, x}, {TW_SIN, v+121, x}, {TW_SIN, v+122, x}, {TW_SIN, v+123, x}, \ + {TW_SIN, v+124, x}, {TW_SIN, v+125, x}, {TW_SIN, v+126, x}, {TW_SIN, v+127, x} +#endif // VTW_SIZE == 128 +#if defined(VTW_SIZE) && VTW_SIZE == 256 +#warning "using VTWS with 256" +#define VTWS(v,x) {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, \ + {TW_COS, v+8, x}, {TW_COS, v+9, x}, {TW_COS, v+10, x}, {TW_COS, v+11, x}, \ + {TW_COS, v+12, x}, {TW_COS, v+13, x}, {TW_COS, v+14, x}, {TW_COS, v+15, x}, \ + {TW_COS, v+16, x}, {TW_COS, v+17, x}, {TW_COS, v+18, x}, {TW_COS, v+19, x}, \ + {TW_COS, v+20, x}, {TW_COS, v+21, x}, {TW_COS, v+22, x}, {TW_COS, v+23, x}, \ + {TW_COS, v+24, x}, {TW_COS, v+25, x}, {TW_COS, v+26, x}, {TW_COS, v+27, x}, \ + {TW_COS, v+28, x}, {TW_COS, v+29, x}, {TW_COS, v+30, x}, {TW_COS, v+31, x}, \ + {TW_COS, v+32, x}, {TW_COS, v+33, x}, {TW_COS, v+34, x}, {TW_COS, v+35, x}, \ + {TW_COS, v+36, x}, {TW_COS, v+37, x}, {TW_COS, v+38, x}, {TW_COS, v+39, x}, \ + {TW_COS, v+40, x}, {TW_COS, v+41, x}, {TW_COS, v+42, x}, {TW_COS, v+43, x}, \ + {TW_COS, v+44, x}, {TW_COS, v+45, x}, {TW_COS, v+46, x}, {TW_COS, v+47, x}, \ + {TW_COS, v+48, x}, {TW_COS, v+49, x}, {TW_COS, v+50, x}, {TW_COS, v+51, x}, \ + {TW_COS, v+52, x}, {TW_COS, v+53, x}, {TW_COS, v+54, x}, {TW_COS, v+55, x}, \ + {TW_COS, v+56, x}, {TW_COS, v+57, x}, {TW_COS, v+58, x}, {TW_COS, v+59, x}, \ + {TW_COS, v+60, x}, {TW_COS, v+61, x}, {TW_COS, v+62, x}, {TW_COS, v+63, x}, \ + {TW_COS, v+64, x}, {TW_COS, v+65, x}, {TW_COS, v+66, x}, {TW_COS, v+67, x}, \ + {TW_COS, v+68, x}, {TW_COS, v+69, x}, {TW_COS, v+70, x}, {TW_COS, v+71, x}, \ + {TW_COS, v+72, x}, {TW_COS, v+73, x}, {TW_COS, v+74, x}, {TW_COS, v+75, x}, \ + {TW_COS, v+76, x}, {TW_COS, v+77, x}, {TW_COS, v+78, x}, {TW_COS, v+79, x}, \ + {TW_COS, v+80, x}, {TW_COS, v+81, x}, {TW_COS, v+82, x}, {TW_COS, v+83, x}, \ + {TW_COS, v+84, x}, {TW_COS, v+85, x}, {TW_COS, v+86, x}, {TW_COS, v+87, x}, \ + {TW_COS, v+88, x}, {TW_COS, v+89, x}, {TW_COS, v+90, x}, {TW_COS, v+91, x}, \ + {TW_COS, v+92, x}, {TW_COS, v+93, x}, {TW_COS, v+94, x}, {TW_COS, v+95, x}, \ + {TW_COS, v+96, x}, {TW_COS, v+97, x}, {TW_COS, v+98, x}, {TW_COS, v+99, x}, \ + {TW_COS, v+100, x}, {TW_COS, v+101, x}, {TW_COS, v+102, x}, {TW_COS, v+103, x}, \ + {TW_COS, v+104, x}, {TW_COS, v+105, x}, {TW_COS, v+106, x}, {TW_COS, v+107, x}, \ + {TW_COS, v+108, x}, {TW_COS, v+109, x}, {TW_COS, v+110, x}, {TW_COS, v+111, x}, \ + {TW_COS, v+112, x}, {TW_COS, v+113, x}, {TW_COS, v+114, x}, {TW_COS, v+115, x}, \ + {TW_COS, v+116, x}, {TW_COS, v+117, x}, {TW_COS, v+118, x}, {TW_COS, v+119, x}, \ + {TW_COS, v+120, x}, {TW_COS, v+121, x}, {TW_COS, v+122, x}, {TW_COS, v+123, x}, \ + {TW_COS, v+124, x}, {TW_COS, v+125, x}, {TW_COS, v+126, x}, {TW_COS, v+127, x}, \ + {TW_COS, v+128, x}, {TW_COS, v+129, x}, {TW_COS, v+130, x}, {TW_COS, v+131, x}, \ + {TW_COS, v+132, x}, {TW_COS, v+133, x}, {TW_COS, v+134, x}, {TW_COS, v+135, x}, \ + {TW_COS, v+136, x}, {TW_COS, v+137, x}, {TW_COS, v+138, x}, {TW_COS, v+139, x}, \ + {TW_COS, v+140, x}, {TW_COS, v+141, x}, {TW_COS, v+142, x}, {TW_COS, v+143, x}, \ + {TW_COS, v+144, x}, {TW_COS, v+145, x}, {TW_COS, v+146, x}, {TW_COS, v+147, x}, \ + {TW_COS, v+148, x}, {TW_COS, v+149, x}, {TW_COS, v+150, x}, {TW_COS, v+151, x}, \ + {TW_COS, v+152, x}, {TW_COS, v+153, x}, {TW_COS, v+154, x}, {TW_COS, v+155, x}, \ + {TW_COS, v+156, x}, {TW_COS, v+157, x}, {TW_COS, v+158, x}, {TW_COS, v+159, x}, \ + {TW_COS, v+160, x}, {TW_COS, v+161, x}, {TW_COS, v+162, x}, {TW_COS, v+163, x}, \ + {TW_COS, v+164, x}, {TW_COS, v+165, x}, {TW_COS, v+166, x}, {TW_COS, v+167, x}, \ + {TW_COS, v+168, x}, {TW_COS, v+169, x}, {TW_COS, v+170, x}, {TW_COS, v+171, x}, \ + {TW_COS, v+172, x}, {TW_COS, v+173, x}, {TW_COS, v+174, x}, {TW_COS, v+175, x}, \ + {TW_COS, v+176, x}, {TW_COS, v+177, x}, {TW_COS, v+178, x}, {TW_COS, v+179, x}, \ + {TW_COS, v+180, x}, {TW_COS, v+181, x}, {TW_COS, v+182, x}, {TW_COS, v+183, x}, \ + {TW_COS, v+184, x}, {TW_COS, v+185, x}, {TW_COS, v+186, x}, {TW_COS, v+187, x}, \ + {TW_COS, v+188, x}, {TW_COS, v+189, x}, {TW_COS, v+190, x}, {TW_COS, v+191, x}, \ + {TW_COS, v+192, x}, {TW_COS, v+193, x}, {TW_COS, v+194, x}, {TW_COS, v+195, x}, \ + {TW_COS, v+196, x}, {TW_COS, v+197, x}, {TW_COS, v+198, x}, {TW_COS, v+199, x}, \ + {TW_COS, v+200, x}, {TW_COS, v+201, x}, {TW_COS, v+202, x}, {TW_COS, v+203, x}, \ + {TW_COS, v+204, x}, {TW_COS, v+205, x}, {TW_COS, v+206, x}, {TW_COS, v+207, x}, \ + {TW_COS, v+208, x}, {TW_COS, v+209, x}, {TW_COS, v+210, x}, {TW_COS, v+211, x}, \ + {TW_COS, v+212, x}, {TW_COS, v+213, x}, {TW_COS, v+214, x}, {TW_COS, v+215, x}, \ + {TW_COS, v+216, x}, {TW_COS, v+217, x}, {TW_COS, v+218, x}, {TW_COS, v+219, x}, \ + {TW_COS, v+220, x}, {TW_COS, v+221, x}, {TW_COS, v+222, x}, {TW_COS, v+223, x}, \ + {TW_COS, v+224, x}, {TW_COS, v+225, x}, {TW_COS, v+226, x}, {TW_COS, v+227, x}, \ + {TW_COS, v+228, x}, {TW_COS, v+229, x}, {TW_COS, v+230, x}, {TW_COS, v+231, x}, \ + {TW_COS, v+232, x}, {TW_COS, v+233, x}, {TW_COS, v+234, x}, {TW_COS, v+235, x}, \ + {TW_COS, v+236, x}, {TW_COS, v+237, x}, {TW_COS, v+238, x}, {TW_COS, v+239, x}, \ + {TW_COS, v+240, x}, {TW_COS, v+241, x}, {TW_COS, v+242, x}, {TW_COS, v+243, x}, \ + {TW_COS, v+244, x}, {TW_COS, v+245, x}, {TW_COS, v+246, x}, {TW_COS, v+247, x}, \ + {TW_COS, v+248, x}, {TW_COS, v+249, x}, {TW_COS, v+250, x}, {TW_COS, v+251, x}, \ + {TW_COS, v+252, x}, {TW_COS, v+253, x}, {TW_COS, v+254, x}, {TW_COS, v+255, x}, \ + {TW_SIN, v+0, x}, {TW_SIN, v+1, x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, x}, {TW_SIN, v+5, x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, x}, \ + {TW_SIN, v+8, x}, {TW_SIN, v+9, x}, {TW_SIN, v+10, x}, {TW_SIN, v+11, x}, \ + {TW_SIN, v+12, x}, {TW_SIN, v+13, x}, {TW_SIN, v+14, x}, {TW_SIN, v+15, x}, \ + {TW_SIN, v+16, x}, {TW_SIN, v+17, x}, {TW_SIN, v+18, x}, {TW_SIN, v+19, x}, \ + {TW_SIN, v+20, x}, {TW_SIN, v+21, x}, {TW_SIN, v+22, x}, {TW_SIN, v+23, x}, \ + {TW_SIN, v+24, x}, {TW_SIN, v+25, x}, {TW_SIN, v+26, x}, {TW_SIN, v+27, x}, \ + {TW_SIN, v+28, x}, {TW_SIN, v+29, x}, {TW_SIN, v+30, x}, {TW_SIN, v+31, x}, \ + {TW_SIN, v+32, x}, {TW_SIN, v+33, x}, {TW_SIN, v+34, x}, {TW_SIN, v+35, x}, \ + {TW_SIN, v+36, x}, {TW_SIN, v+37, x}, {TW_SIN, v+38, x}, {TW_SIN, v+39, x}, \ + {TW_SIN, v+40, x}, {TW_SIN, v+41, x}, {TW_SIN, v+42, x}, {TW_SIN, v+43, x}, \ + {TW_SIN, v+44, x}, {TW_SIN, v+45, x}, {TW_SIN, v+46, x}, {TW_SIN, v+47, x}, \ + {TW_SIN, v+48, x}, {TW_SIN, v+49, x}, {TW_SIN, v+50, x}, {TW_SIN, v+51, x}, \ + {TW_SIN, v+52, x}, {TW_SIN, v+53, x}, {TW_SIN, v+54, x}, {TW_SIN, v+55, x}, \ + {TW_SIN, v+56, x}, {TW_SIN, v+57, x}, {TW_SIN, v+58, x}, {TW_SIN, v+59, x}, \ + {TW_SIN, v+60, x}, {TW_SIN, v+61, x}, {TW_SIN, v+62, x}, {TW_SIN, v+63, x}, \ + {TW_SIN, v+64, x}, {TW_SIN, v+65, x}, {TW_SIN, v+66, x}, {TW_SIN, v+67, x}, \ + {TW_SIN, v+68, x}, {TW_SIN, v+69, x}, {TW_SIN, v+70, x}, {TW_SIN, v+71, x}, \ + {TW_SIN, v+72, x}, {TW_SIN, v+73, x}, {TW_SIN, v+74, x}, {TW_SIN, v+75, x}, \ + {TW_SIN, v+76, x}, {TW_SIN, v+77, x}, {TW_SIN, v+78, x}, {TW_SIN, v+79, x}, \ + {TW_SIN, v+80, x}, {TW_SIN, v+81, x}, {TW_SIN, v+82, x}, {TW_SIN, v+83, x}, \ + {TW_SIN, v+84, x}, {TW_SIN, v+85, x}, {TW_SIN, v+86, x}, {TW_SIN, v+87, x}, \ + {TW_SIN, v+88, x}, {TW_SIN, v+89, x}, {TW_SIN, v+90, x}, {TW_SIN, v+91, x}, \ + {TW_SIN, v+92, x}, {TW_SIN, v+93, x}, {TW_SIN, v+94, x}, {TW_SIN, v+95, x}, \ + {TW_SIN, v+96, x}, {TW_SIN, v+97, x}, {TW_SIN, v+98, x}, {TW_SIN, v+99, x}, \ + {TW_SIN, v+100, x}, {TW_SIN, v+101, x}, {TW_SIN, v+102, x}, {TW_SIN, v+103, x}, \ + {TW_SIN, v+104, x}, {TW_SIN, v+105, x}, {TW_SIN, v+106, x}, {TW_SIN, v+107, x}, \ + {TW_SIN, v+108, x}, {TW_SIN, v+109, x}, {TW_SIN, v+110, x}, {TW_SIN, v+111, x}, \ + {TW_SIN, v+112, x}, {TW_SIN, v+113, x}, {TW_SIN, v+114, x}, {TW_SIN, v+115, x}, \ + {TW_SIN, v+116, x}, {TW_SIN, v+117, x}, {TW_SIN, v+118, x}, {TW_SIN, v+119, x}, \ + {TW_SIN, v+120, x}, {TW_SIN, v+121, x}, {TW_SIN, v+122, x}, {TW_SIN, v+123, x}, \ + {TW_SIN, v+124, x}, {TW_SIN, v+125, x}, {TW_SIN, v+126, x}, {TW_SIN, v+127, x}, \ + {TW_SIN, v+128, x}, {TW_SIN, v+129, x}, {TW_SIN, v+130, x}, {TW_SIN, v+131, x}, \ + {TW_SIN, v+132, x}, {TW_SIN, v+133, x}, {TW_SIN, v+134, x}, {TW_SIN, v+135, x}, \ + {TW_SIN, v+136, x}, {TW_SIN, v+137, x}, {TW_SIN, v+138, x}, {TW_SIN, v+139, x}, \ + {TW_SIN, v+140, x}, {TW_SIN, v+141, x}, {TW_SIN, v+142, x}, {TW_SIN, v+143, x}, \ + {TW_SIN, v+144, x}, {TW_SIN, v+145, x}, {TW_SIN, v+146, x}, {TW_SIN, v+147, x}, \ + {TW_SIN, v+148, x}, {TW_SIN, v+149, x}, {TW_SIN, v+150, x}, {TW_SIN, v+151, x}, \ + {TW_SIN, v+152, x}, {TW_SIN, v+153, x}, {TW_SIN, v+154, x}, {TW_SIN, v+155, x}, \ + {TW_SIN, v+156, x}, {TW_SIN, v+157, x}, {TW_SIN, v+158, x}, {TW_SIN, v+159, x}, \ + {TW_SIN, v+160, x}, {TW_SIN, v+161, x}, {TW_SIN, v+162, x}, {TW_SIN, v+163, x}, \ + {TW_SIN, v+164, x}, {TW_SIN, v+165, x}, {TW_SIN, v+166, x}, {TW_SIN, v+167, x}, \ + {TW_SIN, v+168, x}, {TW_SIN, v+169, x}, {TW_SIN, v+170, x}, {TW_SIN, v+171, x}, \ + {TW_SIN, v+172, x}, {TW_SIN, v+173, x}, {TW_SIN, v+174, x}, {TW_SIN, v+175, x}, \ + {TW_SIN, v+176, x}, {TW_SIN, v+177, x}, {TW_SIN, v+178, x}, {TW_SIN, v+179, x}, \ + {TW_SIN, v+180, x}, {TW_SIN, v+181, x}, {TW_SIN, v+182, x}, {TW_SIN, v+183, x}, \ + {TW_SIN, v+184, x}, {TW_SIN, v+185, x}, {TW_SIN, v+186, x}, {TW_SIN, v+187, x}, \ + {TW_SIN, v+188, x}, {TW_SIN, v+189, x}, {TW_SIN, v+190, x}, {TW_SIN, v+191, x}, \ + {TW_SIN, v+192, x}, {TW_SIN, v+193, x}, {TW_SIN, v+194, x}, {TW_SIN, v+195, x}, \ + {TW_SIN, v+196, x}, {TW_SIN, v+197, x}, {TW_SIN, v+198, x}, {TW_SIN, v+199, x}, \ + {TW_SIN, v+200, x}, {TW_SIN, v+201, x}, {TW_SIN, v+202, x}, {TW_SIN, v+203, x}, \ + {TW_SIN, v+204, x}, {TW_SIN, v+205, x}, {TW_SIN, v+206, x}, {TW_SIN, v+207, x}, \ + {TW_SIN, v+208, x}, {TW_SIN, v+209, x}, {TW_SIN, v+210, x}, {TW_SIN, v+211, x}, \ + {TW_SIN, v+212, x}, {TW_SIN, v+213, x}, {TW_SIN, v+214, x}, {TW_SIN, v+215, x}, \ + {TW_SIN, v+216, x}, {TW_SIN, v+217, x}, {TW_SIN, v+218, x}, {TW_SIN, v+219, x}, \ + {TW_SIN, v+220, x}, {TW_SIN, v+221, x}, {TW_SIN, v+222, x}, {TW_SIN, v+223, x}, \ + {TW_SIN, v+224, x}, {TW_SIN, v+225, x}, {TW_SIN, v+226, x}, {TW_SIN, v+227, x}, \ + {TW_SIN, v+228, x}, {TW_SIN, v+229, x}, {TW_SIN, v+230, x}, {TW_SIN, v+231, x}, \ + {TW_SIN, v+232, x}, {TW_SIN, v+233, x}, {TW_SIN, v+234, x}, {TW_SIN, v+235, x}, \ + {TW_SIN, v+236, x}, {TW_SIN, v+237, x}, {TW_SIN, v+238, x}, {TW_SIN, v+239, x}, \ + {TW_SIN, v+240, x}, {TW_SIN, v+241, x}, {TW_SIN, v+242, x}, {TW_SIN, v+243, x}, \ + {TW_SIN, v+244, x}, {TW_SIN, v+245, x}, {TW_SIN, v+246, x}, {TW_SIN, v+247, x}, \ + {TW_SIN, v+248, x}, {TW_SIN, v+249, x}, {TW_SIN, v+250, x}, {TW_SIN, v+251, x}, \ + {TW_SIN, v+252, x}, {TW_SIN, v+253, x}, {TW_SIN, v+254, x}, {TW_SIN, v+255, x} +#endif // VTW_SIZE == 256 +#if defined(VTW_SIZE) && VTW_SIZE == 512 +#warning "using VTWS with 512" +#define VTWS(v,x) {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, \ + {TW_COS, v+8, x}, {TW_COS, v+9, x}, {TW_COS, v+10, x}, {TW_COS, v+11, x}, \ + {TW_COS, v+12, x}, {TW_COS, v+13, x}, {TW_COS, v+14, x}, {TW_COS, v+15, x}, \ + {TW_COS, v+16, x}, {TW_COS, v+17, x}, {TW_COS, v+18, x}, {TW_COS, v+19, x}, \ + {TW_COS, v+20, x}, {TW_COS, v+21, x}, {TW_COS, v+22, x}, {TW_COS, v+23, x}, \ + {TW_COS, v+24, x}, {TW_COS, v+25, x}, {TW_COS, v+26, x}, {TW_COS, v+27, x}, \ + {TW_COS, v+28, x}, {TW_COS, v+29, x}, {TW_COS, v+30, x}, {TW_COS, v+31, x}, \ + {TW_COS, v+32, x}, {TW_COS, v+33, x}, {TW_COS, v+34, x}, {TW_COS, v+35, x}, \ + {TW_COS, v+36, x}, {TW_COS, v+37, x}, {TW_COS, v+38, x}, {TW_COS, v+39, x}, \ + {TW_COS, v+40, x}, {TW_COS, v+41, x}, {TW_COS, v+42, x}, {TW_COS, v+43, x}, \ + {TW_COS, v+44, x}, {TW_COS, v+45, x}, {TW_COS, v+46, x}, {TW_COS, v+47, x}, \ + {TW_COS, v+48, x}, {TW_COS, v+49, x}, {TW_COS, v+50, x}, {TW_COS, v+51, x}, \ + {TW_COS, v+52, x}, {TW_COS, v+53, x}, {TW_COS, v+54, x}, {TW_COS, v+55, x}, \ + {TW_COS, v+56, x}, {TW_COS, v+57, x}, {TW_COS, v+58, x}, {TW_COS, v+59, x}, \ + {TW_COS, v+60, x}, {TW_COS, v+61, x}, {TW_COS, v+62, x}, {TW_COS, v+63, x}, \ + {TW_COS, v+64, x}, {TW_COS, v+65, x}, {TW_COS, v+66, x}, {TW_COS, v+67, x}, \ + {TW_COS, v+68, x}, {TW_COS, v+69, x}, {TW_COS, v+70, x}, {TW_COS, v+71, x}, \ + {TW_COS, v+72, x}, {TW_COS, v+73, x}, {TW_COS, v+74, x}, {TW_COS, v+75, x}, \ + {TW_COS, v+76, x}, {TW_COS, v+77, x}, {TW_COS, v+78, x}, {TW_COS, v+79, x}, \ + {TW_COS, v+80, x}, {TW_COS, v+81, x}, {TW_COS, v+82, x}, {TW_COS, v+83, x}, \ + {TW_COS, v+84, x}, {TW_COS, v+85, x}, {TW_COS, v+86, x}, {TW_COS, v+87, x}, \ + {TW_COS, v+88, x}, {TW_COS, v+89, x}, {TW_COS, v+90, x}, {TW_COS, v+91, x}, \ + {TW_COS, v+92, x}, {TW_COS, v+93, x}, {TW_COS, v+94, x}, {TW_COS, v+95, x}, \ + {TW_COS, v+96, x}, {TW_COS, v+97, x}, {TW_COS, v+98, x}, {TW_COS, v+99, x}, \ + {TW_COS, v+100, x}, {TW_COS, v+101, x}, {TW_COS, v+102, x}, {TW_COS, v+103, x}, \ + {TW_COS, v+104, x}, {TW_COS, v+105, x}, {TW_COS, v+106, x}, {TW_COS, v+107, x}, \ + {TW_COS, v+108, x}, {TW_COS, v+109, x}, {TW_COS, v+110, x}, {TW_COS, v+111, x}, \ + {TW_COS, v+112, x}, {TW_COS, v+113, x}, {TW_COS, v+114, x}, {TW_COS, v+115, x}, \ + {TW_COS, v+116, x}, {TW_COS, v+117, x}, {TW_COS, v+118, x}, {TW_COS, v+119, x}, \ + {TW_COS, v+120, x}, {TW_COS, v+121, x}, {TW_COS, v+122, x}, {TW_COS, v+123, x}, \ + {TW_COS, v+124, x}, {TW_COS, v+125, x}, {TW_COS, v+126, x}, {TW_COS, v+127, x}, \ + {TW_COS, v+128, x}, {TW_COS, v+129, x}, {TW_COS, v+130, x}, {TW_COS, v+131, x}, \ + {TW_COS, v+132, x}, {TW_COS, v+133, x}, {TW_COS, v+134, x}, {TW_COS, v+135, x}, \ + {TW_COS, v+136, x}, {TW_COS, v+137, x}, {TW_COS, v+138, x}, {TW_COS, v+139, x}, \ + {TW_COS, v+140, x}, {TW_COS, v+141, x}, {TW_COS, v+142, x}, {TW_COS, v+143, x}, \ + {TW_COS, v+144, x}, {TW_COS, v+145, x}, {TW_COS, v+146, x}, {TW_COS, v+147, x}, \ + {TW_COS, v+148, x}, {TW_COS, v+149, x}, {TW_COS, v+150, x}, {TW_COS, v+151, x}, \ + {TW_COS, v+152, x}, {TW_COS, v+153, x}, {TW_COS, v+154, x}, {TW_COS, v+155, x}, \ + {TW_COS, v+156, x}, {TW_COS, v+157, x}, {TW_COS, v+158, x}, {TW_COS, v+159, x}, \ + {TW_COS, v+160, x}, {TW_COS, v+161, x}, {TW_COS, v+162, x}, {TW_COS, v+163, x}, \ + {TW_COS, v+164, x}, {TW_COS, v+165, x}, {TW_COS, v+166, x}, {TW_COS, v+167, x}, \ + {TW_COS, v+168, x}, {TW_COS, v+169, x}, {TW_COS, v+170, x}, {TW_COS, v+171, x}, \ + {TW_COS, v+172, x}, {TW_COS, v+173, x}, {TW_COS, v+174, x}, {TW_COS, v+175, x}, \ + {TW_COS, v+176, x}, {TW_COS, v+177, x}, {TW_COS, v+178, x}, {TW_COS, v+179, x}, \ + {TW_COS, v+180, x}, {TW_COS, v+181, x}, {TW_COS, v+182, x}, {TW_COS, v+183, x}, \ + {TW_COS, v+184, x}, {TW_COS, v+185, x}, {TW_COS, v+186, x}, {TW_COS, v+187, x}, \ + {TW_COS, v+188, x}, {TW_COS, v+189, x}, {TW_COS, v+190, x}, {TW_COS, v+191, x}, \ + {TW_COS, v+192, x}, {TW_COS, v+193, x}, {TW_COS, v+194, x}, {TW_COS, v+195, x}, \ + {TW_COS, v+196, x}, {TW_COS, v+197, x}, {TW_COS, v+198, x}, {TW_COS, v+199, x}, \ + {TW_COS, v+200, x}, {TW_COS, v+201, x}, {TW_COS, v+202, x}, {TW_COS, v+203, x}, \ + {TW_COS, v+204, x}, {TW_COS, v+205, x}, {TW_COS, v+206, x}, {TW_COS, v+207, x}, \ + {TW_COS, v+208, x}, {TW_COS, v+209, x}, {TW_COS, v+210, x}, {TW_COS, v+211, x}, \ + {TW_COS, v+212, x}, {TW_COS, v+213, x}, {TW_COS, v+214, x}, {TW_COS, v+215, x}, \ + {TW_COS, v+216, x}, {TW_COS, v+217, x}, {TW_COS, v+218, x}, {TW_COS, v+219, x}, \ + {TW_COS, v+220, x}, {TW_COS, v+221, x}, {TW_COS, v+222, x}, {TW_COS, v+223, x}, \ + {TW_COS, v+224, x}, {TW_COS, v+225, x}, {TW_COS, v+226, x}, {TW_COS, v+227, x}, \ + {TW_COS, v+228, x}, {TW_COS, v+229, x}, {TW_COS, v+230, x}, {TW_COS, v+231, x}, \ + {TW_COS, v+232, x}, {TW_COS, v+233, x}, {TW_COS, v+234, x}, {TW_COS, v+235, x}, \ + {TW_COS, v+236, x}, {TW_COS, v+237, x}, {TW_COS, v+238, x}, {TW_COS, v+239, x}, \ + {TW_COS, v+240, x}, {TW_COS, v+241, x}, {TW_COS, v+242, x}, {TW_COS, v+243, x}, \ + {TW_COS, v+244, x}, {TW_COS, v+245, x}, {TW_COS, v+246, x}, {TW_COS, v+247, x}, \ + {TW_COS, v+248, x}, {TW_COS, v+249, x}, {TW_COS, v+250, x}, {TW_COS, v+251, x}, \ + {TW_COS, v+252, x}, {TW_COS, v+253, x}, {TW_COS, v+254, x}, {TW_COS, v+255, x}, \ + {TW_COS, v+256, x}, {TW_COS, v+257, x}, {TW_COS, v+258, x}, {TW_COS, v+259, x}, \ + {TW_COS, v+260, x}, {TW_COS, v+261, x}, {TW_COS, v+262, x}, {TW_COS, v+263, x}, \ + {TW_COS, v+264, x}, {TW_COS, v+265, x}, {TW_COS, v+266, x}, {TW_COS, v+267, x}, \ + {TW_COS, v+268, x}, {TW_COS, v+269, x}, {TW_COS, v+270, x}, {TW_COS, v+271, x}, \ + {TW_COS, v+272, x}, {TW_COS, v+273, x}, {TW_COS, v+274, x}, {TW_COS, v+275, x}, \ + {TW_COS, v+276, x}, {TW_COS, v+277, x}, {TW_COS, v+278, x}, {TW_COS, v+279, x}, \ + {TW_COS, v+280, x}, {TW_COS, v+281, x}, {TW_COS, v+282, x}, {TW_COS, v+283, x}, \ + {TW_COS, v+284, x}, {TW_COS, v+285, x}, {TW_COS, v+286, x}, {TW_COS, v+287, x}, \ + {TW_COS, v+288, x}, {TW_COS, v+289, x}, {TW_COS, v+290, x}, {TW_COS, v+291, x}, \ + {TW_COS, v+292, x}, {TW_COS, v+293, x}, {TW_COS, v+294, x}, {TW_COS, v+295, x}, \ + {TW_COS, v+296, x}, {TW_COS, v+297, x}, {TW_COS, v+298, x}, {TW_COS, v+299, x}, \ + {TW_COS, v+300, x}, {TW_COS, v+301, x}, {TW_COS, v+302, x}, {TW_COS, v+303, x}, \ + {TW_COS, v+304, x}, {TW_COS, v+305, x}, {TW_COS, v+306, x}, {TW_COS, v+307, x}, \ + {TW_COS, v+308, x}, {TW_COS, v+309, x}, {TW_COS, v+310, x}, {TW_COS, v+311, x}, \ + {TW_COS, v+312, x}, {TW_COS, v+313, x}, {TW_COS, v+314, x}, {TW_COS, v+315, x}, \ + {TW_COS, v+316, x}, {TW_COS, v+317, x}, {TW_COS, v+318, x}, {TW_COS, v+319, x}, \ + {TW_COS, v+320, x}, {TW_COS, v+321, x}, {TW_COS, v+322, x}, {TW_COS, v+323, x}, \ + {TW_COS, v+324, x}, {TW_COS, v+325, x}, {TW_COS, v+326, x}, {TW_COS, v+327, x}, \ + {TW_COS, v+328, x}, {TW_COS, v+329, x}, {TW_COS, v+330, x}, {TW_COS, v+331, x}, \ + {TW_COS, v+332, x}, {TW_COS, v+333, x}, {TW_COS, v+334, x}, {TW_COS, v+335, x}, \ + {TW_COS, v+336, x}, {TW_COS, v+337, x}, {TW_COS, v+338, x}, {TW_COS, v+339, x}, \ + {TW_COS, v+340, x}, {TW_COS, v+341, x}, {TW_COS, v+342, x}, {TW_COS, v+343, x}, \ + {TW_COS, v+344, x}, {TW_COS, v+345, x}, {TW_COS, v+346, x}, {TW_COS, v+347, x}, \ + {TW_COS, v+348, x}, {TW_COS, v+349, x}, {TW_COS, v+350, x}, {TW_COS, v+351, x}, \ + {TW_COS, v+352, x}, {TW_COS, v+353, x}, {TW_COS, v+354, x}, {TW_COS, v+355, x}, \ + {TW_COS, v+356, x}, {TW_COS, v+357, x}, {TW_COS, v+358, x}, {TW_COS, v+359, x}, \ + {TW_COS, v+360, x}, {TW_COS, v+361, x}, {TW_COS, v+362, x}, {TW_COS, v+363, x}, \ + {TW_COS, v+364, x}, {TW_COS, v+365, x}, {TW_COS, v+366, x}, {TW_COS, v+367, x}, \ + {TW_COS, v+368, x}, {TW_COS, v+369, x}, {TW_COS, v+370, x}, {TW_COS, v+371, x}, \ + {TW_COS, v+372, x}, {TW_COS, v+373, x}, {TW_COS, v+374, x}, {TW_COS, v+375, x}, \ + {TW_COS, v+376, x}, {TW_COS, v+377, x}, {TW_COS, v+378, x}, {TW_COS, v+379, x}, \ + {TW_COS, v+380, x}, {TW_COS, v+381, x}, {TW_COS, v+382, x}, {TW_COS, v+383, x}, \ + {TW_COS, v+384, x}, {TW_COS, v+385, x}, {TW_COS, v+386, x}, {TW_COS, v+387, x}, \ + {TW_COS, v+388, x}, {TW_COS, v+389, x}, {TW_COS, v+390, x}, {TW_COS, v+391, x}, \ + {TW_COS, v+392, x}, {TW_COS, v+393, x}, {TW_COS, v+394, x}, {TW_COS, v+395, x}, \ + {TW_COS, v+396, x}, {TW_COS, v+397, x}, {TW_COS, v+398, x}, {TW_COS, v+399, x}, \ + {TW_COS, v+400, x}, {TW_COS, v+401, x}, {TW_COS, v+402, x}, {TW_COS, v+403, x}, \ + {TW_COS, v+404, x}, {TW_COS, v+405, x}, {TW_COS, v+406, x}, {TW_COS, v+407, x}, \ + {TW_COS, v+408, x}, {TW_COS, v+409, x}, {TW_COS, v+410, x}, {TW_COS, v+411, x}, \ + {TW_COS, v+412, x}, {TW_COS, v+413, x}, {TW_COS, v+414, x}, {TW_COS, v+415, x}, \ + {TW_COS, v+416, x}, {TW_COS, v+417, x}, {TW_COS, v+418, x}, {TW_COS, v+419, x}, \ + {TW_COS, v+420, x}, {TW_COS, v+421, x}, {TW_COS, v+422, x}, {TW_COS, v+423, x}, \ + {TW_COS, v+424, x}, {TW_COS, v+425, x}, {TW_COS, v+426, x}, {TW_COS, v+427, x}, \ + {TW_COS, v+428, x}, {TW_COS, v+429, x}, {TW_COS, v+430, x}, {TW_COS, v+431, x}, \ + {TW_COS, v+432, x}, {TW_COS, v+433, x}, {TW_COS, v+434, x}, {TW_COS, v+435, x}, \ + {TW_COS, v+436, x}, {TW_COS, v+437, x}, {TW_COS, v+438, x}, {TW_COS, v+439, x}, \ + {TW_COS, v+440, x}, {TW_COS, v+441, x}, {TW_COS, v+442, x}, {TW_COS, v+443, x}, \ + {TW_COS, v+444, x}, {TW_COS, v+445, x}, {TW_COS, v+446, x}, {TW_COS, v+447, x}, \ + {TW_COS, v+448, x}, {TW_COS, v+449, x}, {TW_COS, v+450, x}, {TW_COS, v+451, x}, \ + {TW_COS, v+452, x}, {TW_COS, v+453, x}, {TW_COS, v+454, x}, {TW_COS, v+455, x}, \ + {TW_COS, v+456, x}, {TW_COS, v+457, x}, {TW_COS, v+458, x}, {TW_COS, v+459, x}, \ + {TW_COS, v+460, x}, {TW_COS, v+461, x}, {TW_COS, v+462, x}, {TW_COS, v+463, x}, \ + {TW_COS, v+464, x}, {TW_COS, v+465, x}, {TW_COS, v+466, x}, {TW_COS, v+467, x}, \ + {TW_COS, v+468, x}, {TW_COS, v+469, x}, {TW_COS, v+470, x}, {TW_COS, v+471, x}, \ + {TW_COS, v+472, x}, {TW_COS, v+473, x}, {TW_COS, v+474, x}, {TW_COS, v+475, x}, \ + {TW_COS, v+476, x}, {TW_COS, v+477, x}, {TW_COS, v+478, x}, {TW_COS, v+479, x}, \ + {TW_COS, v+480, x}, {TW_COS, v+481, x}, {TW_COS, v+482, x}, {TW_COS, v+483, x}, \ + {TW_COS, v+484, x}, {TW_COS, v+485, x}, {TW_COS, v+486, x}, {TW_COS, v+487, x}, \ + {TW_COS, v+488, x}, {TW_COS, v+489, x}, {TW_COS, v+490, x}, {TW_COS, v+491, x}, \ + {TW_COS, v+492, x}, {TW_COS, v+493, x}, {TW_COS, v+494, x}, {TW_COS, v+495, x}, \ + {TW_COS, v+496, x}, {TW_COS, v+497, x}, {TW_COS, v+498, x}, {TW_COS, v+499, x}, \ + {TW_COS, v+500, x}, {TW_COS, v+501, x}, {TW_COS, v+502, x}, {TW_COS, v+503, x}, \ + {TW_COS, v+504, x}, {TW_COS, v+505, x}, {TW_COS, v+506, x}, {TW_COS, v+507, x}, \ + {TW_COS, v+508, x}, {TW_COS, v+509, x}, {TW_COS, v+510, x}, {TW_COS, v+511, x}, \ + {TW_SIN, v+0, x}, {TW_SIN, v+1, x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, x}, {TW_SIN, v+5, x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, x}, \ + {TW_SIN, v+8, x}, {TW_SIN, v+9, x}, {TW_SIN, v+10, x}, {TW_SIN, v+11, x}, \ + {TW_SIN, v+12, x}, {TW_SIN, v+13, x}, {TW_SIN, v+14, x}, {TW_SIN, v+15, x}, \ + {TW_SIN, v+16, x}, {TW_SIN, v+17, x}, {TW_SIN, v+18, x}, {TW_SIN, v+19, x}, \ + {TW_SIN, v+20, x}, {TW_SIN, v+21, x}, {TW_SIN, v+22, x}, {TW_SIN, v+23, x}, \ + {TW_SIN, v+24, x}, {TW_SIN, v+25, x}, {TW_SIN, v+26, x}, {TW_SIN, v+27, x}, \ + {TW_SIN, v+28, x}, {TW_SIN, v+29, x}, {TW_SIN, v+30, x}, {TW_SIN, v+31, x}, \ + {TW_SIN, v+32, x}, {TW_SIN, v+33, x}, {TW_SIN, v+34, x}, {TW_SIN, v+35, x}, \ + {TW_SIN, v+36, x}, {TW_SIN, v+37, x}, {TW_SIN, v+38, x}, {TW_SIN, v+39, x}, \ + {TW_SIN, v+40, x}, {TW_SIN, v+41, x}, {TW_SIN, v+42, x}, {TW_SIN, v+43, x}, \ + {TW_SIN, v+44, x}, {TW_SIN, v+45, x}, {TW_SIN, v+46, x}, {TW_SIN, v+47, x}, \ + {TW_SIN, v+48, x}, {TW_SIN, v+49, x}, {TW_SIN, v+50, x}, {TW_SIN, v+51, x}, \ + {TW_SIN, v+52, x}, {TW_SIN, v+53, x}, {TW_SIN, v+54, x}, {TW_SIN, v+55, x}, \ + {TW_SIN, v+56, x}, {TW_SIN, v+57, x}, {TW_SIN, v+58, x}, {TW_SIN, v+59, x}, \ + {TW_SIN, v+60, x}, {TW_SIN, v+61, x}, {TW_SIN, v+62, x}, {TW_SIN, v+63, x}, \ + {TW_SIN, v+64, x}, {TW_SIN, v+65, x}, {TW_SIN, v+66, x}, {TW_SIN, v+67, x}, \ + {TW_SIN, v+68, x}, {TW_SIN, v+69, x}, {TW_SIN, v+70, x}, {TW_SIN, v+71, x}, \ + {TW_SIN, v+72, x}, {TW_SIN, v+73, x}, {TW_SIN, v+74, x}, {TW_SIN, v+75, x}, \ + {TW_SIN, v+76, x}, {TW_SIN, v+77, x}, {TW_SIN, v+78, x}, {TW_SIN, v+79, x}, \ + {TW_SIN, v+80, x}, {TW_SIN, v+81, x}, {TW_SIN, v+82, x}, {TW_SIN, v+83, x}, \ + {TW_SIN, v+84, x}, {TW_SIN, v+85, x}, {TW_SIN, v+86, x}, {TW_SIN, v+87, x}, \ + {TW_SIN, v+88, x}, {TW_SIN, v+89, x}, {TW_SIN, v+90, x}, {TW_SIN, v+91, x}, \ + {TW_SIN, v+92, x}, {TW_SIN, v+93, x}, {TW_SIN, v+94, x}, {TW_SIN, v+95, x}, \ + {TW_SIN, v+96, x}, {TW_SIN, v+97, x}, {TW_SIN, v+98, x}, {TW_SIN, v+99, x}, \ + {TW_SIN, v+100, x}, {TW_SIN, v+101, x}, {TW_SIN, v+102, x}, {TW_SIN, v+103, x}, \ + {TW_SIN, v+104, x}, {TW_SIN, v+105, x}, {TW_SIN, v+106, x}, {TW_SIN, v+107, x}, \ + {TW_SIN, v+108, x}, {TW_SIN, v+109, x}, {TW_SIN, v+110, x}, {TW_SIN, v+111, x}, \ + {TW_SIN, v+112, x}, {TW_SIN, v+113, x}, {TW_SIN, v+114, x}, {TW_SIN, v+115, x}, \ + {TW_SIN, v+116, x}, {TW_SIN, v+117, x}, {TW_SIN, v+118, x}, {TW_SIN, v+119, x}, \ + {TW_SIN, v+120, x}, {TW_SIN, v+121, x}, {TW_SIN, v+122, x}, {TW_SIN, v+123, x}, \ + {TW_SIN, v+124, x}, {TW_SIN, v+125, x}, {TW_SIN, v+126, x}, {TW_SIN, v+127, x}, \ + {TW_SIN, v+128, x}, {TW_SIN, v+129, x}, {TW_SIN, v+130, x}, {TW_SIN, v+131, x}, \ + {TW_SIN, v+132, x}, {TW_SIN, v+133, x}, {TW_SIN, v+134, x}, {TW_SIN, v+135, x}, \ + {TW_SIN, v+136, x}, {TW_SIN, v+137, x}, {TW_SIN, v+138, x}, {TW_SIN, v+139, x}, \ + {TW_SIN, v+140, x}, {TW_SIN, v+141, x}, {TW_SIN, v+142, x}, {TW_SIN, v+143, x}, \ + {TW_SIN, v+144, x}, {TW_SIN, v+145, x}, {TW_SIN, v+146, x}, {TW_SIN, v+147, x}, \ + {TW_SIN, v+148, x}, {TW_SIN, v+149, x}, {TW_SIN, v+150, x}, {TW_SIN, v+151, x}, \ + {TW_SIN, v+152, x}, {TW_SIN, v+153, x}, {TW_SIN, v+154, x}, {TW_SIN, v+155, x}, \ + {TW_SIN, v+156, x}, {TW_SIN, v+157, x}, {TW_SIN, v+158, x}, {TW_SIN, v+159, x}, \ + {TW_SIN, v+160, x}, {TW_SIN, v+161, x}, {TW_SIN, v+162, x}, {TW_SIN, v+163, x}, \ + {TW_SIN, v+164, x}, {TW_SIN, v+165, x}, {TW_SIN, v+166, x}, {TW_SIN, v+167, x}, \ + {TW_SIN, v+168, x}, {TW_SIN, v+169, x}, {TW_SIN, v+170, x}, {TW_SIN, v+171, x}, \ + {TW_SIN, v+172, x}, {TW_SIN, v+173, x}, {TW_SIN, v+174, x}, {TW_SIN, v+175, x}, \ + {TW_SIN, v+176, x}, {TW_SIN, v+177, x}, {TW_SIN, v+178, x}, {TW_SIN, v+179, x}, \ + {TW_SIN, v+180, x}, {TW_SIN, v+181, x}, {TW_SIN, v+182, x}, {TW_SIN, v+183, x}, \ + {TW_SIN, v+184, x}, {TW_SIN, v+185, x}, {TW_SIN, v+186, x}, {TW_SIN, v+187, x}, \ + {TW_SIN, v+188, x}, {TW_SIN, v+189, x}, {TW_SIN, v+190, x}, {TW_SIN, v+191, x}, \ + {TW_SIN, v+192, x}, {TW_SIN, v+193, x}, {TW_SIN, v+194, x}, {TW_SIN, v+195, x}, \ + {TW_SIN, v+196, x}, {TW_SIN, v+197, x}, {TW_SIN, v+198, x}, {TW_SIN, v+199, x}, \ + {TW_SIN, v+200, x}, {TW_SIN, v+201, x}, {TW_SIN, v+202, x}, {TW_SIN, v+203, x}, \ + {TW_SIN, v+204, x}, {TW_SIN, v+205, x}, {TW_SIN, v+206, x}, {TW_SIN, v+207, x}, \ + {TW_SIN, v+208, x}, {TW_SIN, v+209, x}, {TW_SIN, v+210, x}, {TW_SIN, v+211, x}, \ + {TW_SIN, v+212, x}, {TW_SIN, v+213, x}, {TW_SIN, v+214, x}, {TW_SIN, v+215, x}, \ + {TW_SIN, v+216, x}, {TW_SIN, v+217, x}, {TW_SIN, v+218, x}, {TW_SIN, v+219, x}, \ + {TW_SIN, v+220, x}, {TW_SIN, v+221, x}, {TW_SIN, v+222, x}, {TW_SIN, v+223, x}, \ + {TW_SIN, v+224, x}, {TW_SIN, v+225, x}, {TW_SIN, v+226, x}, {TW_SIN, v+227, x}, \ + {TW_SIN, v+228, x}, {TW_SIN, v+229, x}, {TW_SIN, v+230, x}, {TW_SIN, v+231, x}, \ + {TW_SIN, v+232, x}, {TW_SIN, v+233, x}, {TW_SIN, v+234, x}, {TW_SIN, v+235, x}, \ + {TW_SIN, v+236, x}, {TW_SIN, v+237, x}, {TW_SIN, v+238, x}, {TW_SIN, v+239, x}, \ + {TW_SIN, v+240, x}, {TW_SIN, v+241, x}, {TW_SIN, v+242, x}, {TW_SIN, v+243, x}, \ + {TW_SIN, v+244, x}, {TW_SIN, v+245, x}, {TW_SIN, v+246, x}, {TW_SIN, v+247, x}, \ + {TW_SIN, v+248, x}, {TW_SIN, v+249, x}, {TW_SIN, v+250, x}, {TW_SIN, v+251, x}, \ + {TW_SIN, v+252, x}, {TW_SIN, v+253, x}, {TW_SIN, v+254, x}, {TW_SIN, v+255, x}, \ + {TW_SIN, v+256, x}, {TW_SIN, v+257, x}, {TW_SIN, v+258, x}, {TW_SIN, v+259, x}, \ + {TW_SIN, v+260, x}, {TW_SIN, v+261, x}, {TW_SIN, v+262, x}, {TW_SIN, v+263, x}, \ + {TW_SIN, v+264, x}, {TW_SIN, v+265, x}, {TW_SIN, v+266, x}, {TW_SIN, v+267, x}, \ + {TW_SIN, v+268, x}, {TW_SIN, v+269, x}, {TW_SIN, v+270, x}, {TW_SIN, v+271, x}, \ + {TW_SIN, v+272, x}, {TW_SIN, v+273, x}, {TW_SIN, v+274, x}, {TW_SIN, v+275, x}, \ + {TW_SIN, v+276, x}, {TW_SIN, v+277, x}, {TW_SIN, v+278, x}, {TW_SIN, v+279, x}, \ + {TW_SIN, v+280, x}, {TW_SIN, v+281, x}, {TW_SIN, v+282, x}, {TW_SIN, v+283, x}, \ + {TW_SIN, v+284, x}, {TW_SIN, v+285, x}, {TW_SIN, v+286, x}, {TW_SIN, v+287, x}, \ + {TW_SIN, v+288, x}, {TW_SIN, v+289, x}, {TW_SIN, v+290, x}, {TW_SIN, v+291, x}, \ + {TW_SIN, v+292, x}, {TW_SIN, v+293, x}, {TW_SIN, v+294, x}, {TW_SIN, v+295, x}, \ + {TW_SIN, v+296, x}, {TW_SIN, v+297, x}, {TW_SIN, v+298, x}, {TW_SIN, v+299, x}, \ + {TW_SIN, v+300, x}, {TW_SIN, v+301, x}, {TW_SIN, v+302, x}, {TW_SIN, v+303, x}, \ + {TW_SIN, v+304, x}, {TW_SIN, v+305, x}, {TW_SIN, v+306, x}, {TW_SIN, v+307, x}, \ + {TW_SIN, v+308, x}, {TW_SIN, v+309, x}, {TW_SIN, v+310, x}, {TW_SIN, v+311, x}, \ + {TW_SIN, v+312, x}, {TW_SIN, v+313, x}, {TW_SIN, v+314, x}, {TW_SIN, v+315, x}, \ + {TW_SIN, v+316, x}, {TW_SIN, v+317, x}, {TW_SIN, v+318, x}, {TW_SIN, v+319, x}, \ + {TW_SIN, v+320, x}, {TW_SIN, v+321, x}, {TW_SIN, v+322, x}, {TW_SIN, v+323, x}, \ + {TW_SIN, v+324, x}, {TW_SIN, v+325, x}, {TW_SIN, v+326, x}, {TW_SIN, v+327, x}, \ + {TW_SIN, v+328, x}, {TW_SIN, v+329, x}, {TW_SIN, v+330, x}, {TW_SIN, v+331, x}, \ + {TW_SIN, v+332, x}, {TW_SIN, v+333, x}, {TW_SIN, v+334, x}, {TW_SIN, v+335, x}, \ + {TW_SIN, v+336, x}, {TW_SIN, v+337, x}, {TW_SIN, v+338, x}, {TW_SIN, v+339, x}, \ + {TW_SIN, v+340, x}, {TW_SIN, v+341, x}, {TW_SIN, v+342, x}, {TW_SIN, v+343, x}, \ + {TW_SIN, v+344, x}, {TW_SIN, v+345, x}, {TW_SIN, v+346, x}, {TW_SIN, v+347, x}, \ + {TW_SIN, v+348, x}, {TW_SIN, v+349, x}, {TW_SIN, v+350, x}, {TW_SIN, v+351, x}, \ + {TW_SIN, v+352, x}, {TW_SIN, v+353, x}, {TW_SIN, v+354, x}, {TW_SIN, v+355, x}, \ + {TW_SIN, v+356, x}, {TW_SIN, v+357, x}, {TW_SIN, v+358, x}, {TW_SIN, v+359, x}, \ + {TW_SIN, v+360, x}, {TW_SIN, v+361, x}, {TW_SIN, v+362, x}, {TW_SIN, v+363, x}, \ + {TW_SIN, v+364, x}, {TW_SIN, v+365, x}, {TW_SIN, v+366, x}, {TW_SIN, v+367, x}, \ + {TW_SIN, v+368, x}, {TW_SIN, v+369, x}, {TW_SIN, v+370, x}, {TW_SIN, v+371, x}, \ + {TW_SIN, v+372, x}, {TW_SIN, v+373, x}, {TW_SIN, v+374, x}, {TW_SIN, v+375, x}, \ + {TW_SIN, v+376, x}, {TW_SIN, v+377, x}, {TW_SIN, v+378, x}, {TW_SIN, v+379, x}, \ + {TW_SIN, v+380, x}, {TW_SIN, v+381, x}, {TW_SIN, v+382, x}, {TW_SIN, v+383, x}, \ + {TW_SIN, v+384, x}, {TW_SIN, v+385, x}, {TW_SIN, v+386, x}, {TW_SIN, v+387, x}, \ + {TW_SIN, v+388, x}, {TW_SIN, v+389, x}, {TW_SIN, v+390, x}, {TW_SIN, v+391, x}, \ + {TW_SIN, v+392, x}, {TW_SIN, v+393, x}, {TW_SIN, v+394, x}, {TW_SIN, v+395, x}, \ + {TW_SIN, v+396, x}, {TW_SIN, v+397, x}, {TW_SIN, v+398, x}, {TW_SIN, v+399, x}, \ + {TW_SIN, v+400, x}, {TW_SIN, v+401, x}, {TW_SIN, v+402, x}, {TW_SIN, v+403, x}, \ + {TW_SIN, v+404, x}, {TW_SIN, v+405, x}, {TW_SIN, v+406, x}, {TW_SIN, v+407, x}, \ + {TW_SIN, v+408, x}, {TW_SIN, v+409, x}, {TW_SIN, v+410, x}, {TW_SIN, v+411, x}, \ + {TW_SIN, v+412, x}, {TW_SIN, v+413, x}, {TW_SIN, v+414, x}, {TW_SIN, v+415, x}, \ + {TW_SIN, v+416, x}, {TW_SIN, v+417, x}, {TW_SIN, v+418, x}, {TW_SIN, v+419, x}, \ + {TW_SIN, v+420, x}, {TW_SIN, v+421, x}, {TW_SIN, v+422, x}, {TW_SIN, v+423, x}, \ + {TW_SIN, v+424, x}, {TW_SIN, v+425, x}, {TW_SIN, v+426, x}, {TW_SIN, v+427, x}, \ + {TW_SIN, v+428, x}, {TW_SIN, v+429, x}, {TW_SIN, v+430, x}, {TW_SIN, v+431, x}, \ + {TW_SIN, v+432, x}, {TW_SIN, v+433, x}, {TW_SIN, v+434, x}, {TW_SIN, v+435, x}, \ + {TW_SIN, v+436, x}, {TW_SIN, v+437, x}, {TW_SIN, v+438, x}, {TW_SIN, v+439, x}, \ + {TW_SIN, v+440, x}, {TW_SIN, v+441, x}, {TW_SIN, v+442, x}, {TW_SIN, v+443, x}, \ + {TW_SIN, v+444, x}, {TW_SIN, v+445, x}, {TW_SIN, v+446, x}, {TW_SIN, v+447, x}, \ + {TW_SIN, v+448, x}, {TW_SIN, v+449, x}, {TW_SIN, v+450, x}, {TW_SIN, v+451, x}, \ + {TW_SIN, v+452, x}, {TW_SIN, v+453, x}, {TW_SIN, v+454, x}, {TW_SIN, v+455, x}, \ + {TW_SIN, v+456, x}, {TW_SIN, v+457, x}, {TW_SIN, v+458, x}, {TW_SIN, v+459, x}, \ + {TW_SIN, v+460, x}, {TW_SIN, v+461, x}, {TW_SIN, v+462, x}, {TW_SIN, v+463, x}, \ + {TW_SIN, v+464, x}, {TW_SIN, v+465, x}, {TW_SIN, v+466, x}, {TW_SIN, v+467, x}, \ + {TW_SIN, v+468, x}, {TW_SIN, v+469, x}, {TW_SIN, v+470, x}, {TW_SIN, v+471, x}, \ + {TW_SIN, v+472, x}, {TW_SIN, v+473, x}, {TW_SIN, v+474, x}, {TW_SIN, v+475, x}, \ + {TW_SIN, v+476, x}, {TW_SIN, v+477, x}, {TW_SIN, v+478, x}, {TW_SIN, v+479, x}, \ + {TW_SIN, v+480, x}, {TW_SIN, v+481, x}, {TW_SIN, v+482, x}, {TW_SIN, v+483, x}, \ + {TW_SIN, v+484, x}, {TW_SIN, v+485, x}, {TW_SIN, v+486, x}, {TW_SIN, v+487, x}, \ + {TW_SIN, v+488, x}, {TW_SIN, v+489, x}, {TW_SIN, v+490, x}, {TW_SIN, v+491, x}, \ + {TW_SIN, v+492, x}, {TW_SIN, v+493, x}, {TW_SIN, v+494, x}, {TW_SIN, v+495, x}, \ + {TW_SIN, v+496, x}, {TW_SIN, v+497, x}, {TW_SIN, v+498, x}, {TW_SIN, v+499, x}, \ + {TW_SIN, v+500, x}, {TW_SIN, v+501, x}, {TW_SIN, v+502, x}, {TW_SIN, v+503, x}, \ + {TW_SIN, v+504, x}, {TW_SIN, v+505, x}, {TW_SIN, v+506, x}, {TW_SIN, v+507, x}, \ + {TW_SIN, v+508, x}, {TW_SIN, v+509, x}, {TW_SIN, v+510, x}, {TW_SIN, v+511, x} +#endif // VTW_SIZE == 512 +#if defined(VTW_SIZE) && VTW_SIZE == 1024 +#warning "using VTWS with 1024" +#define VTWS(v,x) {TW_COS, v+0, x}, {TW_COS, v+1, x}, {TW_COS, v+2, x}, {TW_COS, v+3, x}, \ + {TW_COS, v+4, x}, {TW_COS, v+5, x}, {TW_COS, v+6, x}, {TW_COS, v+7, x}, \ + {TW_COS, v+8, x}, {TW_COS, v+9, x}, {TW_COS, v+10, x}, {TW_COS, v+11, x}, \ + {TW_COS, v+12, x}, {TW_COS, v+13, x}, {TW_COS, v+14, x}, {TW_COS, v+15, x}, \ + {TW_COS, v+16, x}, {TW_COS, v+17, x}, {TW_COS, v+18, x}, {TW_COS, v+19, x}, \ + {TW_COS, v+20, x}, {TW_COS, v+21, x}, {TW_COS, v+22, x}, {TW_COS, v+23, x}, \ + {TW_COS, v+24, x}, {TW_COS, v+25, x}, {TW_COS, v+26, x}, {TW_COS, v+27, x}, \ + {TW_COS, v+28, x}, {TW_COS, v+29, x}, {TW_COS, v+30, x}, {TW_COS, v+31, x}, \ + {TW_COS, v+32, x}, {TW_COS, v+33, x}, {TW_COS, v+34, x}, {TW_COS, v+35, x}, \ + {TW_COS, v+36, x}, {TW_COS, v+37, x}, {TW_COS, v+38, x}, {TW_COS, v+39, x}, \ + {TW_COS, v+40, x}, {TW_COS, v+41, x}, {TW_COS, v+42, x}, {TW_COS, v+43, x}, \ + {TW_COS, v+44, x}, {TW_COS, v+45, x}, {TW_COS, v+46, x}, {TW_COS, v+47, x}, \ + {TW_COS, v+48, x}, {TW_COS, v+49, x}, {TW_COS, v+50, x}, {TW_COS, v+51, x}, \ + {TW_COS, v+52, x}, {TW_COS, v+53, x}, {TW_COS, v+54, x}, {TW_COS, v+55, x}, \ + {TW_COS, v+56, x}, {TW_COS, v+57, x}, {TW_COS, v+58, x}, {TW_COS, v+59, x}, \ + {TW_COS, v+60, x}, {TW_COS, v+61, x}, {TW_COS, v+62, x}, {TW_COS, v+63, x}, \ + {TW_COS, v+64, x}, {TW_COS, v+65, x}, {TW_COS, v+66, x}, {TW_COS, v+67, x}, \ + {TW_COS, v+68, x}, {TW_COS, v+69, x}, {TW_COS, v+70, x}, {TW_COS, v+71, x}, \ + {TW_COS, v+72, x}, {TW_COS, v+73, x}, {TW_COS, v+74, x}, {TW_COS, v+75, x}, \ + {TW_COS, v+76, x}, {TW_COS, v+77, x}, {TW_COS, v+78, x}, {TW_COS, v+79, x}, \ + {TW_COS, v+80, x}, {TW_COS, v+81, x}, {TW_COS, v+82, x}, {TW_COS, v+83, x}, \ + {TW_COS, v+84, x}, {TW_COS, v+85, x}, {TW_COS, v+86, x}, {TW_COS, v+87, x}, \ + {TW_COS, v+88, x}, {TW_COS, v+89, x}, {TW_COS, v+90, x}, {TW_COS, v+91, x}, \ + {TW_COS, v+92, x}, {TW_COS, v+93, x}, {TW_COS, v+94, x}, {TW_COS, v+95, x}, \ + {TW_COS, v+96, x}, {TW_COS, v+97, x}, {TW_COS, v+98, x}, {TW_COS, v+99, x}, \ + {TW_COS, v+100, x}, {TW_COS, v+101, x}, {TW_COS, v+102, x}, {TW_COS, v+103, x}, \ + {TW_COS, v+104, x}, {TW_COS, v+105, x}, {TW_COS, v+106, x}, {TW_COS, v+107, x}, \ + {TW_COS, v+108, x}, {TW_COS, v+109, x}, {TW_COS, v+110, x}, {TW_COS, v+111, x}, \ + {TW_COS, v+112, x}, {TW_COS, v+113, x}, {TW_COS, v+114, x}, {TW_COS, v+115, x}, \ + {TW_COS, v+116, x}, {TW_COS, v+117, x}, {TW_COS, v+118, x}, {TW_COS, v+119, x}, \ + {TW_COS, v+120, x}, {TW_COS, v+121, x}, {TW_COS, v+122, x}, {TW_COS, v+123, x}, \ + {TW_COS, v+124, x}, {TW_COS, v+125, x}, {TW_COS, v+126, x}, {TW_COS, v+127, x}, \ + {TW_COS, v+128, x}, {TW_COS, v+129, x}, {TW_COS, v+130, x}, {TW_COS, v+131, x}, \ + {TW_COS, v+132, x}, {TW_COS, v+133, x}, {TW_COS, v+134, x}, {TW_COS, v+135, x}, \ + {TW_COS, v+136, x}, {TW_COS, v+137, x}, {TW_COS, v+138, x}, {TW_COS, v+139, x}, \ + {TW_COS, v+140, x}, {TW_COS, v+141, x}, {TW_COS, v+142, x}, {TW_COS, v+143, x}, \ + {TW_COS, v+144, x}, {TW_COS, v+145, x}, {TW_COS, v+146, x}, {TW_COS, v+147, x}, \ + {TW_COS, v+148, x}, {TW_COS, v+149, x}, {TW_COS, v+150, x}, {TW_COS, v+151, x}, \ + {TW_COS, v+152, x}, {TW_COS, v+153, x}, {TW_COS, v+154, x}, {TW_COS, v+155, x}, \ + {TW_COS, v+156, x}, {TW_COS, v+157, x}, {TW_COS, v+158, x}, {TW_COS, v+159, x}, \ + {TW_COS, v+160, x}, {TW_COS, v+161, x}, {TW_COS, v+162, x}, {TW_COS, v+163, x}, \ + {TW_COS, v+164, x}, {TW_COS, v+165, x}, {TW_COS, v+166, x}, {TW_COS, v+167, x}, \ + {TW_COS, v+168, x}, {TW_COS, v+169, x}, {TW_COS, v+170, x}, {TW_COS, v+171, x}, \ + {TW_COS, v+172, x}, {TW_COS, v+173, x}, {TW_COS, v+174, x}, {TW_COS, v+175, x}, \ + {TW_COS, v+176, x}, {TW_COS, v+177, x}, {TW_COS, v+178, x}, {TW_COS, v+179, x}, \ + {TW_COS, v+180, x}, {TW_COS, v+181, x}, {TW_COS, v+182, x}, {TW_COS, v+183, x}, \ + {TW_COS, v+184, x}, {TW_COS, v+185, x}, {TW_COS, v+186, x}, {TW_COS, v+187, x}, \ + {TW_COS, v+188, x}, {TW_COS, v+189, x}, {TW_COS, v+190, x}, {TW_COS, v+191, x}, \ + {TW_COS, v+192, x}, {TW_COS, v+193, x}, {TW_COS, v+194, x}, {TW_COS, v+195, x}, \ + {TW_COS, v+196, x}, {TW_COS, v+197, x}, {TW_COS, v+198, x}, {TW_COS, v+199, x}, \ + {TW_COS, v+200, x}, {TW_COS, v+201, x}, {TW_COS, v+202, x}, {TW_COS, v+203, x}, \ + {TW_COS, v+204, x}, {TW_COS, v+205, x}, {TW_COS, v+206, x}, {TW_COS, v+207, x}, \ + {TW_COS, v+208, x}, {TW_COS, v+209, x}, {TW_COS, v+210, x}, {TW_COS, v+211, x}, \ + {TW_COS, v+212, x}, {TW_COS, v+213, x}, {TW_COS, v+214, x}, {TW_COS, v+215, x}, \ + {TW_COS, v+216, x}, {TW_COS, v+217, x}, {TW_COS, v+218, x}, {TW_COS, v+219, x}, \ + {TW_COS, v+220, x}, {TW_COS, v+221, x}, {TW_COS, v+222, x}, {TW_COS, v+223, x}, \ + {TW_COS, v+224, x}, {TW_COS, v+225, x}, {TW_COS, v+226, x}, {TW_COS, v+227, x}, \ + {TW_COS, v+228, x}, {TW_COS, v+229, x}, {TW_COS, v+230, x}, {TW_COS, v+231, x}, \ + {TW_COS, v+232, x}, {TW_COS, v+233, x}, {TW_COS, v+234, x}, {TW_COS, v+235, x}, \ + {TW_COS, v+236, x}, {TW_COS, v+237, x}, {TW_COS, v+238, x}, {TW_COS, v+239, x}, \ + {TW_COS, v+240, x}, {TW_COS, v+241, x}, {TW_COS, v+242, x}, {TW_COS, v+243, x}, \ + {TW_COS, v+244, x}, {TW_COS, v+245, x}, {TW_COS, v+246, x}, {TW_COS, v+247, x}, \ + {TW_COS, v+248, x}, {TW_COS, v+249, x}, {TW_COS, v+250, x}, {TW_COS, v+251, x}, \ + {TW_COS, v+252, x}, {TW_COS, v+253, x}, {TW_COS, v+254, x}, {TW_COS, v+255, x}, \ + {TW_COS, v+256, x}, {TW_COS, v+257, x}, {TW_COS, v+258, x}, {TW_COS, v+259, x}, \ + {TW_COS, v+260, x}, {TW_COS, v+261, x}, {TW_COS, v+262, x}, {TW_COS, v+263, x}, \ + {TW_COS, v+264, x}, {TW_COS, v+265, x}, {TW_COS, v+266, x}, {TW_COS, v+267, x}, \ + {TW_COS, v+268, x}, {TW_COS, v+269, x}, {TW_COS, v+270, x}, {TW_COS, v+271, x}, \ + {TW_COS, v+272, x}, {TW_COS, v+273, x}, {TW_COS, v+274, x}, {TW_COS, v+275, x}, \ + {TW_COS, v+276, x}, {TW_COS, v+277, x}, {TW_COS, v+278, x}, {TW_COS, v+279, x}, \ + {TW_COS, v+280, x}, {TW_COS, v+281, x}, {TW_COS, v+282, x}, {TW_COS, v+283, x}, \ + {TW_COS, v+284, x}, {TW_COS, v+285, x}, {TW_COS, v+286, x}, {TW_COS, v+287, x}, \ + {TW_COS, v+288, x}, {TW_COS, v+289, x}, {TW_COS, v+290, x}, {TW_COS, v+291, x}, \ + {TW_COS, v+292, x}, {TW_COS, v+293, x}, {TW_COS, v+294, x}, {TW_COS, v+295, x}, \ + {TW_COS, v+296, x}, {TW_COS, v+297, x}, {TW_COS, v+298, x}, {TW_COS, v+299, x}, \ + {TW_COS, v+300, x}, {TW_COS, v+301, x}, {TW_COS, v+302, x}, {TW_COS, v+303, x}, \ + {TW_COS, v+304, x}, {TW_COS, v+305, x}, {TW_COS, v+306, x}, {TW_COS, v+307, x}, \ + {TW_COS, v+308, x}, {TW_COS, v+309, x}, {TW_COS, v+310, x}, {TW_COS, v+311, x}, \ + {TW_COS, v+312, x}, {TW_COS, v+313, x}, {TW_COS, v+314, x}, {TW_COS, v+315, x}, \ + {TW_COS, v+316, x}, {TW_COS, v+317, x}, {TW_COS, v+318, x}, {TW_COS, v+319, x}, \ + {TW_COS, v+320, x}, {TW_COS, v+321, x}, {TW_COS, v+322, x}, {TW_COS, v+323, x}, \ + {TW_COS, v+324, x}, {TW_COS, v+325, x}, {TW_COS, v+326, x}, {TW_COS, v+327, x}, \ + {TW_COS, v+328, x}, {TW_COS, v+329, x}, {TW_COS, v+330, x}, {TW_COS, v+331, x}, \ + {TW_COS, v+332, x}, {TW_COS, v+333, x}, {TW_COS, v+334, x}, {TW_COS, v+335, x}, \ + {TW_COS, v+336, x}, {TW_COS, v+337, x}, {TW_COS, v+338, x}, {TW_COS, v+339, x}, \ + {TW_COS, v+340, x}, {TW_COS, v+341, x}, {TW_COS, v+342, x}, {TW_COS, v+343, x}, \ + {TW_COS, v+344, x}, {TW_COS, v+345, x}, {TW_COS, v+346, x}, {TW_COS, v+347, x}, \ + {TW_COS, v+348, x}, {TW_COS, v+349, x}, {TW_COS, v+350, x}, {TW_COS, v+351, x}, \ + {TW_COS, v+352, x}, {TW_COS, v+353, x}, {TW_COS, v+354, x}, {TW_COS, v+355, x}, \ + {TW_COS, v+356, x}, {TW_COS, v+357, x}, {TW_COS, v+358, x}, {TW_COS, v+359, x}, \ + {TW_COS, v+360, x}, {TW_COS, v+361, x}, {TW_COS, v+362, x}, {TW_COS, v+363, x}, \ + {TW_COS, v+364, x}, {TW_COS, v+365, x}, {TW_COS, v+366, x}, {TW_COS, v+367, x}, \ + {TW_COS, v+368, x}, {TW_COS, v+369, x}, {TW_COS, v+370, x}, {TW_COS, v+371, x}, \ + {TW_COS, v+372, x}, {TW_COS, v+373, x}, {TW_COS, v+374, x}, {TW_COS, v+375, x}, \ + {TW_COS, v+376, x}, {TW_COS, v+377, x}, {TW_COS, v+378, x}, {TW_COS, v+379, x}, \ + {TW_COS, v+380, x}, {TW_COS, v+381, x}, {TW_COS, v+382, x}, {TW_COS, v+383, x}, \ + {TW_COS, v+384, x}, {TW_COS, v+385, x}, {TW_COS, v+386, x}, {TW_COS, v+387, x}, \ + {TW_COS, v+388, x}, {TW_COS, v+389, x}, {TW_COS, v+390, x}, {TW_COS, v+391, x}, \ + {TW_COS, v+392, x}, {TW_COS, v+393, x}, {TW_COS, v+394, x}, {TW_COS, v+395, x}, \ + {TW_COS, v+396, x}, {TW_COS, v+397, x}, {TW_COS, v+398, x}, {TW_COS, v+399, x}, \ + {TW_COS, v+400, x}, {TW_COS, v+401, x}, {TW_COS, v+402, x}, {TW_COS, v+403, x}, \ + {TW_COS, v+404, x}, {TW_COS, v+405, x}, {TW_COS, v+406, x}, {TW_COS, v+407, x}, \ + {TW_COS, v+408, x}, {TW_COS, v+409, x}, {TW_COS, v+410, x}, {TW_COS, v+411, x}, \ + {TW_COS, v+412, x}, {TW_COS, v+413, x}, {TW_COS, v+414, x}, {TW_COS, v+415, x}, \ + {TW_COS, v+416, x}, {TW_COS, v+417, x}, {TW_COS, v+418, x}, {TW_COS, v+419, x}, \ + {TW_COS, v+420, x}, {TW_COS, v+421, x}, {TW_COS, v+422, x}, {TW_COS, v+423, x}, \ + {TW_COS, v+424, x}, {TW_COS, v+425, x}, {TW_COS, v+426, x}, {TW_COS, v+427, x}, \ + {TW_COS, v+428, x}, {TW_COS, v+429, x}, {TW_COS, v+430, x}, {TW_COS, v+431, x}, \ + {TW_COS, v+432, x}, {TW_COS, v+433, x}, {TW_COS, v+434, x}, {TW_COS, v+435, x}, \ + {TW_COS, v+436, x}, {TW_COS, v+437, x}, {TW_COS, v+438, x}, {TW_COS, v+439, x}, \ + {TW_COS, v+440, x}, {TW_COS, v+441, x}, {TW_COS, v+442, x}, {TW_COS, v+443, x}, \ + {TW_COS, v+444, x}, {TW_COS, v+445, x}, {TW_COS, v+446, x}, {TW_COS, v+447, x}, \ + {TW_COS, v+448, x}, {TW_COS, v+449, x}, {TW_COS, v+450, x}, {TW_COS, v+451, x}, \ + {TW_COS, v+452, x}, {TW_COS, v+453, x}, {TW_COS, v+454, x}, {TW_COS, v+455, x}, \ + {TW_COS, v+456, x}, {TW_COS, v+457, x}, {TW_COS, v+458, x}, {TW_COS, v+459, x}, \ + {TW_COS, v+460, x}, {TW_COS, v+461, x}, {TW_COS, v+462, x}, {TW_COS, v+463, x}, \ + {TW_COS, v+464, x}, {TW_COS, v+465, x}, {TW_COS, v+466, x}, {TW_COS, v+467, x}, \ + {TW_COS, v+468, x}, {TW_COS, v+469, x}, {TW_COS, v+470, x}, {TW_COS, v+471, x}, \ + {TW_COS, v+472, x}, {TW_COS, v+473, x}, {TW_COS, v+474, x}, {TW_COS, v+475, x}, \ + {TW_COS, v+476, x}, {TW_COS, v+477, x}, {TW_COS, v+478, x}, {TW_COS, v+479, x}, \ + {TW_COS, v+480, x}, {TW_COS, v+481, x}, {TW_COS, v+482, x}, {TW_COS, v+483, x}, \ + {TW_COS, v+484, x}, {TW_COS, v+485, x}, {TW_COS, v+486, x}, {TW_COS, v+487, x}, \ + {TW_COS, v+488, x}, {TW_COS, v+489, x}, {TW_COS, v+490, x}, {TW_COS, v+491, x}, \ + {TW_COS, v+492, x}, {TW_COS, v+493, x}, {TW_COS, v+494, x}, {TW_COS, v+495, x}, \ + {TW_COS, v+496, x}, {TW_COS, v+497, x}, {TW_COS, v+498, x}, {TW_COS, v+499, x}, \ + {TW_COS, v+500, x}, {TW_COS, v+501, x}, {TW_COS, v+502, x}, {TW_COS, v+503, x}, \ + {TW_COS, v+504, x}, {TW_COS, v+505, x}, {TW_COS, v+506, x}, {TW_COS, v+507, x}, \ + {TW_COS, v+508, x}, {TW_COS, v+509, x}, {TW_COS, v+510, x}, {TW_COS, v+511, x}, \ + {TW_COS, v+512, x}, {TW_COS, v+513, x}, {TW_COS, v+514, x}, {TW_COS, v+515, x}, \ + {TW_COS, v+516, x}, {TW_COS, v+517, x}, {TW_COS, v+518, x}, {TW_COS, v+519, x}, \ + {TW_COS, v+520, x}, {TW_COS, v+521, x}, {TW_COS, v+522, x}, {TW_COS, v+523, x}, \ + {TW_COS, v+524, x}, {TW_COS, v+525, x}, {TW_COS, v+526, x}, {TW_COS, v+527, x}, \ + {TW_COS, v+528, x}, {TW_COS, v+529, x}, {TW_COS, v+530, x}, {TW_COS, v+531, x}, \ + {TW_COS, v+532, x}, {TW_COS, v+533, x}, {TW_COS, v+534, x}, {TW_COS, v+535, x}, \ + {TW_COS, v+536, x}, {TW_COS, v+537, x}, {TW_COS, v+538, x}, {TW_COS, v+539, x}, \ + {TW_COS, v+540, x}, {TW_COS, v+541, x}, {TW_COS, v+542, x}, {TW_COS, v+543, x}, \ + {TW_COS, v+544, x}, {TW_COS, v+545, x}, {TW_COS, v+546, x}, {TW_COS, v+547, x}, \ + {TW_COS, v+548, x}, {TW_COS, v+549, x}, {TW_COS, v+550, x}, {TW_COS, v+551, x}, \ + {TW_COS, v+552, x}, {TW_COS, v+553, x}, {TW_COS, v+554, x}, {TW_COS, v+555, x}, \ + {TW_COS, v+556, x}, {TW_COS, v+557, x}, {TW_COS, v+558, x}, {TW_COS, v+559, x}, \ + {TW_COS, v+560, x}, {TW_COS, v+561, x}, {TW_COS, v+562, x}, {TW_COS, v+563, x}, \ + {TW_COS, v+564, x}, {TW_COS, v+565, x}, {TW_COS, v+566, x}, {TW_COS, v+567, x}, \ + {TW_COS, v+568, x}, {TW_COS, v+569, x}, {TW_COS, v+570, x}, {TW_COS, v+571, x}, \ + {TW_COS, v+572, x}, {TW_COS, v+573, x}, {TW_COS, v+574, x}, {TW_COS, v+575, x}, \ + {TW_COS, v+576, x}, {TW_COS, v+577, x}, {TW_COS, v+578, x}, {TW_COS, v+579, x}, \ + {TW_COS, v+580, x}, {TW_COS, v+581, x}, {TW_COS, v+582, x}, {TW_COS, v+583, x}, \ + {TW_COS, v+584, x}, {TW_COS, v+585, x}, {TW_COS, v+586, x}, {TW_COS, v+587, x}, \ + {TW_COS, v+588, x}, {TW_COS, v+589, x}, {TW_COS, v+590, x}, {TW_COS, v+591, x}, \ + {TW_COS, v+592, x}, {TW_COS, v+593, x}, {TW_COS, v+594, x}, {TW_COS, v+595, x}, \ + {TW_COS, v+596, x}, {TW_COS, v+597, x}, {TW_COS, v+598, x}, {TW_COS, v+599, x}, \ + {TW_COS, v+600, x}, {TW_COS, v+601, x}, {TW_COS, v+602, x}, {TW_COS, v+603, x}, \ + {TW_COS, v+604, x}, {TW_COS, v+605, x}, {TW_COS, v+606, x}, {TW_COS, v+607, x}, \ + {TW_COS, v+608, x}, {TW_COS, v+609, x}, {TW_COS, v+610, x}, {TW_COS, v+611, x}, \ + {TW_COS, v+612, x}, {TW_COS, v+613, x}, {TW_COS, v+614, x}, {TW_COS, v+615, x}, \ + {TW_COS, v+616, x}, {TW_COS, v+617, x}, {TW_COS, v+618, x}, {TW_COS, v+619, x}, \ + {TW_COS, v+620, x}, {TW_COS, v+621, x}, {TW_COS, v+622, x}, {TW_COS, v+623, x}, \ + {TW_COS, v+624, x}, {TW_COS, v+625, x}, {TW_COS, v+626, x}, {TW_COS, v+627, x}, \ + {TW_COS, v+628, x}, {TW_COS, v+629, x}, {TW_COS, v+630, x}, {TW_COS, v+631, x}, \ + {TW_COS, v+632, x}, {TW_COS, v+633, x}, {TW_COS, v+634, x}, {TW_COS, v+635, x}, \ + {TW_COS, v+636, x}, {TW_COS, v+637, x}, {TW_COS, v+638, x}, {TW_COS, v+639, x}, \ + {TW_COS, v+640, x}, {TW_COS, v+641, x}, {TW_COS, v+642, x}, {TW_COS, v+643, x}, \ + {TW_COS, v+644, x}, {TW_COS, v+645, x}, {TW_COS, v+646, x}, {TW_COS, v+647, x}, \ + {TW_COS, v+648, x}, {TW_COS, v+649, x}, {TW_COS, v+650, x}, {TW_COS, v+651, x}, \ + {TW_COS, v+652, x}, {TW_COS, v+653, x}, {TW_COS, v+654, x}, {TW_COS, v+655, x}, \ + {TW_COS, v+656, x}, {TW_COS, v+657, x}, {TW_COS, v+658, x}, {TW_COS, v+659, x}, \ + {TW_COS, v+660, x}, {TW_COS, v+661, x}, {TW_COS, v+662, x}, {TW_COS, v+663, x}, \ + {TW_COS, v+664, x}, {TW_COS, v+665, x}, {TW_COS, v+666, x}, {TW_COS, v+667, x}, \ + {TW_COS, v+668, x}, {TW_COS, v+669, x}, {TW_COS, v+670, x}, {TW_COS, v+671, x}, \ + {TW_COS, v+672, x}, {TW_COS, v+673, x}, {TW_COS, v+674, x}, {TW_COS, v+675, x}, \ + {TW_COS, v+676, x}, {TW_COS, v+677, x}, {TW_COS, v+678, x}, {TW_COS, v+679, x}, \ + {TW_COS, v+680, x}, {TW_COS, v+681, x}, {TW_COS, v+682, x}, {TW_COS, v+683, x}, \ + {TW_COS, v+684, x}, {TW_COS, v+685, x}, {TW_COS, v+686, x}, {TW_COS, v+687, x}, \ + {TW_COS, v+688, x}, {TW_COS, v+689, x}, {TW_COS, v+690, x}, {TW_COS, v+691, x}, \ + {TW_COS, v+692, x}, {TW_COS, v+693, x}, {TW_COS, v+694, x}, {TW_COS, v+695, x}, \ + {TW_COS, v+696, x}, {TW_COS, v+697, x}, {TW_COS, v+698, x}, {TW_COS, v+699, x}, \ + {TW_COS, v+700, x}, {TW_COS, v+701, x}, {TW_COS, v+702, x}, {TW_COS, v+703, x}, \ + {TW_COS, v+704, x}, {TW_COS, v+705, x}, {TW_COS, v+706, x}, {TW_COS, v+707, x}, \ + {TW_COS, v+708, x}, {TW_COS, v+709, x}, {TW_COS, v+710, x}, {TW_COS, v+711, x}, \ + {TW_COS, v+712, x}, {TW_COS, v+713, x}, {TW_COS, v+714, x}, {TW_COS, v+715, x}, \ + {TW_COS, v+716, x}, {TW_COS, v+717, x}, {TW_COS, v+718, x}, {TW_COS, v+719, x}, \ + {TW_COS, v+720, x}, {TW_COS, v+721, x}, {TW_COS, v+722, x}, {TW_COS, v+723, x}, \ + {TW_COS, v+724, x}, {TW_COS, v+725, x}, {TW_COS, v+726, x}, {TW_COS, v+727, x}, \ + {TW_COS, v+728, x}, {TW_COS, v+729, x}, {TW_COS, v+730, x}, {TW_COS, v+731, x}, \ + {TW_COS, v+732, x}, {TW_COS, v+733, x}, {TW_COS, v+734, x}, {TW_COS, v+735, x}, \ + {TW_COS, v+736, x}, {TW_COS, v+737, x}, {TW_COS, v+738, x}, {TW_COS, v+739, x}, \ + {TW_COS, v+740, x}, {TW_COS, v+741, x}, {TW_COS, v+742, x}, {TW_COS, v+743, x}, \ + {TW_COS, v+744, x}, {TW_COS, v+745, x}, {TW_COS, v+746, x}, {TW_COS, v+747, x}, \ + {TW_COS, v+748, x}, {TW_COS, v+749, x}, {TW_COS, v+750, x}, {TW_COS, v+751, x}, \ + {TW_COS, v+752, x}, {TW_COS, v+753, x}, {TW_COS, v+754, x}, {TW_COS, v+755, x}, \ + {TW_COS, v+756, x}, {TW_COS, v+757, x}, {TW_COS, v+758, x}, {TW_COS, v+759, x}, \ + {TW_COS, v+760, x}, {TW_COS, v+761, x}, {TW_COS, v+762, x}, {TW_COS, v+763, x}, \ + {TW_COS, v+764, x}, {TW_COS, v+765, x}, {TW_COS, v+766, x}, {TW_COS, v+767, x}, \ + {TW_COS, v+768, x}, {TW_COS, v+769, x}, {TW_COS, v+770, x}, {TW_COS, v+771, x}, \ + {TW_COS, v+772, x}, {TW_COS, v+773, x}, {TW_COS, v+774, x}, {TW_COS, v+775, x}, \ + {TW_COS, v+776, x}, {TW_COS, v+777, x}, {TW_COS, v+778, x}, {TW_COS, v+779, x}, \ + {TW_COS, v+780, x}, {TW_COS, v+781, x}, {TW_COS, v+782, x}, {TW_COS, v+783, x}, \ + {TW_COS, v+784, x}, {TW_COS, v+785, x}, {TW_COS, v+786, x}, {TW_COS, v+787, x}, \ + {TW_COS, v+788, x}, {TW_COS, v+789, x}, {TW_COS, v+790, x}, {TW_COS, v+791, x}, \ + {TW_COS, v+792, x}, {TW_COS, v+793, x}, {TW_COS, v+794, x}, {TW_COS, v+795, x}, \ + {TW_COS, v+796, x}, {TW_COS, v+797, x}, {TW_COS, v+798, x}, {TW_COS, v+799, x}, \ + {TW_COS, v+800, x}, {TW_COS, v+801, x}, {TW_COS, v+802, x}, {TW_COS, v+803, x}, \ + {TW_COS, v+804, x}, {TW_COS, v+805, x}, {TW_COS, v+806, x}, {TW_COS, v+807, x}, \ + {TW_COS, v+808, x}, {TW_COS, v+809, x}, {TW_COS, v+810, x}, {TW_COS, v+811, x}, \ + {TW_COS, v+812, x}, {TW_COS, v+813, x}, {TW_COS, v+814, x}, {TW_COS, v+815, x}, \ + {TW_COS, v+816, x}, {TW_COS, v+817, x}, {TW_COS, v+818, x}, {TW_COS, v+819, x}, \ + {TW_COS, v+820, x}, {TW_COS, v+821, x}, {TW_COS, v+822, x}, {TW_COS, v+823, x}, \ + {TW_COS, v+824, x}, {TW_COS, v+825, x}, {TW_COS, v+826, x}, {TW_COS, v+827, x}, \ + {TW_COS, v+828, x}, {TW_COS, v+829, x}, {TW_COS, v+830, x}, {TW_COS, v+831, x}, \ + {TW_COS, v+832, x}, {TW_COS, v+833, x}, {TW_COS, v+834, x}, {TW_COS, v+835, x}, \ + {TW_COS, v+836, x}, {TW_COS, v+837, x}, {TW_COS, v+838, x}, {TW_COS, v+839, x}, \ + {TW_COS, v+840, x}, {TW_COS, v+841, x}, {TW_COS, v+842, x}, {TW_COS, v+843, x}, \ + {TW_COS, v+844, x}, {TW_COS, v+845, x}, {TW_COS, v+846, x}, {TW_COS, v+847, x}, \ + {TW_COS, v+848, x}, {TW_COS, v+849, x}, {TW_COS, v+850, x}, {TW_COS, v+851, x}, \ + {TW_COS, v+852, x}, {TW_COS, v+853, x}, {TW_COS, v+854, x}, {TW_COS, v+855, x}, \ + {TW_COS, v+856, x}, {TW_COS, v+857, x}, {TW_COS, v+858, x}, {TW_COS, v+859, x}, \ + {TW_COS, v+860, x}, {TW_COS, v+861, x}, {TW_COS, v+862, x}, {TW_COS, v+863, x}, \ + {TW_COS, v+864, x}, {TW_COS, v+865, x}, {TW_COS, v+866, x}, {TW_COS, v+867, x}, \ + {TW_COS, v+868, x}, {TW_COS, v+869, x}, {TW_COS, v+870, x}, {TW_COS, v+871, x}, \ + {TW_COS, v+872, x}, {TW_COS, v+873, x}, {TW_COS, v+874, x}, {TW_COS, v+875, x}, \ + {TW_COS, v+876, x}, {TW_COS, v+877, x}, {TW_COS, v+878, x}, {TW_COS, v+879, x}, \ + {TW_COS, v+880, x}, {TW_COS, v+881, x}, {TW_COS, v+882, x}, {TW_COS, v+883, x}, \ + {TW_COS, v+884, x}, {TW_COS, v+885, x}, {TW_COS, v+886, x}, {TW_COS, v+887, x}, \ + {TW_COS, v+888, x}, {TW_COS, v+889, x}, {TW_COS, v+890, x}, {TW_COS, v+891, x}, \ + {TW_COS, v+892, x}, {TW_COS, v+893, x}, {TW_COS, v+894, x}, {TW_COS, v+895, x}, \ + {TW_COS, v+896, x}, {TW_COS, v+897, x}, {TW_COS, v+898, x}, {TW_COS, v+899, x}, \ + {TW_COS, v+900, x}, {TW_COS, v+901, x}, {TW_COS, v+902, x}, {TW_COS, v+903, x}, \ + {TW_COS, v+904, x}, {TW_COS, v+905, x}, {TW_COS, v+906, x}, {TW_COS, v+907, x}, \ + {TW_COS, v+908, x}, {TW_COS, v+909, x}, {TW_COS, v+910, x}, {TW_COS, v+911, x}, \ + {TW_COS, v+912, x}, {TW_COS, v+913, x}, {TW_COS, v+914, x}, {TW_COS, v+915, x}, \ + {TW_COS, v+916, x}, {TW_COS, v+917, x}, {TW_COS, v+918, x}, {TW_COS, v+919, x}, \ + {TW_COS, v+920, x}, {TW_COS, v+921, x}, {TW_COS, v+922, x}, {TW_COS, v+923, x}, \ + {TW_COS, v+924, x}, {TW_COS, v+925, x}, {TW_COS, v+926, x}, {TW_COS, v+927, x}, \ + {TW_COS, v+928, x}, {TW_COS, v+929, x}, {TW_COS, v+930, x}, {TW_COS, v+931, x}, \ + {TW_COS, v+932, x}, {TW_COS, v+933, x}, {TW_COS, v+934, x}, {TW_COS, v+935, x}, \ + {TW_COS, v+936, x}, {TW_COS, v+937, x}, {TW_COS, v+938, x}, {TW_COS, v+939, x}, \ + {TW_COS, v+940, x}, {TW_COS, v+941, x}, {TW_COS, v+942, x}, {TW_COS, v+943, x}, \ + {TW_COS, v+944, x}, {TW_COS, v+945, x}, {TW_COS, v+946, x}, {TW_COS, v+947, x}, \ + {TW_COS, v+948, x}, {TW_COS, v+949, x}, {TW_COS, v+950, x}, {TW_COS, v+951, x}, \ + {TW_COS, v+952, x}, {TW_COS, v+953, x}, {TW_COS, v+954, x}, {TW_COS, v+955, x}, \ + {TW_COS, v+956, x}, {TW_COS, v+957, x}, {TW_COS, v+958, x}, {TW_COS, v+959, x}, \ + {TW_COS, v+960, x}, {TW_COS, v+961, x}, {TW_COS, v+962, x}, {TW_COS, v+963, x}, \ + {TW_COS, v+964, x}, {TW_COS, v+965, x}, {TW_COS, v+966, x}, {TW_COS, v+967, x}, \ + {TW_COS, v+968, x}, {TW_COS, v+969, x}, {TW_COS, v+970, x}, {TW_COS, v+971, x}, \ + {TW_COS, v+972, x}, {TW_COS, v+973, x}, {TW_COS, v+974, x}, {TW_COS, v+975, x}, \ + {TW_COS, v+976, x}, {TW_COS, v+977, x}, {TW_COS, v+978, x}, {TW_COS, v+979, x}, \ + {TW_COS, v+980, x}, {TW_COS, v+981, x}, {TW_COS, v+982, x}, {TW_COS, v+983, x}, \ + {TW_COS, v+984, x}, {TW_COS, v+985, x}, {TW_COS, v+986, x}, {TW_COS, v+987, x}, \ + {TW_COS, v+988, x}, {TW_COS, v+989, x}, {TW_COS, v+990, x}, {TW_COS, v+991, x}, \ + {TW_COS, v+992, x}, {TW_COS, v+993, x}, {TW_COS, v+994, x}, {TW_COS, v+995, x}, \ + {TW_COS, v+996, x}, {TW_COS, v+997, x}, {TW_COS, v+998, x}, {TW_COS, v+999, x}, \ + {TW_COS, v+1000, x}, {TW_COS, v+1001, x}, {TW_COS, v+1002, x}, {TW_COS, v+1003, x}, \ + {TW_COS, v+1004, x}, {TW_COS, v+1005, x}, {TW_COS, v+1006, x}, {TW_COS, v+1007, x}, \ + {TW_COS, v+1008, x}, {TW_COS, v+1009, x}, {TW_COS, v+1010, x}, {TW_COS, v+1011, x}, \ + {TW_COS, v+1012, x}, {TW_COS, v+1013, x}, {TW_COS, v+1014, x}, {TW_COS, v+1015, x}, \ + {TW_COS, v+1016, x}, {TW_COS, v+1017, x}, {TW_COS, v+1018, x}, {TW_COS, v+1019, x}, \ + {TW_COS, v+1020, x}, {TW_COS, v+1021, x}, {TW_COS, v+1022, x}, {TW_COS, v+1023, x}, \ + {TW_SIN, v+0, x}, {TW_SIN, v+1, x}, {TW_SIN, v+2, x}, {TW_SIN, v+3, x}, \ + {TW_SIN, v+4, x}, {TW_SIN, v+5, x}, {TW_SIN, v+6, x}, {TW_SIN, v+7, x}, \ + {TW_SIN, v+8, x}, {TW_SIN, v+9, x}, {TW_SIN, v+10, x}, {TW_SIN, v+11, x}, \ + {TW_SIN, v+12, x}, {TW_SIN, v+13, x}, {TW_SIN, v+14, x}, {TW_SIN, v+15, x}, \ + {TW_SIN, v+16, x}, {TW_SIN, v+17, x}, {TW_SIN, v+18, x}, {TW_SIN, v+19, x}, \ + {TW_SIN, v+20, x}, {TW_SIN, v+21, x}, {TW_SIN, v+22, x}, {TW_SIN, v+23, x}, \ + {TW_SIN, v+24, x}, {TW_SIN, v+25, x}, {TW_SIN, v+26, x}, {TW_SIN, v+27, x}, \ + {TW_SIN, v+28, x}, {TW_SIN, v+29, x}, {TW_SIN, v+30, x}, {TW_SIN, v+31, x}, \ + {TW_SIN, v+32, x}, {TW_SIN, v+33, x}, {TW_SIN, v+34, x}, {TW_SIN, v+35, x}, \ + {TW_SIN, v+36, x}, {TW_SIN, v+37, x}, {TW_SIN, v+38, x}, {TW_SIN, v+39, x}, \ + {TW_SIN, v+40, x}, {TW_SIN, v+41, x}, {TW_SIN, v+42, x}, {TW_SIN, v+43, x}, \ + {TW_SIN, v+44, x}, {TW_SIN, v+45, x}, {TW_SIN, v+46, x}, {TW_SIN, v+47, x}, \ + {TW_SIN, v+48, x}, {TW_SIN, v+49, x}, {TW_SIN, v+50, x}, {TW_SIN, v+51, x}, \ + {TW_SIN, v+52, x}, {TW_SIN, v+53, x}, {TW_SIN, v+54, x}, {TW_SIN, v+55, x}, \ + {TW_SIN, v+56, x}, {TW_SIN, v+57, x}, {TW_SIN, v+58, x}, {TW_SIN, v+59, x}, \ + {TW_SIN, v+60, x}, {TW_SIN, v+61, x}, {TW_SIN, v+62, x}, {TW_SIN, v+63, x}, \ + {TW_SIN, v+64, x}, {TW_SIN, v+65, x}, {TW_SIN, v+66, x}, {TW_SIN, v+67, x}, \ + {TW_SIN, v+68, x}, {TW_SIN, v+69, x}, {TW_SIN, v+70, x}, {TW_SIN, v+71, x}, \ + {TW_SIN, v+72, x}, {TW_SIN, v+73, x}, {TW_SIN, v+74, x}, {TW_SIN, v+75, x}, \ + {TW_SIN, v+76, x}, {TW_SIN, v+77, x}, {TW_SIN, v+78, x}, {TW_SIN, v+79, x}, \ + {TW_SIN, v+80, x}, {TW_SIN, v+81, x}, {TW_SIN, v+82, x}, {TW_SIN, v+83, x}, \ + {TW_SIN, v+84, x}, {TW_SIN, v+85, x}, {TW_SIN, v+86, x}, {TW_SIN, v+87, x}, \ + {TW_SIN, v+88, x}, {TW_SIN, v+89, x}, {TW_SIN, v+90, x}, {TW_SIN, v+91, x}, \ + {TW_SIN, v+92, x}, {TW_SIN, v+93, x}, {TW_SIN, v+94, x}, {TW_SIN, v+95, x}, \ + {TW_SIN, v+96, x}, {TW_SIN, v+97, x}, {TW_SIN, v+98, x}, {TW_SIN, v+99, x}, \ + {TW_SIN, v+100, x}, {TW_SIN, v+101, x}, {TW_SIN, v+102, x}, {TW_SIN, v+103, x}, \ + {TW_SIN, v+104, x}, {TW_SIN, v+105, x}, {TW_SIN, v+106, x}, {TW_SIN, v+107, x}, \ + {TW_SIN, v+108, x}, {TW_SIN, v+109, x}, {TW_SIN, v+110, x}, {TW_SIN, v+111, x}, \ + {TW_SIN, v+112, x}, {TW_SIN, v+113, x}, {TW_SIN, v+114, x}, {TW_SIN, v+115, x}, \ + {TW_SIN, v+116, x}, {TW_SIN, v+117, x}, {TW_SIN, v+118, x}, {TW_SIN, v+119, x}, \ + {TW_SIN, v+120, x}, {TW_SIN, v+121, x}, {TW_SIN, v+122, x}, {TW_SIN, v+123, x}, \ + {TW_SIN, v+124, x}, {TW_SIN, v+125, x}, {TW_SIN, v+126, x}, {TW_SIN, v+127, x}, \ + {TW_SIN, v+128, x}, {TW_SIN, v+129, x}, {TW_SIN, v+130, x}, {TW_SIN, v+131, x}, \ + {TW_SIN, v+132, x}, {TW_SIN, v+133, x}, {TW_SIN, v+134, x}, {TW_SIN, v+135, x}, \ + {TW_SIN, v+136, x}, {TW_SIN, v+137, x}, {TW_SIN, v+138, x}, {TW_SIN, v+139, x}, \ + {TW_SIN, v+140, x}, {TW_SIN, v+141, x}, {TW_SIN, v+142, x}, {TW_SIN, v+143, x}, \ + {TW_SIN, v+144, x}, {TW_SIN, v+145, x}, {TW_SIN, v+146, x}, {TW_SIN, v+147, x}, \ + {TW_SIN, v+148, x}, {TW_SIN, v+149, x}, {TW_SIN, v+150, x}, {TW_SIN, v+151, x}, \ + {TW_SIN, v+152, x}, {TW_SIN, v+153, x}, {TW_SIN, v+154, x}, {TW_SIN, v+155, x}, \ + {TW_SIN, v+156, x}, {TW_SIN, v+157, x}, {TW_SIN, v+158, x}, {TW_SIN, v+159, x}, \ + {TW_SIN, v+160, x}, {TW_SIN, v+161, x}, {TW_SIN, v+162, x}, {TW_SIN, v+163, x}, \ + {TW_SIN, v+164, x}, {TW_SIN, v+165, x}, {TW_SIN, v+166, x}, {TW_SIN, v+167, x}, \ + {TW_SIN, v+168, x}, {TW_SIN, v+169, x}, {TW_SIN, v+170, x}, {TW_SIN, v+171, x}, \ + {TW_SIN, v+172, x}, {TW_SIN, v+173, x}, {TW_SIN, v+174, x}, {TW_SIN, v+175, x}, \ + {TW_SIN, v+176, x}, {TW_SIN, v+177, x}, {TW_SIN, v+178, x}, {TW_SIN, v+179, x}, \ + {TW_SIN, v+180, x}, {TW_SIN, v+181, x}, {TW_SIN, v+182, x}, {TW_SIN, v+183, x}, \ + {TW_SIN, v+184, x}, {TW_SIN, v+185, x}, {TW_SIN, v+186, x}, {TW_SIN, v+187, x}, \ + {TW_SIN, v+188, x}, {TW_SIN, v+189, x}, {TW_SIN, v+190, x}, {TW_SIN, v+191, x}, \ + {TW_SIN, v+192, x}, {TW_SIN, v+193, x}, {TW_SIN, v+194, x}, {TW_SIN, v+195, x}, \ + {TW_SIN, v+196, x}, {TW_SIN, v+197, x}, {TW_SIN, v+198, x}, {TW_SIN, v+199, x}, \ + {TW_SIN, v+200, x}, {TW_SIN, v+201, x}, {TW_SIN, v+202, x}, {TW_SIN, v+203, x}, \ + {TW_SIN, v+204, x}, {TW_SIN, v+205, x}, {TW_SIN, v+206, x}, {TW_SIN, v+207, x}, \ + {TW_SIN, v+208, x}, {TW_SIN, v+209, x}, {TW_SIN, v+210, x}, {TW_SIN, v+211, x}, \ + {TW_SIN, v+212, x}, {TW_SIN, v+213, x}, {TW_SIN, v+214, x}, {TW_SIN, v+215, x}, \ + {TW_SIN, v+216, x}, {TW_SIN, v+217, x}, {TW_SIN, v+218, x}, {TW_SIN, v+219, x}, \ + {TW_SIN, v+220, x}, {TW_SIN, v+221, x}, {TW_SIN, v+222, x}, {TW_SIN, v+223, x}, \ + {TW_SIN, v+224, x}, {TW_SIN, v+225, x}, {TW_SIN, v+226, x}, {TW_SIN, v+227, x}, \ + {TW_SIN, v+228, x}, {TW_SIN, v+229, x}, {TW_SIN, v+230, x}, {TW_SIN, v+231, x}, \ + {TW_SIN, v+232, x}, {TW_SIN, v+233, x}, {TW_SIN, v+234, x}, {TW_SIN, v+235, x}, \ + {TW_SIN, v+236, x}, {TW_SIN, v+237, x}, {TW_SIN, v+238, x}, {TW_SIN, v+239, x}, \ + {TW_SIN, v+240, x}, {TW_SIN, v+241, x}, {TW_SIN, v+242, x}, {TW_SIN, v+243, x}, \ + {TW_SIN, v+244, x}, {TW_SIN, v+245, x}, {TW_SIN, v+246, x}, {TW_SIN, v+247, x}, \ + {TW_SIN, v+248, x}, {TW_SIN, v+249, x}, {TW_SIN, v+250, x}, {TW_SIN, v+251, x}, \ + {TW_SIN, v+252, x}, {TW_SIN, v+253, x}, {TW_SIN, v+254, x}, {TW_SIN, v+255, x}, \ + {TW_SIN, v+256, x}, {TW_SIN, v+257, x}, {TW_SIN, v+258, x}, {TW_SIN, v+259, x}, \ + {TW_SIN, v+260, x}, {TW_SIN, v+261, x}, {TW_SIN, v+262, x}, {TW_SIN, v+263, x}, \ + {TW_SIN, v+264, x}, {TW_SIN, v+265, x}, {TW_SIN, v+266, x}, {TW_SIN, v+267, x}, \ + {TW_SIN, v+268, x}, {TW_SIN, v+269, x}, {TW_SIN, v+270, x}, {TW_SIN, v+271, x}, \ + {TW_SIN, v+272, x}, {TW_SIN, v+273, x}, {TW_SIN, v+274, x}, {TW_SIN, v+275, x}, \ + {TW_SIN, v+276, x}, {TW_SIN, v+277, x}, {TW_SIN, v+278, x}, {TW_SIN, v+279, x}, \ + {TW_SIN, v+280, x}, {TW_SIN, v+281, x}, {TW_SIN, v+282, x}, {TW_SIN, v+283, x}, \ + {TW_SIN, v+284, x}, {TW_SIN, v+285, x}, {TW_SIN, v+286, x}, {TW_SIN, v+287, x}, \ + {TW_SIN, v+288, x}, {TW_SIN, v+289, x}, {TW_SIN, v+290, x}, {TW_SIN, v+291, x}, \ + {TW_SIN, v+292, x}, {TW_SIN, v+293, x}, {TW_SIN, v+294, x}, {TW_SIN, v+295, x}, \ + {TW_SIN, v+296, x}, {TW_SIN, v+297, x}, {TW_SIN, v+298, x}, {TW_SIN, v+299, x}, \ + {TW_SIN, v+300, x}, {TW_SIN, v+301, x}, {TW_SIN, v+302, x}, {TW_SIN, v+303, x}, \ + {TW_SIN, v+304, x}, {TW_SIN, v+305, x}, {TW_SIN, v+306, x}, {TW_SIN, v+307, x}, \ + {TW_SIN, v+308, x}, {TW_SIN, v+309, x}, {TW_SIN, v+310, x}, {TW_SIN, v+311, x}, \ + {TW_SIN, v+312, x}, {TW_SIN, v+313, x}, {TW_SIN, v+314, x}, {TW_SIN, v+315, x}, \ + {TW_SIN, v+316, x}, {TW_SIN, v+317, x}, {TW_SIN, v+318, x}, {TW_SIN, v+319, x}, \ + {TW_SIN, v+320, x}, {TW_SIN, v+321, x}, {TW_SIN, v+322, x}, {TW_SIN, v+323, x}, \ + {TW_SIN, v+324, x}, {TW_SIN, v+325, x}, {TW_SIN, v+326, x}, {TW_SIN, v+327, x}, \ + {TW_SIN, v+328, x}, {TW_SIN, v+329, x}, {TW_SIN, v+330, x}, {TW_SIN, v+331, x}, \ + {TW_SIN, v+332, x}, {TW_SIN, v+333, x}, {TW_SIN, v+334, x}, {TW_SIN, v+335, x}, \ + {TW_SIN, v+336, x}, {TW_SIN, v+337, x}, {TW_SIN, v+338, x}, {TW_SIN, v+339, x}, \ + {TW_SIN, v+340, x}, {TW_SIN, v+341, x}, {TW_SIN, v+342, x}, {TW_SIN, v+343, x}, \ + {TW_SIN, v+344, x}, {TW_SIN, v+345, x}, {TW_SIN, v+346, x}, {TW_SIN, v+347, x}, \ + {TW_SIN, v+348, x}, {TW_SIN, v+349, x}, {TW_SIN, v+350, x}, {TW_SIN, v+351, x}, \ + {TW_SIN, v+352, x}, {TW_SIN, v+353, x}, {TW_SIN, v+354, x}, {TW_SIN, v+355, x}, \ + {TW_SIN, v+356, x}, {TW_SIN, v+357, x}, {TW_SIN, v+358, x}, {TW_SIN, v+359, x}, \ + {TW_SIN, v+360, x}, {TW_SIN, v+361, x}, {TW_SIN, v+362, x}, {TW_SIN, v+363, x}, \ + {TW_SIN, v+364, x}, {TW_SIN, v+365, x}, {TW_SIN, v+366, x}, {TW_SIN, v+367, x}, \ + {TW_SIN, v+368, x}, {TW_SIN, v+369, x}, {TW_SIN, v+370, x}, {TW_SIN, v+371, x}, \ + {TW_SIN, v+372, x}, {TW_SIN, v+373, x}, {TW_SIN, v+374, x}, {TW_SIN, v+375, x}, \ + {TW_SIN, v+376, x}, {TW_SIN, v+377, x}, {TW_SIN, v+378, x}, {TW_SIN, v+379, x}, \ + {TW_SIN, v+380, x}, {TW_SIN, v+381, x}, {TW_SIN, v+382, x}, {TW_SIN, v+383, x}, \ + {TW_SIN, v+384, x}, {TW_SIN, v+385, x}, {TW_SIN, v+386, x}, {TW_SIN, v+387, x}, \ + {TW_SIN, v+388, x}, {TW_SIN, v+389, x}, {TW_SIN, v+390, x}, {TW_SIN, v+391, x}, \ + {TW_SIN, v+392, x}, {TW_SIN, v+393, x}, {TW_SIN, v+394, x}, {TW_SIN, v+395, x}, \ + {TW_SIN, v+396, x}, {TW_SIN, v+397, x}, {TW_SIN, v+398, x}, {TW_SIN, v+399, x}, \ + {TW_SIN, v+400, x}, {TW_SIN, v+401, x}, {TW_SIN, v+402, x}, {TW_SIN, v+403, x}, \ + {TW_SIN, v+404, x}, {TW_SIN, v+405, x}, {TW_SIN, v+406, x}, {TW_SIN, v+407, x}, \ + {TW_SIN, v+408, x}, {TW_SIN, v+409, x}, {TW_SIN, v+410, x}, {TW_SIN, v+411, x}, \ + {TW_SIN, v+412, x}, {TW_SIN, v+413, x}, {TW_SIN, v+414, x}, {TW_SIN, v+415, x}, \ + {TW_SIN, v+416, x}, {TW_SIN, v+417, x}, {TW_SIN, v+418, x}, {TW_SIN, v+419, x}, \ + {TW_SIN, v+420, x}, {TW_SIN, v+421, x}, {TW_SIN, v+422, x}, {TW_SIN, v+423, x}, \ + {TW_SIN, v+424, x}, {TW_SIN, v+425, x}, {TW_SIN, v+426, x}, {TW_SIN, v+427, x}, \ + {TW_SIN, v+428, x}, {TW_SIN, v+429, x}, {TW_SIN, v+430, x}, {TW_SIN, v+431, x}, \ + {TW_SIN, v+432, x}, {TW_SIN, v+433, x}, {TW_SIN, v+434, x}, {TW_SIN, v+435, x}, \ + {TW_SIN, v+436, x}, {TW_SIN, v+437, x}, {TW_SIN, v+438, x}, {TW_SIN, v+439, x}, \ + {TW_SIN, v+440, x}, {TW_SIN, v+441, x}, {TW_SIN, v+442, x}, {TW_SIN, v+443, x}, \ + {TW_SIN, v+444, x}, {TW_SIN, v+445, x}, {TW_SIN, v+446, x}, {TW_SIN, v+447, x}, \ + {TW_SIN, v+448, x}, {TW_SIN, v+449, x}, {TW_SIN, v+450, x}, {TW_SIN, v+451, x}, \ + {TW_SIN, v+452, x}, {TW_SIN, v+453, x}, {TW_SIN, v+454, x}, {TW_SIN, v+455, x}, \ + {TW_SIN, v+456, x}, {TW_SIN, v+457, x}, {TW_SIN, v+458, x}, {TW_SIN, v+459, x}, \ + {TW_SIN, v+460, x}, {TW_SIN, v+461, x}, {TW_SIN, v+462, x}, {TW_SIN, v+463, x}, \ + {TW_SIN, v+464, x}, {TW_SIN, v+465, x}, {TW_SIN, v+466, x}, {TW_SIN, v+467, x}, \ + {TW_SIN, v+468, x}, {TW_SIN, v+469, x}, {TW_SIN, v+470, x}, {TW_SIN, v+471, x}, \ + {TW_SIN, v+472, x}, {TW_SIN, v+473, x}, {TW_SIN, v+474, x}, {TW_SIN, v+475, x}, \ + {TW_SIN, v+476, x}, {TW_SIN, v+477, x}, {TW_SIN, v+478, x}, {TW_SIN, v+479, x}, \ + {TW_SIN, v+480, x}, {TW_SIN, v+481, x}, {TW_SIN, v+482, x}, {TW_SIN, v+483, x}, \ + {TW_SIN, v+484, x}, {TW_SIN, v+485, x}, {TW_SIN, v+486, x}, {TW_SIN, v+487, x}, \ + {TW_SIN, v+488, x}, {TW_SIN, v+489, x}, {TW_SIN, v+490, x}, {TW_SIN, v+491, x}, \ + {TW_SIN, v+492, x}, {TW_SIN, v+493, x}, {TW_SIN, v+494, x}, {TW_SIN, v+495, x}, \ + {TW_SIN, v+496, x}, {TW_SIN, v+497, x}, {TW_SIN, v+498, x}, {TW_SIN, v+499, x}, \ + {TW_SIN, v+500, x}, {TW_SIN, v+501, x}, {TW_SIN, v+502, x}, {TW_SIN, v+503, x}, \ + {TW_SIN, v+504, x}, {TW_SIN, v+505, x}, {TW_SIN, v+506, x}, {TW_SIN, v+507, x}, \ + {TW_SIN, v+508, x}, {TW_SIN, v+509, x}, {TW_SIN, v+510, x}, {TW_SIN, v+511, x}, \ + {TW_SIN, v+512, x}, {TW_SIN, v+513, x}, {TW_SIN, v+514, x}, {TW_SIN, v+515, x}, \ + {TW_SIN, v+516, x}, {TW_SIN, v+517, x}, {TW_SIN, v+518, x}, {TW_SIN, v+519, x}, \ + {TW_SIN, v+520, x}, {TW_SIN, v+521, x}, {TW_SIN, v+522, x}, {TW_SIN, v+523, x}, \ + {TW_SIN, v+524, x}, {TW_SIN, v+525, x}, {TW_SIN, v+526, x}, {TW_SIN, v+527, x}, \ + {TW_SIN, v+528, x}, {TW_SIN, v+529, x}, {TW_SIN, v+530, x}, {TW_SIN, v+531, x}, \ + {TW_SIN, v+532, x}, {TW_SIN, v+533, x}, {TW_SIN, v+534, x}, {TW_SIN, v+535, x}, \ + {TW_SIN, v+536, x}, {TW_SIN, v+537, x}, {TW_SIN, v+538, x}, {TW_SIN, v+539, x}, \ + {TW_SIN, v+540, x}, {TW_SIN, v+541, x}, {TW_SIN, v+542, x}, {TW_SIN, v+543, x}, \ + {TW_SIN, v+544, x}, {TW_SIN, v+545, x}, {TW_SIN, v+546, x}, {TW_SIN, v+547, x}, \ + {TW_SIN, v+548, x}, {TW_SIN, v+549, x}, {TW_SIN, v+550, x}, {TW_SIN, v+551, x}, \ + {TW_SIN, v+552, x}, {TW_SIN, v+553, x}, {TW_SIN, v+554, x}, {TW_SIN, v+555, x}, \ + {TW_SIN, v+556, x}, {TW_SIN, v+557, x}, {TW_SIN, v+558, x}, {TW_SIN, v+559, x}, \ + {TW_SIN, v+560, x}, {TW_SIN, v+561, x}, {TW_SIN, v+562, x}, {TW_SIN, v+563, x}, \ + {TW_SIN, v+564, x}, {TW_SIN, v+565, x}, {TW_SIN, v+566, x}, {TW_SIN, v+567, x}, \ + {TW_SIN, v+568, x}, {TW_SIN, v+569, x}, {TW_SIN, v+570, x}, {TW_SIN, v+571, x}, \ + {TW_SIN, v+572, x}, {TW_SIN, v+573, x}, {TW_SIN, v+574, x}, {TW_SIN, v+575, x}, \ + {TW_SIN, v+576, x}, {TW_SIN, v+577, x}, {TW_SIN, v+578, x}, {TW_SIN, v+579, x}, \ + {TW_SIN, v+580, x}, {TW_SIN, v+581, x}, {TW_SIN, v+582, x}, {TW_SIN, v+583, x}, \ + {TW_SIN, v+584, x}, {TW_SIN, v+585, x}, {TW_SIN, v+586, x}, {TW_SIN, v+587, x}, \ + {TW_SIN, v+588, x}, {TW_SIN, v+589, x}, {TW_SIN, v+590, x}, {TW_SIN, v+591, x}, \ + {TW_SIN, v+592, x}, {TW_SIN, v+593, x}, {TW_SIN, v+594, x}, {TW_SIN, v+595, x}, \ + {TW_SIN, v+596, x}, {TW_SIN, v+597, x}, {TW_SIN, v+598, x}, {TW_SIN, v+599, x}, \ + {TW_SIN, v+600, x}, {TW_SIN, v+601, x}, {TW_SIN, v+602, x}, {TW_SIN, v+603, x}, \ + {TW_SIN, v+604, x}, {TW_SIN, v+605, x}, {TW_SIN, v+606, x}, {TW_SIN, v+607, x}, \ + {TW_SIN, v+608, x}, {TW_SIN, v+609, x}, {TW_SIN, v+610, x}, {TW_SIN, v+611, x}, \ + {TW_SIN, v+612, x}, {TW_SIN, v+613, x}, {TW_SIN, v+614, x}, {TW_SIN, v+615, x}, \ + {TW_SIN, v+616, x}, {TW_SIN, v+617, x}, {TW_SIN, v+618, x}, {TW_SIN, v+619, x}, \ + {TW_SIN, v+620, x}, {TW_SIN, v+621, x}, {TW_SIN, v+622, x}, {TW_SIN, v+623, x}, \ + {TW_SIN, v+624, x}, {TW_SIN, v+625, x}, {TW_SIN, v+626, x}, {TW_SIN, v+627, x}, \ + {TW_SIN, v+628, x}, {TW_SIN, v+629, x}, {TW_SIN, v+630, x}, {TW_SIN, v+631, x}, \ + {TW_SIN, v+632, x}, {TW_SIN, v+633, x}, {TW_SIN, v+634, x}, {TW_SIN, v+635, x}, \ + {TW_SIN, v+636, x}, {TW_SIN, v+637, x}, {TW_SIN, v+638, x}, {TW_SIN, v+639, x}, \ + {TW_SIN, v+640, x}, {TW_SIN, v+641, x}, {TW_SIN, v+642, x}, {TW_SIN, v+643, x}, \ + {TW_SIN, v+644, x}, {TW_SIN, v+645, x}, {TW_SIN, v+646, x}, {TW_SIN, v+647, x}, \ + {TW_SIN, v+648, x}, {TW_SIN, v+649, x}, {TW_SIN, v+650, x}, {TW_SIN, v+651, x}, \ + {TW_SIN, v+652, x}, {TW_SIN, v+653, x}, {TW_SIN, v+654, x}, {TW_SIN, v+655, x}, \ + {TW_SIN, v+656, x}, {TW_SIN, v+657, x}, {TW_SIN, v+658, x}, {TW_SIN, v+659, x}, \ + {TW_SIN, v+660, x}, {TW_SIN, v+661, x}, {TW_SIN, v+662, x}, {TW_SIN, v+663, x}, \ + {TW_SIN, v+664, x}, {TW_SIN, v+665, x}, {TW_SIN, v+666, x}, {TW_SIN, v+667, x}, \ + {TW_SIN, v+668, x}, {TW_SIN, v+669, x}, {TW_SIN, v+670, x}, {TW_SIN, v+671, x}, \ + {TW_SIN, v+672, x}, {TW_SIN, v+673, x}, {TW_SIN, v+674, x}, {TW_SIN, v+675, x}, \ + {TW_SIN, v+676, x}, {TW_SIN, v+677, x}, {TW_SIN, v+678, x}, {TW_SIN, v+679, x}, \ + {TW_SIN, v+680, x}, {TW_SIN, v+681, x}, {TW_SIN, v+682, x}, {TW_SIN, v+683, x}, \ + {TW_SIN, v+684, x}, {TW_SIN, v+685, x}, {TW_SIN, v+686, x}, {TW_SIN, v+687, x}, \ + {TW_SIN, v+688, x}, {TW_SIN, v+689, x}, {TW_SIN, v+690, x}, {TW_SIN, v+691, x}, \ + {TW_SIN, v+692, x}, {TW_SIN, v+693, x}, {TW_SIN, v+694, x}, {TW_SIN, v+695, x}, \ + {TW_SIN, v+696, x}, {TW_SIN, v+697, x}, {TW_SIN, v+698, x}, {TW_SIN, v+699, x}, \ + {TW_SIN, v+700, x}, {TW_SIN, v+701, x}, {TW_SIN, v+702, x}, {TW_SIN, v+703, x}, \ + {TW_SIN, v+704, x}, {TW_SIN, v+705, x}, {TW_SIN, v+706, x}, {TW_SIN, v+707, x}, \ + {TW_SIN, v+708, x}, {TW_SIN, v+709, x}, {TW_SIN, v+710, x}, {TW_SIN, v+711, x}, \ + {TW_SIN, v+712, x}, {TW_SIN, v+713, x}, {TW_SIN, v+714, x}, {TW_SIN, v+715, x}, \ + {TW_SIN, v+716, x}, {TW_SIN, v+717, x}, {TW_SIN, v+718, x}, {TW_SIN, v+719, x}, \ + {TW_SIN, v+720, x}, {TW_SIN, v+721, x}, {TW_SIN, v+722, x}, {TW_SIN, v+723, x}, \ + {TW_SIN, v+724, x}, {TW_SIN, v+725, x}, {TW_SIN, v+726, x}, {TW_SIN, v+727, x}, \ + {TW_SIN, v+728, x}, {TW_SIN, v+729, x}, {TW_SIN, v+730, x}, {TW_SIN, v+731, x}, \ + {TW_SIN, v+732, x}, {TW_SIN, v+733, x}, {TW_SIN, v+734, x}, {TW_SIN, v+735, x}, \ + {TW_SIN, v+736, x}, {TW_SIN, v+737, x}, {TW_SIN, v+738, x}, {TW_SIN, v+739, x}, \ + {TW_SIN, v+740, x}, {TW_SIN, v+741, x}, {TW_SIN, v+742, x}, {TW_SIN, v+743, x}, \ + {TW_SIN, v+744, x}, {TW_SIN, v+745, x}, {TW_SIN, v+746, x}, {TW_SIN, v+747, x}, \ + {TW_SIN, v+748, x}, {TW_SIN, v+749, x}, {TW_SIN, v+750, x}, {TW_SIN, v+751, x}, \ + {TW_SIN, v+752, x}, {TW_SIN, v+753, x}, {TW_SIN, v+754, x}, {TW_SIN, v+755, x}, \ + {TW_SIN, v+756, x}, {TW_SIN, v+757, x}, {TW_SIN, v+758, x}, {TW_SIN, v+759, x}, \ + {TW_SIN, v+760, x}, {TW_SIN, v+761, x}, {TW_SIN, v+762, x}, {TW_SIN, v+763, x}, \ + {TW_SIN, v+764, x}, {TW_SIN, v+765, x}, {TW_SIN, v+766, x}, {TW_SIN, v+767, x}, \ + {TW_SIN, v+768, x}, {TW_SIN, v+769, x}, {TW_SIN, v+770, x}, {TW_SIN, v+771, x}, \ + {TW_SIN, v+772, x}, {TW_SIN, v+773, x}, {TW_SIN, v+774, x}, {TW_SIN, v+775, x}, \ + {TW_SIN, v+776, x}, {TW_SIN, v+777, x}, {TW_SIN, v+778, x}, {TW_SIN, v+779, x}, \ + {TW_SIN, v+780, x}, {TW_SIN, v+781, x}, {TW_SIN, v+782, x}, {TW_SIN, v+783, x}, \ + {TW_SIN, v+784, x}, {TW_SIN, v+785, x}, {TW_SIN, v+786, x}, {TW_SIN, v+787, x}, \ + {TW_SIN, v+788, x}, {TW_SIN, v+789, x}, {TW_SIN, v+790, x}, {TW_SIN, v+791, x}, \ + {TW_SIN, v+792, x}, {TW_SIN, v+793, x}, {TW_SIN, v+794, x}, {TW_SIN, v+795, x}, \ + {TW_SIN, v+796, x}, {TW_SIN, v+797, x}, {TW_SIN, v+798, x}, {TW_SIN, v+799, x}, \ + {TW_SIN, v+800, x}, {TW_SIN, v+801, x}, {TW_SIN, v+802, x}, {TW_SIN, v+803, x}, \ + {TW_SIN, v+804, x}, {TW_SIN, v+805, x}, {TW_SIN, v+806, x}, {TW_SIN, v+807, x}, \ + {TW_SIN, v+808, x}, {TW_SIN, v+809, x}, {TW_SIN, v+810, x}, {TW_SIN, v+811, x}, \ + {TW_SIN, v+812, x}, {TW_SIN, v+813, x}, {TW_SIN, v+814, x}, {TW_SIN, v+815, x}, \ + {TW_SIN, v+816, x}, {TW_SIN, v+817, x}, {TW_SIN, v+818, x}, {TW_SIN, v+819, x}, \ + {TW_SIN, v+820, x}, {TW_SIN, v+821, x}, {TW_SIN, v+822, x}, {TW_SIN, v+823, x}, \ + {TW_SIN, v+824, x}, {TW_SIN, v+825, x}, {TW_SIN, v+826, x}, {TW_SIN, v+827, x}, \ + {TW_SIN, v+828, x}, {TW_SIN, v+829, x}, {TW_SIN, v+830, x}, {TW_SIN, v+831, x}, \ + {TW_SIN, v+832, x}, {TW_SIN, v+833, x}, {TW_SIN, v+834, x}, {TW_SIN, v+835, x}, \ + {TW_SIN, v+836, x}, {TW_SIN, v+837, x}, {TW_SIN, v+838, x}, {TW_SIN, v+839, x}, \ + {TW_SIN, v+840, x}, {TW_SIN, v+841, x}, {TW_SIN, v+842, x}, {TW_SIN, v+843, x}, \ + {TW_SIN, v+844, x}, {TW_SIN, v+845, x}, {TW_SIN, v+846, x}, {TW_SIN, v+847, x}, \ + {TW_SIN, v+848, x}, {TW_SIN, v+849, x}, {TW_SIN, v+850, x}, {TW_SIN, v+851, x}, \ + {TW_SIN, v+852, x}, {TW_SIN, v+853, x}, {TW_SIN, v+854, x}, {TW_SIN, v+855, x}, \ + {TW_SIN, v+856, x}, {TW_SIN, v+857, x}, {TW_SIN, v+858, x}, {TW_SIN, v+859, x}, \ + {TW_SIN, v+860, x}, {TW_SIN, v+861, x}, {TW_SIN, v+862, x}, {TW_SIN, v+863, x}, \ + {TW_SIN, v+864, x}, {TW_SIN, v+865, x}, {TW_SIN, v+866, x}, {TW_SIN, v+867, x}, \ + {TW_SIN, v+868, x}, {TW_SIN, v+869, x}, {TW_SIN, v+870, x}, {TW_SIN, v+871, x}, \ + {TW_SIN, v+872, x}, {TW_SIN, v+873, x}, {TW_SIN, v+874, x}, {TW_SIN, v+875, x}, \ + {TW_SIN, v+876, x}, {TW_SIN, v+877, x}, {TW_SIN, v+878, x}, {TW_SIN, v+879, x}, \ + {TW_SIN, v+880, x}, {TW_SIN, v+881, x}, {TW_SIN, v+882, x}, {TW_SIN, v+883, x}, \ + {TW_SIN, v+884, x}, {TW_SIN, v+885, x}, {TW_SIN, v+886, x}, {TW_SIN, v+887, x}, \ + {TW_SIN, v+888, x}, {TW_SIN, v+889, x}, {TW_SIN, v+890, x}, {TW_SIN, v+891, x}, \ + {TW_SIN, v+892, x}, {TW_SIN, v+893, x}, {TW_SIN, v+894, x}, {TW_SIN, v+895, x}, \ + {TW_SIN, v+896, x}, {TW_SIN, v+897, x}, {TW_SIN, v+898, x}, {TW_SIN, v+899, x}, \ + {TW_SIN, v+900, x}, {TW_SIN, v+901, x}, {TW_SIN, v+902, x}, {TW_SIN, v+903, x}, \ + {TW_SIN, v+904, x}, {TW_SIN, v+905, x}, {TW_SIN, v+906, x}, {TW_SIN, v+907, x}, \ + {TW_SIN, v+908, x}, {TW_SIN, v+909, x}, {TW_SIN, v+910, x}, {TW_SIN, v+911, x}, \ + {TW_SIN, v+912, x}, {TW_SIN, v+913, x}, {TW_SIN, v+914, x}, {TW_SIN, v+915, x}, \ + {TW_SIN, v+916, x}, {TW_SIN, v+917, x}, {TW_SIN, v+918, x}, {TW_SIN, v+919, x}, \ + {TW_SIN, v+920, x}, {TW_SIN, v+921, x}, {TW_SIN, v+922, x}, {TW_SIN, v+923, x}, \ + {TW_SIN, v+924, x}, {TW_SIN, v+925, x}, {TW_SIN, v+926, x}, {TW_SIN, v+927, x}, \ + {TW_SIN, v+928, x}, {TW_SIN, v+929, x}, {TW_SIN, v+930, x}, {TW_SIN, v+931, x}, \ + {TW_SIN, v+932, x}, {TW_SIN, v+933, x}, {TW_SIN, v+934, x}, {TW_SIN, v+935, x}, \ + {TW_SIN, v+936, x}, {TW_SIN, v+937, x}, {TW_SIN, v+938, x}, {TW_SIN, v+939, x}, \ + {TW_SIN, v+940, x}, {TW_SIN, v+941, x}, {TW_SIN, v+942, x}, {TW_SIN, v+943, x}, \ + {TW_SIN, v+944, x}, {TW_SIN, v+945, x}, {TW_SIN, v+946, x}, {TW_SIN, v+947, x}, \ + {TW_SIN, v+948, x}, {TW_SIN, v+949, x}, {TW_SIN, v+950, x}, {TW_SIN, v+951, x}, \ + {TW_SIN, v+952, x}, {TW_SIN, v+953, x}, {TW_SIN, v+954, x}, {TW_SIN, v+955, x}, \ + {TW_SIN, v+956, x}, {TW_SIN, v+957, x}, {TW_SIN, v+958, x}, {TW_SIN, v+959, x}, \ + {TW_SIN, v+960, x}, {TW_SIN, v+961, x}, {TW_SIN, v+962, x}, {TW_SIN, v+963, x}, \ + {TW_SIN, v+964, x}, {TW_SIN, v+965, x}, {TW_SIN, v+966, x}, {TW_SIN, v+967, x}, \ + {TW_SIN, v+968, x}, {TW_SIN, v+969, x}, {TW_SIN, v+970, x}, {TW_SIN, v+971, x}, \ + {TW_SIN, v+972, x}, {TW_SIN, v+973, x}, {TW_SIN, v+974, x}, {TW_SIN, v+975, x}, \ + {TW_SIN, v+976, x}, {TW_SIN, v+977, x}, {TW_SIN, v+978, x}, {TW_SIN, v+979, x}, \ + {TW_SIN, v+980, x}, {TW_SIN, v+981, x}, {TW_SIN, v+982, x}, {TW_SIN, v+983, x}, \ + {TW_SIN, v+984, x}, {TW_SIN, v+985, x}, {TW_SIN, v+986, x}, {TW_SIN, v+987, x}, \ + {TW_SIN, v+988, x}, {TW_SIN, v+989, x}, {TW_SIN, v+990, x}, {TW_SIN, v+991, x}, \ + {TW_SIN, v+992, x}, {TW_SIN, v+993, x}, {TW_SIN, v+994, x}, {TW_SIN, v+995, x}, \ + {TW_SIN, v+996, x}, {TW_SIN, v+997, x}, {TW_SIN, v+998, x}, {TW_SIN, v+999, x}, \ + {TW_SIN, v+1000, x}, {TW_SIN, v+1001, x}, {TW_SIN, v+1002, x}, {TW_SIN, v+1003, x}, \ + {TW_SIN, v+1004, x}, {TW_SIN, v+1005, x}, {TW_SIN, v+1006, x}, {TW_SIN, v+1007, x}, \ + {TW_SIN, v+1008, x}, {TW_SIN, v+1009, x}, {TW_SIN, v+1010, x}, {TW_SIN, v+1011, x}, \ + {TW_SIN, v+1012, x}, {TW_SIN, v+1013, x}, {TW_SIN, v+1014, x}, {TW_SIN, v+1015, x}, \ + {TW_SIN, v+1016, x}, {TW_SIN, v+1017, x}, {TW_SIN, v+1018, x}, {TW_SIN, v+1019, x}, \ + {TW_SIN, v+1020, x}, {TW_SIN, v+1021, x}, {TW_SIN, v+1022, x}, {TW_SIN, v+1023, x} +#endif // VTW_SIZE == 1024 +#endif // REQ_VTWS