Vecmat 0.2.3
C math and linear algebra library for 2D/3D graphics, physics, and science.
Loading...
Searching...
No Matches
dispatch_list.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2025-2026 Igal Alkon
2// SPDX-FileCopyrightText: 2026 ALKONTEK <git@alkontek.com>
3// SPDX-License-Identifier: BSD-3-Clause
4
5#ifndef VECMAT_DISPATCH_LIST_H
6#define VECMAT_DISPATCH_LIST_H
7
8/*
9 * Dispatched kernels. X(name, params, args)
10 *
11 * Add a new row here, implement name_scalar in the existing _ptr file (plus a
12 * public `name` trampoline that calls name##_), and name_avx / name_avx2 /
13 * name_avx512 / name_sve / name_sve2. dispatch.c only binds the pointers.
14 */
15#define VECMAT_DISPATCH_LIST(X) \
16 X(vec4_add_ptr, \
17 (vector4 *res, const vector4 *a, const vector4 *b), (res, a, b)) \
18 X(vec4_sub_ptr, \
19 (vector4 *res, const vector4 *a, const vector4 *b), (res, a, b)) \
20 X(vec4_mul_ptr, \
21 (vector4 *res, const vector4 *a, const vector4 *b), (res, a, b)) \
22 X(vec4_mul_scalar_ptr, \
23 (vector4 *res, const vector4 *v, vm_float_t s), (res, v, s)) \
24 X(vec4_div_scalar_ptr, \
25 (vector4 *res, const vector4 *v, vm_float_t s), (res, v, s)) \
26 X(vec4_neg_ptr, \
27 (vector4 *res, const vector4 *v), (res, v)) \
28 X(vec4_abs_ptr, \
29 (vector4 *res, const vector4 *v), (res, v)) \
30 X(vec4_normalize_ptr, \
31 (vector4 *res, const vector4 *v), (res, v)) \
32 X(vec4_min_ptr, \
33 (vector4 *res, const vector4 *a, const vector4 *b), (res, a, b)) \
34 X(vec4_max_ptr, \
35 (vector4 *res, const vector4 *a, const vector4 *b), (res, a, b)) \
36 X(vec4_lerp_ptr, \
37 (vector4 *res, const vector4 *a, const vector4 *b, vm_float_t t), (res, a, b, t)) \
38 X(vec4_clamp_ptr, \
39 (vector4 *res, const vector4 *v, const vector4 *min, const vector4 *max), \
40 (res, v, min, max)) \
41 X(vec4_div_ptr, \
42 (vector4 *res, const vector4 *a, const vector4 *b), (res, a, b)) \
43 X(vec4_add_scalar_ptr, \
44 (vector4 *res, const vector4 *v, vm_float_t s), (res, v, s)) \
45 X(vec4_sub_scalar_ptr, \
46 (vector4 *res, const vector4 *v, vm_float_t s), (res, v, s)) \
47 X(vec4_clamp_scalar_ptr, \
48 (vector4 *res, const vector4 *v, vm_float_t min, vm_float_t max), (res, v, min, max)) \
49 X(vec4_saturate_ptr, \
50 (vector4 *res, const vector4 *v), (res, v)) \
51 X(vec4_sign_ptr, \
52 (vector4 *res, const vector4 *v), (res, v)) \
53 X(vec4_floor_ptr, \
54 (vector4 *res, const vector4 *v), (res, v)) \
55 X(vec4_ceil_ptr, \
56 (vector4 *res, const vector4 *v), (res, v)) \
57 X(vec4_round_ptr, \
58 (vector4 *res, const vector4 *v), (res, v)) \
59 X(vec4_fract_ptr, \
60 (vector4 *res, const vector4 *v), (res, v)) \
61 X(vec4_homogenize_ptr, \
62 (vector4 *res, const vector4 *v), (res, v)) \
63 X(mat4_mul_ptr, \
64 (matrix4 *res, const matrix4 *a, const matrix4 *b), (res, a, b)) \
65 X(mat4_transpose_ptr, \
66 (matrix4 *res, const matrix4 *m), (res, m)) \
67 X(mat4_mul_vec4_ptr, \
68 (vector4 *res, const matrix4 *m, const vector4 *v), (res, m, v)) \
69 X(mat4_mul_vec3_ptr, \
70 (vector3 *res, const matrix4 *m, const vector3 *v, vm_float_t w), (res, m, v, w)) \
71 X(quat_mul_ptr, \
72 (quaternion *res, const quaternion *a, const quaternion *b), (res, a, b)) \
73 X(quat_normalize_ptr, \
74 (quaternion *res, const quaternion *q), (res, q))
75
76#endif /* VECMAT_DISPATCH_LIST_H */