You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
370 lines
9.3 KiB
370 lines
9.3 KiB
/* |
|
|
|
Copyright (c) 2009, 2010, 2011, 2012, 2013 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. |
|
|
|
*/ |
|
|
|
#define _AEABI_PORTABILITY_LEVEL 1 |
|
#undef _AEABI_PORTABLE |
|
#if defined(__cplusplus) |
|
#include <cstdio> |
|
#include <cstdlib> |
|
#else |
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#endif |
|
|
|
FILE* log_file = NULL; |
|
FILE* ref_file = NULL; |
|
FILE* gcc_tests_file = NULL; |
|
|
|
#define LOGFILE "stm-arm-neon-ref.log" |
|
|
|
void cleanup (void) |
|
{ |
|
if (log_file) fclose (log_file); |
|
if (ref_file) fclose (ref_file); |
|
if (gcc_tests_file) fclose (gcc_tests_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_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); |
|
|
|
#if defined(__ARMCC_VERSION) || !defined(__arm__) |
|
extern void exec_integer(void); /* Integer (non-NEON) intrinsics */ |
|
extern void exec_dsp(void); /* DSP (non-NEON) intrinsics */ |
|
extern void exec_dspfns(void); /* DSP FNS (non-NEON/ITU) intrinsics */ |
|
#endif |
|
|
|
#include "compute_ref_data.c" |
|
|
|
int main (void) |
|
{ |
|
#if defined(_MSC_VER) |
|
/* When compiled with MSVC, force output of FP numbers with only 2 |
|
* digits for the exponent, for easier comparison of the results |
|
* with GCC. */ |
|
_set_output_format(_TWO_DIGIT_EXPONENT); |
|
#endif |
|
|
|
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 (); |
|
} |
|
|
|
gcc_tests_file = fopen (GCCTESTS_FILE, "w"); |
|
if (gcc_tests_file == NULL) { |
|
fprintf (log_file, "Error opening GCC ref file %s\n", GCCTESTS_FILE); |
|
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 (); |
|
exec_vsli_n (); |
|
exec_vsri_n (); |
|
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_vcage (); |
|
exec_vcale (); |
|
exec_vcagt (); |
|
exec_vcalt (); |
|
exec_vcvt (); |
|
exec_vrecps (); |
|
exec_vrsqrts (); |
|
|
|
#if defined(__ARMCC_VERSION) || (!defined(__arm__) && !defined(__aarch64__)) |
|
exec_integer (); |
|
exec_dsp (); |
|
exec_dspfns (); |
|
#endif |
|
|
|
fprintf (log_file, "Finished\n"); |
|
|
|
return 0; |
|
}
|
|
|