9#if defined(VECMAT_USE_F64)
13 const svbool_t pg = svwhilelt_b64((uint64_t)0, (uint64_t)4);
15 const svfloat64_t a0 = svld1_f64(pg, &a->
v[0]);
16 const svfloat64_t a1 = svld1_f64(pg, &a->
v[4]);
17 const svfloat64_t a2 = svld1_f64(pg, &a->
v[8]);
18 const svfloat64_t a3 = svld1_f64(pg, &a->
v[12]);
19 for (
int c = 0; c < 4; c++) {
20 svfloat64_t col = svmul_n_f64_z(pg, a0, b->
v[c * 4 + 0]);
21 col = svmla_n_f64_z(pg, col, a1, b->
v[c * 4 + 1]);
22 col = svmla_n_f64_z(pg, col, a2, b->
v[c * 4 + 2]);
23 col = svmla_n_f64_z(pg, col, a3, b->
v[c * 4 + 3]);
24 svst1_f64(pg, &tmp.
v[c * 4], col);
26 memcpy(res->
v, tmp.
v,
sizeof(tmp.
v));
32 for (
int i = 0; i < 4; i++) {
33 for (
int j = 0; j < 4; j++)
34 tmp.
v[i * 4 + j] = m->
v[j * 4 + i];
36 memcpy(res->
v, tmp.
v,
sizeof(tmp.
v));
41 const svbool_t pg = svwhilelt_b64((uint64_t)0, (uint64_t)4);
42 svfloat64_t r = svmul_n_f64_z(pg, svld1_f64(pg, &m->
v[0]), v->
x);
43 r = svmla_n_f64_z(pg, r, svld1_f64(pg, &m->
v[4]), v->
y);
44 r = svmla_n_f64_z(pg, r, svld1_f64(pg, &m->
v[8]), v->
z);
45 r = svmla_n_f64_z(pg, r, svld1_f64(pg, &m->
v[12]), v->
w);
46 svst1_f64(pg, res->
v, r);
51 const svbool_t pg = svwhilelt_b64((uint64_t)0, (uint64_t)4);
52 svfloat64_t r = svmul_n_f64_z(pg, svld1_f64(pg, &m->
v[0]), v->
x);
53 r = svmla_n_f64_z(pg, r, svld1_f64(pg, &m->
v[4]), v->
y);
54 r = svmla_n_f64_z(pg, r, svld1_f64(pg, &m->
v[8]), v->
z);
55 r = svmla_n_f64_z(pg, r, svld1_f64(pg, &m->
v[12]), w);
67 const svbool_t pg = svwhilelt_b32((uint32_t)0, (uint32_t)4);
69 const svfloat32_t a0 = svld1_f32(pg, &a->
v[0]);
70 const svfloat32_t a1 = svld1_f32(pg, &a->
v[4]);
71 const svfloat32_t a2 = svld1_f32(pg, &a->
v[8]);
72 const svfloat32_t a3 = svld1_f32(pg, &a->
v[12]);
73 for (
int c = 0; c < 4; c++) {
74 svfloat32_t col = svmul_n_f32_z(pg, a0, b->
v[c * 4 + 0]);
75 col = svmla_n_f32_z(pg, col, a1, b->
v[c * 4 + 1]);
76 col = svmla_n_f32_z(pg, col, a2, b->
v[c * 4 + 2]);
77 col = svmla_n_f32_z(pg, col, a3, b->
v[c * 4 + 3]);
78 svst1_f32(pg, &tmp.
v[c * 4], col);
80 memcpy(res->
v, tmp.
v,
sizeof(tmp.
v));
86 for (
int i = 0; i < 4; i++) {
87 for (
int j = 0; j < 4; j++)
88 tmp.
v[i * 4 + j] = m->
v[j * 4 + i];
90 memcpy(res->
v, tmp.
v,
sizeof(tmp.
v));
95 const svbool_t pg = svwhilelt_b32((uint32_t)0, (uint32_t)4);
96 svfloat32_t r = svmul_n_f32_z(pg, svld1_f32(pg, &m->
v[0]), v->
x);
97 r = svmla_n_f32_z(pg, r, svld1_f32(pg, &m->
v[4]), v->
y);
98 r = svmla_n_f32_z(pg, r, svld1_f32(pg, &m->
v[8]), v->
z);
99 r = svmla_n_f32_z(pg, r, svld1_f32(pg, &m->
v[12]), v->
w);
100 svst1_f32(pg, res->
v, r);
105 const svbool_t pg = svwhilelt_b32((uint32_t)0, (uint32_t)4);
106 svfloat32_t r = svmul_n_f32_z(pg, svld1_f32(pg, &m->
v[0]), v->
x);
107 r = svmla_n_f32_z(pg, r, svld1_f32(pg, &m->
v[4]), v->
y);
108 r = svmla_n_f32_z(pg, r, svld1_f32(pg, &m->
v[8]), v->
z);
109 r = svmla_n_f32_z(pg, r, svld1_f32(pg, &m->
v[12]), w);
void mat4_mul_ptr_sve(matrix4 *res, const matrix4 *a, const matrix4 *b)
void mat4_transpose_ptr_sve(matrix4 *res, const matrix4 *m)
void mat4_mul_vec3_ptr_sve(vector3 *res, const matrix4 *m, const vector3 *v, vm_float_t w)
void mat4_mul_vec4_ptr_sve(vector4 *res, const matrix4 *m, const vector4 *v)
vm_float_t v[VECMAT_MAT4_SIZE]
vm_float_t v[VECMAT_VEC4_SIZE]