32 #include "NE10_types.h" 34 #ifdef ENABLE_NE10_PHYSICS_COMPUTE_AABB_VEC2F_NEON 35 extern void ne10_physics_compute_aabb_vertex4_vec2f_neon (ne10_mat2x2f_t *aabb,
39 ne10_uint32_t vertex_count)
40 asm (
"ne10_physics_compute_aabb_vertex4_vec2f_neon");
41 #endif // ENABLE_NE10_PHYSICS_COMPUTE_AABB_VEC2F_NEON 46 ne10_float32_t x = (T.c2.r2 * v.x - T.c2.r1 * v.y) + T.c1.r1;
47 ne10_float32_t y = (T.c2.r1 * v.x + T.c2.r2 * v.y) + T.c1.r2;
53 static inline ne10_float32_t min (
float a, ne10_float32_t b)
64 static inline ne10_float32_t max (
float a, ne10_float32_t b)
86 #ifdef ENABLE_NE10_PHYSICS_COMPUTE_AABB_VEC2F_NEON 87 void ne10_physics_compute_aabb_vec2f_neon (ne10_mat2x2f_t *aabb,
91 ne10_uint32_t vertex_count)
93 ne10_int32_t residual_loops = (vertex_count & 0x3);
94 ne10_int32_t main_loops = vertex_count - residual_loops;
98 ne10_physics_compute_aabb_vertex4_vec2f_neon (aabb, vertices, xf, radius, main_loops);
101 if (residual_loops > 0)
112 lower = ne10_mul_matvec_float (*xf, vertices[main_loops]);
117 lower2.x = aabb->c1.r1 + radius->x;
118 lower2.y = aabb->c1.r2 + radius->y;
119 upper2.x = aabb->c2.r1 - radius->x;
120 upper2.y = aabb->c2.r2 - radius->y;
121 lower = ne10_mul_matvec_float (*xf, vertices[main_loops]);
123 lower = min_2f (lower, lower2);
124 upper = max_2f (upper, upper2);
127 for (i = main_loops + 1; i < vertex_count; ++i)
129 v = ne10_mul_matvec_float (*xf, vertices[i]);
130 lower = min_2f (lower, v);
131 upper = max_2f (upper, v);
134 aabb->c1.r1 = lower.x - radius->x;
135 aabb->c1.r2 = lower.y - radius->y;
136 aabb->c2.r1 = upper.x + radius->x;
137 aabb->c2.r2 = upper.y + radius->y;
140 #endif // ENABLE_NE10_PHYSICS_COMPUTE_AABB_VEC2F_NEON a 2-tuple of ne10_float32_t values.