@@ -2830,93 +2830,125 @@ wav_i16x8_dot(wav_i16x8_t a, wav_i16x8_t b) {
2830
2830
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 ); }
2831
2831
#endif
2832
2832
2833
- /* add_saturate -- Saturating integer addition
2833
+ /* add_sat -- Saturating integer addition
2834
2834
*
2835
2835
* Lane-wise saturating addition.
2836
2836
*/
2837
2837
2838
2838
WAV_FUNCTION_ATTRIBUTES
2839
2839
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
2842
2846
}
2843
2847
2844
2848
WAV_FUNCTION_ATTRIBUTES
2845
2849
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
2848
2856
}
2849
2857
2850
2858
WAV_FUNCTION_ATTRIBUTES
2851
2859
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
2854
2866
}
2855
2867
2856
2868
WAV_FUNCTION_ATTRIBUTES
2857
2869
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
2860
2876
}
2861
2877
2862
2878
#if WAV_OVERLOADS == WAV_OVERLOADS_C11
2863
- #define wav_add_saturate (a , b ) \
2879
+ #define wav_add_sat (a , b ) \
2864
2880
(_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))
2869
2885
#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 ); }
2874
2890
#endif
2875
2891
2876
- /* sub_saturate -- Saturating integer subtraction
2892
+ /* sub_sat -- Saturating integer subtraction
2877
2893
*
2878
2894
* Lane-wise saturating subtraction.
2879
2895
*/
2880
2896
2881
2897
WAV_FUNCTION_ATTRIBUTES
2882
2898
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
2885
2905
}
2886
2906
2887
2907
WAV_FUNCTION_ATTRIBUTES
2888
2908
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
2891
2915
}
2892
2916
2893
2917
WAV_FUNCTION_ATTRIBUTES
2894
2918
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
2897
2925
}
2898
2926
2899
2927
WAV_FUNCTION_ATTRIBUTES
2900
2928
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
2903
2935
}
2904
2936
2905
2937
#if WAV_OVERLOADS == WAV_OVERLOADS_C11
2906
- #define wav_sub_saturate (a , b ) \
2938
+ #define wav_sub_sat (a , b ) \
2907
2939
(_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))
2912
2944
#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 ); }
2917
2949
#endif
2918
2950
2919
- /* q15mulr_saturate -- Saturating integer Q-format rounding multiplication
2951
+ /* q15mulr_sat -- Saturating integer Q-format rounding multiplication
2920
2952
*
2921
2953
* Lane-wise saturating rounding multiplication in Q15 format
2922
2954
*/
@@ -2925,8 +2957,12 @@ wav_u16x8_sub_saturate(wav_u16x8_t a, wav_u16x8_t b) {
2925
2957
2926
2958
WAV_FUNCTION_ATTRIBUTES
2927
2959
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
2930
2966
}
2931
2967
2932
2968
#endif
0 commit comments