@@ -33,6 +33,7 @@ typedef unsigned long long __u64x2
33
33
__attribute__((__vector_size__ (16 ), __aligned__ (16 )));
34
34
typedef float __f32x4 __attribute__((__vector_size__ (16 ), __aligned__ (16 )));
35
35
typedef double __f64x2 __attribute__((__vector_size__ (16 ), __aligned__ (16 )));
36
+ typedef __fp16 __f16x8 __attribute__((__vector_size__ (16 ), __aligned__ (16 )));
36
37
37
38
typedef signed char __i8x8 __attribute__((__vector_size__ (8 ), __aligned__ (8 )));
38
39
typedef unsigned char __u8x8
@@ -1878,6 +1879,152 @@ wasm_i32x4_relaxed_dot_i8x16_i7x16_add(v128_t __a, v128_t __b, v128_t __c) {
1878
1879
(__i8x16 )__a , (__i8x16 )__b , (__i32x4 )__c );
1879
1880
}
1880
1881
1882
+ // FP16 intrinsics
1883
+ #define __FP16_FN_ATTRS \
1884
+ __attribute__((__always_inline__, __nodebug__, __target__("fp16"), \
1885
+ __min_vector_width__(128)))
1886
+
1887
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_splat (float __a ) {
1888
+ return (v128_t )__builtin_wasm_splat_f16x8 (__a );
1889
+ }
1890
+
1891
+ static __inline__ float __FP16_FN_ATTRS wasm_f16x8_extract_lane (v128_t __a ,
1892
+ int __i )
1893
+ __REQUIRE_CONSTANT (__i ) {
1894
+ return __builtin_wasm_extract_lane_f16x8 ((__f16x8 )__a , __i );
1895
+ }
1896
+
1897
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_replace_lane (v128_t __a ,
1898
+ int __i ,
1899
+ float __b )
1900
+ __REQUIRE_CONSTANT (__i ) {
1901
+ return (v128_t )__builtin_wasm_replace_lane_f16x8 ((__f16x8 )__a , __i , __b );
1902
+ }
1903
+
1904
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_abs (v128_t __a ) {
1905
+ return (v128_t )__builtin_wasm_abs_f16x8 ((__f16x8 )__a );
1906
+ }
1907
+
1908
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_neg (v128_t __a ) {
1909
+ return (v128_t )(- (__f16x8 )__a );
1910
+ }
1911
+
1912
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_sqrt (v128_t __a ) {
1913
+ return (v128_t )__builtin_wasm_sqrt_f16x8 ((__f16x8 )__a );
1914
+ }
1915
+
1916
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_ceil (v128_t __a ) {
1917
+ return (v128_t )__builtin_wasm_ceil_f16x8 ((__f16x8 )__a );
1918
+ }
1919
+
1920
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_floor (v128_t __a ) {
1921
+ return (v128_t )__builtin_wasm_floor_f16x8 ((__f16x8 )__a );
1922
+ }
1923
+
1924
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_trunc (v128_t __a ) {
1925
+ return (v128_t )__builtin_wasm_trunc_f16x8 ((__f16x8 )__a );
1926
+ }
1927
+
1928
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_nearest (v128_t __a ) {
1929
+ return (v128_t )__builtin_wasm_nearest_f16x8 ((__f16x8 )__a );
1930
+ }
1931
+
1932
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_eq (v128_t __a , v128_t __b ) {
1933
+ return (v128_t )((__f16x8 )__a == (__f16x8 )__b );
1934
+ }
1935
+
1936
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_ne (v128_t __a , v128_t __b ) {
1937
+ return (v128_t )((__f16x8 )__a != (__f16x8 )__b );
1938
+ }
1939
+
1940
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_lt (v128_t __a , v128_t __b ) {
1941
+ return (v128_t )((__f16x8 )__a < (__f16x8 )__b );
1942
+ }
1943
+
1944
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_gt (v128_t __a , v128_t __b ) {
1945
+ return (v128_t )((__f16x8 )__a > (__f16x8 )__b );
1946
+ }
1947
+
1948
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_le (v128_t __a , v128_t __b ) {
1949
+ return (v128_t )((__f16x8 )__a <= (__f16x8 )__b );
1950
+ }
1951
+
1952
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_ge (v128_t __a , v128_t __b ) {
1953
+ return (v128_t )((__f16x8 )__a >= (__f16x8 )__b );
1954
+ }
1955
+
1956
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_add (v128_t __a ,
1957
+ v128_t __b ) {
1958
+ return (v128_t )((__f16x8 )__a + (__f16x8 )__b );
1959
+ }
1960
+
1961
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_sub (v128_t __a ,
1962
+ v128_t __b ) {
1963
+ return (v128_t )((__f16x8 )__a - (__f16x8 )__b );
1964
+ }
1965
+
1966
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_mul (v128_t __a ,
1967
+ v128_t __b ) {
1968
+ return (v128_t )((__f16x8 )__a * (__f16x8 )__b );
1969
+ }
1970
+
1971
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_div (v128_t __a ,
1972
+ v128_t __b ) {
1973
+ return (v128_t )((__f16x8 )__a / (__f16x8 )__b );
1974
+ }
1975
+
1976
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_min (v128_t __a ,
1977
+ v128_t __b ) {
1978
+ return (v128_t )__builtin_wasm_min_f16x8 ((__f16x8 )__a , (__f16x8 )__b );
1979
+ }
1980
+
1981
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_max (v128_t __a ,
1982
+ v128_t __b ) {
1983
+ return (v128_t )__builtin_wasm_max_f16x8 ((__f16x8 )__a , (__f16x8 )__b );
1984
+ }
1985
+
1986
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_pmin (v128_t __a ,
1987
+ v128_t __b ) {
1988
+ return (v128_t )__builtin_wasm_pmin_f16x8 ((__f16x8 )__a , (__f16x8 )__b );
1989
+ }
1990
+
1991
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_pmax (v128_t __a ,
1992
+ v128_t __b ) {
1993
+ return (v128_t )__builtin_wasm_pmax_f16x8 ((__f16x8 )__a , (__f16x8 )__b );
1994
+ }
1995
+
1996
+ static __inline__ v128_t __FP16_FN_ATTRS
1997
+ wasm_i16x8_trunc_sat_f16x8 (v128_t __a ) {
1998
+ return (v128_t )__builtin_wasm_trunc_saturate_s_i16x8_f16x8 ((__f16x8 )__a );
1999
+ }
2000
+
2001
+ static __inline__ v128_t __FP16_FN_ATTRS
2002
+ wasm_u16x8_trunc_sat_f16x8 (v128_t __a ) {
2003
+ return (v128_t )__builtin_wasm_trunc_saturate_u_i16x8_f16x8 ((__f16x8 )__a );
2004
+ }
2005
+
2006
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_convert_i16x8 (v128_t __a ) {
2007
+ return (v128_t ) __builtin_convertvector ((__i16x8 )__a , __f16x8 );
2008
+ }
2009
+
2010
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_convert_u16x8 (v128_t __a ) {
2011
+ return (v128_t ) __builtin_convertvector ((__u16x8 )__a , __f16x8 );
2012
+ }
2013
+
2014
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_relaxed_madd (v128_t __a ,
2015
+ v128_t __b ,
2016
+ v128_t __c ) {
2017
+ return (v128_t )__builtin_wasm_relaxed_madd_f16x8 ((__f16x8 )__a , (__f16x8 )__b ,
2018
+ (__f16x8 )__c );
2019
+ }
2020
+
2021
+ static __inline__ v128_t __FP16_FN_ATTRS wasm_f16x8_relaxed_nmadd (v128_t __a ,
2022
+ v128_t __b ,
2023
+ v128_t __c ) {
2024
+ return (v128_t )__builtin_wasm_relaxed_nmadd_f16x8 ((__f16x8 )__a , (__f16x8 )__b ,
2025
+ (__f16x8 )__c );
2026
+ }
2027
+
1881
2028
// Deprecated intrinsics
1882
2029
1883
2030
static __inline__ v128_t __DEPRECATED_FN_ATTRS ("wasm_i8x16_swizzle ")
0 commit comments