diff options
author | Christophe Lyon <christophe.lyon@st.com> | 2011-01-24 17:37:40 +0100 |
---|---|---|
committer | Christophe Lyon <christophe.lyon@st.com> | 2011-01-24 17:37:40 +0100 |
commit | 073831adf9442c019e8d34b18b0c04b1d780a19b (patch) | |
tree | 391f6efd9ceabde2554e9d2c637c9fdafdc9617a /compute_ref.c | |
download | platform_external_arm-neon-tests-073831adf9442c019e8d34b18b0c04b1d780a19b.tar.gz platform_external_arm-neon-tests-073831adf9442c019e8d34b18b0c04b1d780a19b.tar.bz2 platform_external_arm-neon-tests-073831adf9442c019e8d34b18b0c04b1d780a19b.zip |
First public release of the ARM/Neon tests.
Diffstat (limited to 'compute_ref.c')
-rw-r--r-- | compute_ref.c | 345 |
1 files changed, 345 insertions, 0 deletions
diff --git a/compute_ref.c b/compute_ref.c new file mode 100644 index 0000000..e1109b9 --- /dev/null +++ b/compute_ref.c @@ -0,0 +1,345 @@ +/* + +Copyright (c) 2009, 2010, 2011 STMicroelectronics +Written by Christophe Lyon + +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. + +*/ + +#include <stdio.h> +#include <stdlib.h> + +FILE* log_file = NULL; +FILE* ref_file = NULL; + +#define LOGFILE "stm-arm-neon-ref.log" + +void cleanup () +{ + if (log_file) fclose (log_file); + if (ref_file) fclose (ref_file); + exit (1); +} + +extern void exec_vld1(void); +extern void exec_vadd(void); +extern void exec_vld1_lane(void); +extern void exec_vld1_dup(void); +extern void exec_vdup(void); +extern void exec_vget_high(void); +extern void exec_vget_low(void); +extern void exec_vqdmlal_lane(void); +extern void exec_vqdmlsl_lane(void); +extern void exec_vqdmlal_n(void); +extern void exec_vqdmlsl_n(void); +extern void exec_vext(void); +extern void exec_vshr_n(void); +extern void exec_vshrn_n(void); +extern void exec_vrshrn_n(void); +extern void exec_vqrshrn_n(void); +extern void exec_vset_lane(void); +extern void exec_vget_lane(void); +extern void exec_vqsub(void); +extern void exec_vqdmulh(void); +extern void exec_vqdmulh_lane(void); +extern void exec_vqdmulh_n(void); +extern void exec_vqdmull(void); +extern void exec_vqdmlal(void); +extern void exec_vqdmlsl(void); +extern void exec_vceq(void); +extern void exec_vcge(void); +extern void exec_vcle(void); +extern void exec_vcgt(void); +extern void exec_vclt(void); +extern void exec_vbsl(void); +extern void exec_vshl(void); +extern void exec_vqshl(void); +extern void exec_vqshl_n(void); +extern void exec_vrshl(void); +extern void exec_vshl_n(void); +extern void exec_vldX(void); +extern void exec_vdup_lane(void); +extern void exec_vqdmull_lane(void); +extern void exec_vqdmull_n(void); +extern void exec_vst1_lane(void); +extern void exec_vsub(void); +extern void exec_vqadd(void); +extern void exec_vabs(void); +extern void exec_vqabs(void); +extern void exec_vcombine(void); +extern void exec_vmax(void); +extern void exec_vmin(void); +extern void exec_vneg(void); +extern void exec_vqneg(void); +extern void exec_vmlal(void); +extern void exec_vmlal_lane(void); +extern void exec_vmlal_n(void); +extern void exec_vmlsl(void); +extern void exec_vmlsl_lane(void); +extern void exec_vmlsl_n(void); +extern void exec_vmovl(void); +extern void exec_vmovn(void); +extern void exec_vmull(void); +extern void exec_vmull_lane(void); +extern void exec_vrev(void); +extern void exec_vsra_n(void); +extern void exec_vtrn(void); +extern void exec_vuzp(void); +extern void exec_vzip(void); +extern void exec_vreinterpret(void); +extern void exec_vqrdmulh(void); +extern void exec_vqrdmulh_lane(void); +extern void exec_vqrdmulh_n(void); +extern void exec_vqrshl(void); +extern void exec_vaba(void); +extern void exec_vabal(void); +extern void exec_vabd(void); +extern void exec_vabdl(void); +extern void exec_vand(void); +extern void exec_vorr(void); +extern void exec_vorn(void); +extern void exec_veor(void); +extern void exec_vbic(void); +extern void exec_vcreate(void); +extern void exec_vldX_lane(void); +extern void exec_vldX_dup(void); +extern void exec_vmla(void); +extern void exec_vmls(void); +extern void exec_vmul(void); +extern void exec_vmul_lane(void); +extern void exec_vmul_n(void); +extern void exec_vmull_n(void); +extern void exec_vmla_lane(void); +extern void exec_vmls_lane(void); +extern void exec_vmla_n(void); +extern void exec_vmls_n(void); +extern void exec_vsli_n(void); +extern void exec_vsri_n(void); +extern void exec_vtst(void); +extern void exec_vaddhn(void); +extern void exec_vraddhn(void); +extern void exec_vaddl(void); +extern void exec_vaddw(void); +extern void exec_vhadd(void); +extern void exec_vrhadd(void); +extern void exec_vhsub(void); +extern void exec_vsubl(void); +extern void exec_vsubw(void); +extern void exec_vsubhn(void); +extern void exec_vrsubhn(void); +extern void exec_vmvn(void); +extern void exec_vqmovn(void); +extern void exec_vqmovun(void); +extern void exec_vrshr_n(void); +extern void exec_vrsra_n(void); +extern void exec_vshll_n(void); +extern void exec_vpaddl(void); +extern void exec_vpadd(void); +extern void exec_vpadal(void); +extern void exec_vqshlu_n(void); +extern void exec_vclz(void); +extern void exec_vcls(void); +extern void exec_vcnt(void); +extern void exec_vqshrn_n(void); +extern void exec_vpmax(void); +extern void exec_vpmin(void); +extern void exec_vqshrun_n(void); +extern void exec_vqrshrun_n(void); +extern void exec_vstX_lane(void); +extern void exec_vtbX(void); +extern void exec_vrecpe(void); +extern void exec_vrsqrte(void); +extern void exec_integer(void); /* Integer (non-NEON) intrinsics */ + +extern void exec_vcage(void); +extern void exec_vcagt(void); +extern void exec_vcale(void); +extern void exec_vcalt(void); +extern void exec_vcvt(void); +extern void exec_vrecps(void); +extern void exec_vrsqrts(void); + +extern void exec_dsp(void); /* DSP (non-NEON) intrinsics */ +extern void exec_dspfns(void); /* DSP FNS (non-NEON/ITU) intrinsics */ + +int main () +{ + log_file = fopen (LOGFILE, "w"); + if (log_file == NULL) { + fprintf (stderr, "Error opening log file "LOGFILE"\n"); + cleanup (); + } + + ref_file = fopen (REFFILE, "w"); + if (ref_file == NULL) { + fprintf (log_file, "Error opening ref file %s\n", REFFILE); + cleanup (); + } + + fprintf (log_file, "Computing refs....\n"); + + exec_vld1 (); + exec_vadd (); + exec_vld1_lane (); + exec_vld1_dup (); + exec_vdup (); + exec_vget_high (); + exec_vget_low (); + exec_vqdmlal_lane (); + exec_vqdmlsl_lane (); + exec_vqdmlal_n (); + exec_vqdmlsl_n (); + exec_vext (); + exec_vshr_n (); + exec_vshrn_n (); + exec_vrshrn_n (); + exec_vqrshrn_n (); + exec_vset_lane (); + exec_vget_lane (); + exec_vqsub (); + exec_vqdmulh (); + exec_vqdmulh_lane (); + exec_vqdmulh_n (); + exec_vqdmull (); + exec_vqdmlal (); + exec_vqdmlsl (); + exec_vceq (); + exec_vcge (); + exec_vcle (); + exec_vcgt (); + exec_vclt (); + exec_vbsl (); + exec_vshl (); + exec_vshl_n (); + exec_vqshl (); + exec_vqshl_n (); + exec_vrshl (); + exec_vldX (); + exec_vdup_lane (); + exec_vqdmull_lane (); + exec_vqdmull_n (); + exec_vst1_lane (); + exec_vsub (); + exec_vqadd (); + exec_vabs (); + exec_vqabs (); + exec_vcombine (); + exec_vmax (); + exec_vmin (); + exec_vneg (); + exec_vqneg (); + exec_vmlal (); + exec_vmlsl (); + exec_vmlal_lane (); + exec_vmlsl_lane (); + exec_vmlal_n (); + exec_vmlsl_n (); + exec_vmovl (); + exec_vmovn (); + exec_vmull (); + exec_vmull_lane (); + exec_vrev (); + exec_vsra_n (); + exec_vtrn (); + exec_vuzp (); + exec_vzip (); + exec_vreinterpret (); + exec_vqrdmulh (); + exec_vqrdmulh_lane (); + exec_vqrdmulh_n (); + exec_vqrshl (); + exec_vaba (); + exec_vabal (); + exec_vabd (); + exec_vabdl (); + exec_vand (); + exec_vorr (); + exec_vorn (); + exec_veor (); + exec_vbic (); + exec_vcreate (); + exec_vldX_lane (); + exec_vldX_dup (); + exec_vmla (); + exec_vmls (); + exec_vmul (); + exec_vmul_lane (); + exec_vmul_n (); + exec_vmull_n (); + exec_vmla_lane (); + exec_vmls_lane (); + exec_vmla_n (); + exec_vmls_n (); +#if 0 + exec_vsli_n (); + exec_vsri_n (); +#endif + exec_vtst (); + exec_vaddhn (); + exec_vraddhn (); + exec_vaddl (); + exec_vaddw (); + exec_vhadd (); + exec_vrhadd (); + exec_vhsub (); + exec_vsubl (); + exec_vsubw (); + exec_vsubhn (); + exec_vrsubhn (); + exec_vmvn (); + exec_vqmovn (); + exec_vqmovun (); + exec_vrshr_n (); + exec_vrsra_n (); + exec_vshll_n (); + exec_vpaddl (); + exec_vpadd (); + exec_vpadal (); + exec_vqshlu_n (); + exec_vclz (); + exec_vcls (); + exec_vcnt (); + exec_vqshrn_n (); + exec_vpmax (); + exec_vpmin (); + exec_vqshrun_n (); + exec_vqrshrun_n (); + exec_vstX_lane (); + exec_vtbX (); + exec_vrecpe (); + exec_vrsqrte (); + + exec_integer (); + + exec_vcage (); + exec_vcale (); + exec_vcagt (); + exec_vcalt (); + exec_vcvt (); + exec_vrecps (); + exec_vrsqrts (); + + exec_dsp (); + exec_dspfns (); + + fprintf (log_file, "Finished\n"); + + return 0; +} |