Mercurial > vec
annotate test/test_benchmark_vec.c @ 38:fd42f9b1b95e
docs: update copyright for 2025, update the README with more info
I slightly edited vec.h however to use calloc directly rather
than malloc + memset.
author | Paper <paper@tflc.us> |
---|---|
date | Sat, 26 Apr 2025 02:54:44 -0400 |
parents | 4b5a557aa64f |
children | c6e0df09b86f |
rev | line source |
---|---|
37
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
1 #include "vec/vec.h" |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
2 |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
3 extern void test_benchmark_sample_minmax_vec_impl(int16_t *smpl, |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
4 uint32_t length, int32_t *pmin, int32_t *pmax) |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
5 { |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
6 int32_t smin = INT32_MAX, smax = INT32_MIN; |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
7 uint32_t len32; |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
8 int i; |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
9 vint16x32 min = vint16x32_splat(*pmin); |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
10 vint16x32 max = vint16x32_splat(*pmax); |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
11 VINT16x32_ALIGNED_ARRAY(mins); |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
12 VINT16x32_ALIGNED_ARRAY(maxs); |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
13 |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
14 len32 = length / 32; |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
15 while (len32--) { |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
16 vint16x32 vec = vint16x32_load_aligned(smpl); |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
17 |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
18 min = vint16x32_min(vec, min); |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
19 max = vint16x32_max(vec, max); |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
20 |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
21 smpl += 32; |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
22 } |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
23 |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
24 vint16x32_store_aligned(min, mins); |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
25 vint16x32_store_aligned(max, maxs); |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
26 |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
27 /* get the lowest minimum of what we have left */ |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
28 for (i = 0; i < 32; i++) { |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
29 if (mins[i] < smin) smin = mins[i]; |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
30 if (maxs[i] > smax) smax = maxs[i]; |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
31 } |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
32 |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
33 len32 = length % 32; |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
34 while (len32--) { |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
35 if (*smpl < smin) smin = *smpl; |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
36 if (*smpl > smax) smax = *smpl; |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
37 |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
38 smpl++; |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
39 } |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
40 |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
41 *pmin = smin; |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
42 *pmax = smax; |
4b5a557aa64f
*: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff
changeset
|
43 } |