Select Git revision
-
Jedrzej Rybicki authoredJedrzej Rybicki authored
complex_double.m4 11.40 KiB
divert(`-1')
define(`complex_doublesve', `defn(format(``complex_doublesve.%s'', `$1'))')
define(`complex_doublesve_set', `define(format(``complex_doublesve.%s'', `$1'), `$2')')
dnl
complex_doublesve_set(`vec', `svfloat64x2_t')dnl
complex_doublesve_set(`intvec', `svuint64_t')dnl
complex_doublesve_set(`scalpointer', `double')dnl
dnl
complex_doublesve_set(`load', `svld2_f64')dnl
complex_doublesve_set(`gatherload', `svld1_gather_index')dnl
complex_doublesve_set(`store', `svst2_f64')dnl
complex_doublesve_set(`count', `svcntd() / 2')dnl
complex_doublesve_set(`index', `svindex_u64')dnl
complex_doublesve_set(`true', `svptrue_b64()')dnl
complex_doublesve_set(`while', `svwhilelt_b64')dnl
complex_doublesve_set(`neg', `svneg_f64_z')dnl
complex_doublesve_set(`abs', `svabs_f64_z')dnl
dnl
complex_doublesve_set(`add', `svadd_f64_z')dnl
complex_doublesve_set(`sub', `svsub_f64_z')dnl
complex_doublesve_set(`mul', `svmul_f64_z')dnl
complex_doublesve_set(`div', `svdiv_f64_z')dnl
dnl
dnl
define(`complex_double_sve_intr_while_lower',
`pg = svwhilelt_b64($1, $2); ')
define(`complex_double_sve_intr_load',
`ifdef(`disable_complex_instructions',
` svfloat64x2_t $3 = svld2_f64(pg, (const double *) &$1[$2 * 2]);
',
` svfloat64_t $3 = svld1_f64(pg, (const double *) &$1[$2 / 2]);
')
')
define(`complex_double_sve_intr_dup',
`ifdef(`disable_complex_instructions',
` svfloat64x2_t $2 = {svdup_f64(creal($1)), svdup_f64(cimag($1))};
',
` svfloat64_t $2 = svdupq_f64( creal($1), cimag($1));
')
')
define(`complex_double_sve_intr_add',
`ifdef(`disable_complex_instructions',
` svfloat64_t re = svadd_f64_z(pg, $1.v0, $2.v0);
svfloat64_t im = svadd_f64_z(pg, $1.v1, $2.v1);
svfloat64x2_t res = {re, im};
svst2_f64(pg, (double *) &$3[$4 * 2], res);
',
` svfloat64_t res = svadd_f64_z(pg, $1, $2);
svst1_f64(pg, (double *) &$3[$4 / 2], res);
')
')
define(`complex_double_sve_intr_sub',
`ifdef(`disable_complex_instructions',
` svfloat64_t re = svsub_f64_z(pg, $1.v0, $2.v0);
svfloat64_t im = svsub_f64_z(pg, $1.v1, $2.v1);
svfloat64x2_t res = {re, im};
svst2_f64(pg, (double *) &$3[$4 * 2], res);
',
` svfloat64_t res = svsub_f64_z(pg, $1, $2);