Skip to content

Commit f7e863a

Browse files
committed
Use "sat" instead of "saturate" for saturating operations.
This also anticipates a similar change in the LLVM builtins. See WebAssembly/simd#332
1 parent 21eeea4 commit f7e863a

File tree

1 file changed

+75
-39
lines changed

1 file changed

+75
-39
lines changed

wav.h

Lines changed: 75 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2830,93 +2830,125 @@ wav_i16x8_dot(wav_i16x8_t a, wav_i16x8_t b) {
28302830
WAV_UNIMPLEMENTED_SIMD128_ATTRIBUTE WAV_FUNCTION_ATTRIBUTES wav_i32x4_t wav_dot(wav_i16x8_t a, wav_i16x8_t b) { return wav_i16x8_dot(a, b); }
28312831
#endif
28322832

2833-
/* add_saturate -- Saturating integer addition
2833+
/* add_sat -- Saturating integer addition
28342834
*
28352835
* Lane-wise saturating addition.
28362836
*/
28372837

28382838
WAV_FUNCTION_ATTRIBUTES
28392839
wav_i8x16_t
2840-
wav_i8x16_add_saturate(wav_i8x16_t a, wav_i8x16_t b) {
2841-
return (wav_i8x16_t) { __builtin_wasm_add_saturate_s_i8x16(a.values, b.values) };
2840+
wav_i8x16_add_sat(wav_i8x16_t a, wav_i8x16_t b) {
2841+
#if __has_builtin(__builtin_wasm_add_sat_s_i8x16)
2842+
return (wav_i8x16_t) { __builtin_wasm_add_sat_s_i8x16(a.values, b.values) };
2843+
#else
2844+
return (wav_i8x16_t) { __builtin_wasm_add_saturate_s_i8x16(a.values, b.values) };
2845+
#endif
28422846
}
28432847

28442848
WAV_FUNCTION_ATTRIBUTES
28452849
wav_i16x8_t
2846-
wav_i16x8_add_saturate(wav_i16x8_t a, wav_i16x8_t b) {
2847-
return (wav_i16x8_t) { __builtin_wasm_add_saturate_s_i16x8(a.values, b.values) };
2850+
wav_i16x8_add_sat(wav_i16x8_t a, wav_i16x8_t b) {
2851+
#if __has_builtin(__builtin_wasm_add_sat_s_i16x8)
2852+
return (wav_i16x8_t) { __builtin_wasm_add_sat_s_i16x8(a.values, b.values) };
2853+
#else
2854+
return (wav_i16x8_t) { __builtin_wasm_add_saturate_s_i16x8(a.values, b.values) };
2855+
#endif
28482856
}
28492857

28502858
WAV_FUNCTION_ATTRIBUTES
28512859
wav_u8x16_t
2852-
wav_u8x16_add_saturate(wav_u8x16_t a, wav_u8x16_t b) {
2853-
return (wav_u8x16_t) { __builtin_wasm_add_saturate_u_i8x16(a.values, b.values) };
2860+
wav_u8x16_add_sat(wav_u8x16_t a, wav_u8x16_t b) {
2861+
#if __has_builtin(__builtin_wasm_add_sat_u_i8x16)
2862+
return (wav_u8x16_t) { __builtin_wasm_add_sat_u_i8x16(a.values, b.values) };
2863+
#else
2864+
return (wav_u8x16_t) { __builtin_wasm_add_saturate_u_i8x16(a.values, b.values) };
2865+
#endif
28542866
}
28552867

28562868
WAV_FUNCTION_ATTRIBUTES
28572869
wav_u16x8_t
2858-
wav_u16x8_add_saturate(wav_u16x8_t a, wav_u16x8_t b) {
2859-
return (wav_u16x8_t) { __builtin_wasm_add_saturate_u_i16x8(a.values, b.values) };
2870+
wav_u16x8_add_sat(wav_u16x8_t a, wav_u16x8_t b) {
2871+
#if __has_builtin(__builtin_wasm_add_sat_u_i16x8)
2872+
return (wav_u16x8_t) { __builtin_wasm_add_sat_u_i16x8(a.values, b.values) };
2873+
#else
2874+
return (wav_u16x8_t) { __builtin_wasm_add_saturate_u_i16x8(a.values, b.values) };
2875+
#endif
28602876
}
28612877

28622878
#if WAV_OVERLOADS == WAV_OVERLOADS_C11
2863-
#define wav_add_saturate(a, b) \
2879+
#define wav_add_sat(a, b) \
28642880
(_Generic((a), \
2865-
wav_i8x16_t: wav_i8x16_add_saturate, \
2866-
wav_i16x8_t: wav_i16x8_add_saturate, \
2867-
wav_u8x16_t: wav_u8x16_add_saturate, \
2868-
wav_u16x8_t: wav_u16x8_add_saturate) (a, b))
2881+
wav_i8x16_t: wav_i8x16_add_sat, \
2882+
wav_i16x8_t: wav_i16x8_add_sat, \
2883+
wav_u8x16_t: wav_u8x16_add_sat, \
2884+
wav_u16x8_t: wav_u16x8_add_sat) (a, b))
28692885
#elif WAV_OVERLOADS == WAV_OVERLOADS_CXX
2870-
WAV_FUNCTION_ATTRIBUTES wav_i8x16_t wav_add_saturate(wav_i8x16_t a, wav_i8x16_t b) { return wav_i8x16_add_saturate(a, b); }
2871-
WAV_FUNCTION_ATTRIBUTES wav_i16x8_t wav_add_saturate(wav_i16x8_t a, wav_i16x8_t b) { return wav_i16x8_add_saturate(a, b); }
2872-
WAV_FUNCTION_ATTRIBUTES wav_u8x16_t wav_add_saturate(wav_u8x16_t a, wav_u8x16_t b) { return wav_u8x16_add_saturate(a, b); }
2873-
WAV_FUNCTION_ATTRIBUTES wav_u16x8_t wav_add_saturate(wav_u16x8_t a, wav_u16x8_t b) { return wav_u16x8_add_saturate(a, b); }
2886+
WAV_FUNCTION_ATTRIBUTES wav_i8x16_t wav_add_sat(wav_i8x16_t a, wav_i8x16_t b) { return wav_i8x16_add_sat(a, b); }
2887+
WAV_FUNCTION_ATTRIBUTES wav_i16x8_t wav_add_sat(wav_i16x8_t a, wav_i16x8_t b) { return wav_i16x8_add_sat(a, b); }
2888+
WAV_FUNCTION_ATTRIBUTES wav_u8x16_t wav_add_sat(wav_u8x16_t a, wav_u8x16_t b) { return wav_u8x16_add_sat(a, b); }
2889+
WAV_FUNCTION_ATTRIBUTES wav_u16x8_t wav_add_sat(wav_u16x8_t a, wav_u16x8_t b) { return wav_u16x8_add_sat(a, b); }
28742890
#endif
28752891

2876-
/* sub_saturate -- Saturating integer subtraction
2892+
/* sub_sat -- Saturating integer subtraction
28772893
*
28782894
* Lane-wise saturating subtraction.
28792895
*/
28802896

28812897
WAV_FUNCTION_ATTRIBUTES
28822898
wav_i8x16_t
2883-
wav_i8x16_sub_saturate(wav_i8x16_t a, wav_i8x16_t b) {
2884-
return (wav_i8x16_t) { __builtin_wasm_sub_saturate_s_i8x16(a.values, b.values) };
2899+
wav_i8x16_sub_sat(wav_i8x16_t a, wav_i8x16_t b) {
2900+
#if __has_builtin(__builtin_wasm_sub_sat_s_i8x16)
2901+
return (wav_i8x16_t) { __builtin_wasm_sub_sat_s_i8x16(a.values, b.values) };
2902+
#else
2903+
return (wav_i8x16_t) { __builtin_wasm_sub_saturate_s_i8x16(a.values, b.values) };
2904+
#endif
28852905
}
28862906

28872907
WAV_FUNCTION_ATTRIBUTES
28882908
wav_i16x8_t
2889-
wav_i16x8_sub_saturate(wav_i16x8_t a, wav_i16x8_t b) {
2890-
return (wav_i16x8_t) { __builtin_wasm_sub_saturate_s_i16x8(a.values, b.values) };
2909+
wav_i16x8_sub_sat(wav_i16x8_t a, wav_i16x8_t b) {
2910+
#if __has_builtin(__builtin_wasm_sub_sat_s_i16x8)
2911+
return (wav_i16x8_t) { __builtin_wasm_sub_sat_s_i16x8(a.values, b.values) };
2912+
#else
2913+
return (wav_i16x8_t) { __builtin_wasm_sub_saturate_s_i16x8(a.values, b.values) };
2914+
#endif
28912915
}
28922916

28932917
WAV_FUNCTION_ATTRIBUTES
28942918
wav_u8x16_t
2895-
wav_u8x16_sub_saturate(wav_u8x16_t a, wav_u8x16_t b) {
2896-
return (wav_u8x16_t) { __builtin_wasm_sub_saturate_u_i8x16(a.values, b.values) };
2919+
wav_u8x16_sub_sat(wav_u8x16_t a, wav_u8x16_t b) {
2920+
#if __has_builtin(__builtin_wasm_sub_sat_u_i8x16)
2921+
return (wav_u8x16_t) { __builtin_wasm_sub_sat_u_i8x16(a.values, b.values) };
2922+
#else
2923+
return (wav_u8x16_t) { __builtin_wasm_sub_saturate_u_i8x16(a.values, b.values) };
2924+
#endif
28972925
}
28982926

28992927
WAV_FUNCTION_ATTRIBUTES
29002928
wav_u16x8_t
2901-
wav_u16x8_sub_saturate(wav_u16x8_t a, wav_u16x8_t b) {
2902-
return (wav_u16x8_t) { __builtin_wasm_sub_saturate_u_i16x8(a.values, b.values) };
2929+
wav_u16x8_sub_sat(wav_u16x8_t a, wav_u16x8_t b) {
2930+
#if __has_builtin(__builtin_wasm_sub_sat_u_i16x8)
2931+
return (wav_u16x8_t) { __builtin_wasm_sub_sat_u_i16x8(a.values, b.values) };
2932+
#else
2933+
return (wav_u16x8_t) { __builtin_wasm_sub_saturate_u_i16x8(a.values, b.values) };
2934+
#endif
29032935
}
29042936

29052937
#if WAV_OVERLOADS == WAV_OVERLOADS_C11
2906-
#define wav_sub_saturate(a, b) \
2938+
#define wav_sub_sat(a, b) \
29072939
(_Generic((a), \
2908-
wav_i8x16_t: wav_i8x16_sub_saturate, \
2909-
wav_i16x8_t: wav_i16x8_sub_saturate, \
2910-
wav_u8x16_t: wav_u8x16_sub_saturate, \
2911-
wav_u16x8_t: wav_u16x8_sub_saturate) (a, b))
2940+
wav_i8x16_t: wav_i8x16_sub_sat, \
2941+
wav_i16x8_t: wav_i16x8_sub_sat, \
2942+
wav_u8x16_t: wav_u8x16_sub_sat, \
2943+
wav_u16x8_t: wav_u16x8_sub_sat) (a, b))
29122944
#elif WAV_OVERLOADS == WAV_OVERLOADS_CXX
2913-
WAV_FUNCTION_ATTRIBUTES wav_i8x16_t wav_sub_saturate(wav_i8x16_t a, wav_i8x16_t b) { return wav_i8x16_sub_saturate(a, b); }
2914-
WAV_FUNCTION_ATTRIBUTES wav_i16x8_t wav_sub_saturate(wav_i16x8_t a, wav_i16x8_t b) { return wav_i16x8_sub_saturate(a, b); }
2915-
WAV_FUNCTION_ATTRIBUTES wav_u8x16_t wav_sub_saturate(wav_u8x16_t a, wav_u8x16_t b) { return wav_u8x16_sub_saturate(a, b); }
2916-
WAV_FUNCTION_ATTRIBUTES wav_u16x8_t wav_sub_saturate(wav_u16x8_t a, wav_u16x8_t b) { return wav_u16x8_sub_saturate(a, b); }
2945+
WAV_FUNCTION_ATTRIBUTES wav_i8x16_t wav_sub_sat(wav_i8x16_t a, wav_i8x16_t b) { return wav_i8x16_sub_sat(a, b); }
2946+
WAV_FUNCTION_ATTRIBUTES wav_i16x8_t wav_sub_sat(wav_i16x8_t a, wav_i16x8_t b) { return wav_i16x8_sub_sat(a, b); }
2947+
WAV_FUNCTION_ATTRIBUTES wav_u8x16_t wav_sub_sat(wav_u8x16_t a, wav_u8x16_t b) { return wav_u8x16_sub_sat(a, b); }
2948+
WAV_FUNCTION_ATTRIBUTES wav_u16x8_t wav_sub_sat(wav_u16x8_t a, wav_u16x8_t b) { return wav_u16x8_sub_sat(a, b); }
29172949
#endif
29182950

2919-
/* q15mulr_saturate -- Saturating integer Q-format rounding multiplication
2951+
/* q15mulr_sat -- Saturating integer Q-format rounding multiplication
29202952
*
29212953
* Lane-wise saturating rounding multiplication in Q15 format
29222954
*/
@@ -2925,8 +2957,12 @@ wav_u16x8_sub_saturate(wav_u16x8_t a, wav_u16x8_t b) {
29252957

29262958
WAV_FUNCTION_ATTRIBUTES
29272959
wav_i16x8_t
2928-
wav_i16x8_q15mulr_saturate(wav_i16x8_t a, wav_i16x8_t b) {
2929-
return (wav_i16x8_t) { __builtin_wasm_q15mulr_saturate_s_i16x8(a.values, b.values) };
2960+
wav_i16x8_q15mulr_sat(wav_i16x8_t a, wav_i16x8_t b) {
2961+
#if __has_builtin(__builtin_wasm_q15mulr_sat_s_i16x8)
2962+
return (wav_i16x8_t) { __builtin_wasm_q15mulr_sat_s_i16x8(a.values, b.values) };
2963+
#else
2964+
return (wav_i16x8_t) { __builtin_wasm_q15mulr_saturate_s_i16x8(a.values, b.values) };
2965+
#endif
29302966
}
29312967

29322968
#endif

0 commit comments

Comments
 (0)