1/*===---- wasm_simd128.h - WebAssembly portable SIMD intrinsics ------------=== 2 * 3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 * See https://llvm.org/LICENSE.txt for license information. 5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 * 7 *===-----------------------------------------------------------------------=== 8 */ 9 10#ifndef __WASM_SIMD128_H 11#define __WASM_SIMD128_H 12 13#include <stdbool.h> 14#include <stdint.h> 15 16// User-facing type 17typedef int32_t v128_t __attribute__((__vector_size__(16), __aligned__(16))); 18 19// Internal types determined by clang builtin definitions 20typedef int32_t __v128_u __attribute__((__vector_size__(16), __aligned__(1))); 21typedef signed char __i8x16 22 __attribute__((__vector_size__(16), __aligned__(16))); 23typedef unsigned char __u8x16 24 __attribute__((__vector_size__(16), __aligned__(16))); 25typedef short __i16x8 __attribute__((__vector_size__(16), __aligned__(16))); 26typedef unsigned short __u16x8 27 __attribute__((__vector_size__(16), __aligned__(16))); 28typedef int __i32x4 __attribute__((__vector_size__(16), __aligned__(16))); 29typedef unsigned int __u32x4 30 __attribute__((__vector_size__(16), __aligned__(16))); 31typedef long long __i64x2 __attribute__((__vector_size__(16), __aligned__(16))); 32typedef unsigned long long __u64x2 33 __attribute__((__vector_size__(16), __aligned__(16))); 34typedef float __f32x4 __attribute__((__vector_size__(16), __aligned__(16))); 35typedef double __f64x2 __attribute__((__vector_size__(16), __aligned__(16))); 36 37typedef signed char __i8x8 __attribute__((__vector_size__(8), __aligned__(8))); 38typedef unsigned char __u8x8 39 __attribute__((__vector_size__(8), __aligned__(8))); 40typedef short __i16x4 __attribute__((__vector_size__(8), __aligned__(8))); 41typedef unsigned short __u16x4 42 __attribute__((__vector_size__(8), __aligned__(8))); 43typedef int __i32x2 __attribute__((__vector_size__(8), __aligned__(8))); 44typedef unsigned int __u32x2 45 __attribute__((__vector_size__(8), __aligned__(8))); 46typedef float __f32x2 __attribute__((__vector_size__(8), __aligned__(8))); 47 48#define __DEFAULT_FN_ATTRS \ 49 __attribute__((__always_inline__, __nodebug__, __target__("simd128"), \ 50 __min_vector_width__(128))) 51 52#define __REQUIRE_CONSTANT(c) \ 53 __attribute__((__diagnose_if__(!__builtin_constant_p(c), \ 54 #c " must be constant", "error"))) 55 56static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_v128_load(const void *__mem) { 57 // UB-free unaligned access copied from xmmintrin.h 58 struct __wasm_v128_load_struct { 59 __v128_u __v; 60 } __attribute__((__packed__, __may_alias__)); 61 return ((const struct __wasm_v128_load_struct *)__mem)->__v; 62} 63 64static __inline__ v128_t __DEFAULT_FN_ATTRS 65wasm_v128_load8_splat(const void *__mem) { 66 struct __wasm_v128_load8_splat_struct { 67 uint8_t __v; 68 } __attribute__((__packed__, __may_alias__)); 69 uint8_t __v = ((const struct __wasm_v128_load8_splat_struct *)__mem)->__v; 70 return (v128_t)(__u8x16){__v, __v, __v, __v, __v, __v, __v, __v, 71 __v, __v, __v, __v, __v, __v, __v, __v}; 72} 73 74static __inline__ v128_t __DEFAULT_FN_ATTRS 75wasm_v128_load16_splat(const void *__mem) { 76 struct __wasm_v128_load16_splat_struct { 77 uint16_t __v; 78 } __attribute__((__packed__, __may_alias__)); 79 uint16_t __v = ((const struct __wasm_v128_load16_splat_struct *)__mem)->__v; 80 return (v128_t)(__u16x8){__v, __v, __v, __v, __v, __v, __v, __v}; 81} 82 83static __inline__ v128_t __DEFAULT_FN_ATTRS 84wasm_v128_load32_splat(const void *__mem) { 85 struct __wasm_v128_load32_splat_struct { 86 uint32_t __v; 87 } __attribute__((__packed__, __may_alias__)); 88 uint32_t __v = ((const struct __wasm_v128_load32_splat_struct *)__mem)->__v; 89 return (v128_t)(__u32x4){__v, __v, __v, __v}; 90} 91 92static __inline__ v128_t __DEFAULT_FN_ATTRS 93wasm_v128_load64_splat(const void *__mem) { 94 struct __wasm_v128_load64_splat_struct { 95 uint64_t __v; 96 } __attribute__((__packed__, __may_alias__)); 97 uint64_t __v = ((const struct __wasm_v128_load64_splat_struct *)__mem)->__v; 98 return (v128_t)(__u64x2){__v, __v}; 99} 100 101static __inline__ v128_t __DEFAULT_FN_ATTRS 102wasm_i16x8_load8x8(const void *__mem) { 103 struct __wasm_i16x8_load8x8_struct { 104 __i8x8 __v; 105 } __attribute__((__packed__, __may_alias__)); 106 __i8x8 __v = ((const struct __wasm_i16x8_load8x8_struct *)__mem)->__v; 107 return (v128_t) __builtin_convertvector(__v, __i16x8); 108} 109 110static __inline__ v128_t __DEFAULT_FN_ATTRS 111wasm_u16x8_load8x8(const void *__mem) { 112 struct __wasm_u16x8_load8x8_struct { 113 __u8x8 __v; 114 } __attribute__((__packed__, __may_alias__)); 115 __u8x8 __v = ((const struct __wasm_u16x8_load8x8_struct *)__mem)->__v; 116 return (v128_t) __builtin_convertvector(__v, __u16x8); 117} 118 119static __inline__ v128_t __DEFAULT_FN_ATTRS 120wasm_i32x4_load16x4(const void *__mem) { 121 struct __wasm_i32x4_load16x4_struct { 122 __i16x4 __v; 123 } __attribute__((__packed__, __may_alias__)); 124 __i16x4 __v = ((const struct __wasm_i32x4_load16x4_struct *)__mem)->__v; 125 return (v128_t) __builtin_convertvector(__v, __i32x4); 126} 127 128static __inline__ v128_t __DEFAULT_FN_ATTRS 129wasm_u32x4_load16x4(const void *__mem) { 130 struct __wasm_u32x4_load16x4_struct { 131 __u16x4 __v; 132 } __attribute__((__packed__, __may_alias__)); 133 __u16x4 __v = ((const struct __wasm_u32x4_load16x4_struct *)__mem)->__v; 134 return (v128_t) __builtin_convertvector(__v, __u32x4); 135} 136 137static __inline__ v128_t __DEFAULT_FN_ATTRS 138wasm_i64x2_load32x2(const void *__mem) { 139 struct __wasm_i64x2_load32x2_struct { 140 __i32x2 __v; 141 } __attribute__((__packed__, __may_alias__)); 142 __i32x2 __v = ((const struct __wasm_i64x2_load32x2_struct *)__mem)->__v; 143 return (v128_t) __builtin_convertvector(__v, __i64x2); 144} 145 146static __inline__ v128_t __DEFAULT_FN_ATTRS 147wasm_u64x2_load32x2(const void *__mem) { 148 struct __wasm_u64x2_load32x2_struct { 149 __u32x2 __v; 150 } __attribute__((__packed__, __may_alias__)); 151 __u32x2 __v = ((const struct __wasm_u64x2_load32x2_struct *)__mem)->__v; 152 return (v128_t) __builtin_convertvector(__v, __u64x2); 153} 154 155static __inline__ v128_t __DEFAULT_FN_ATTRS 156wasm_v128_load32_zero(const void *__mem) { 157 struct __wasm_v128_load32_zero_struct { 158 int32_t __v; 159 } __attribute__((__packed__, __may_alias__)); 160 int32_t __v = ((const struct __wasm_v128_load32_zero_struct *)__mem)->__v; 161 return (v128_t)(__i32x4){__v, 0, 0, 0}; 162} 163 164static __inline__ v128_t __DEFAULT_FN_ATTRS 165wasm_v128_load64_zero(const void *__mem) { 166 struct __wasm_v128_load64_zero_struct { 167 int64_t __v; 168 } __attribute__((__packed__, __may_alias__)); 169 int64_t __v = ((const struct __wasm_v128_load64_zero_struct *)__mem)->__v; 170 return (v128_t)(__i64x2){__v, 0}; 171} 172 173static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_v128_load8_lane( 174 const void *__mem, v128_t __vec, int __i) __REQUIRE_CONSTANT(__i) { 175 struct __wasm_v128_load8_lane_struct { 176 int8_t __v; 177 } __attribute__((__packed__, __may_alias__)); 178 int8_t __v = ((const struct __wasm_v128_load8_lane_struct *)__mem)->__v; 179 __i8x16 __ret = (__i8x16)__vec; 180 __ret[__i] = __v; 181 return (v128_t)__ret; 182} 183 184static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_v128_load16_lane( 185 const void *__mem, v128_t __vec, int __i) __REQUIRE_CONSTANT(__i) { 186 struct __wasm_v128_load16_lane_struct { 187 int16_t __v; 188 } __attribute__((__packed__, __may_alias__)); 189 int16_t __v = ((const struct __wasm_v128_load16_lane_struct *)__mem)->__v; 190 __i16x8 __ret = (__i16x8)__vec; 191 __ret[__i] = __v; 192 return (v128_t)__ret; 193} 194 195static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_v128_load32_lane( 196 const void *__mem, v128_t __vec, int __i) __REQUIRE_CONSTANT(__i) { 197 struct __wasm_v128_load32_lane_struct { 198 int32_t __v; 199 } __attribute__((__packed__, __may_alias__)); 200 int32_t __v = ((const struct __wasm_v128_load32_lane_struct *)__mem)->__v; 201 __i32x4 __ret = (__i32x4)__vec; 202 __ret[__i] = __v; 203 return (v128_t)__ret; 204} 205 206static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_v128_load64_lane( 207 const void *__mem, v128_t __vec, int __i) __REQUIRE_CONSTANT(__i) { 208 struct __wasm_v128_load64_lane_struct { 209 int64_t __v; 210 } __attribute__((__packed__, __may_alias__)); 211 int64_t __v = ((const struct __wasm_v128_load64_lane_struct *)__mem)->__v; 212 __i64x2 __ret = (__i64x2)__vec; 213 __ret[__i] = __v; 214 return (v128_t)__ret; 215} 216 217static __inline__ void __DEFAULT_FN_ATTRS wasm_v128_store(void *__mem, 218 v128_t __a) { 219 // UB-free unaligned access copied from xmmintrin.h 220 struct __wasm_v128_store_struct { 221 __v128_u __v; 222 } __attribute__((__packed__, __may_alias__)); 223 ((struct __wasm_v128_store_struct *)__mem)->__v = __a; 224} 225 226static __inline__ void __DEFAULT_FN_ATTRS wasm_v128_store8_lane(void *__mem, 227 v128_t __vec, 228 int __i) 229 __REQUIRE_CONSTANT(__i) { 230 struct __wasm_v128_store8_lane_struct { 231 int8_t __v; 232 } __attribute__((__packed__, __may_alias__)); 233 ((struct __wasm_v128_store8_lane_struct *)__mem)->__v = ((__i8x16)__vec)[__i]; 234} 235 236static __inline__ void __DEFAULT_FN_ATTRS wasm_v128_store16_lane(void *__mem, 237 v128_t __vec, 238 int __i) 239 __REQUIRE_CONSTANT(__i) { 240 struct __wasm_v128_store16_lane_struct { 241 int16_t __v; 242 } __attribute__((__packed__, __may_alias__)); 243 ((struct __wasm_v128_store16_lane_struct *)__mem)->__v = 244 ((__i16x8)__vec)[__i]; 245} 246 247static __inline__ void __DEFAULT_FN_ATTRS wasm_v128_store32_lane(void *__mem, 248 v128_t __vec, 249 int __i) 250 __REQUIRE_CONSTANT(__i) { 251 struct __wasm_v128_store32_lane_struct { 252 int32_t __v; 253 } __attribute__((__packed__, __may_alias__)); 254 ((struct __wasm_v128_store32_lane_struct *)__mem)->__v = 255 ((__i32x4)__vec)[__i]; 256} 257 258static __inline__ void __DEFAULT_FN_ATTRS wasm_v128_store64_lane(void *__mem, 259 v128_t __vec, 260 int __i) 261 __REQUIRE_CONSTANT(__i) { 262 struct __wasm_v128_store64_lane_struct { 263 int64_t __v; 264 } __attribute__((__packed__, __may_alias__)); 265 ((struct __wasm_v128_store64_lane_struct *)__mem)->__v = 266 ((__i64x2)__vec)[__i]; 267} 268 269static __inline__ v128_t __DEFAULT_FN_ATTRS 270wasm_i8x16_make(int8_t __c0, int8_t __c1, int8_t __c2, int8_t __c3, int8_t __c4, 271 int8_t __c5, int8_t __c6, int8_t __c7, int8_t __c8, int8_t __c9, 272 int8_t __c10, int8_t __c11, int8_t __c12, int8_t __c13, 273 int8_t __c14, int8_t __c15) { 274 return (v128_t)(__i8x16){__c0, __c1, __c2, __c3, __c4, __c5, 275 __c6, __c7, __c8, __c9, __c10, __c11, 276 __c12, __c13, __c14, __c15}; 277} 278 279static __inline__ v128_t __DEFAULT_FN_ATTRS 280wasm_u8x16_make(uint8_t __c0, uint8_t __c1, uint8_t __c2, uint8_t __c3, 281 uint8_t __c4, uint8_t __c5, uint8_t __c6, uint8_t __c7, 282 uint8_t __c8, uint8_t __c9, uint8_t __c10, uint8_t __c11, 283 uint8_t __c12, uint8_t __c13, uint8_t __c14, uint8_t __c15) { 284 return (v128_t)(__u8x16){__c0, __c1, __c2, __c3, __c4, __c5, 285 __c6, __c7, __c8, __c9, __c10, __c11, 286 __c12, __c13, __c14, __c15}; 287} 288 289static __inline__ v128_t __DEFAULT_FN_ATTRS 290wasm_i16x8_make(int16_t __c0, int16_t __c1, int16_t __c2, int16_t __c3, 291 int16_t __c4, int16_t __c5, int16_t __c6, int16_t __c7) { 292 return (v128_t)(__i16x8){__c0, __c1, __c2, __c3, __c4, __c5, __c6, __c7}; 293} 294 295static __inline__ v128_t __DEFAULT_FN_ATTRS 296wasm_u16x8_make(uint16_t __c0, uint16_t __c1, uint16_t __c2, uint16_t __c3, 297 uint16_t __c4, uint16_t __c5, uint16_t __c6, uint16_t __c7) { 298 return (v128_t)(__u16x8){__c0, __c1, __c2, __c3, __c4, __c5, __c6, __c7}; 299} 300 301static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_make(int32_t __c0, 302 int32_t __c1, 303 int32_t __c2, 304 int32_t __c3) { 305 return (v128_t)(__i32x4){__c0, __c1, __c2, __c3}; 306} 307 308static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_make(uint32_t __c0, 309 uint32_t __c1, 310 uint32_t __c2, 311 uint32_t __c3) { 312 return (v128_t)(__u32x4){__c0, __c1, __c2, __c3}; 313} 314 315static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_make(int64_t __c0, 316 int64_t __c1) { 317 return (v128_t)(__i64x2){__c0, __c1}; 318} 319 320static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u64x2_make(uint64_t __c0, 321 uint64_t __c1) { 322 return (v128_t)(__u64x2){__c0, __c1}; 323} 324 325static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_make(float __c0, 326 float __c1, 327 float __c2, 328 float __c3) { 329 return (v128_t)(__f32x4){__c0, __c1, __c2, __c3}; 330} 331 332static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_make(double __c0, 333 double __c1) { 334 return (v128_t)(__f64x2){__c0, __c1}; 335} 336 337static __inline__ v128_t __DEFAULT_FN_ATTRS 338wasm_i8x16_const(int8_t __c0, int8_t __c1, int8_t __c2, int8_t __c3, 339 int8_t __c4, int8_t __c5, int8_t __c6, int8_t __c7, 340 int8_t __c8, int8_t __c9, int8_t __c10, int8_t __c11, 341 int8_t __c12, int8_t __c13, int8_t __c14, int8_t __c15) 342 __REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) __REQUIRE_CONSTANT(__c2) 343 __REQUIRE_CONSTANT(__c3) __REQUIRE_CONSTANT(__c4) 344 __REQUIRE_CONSTANT(__c5) __REQUIRE_CONSTANT(__c6) 345 __REQUIRE_CONSTANT(__c7) __REQUIRE_CONSTANT(__c8) 346 __REQUIRE_CONSTANT(__c9) __REQUIRE_CONSTANT(__c10) 347 __REQUIRE_CONSTANT(__c11) __REQUIRE_CONSTANT(__c12) 348 __REQUIRE_CONSTANT(__c13) __REQUIRE_CONSTANT(__c14) 349 __REQUIRE_CONSTANT(__c15) { 350 return (v128_t)(__i8x16){__c0, __c1, __c2, __c3, __c4, __c5, 351 __c6, __c7, __c8, __c9, __c10, __c11, 352 __c12, __c13, __c14, __c15}; 353} 354 355static __inline__ v128_t __DEFAULT_FN_ATTRS 356wasm_u8x16_const(uint8_t __c0, uint8_t __c1, uint8_t __c2, uint8_t __c3, 357 uint8_t __c4, uint8_t __c5, uint8_t __c6, uint8_t __c7, 358 uint8_t __c8, uint8_t __c9, uint8_t __c10, uint8_t __c11, 359 uint8_t __c12, uint8_t __c13, uint8_t __c14, uint8_t __c15) 360 __REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) __REQUIRE_CONSTANT(__c2) 361 __REQUIRE_CONSTANT(__c3) __REQUIRE_CONSTANT(__c4) 362 __REQUIRE_CONSTANT(__c5) __REQUIRE_CONSTANT(__c6) 363 __REQUIRE_CONSTANT(__c7) __REQUIRE_CONSTANT(__c8) 364 __REQUIRE_CONSTANT(__c9) __REQUIRE_CONSTANT(__c10) 365 __REQUIRE_CONSTANT(__c11) __REQUIRE_CONSTANT(__c12) 366 __REQUIRE_CONSTANT(__c13) __REQUIRE_CONSTANT(__c14) 367 __REQUIRE_CONSTANT(__c15) { 368 return (v128_t)(__u8x16){__c0, __c1, __c2, __c3, __c4, __c5, 369 __c6, __c7, __c8, __c9, __c10, __c11, 370 __c12, __c13, __c14, __c15}; 371} 372 373static __inline__ v128_t __DEFAULT_FN_ATTRS 374wasm_i16x8_const(int16_t __c0, int16_t __c1, int16_t __c2, int16_t __c3, 375 int16_t __c4, int16_t __c5, int16_t __c6, int16_t __c7) 376 __REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) __REQUIRE_CONSTANT(__c2) 377 __REQUIRE_CONSTANT(__c3) __REQUIRE_CONSTANT(__c4) 378 __REQUIRE_CONSTANT(__c5) __REQUIRE_CONSTANT(__c6) 379 __REQUIRE_CONSTANT(__c7) { 380 return (v128_t)(__i16x8){__c0, __c1, __c2, __c3, __c4, __c5, __c6, __c7}; 381} 382 383static __inline__ v128_t __DEFAULT_FN_ATTRS 384wasm_u16x8_const(uint16_t __c0, uint16_t __c1, uint16_t __c2, uint16_t __c3, 385 uint16_t __c4, uint16_t __c5, uint16_t __c6, uint16_t __c7) 386 __REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) __REQUIRE_CONSTANT(__c2) 387 __REQUIRE_CONSTANT(__c3) __REQUIRE_CONSTANT(__c4) 388 __REQUIRE_CONSTANT(__c5) __REQUIRE_CONSTANT(__c6) 389 __REQUIRE_CONSTANT(__c7) { 390 return (v128_t)(__u16x8){__c0, __c1, __c2, __c3, __c4, __c5, __c6, __c7}; 391} 392 393static __inline__ v128_t __DEFAULT_FN_ATTRS 394wasm_i32x4_const(int32_t __c0, int32_t __c1, int32_t __c2, int32_t __c3) 395 __REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) __REQUIRE_CONSTANT(__c2) 396 __REQUIRE_CONSTANT(__c3) { 397 return (v128_t)(__i32x4){__c0, __c1, __c2, __c3}; 398} 399 400static __inline__ v128_t __DEFAULT_FN_ATTRS 401wasm_u32x4_const(uint32_t __c0, uint32_t __c1, uint32_t __c2, uint32_t __c3) 402 __REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) __REQUIRE_CONSTANT(__c2) 403 __REQUIRE_CONSTANT(__c3) { 404 return (v128_t)(__u32x4){__c0, __c1, __c2, __c3}; 405} 406 407static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_const(int64_t __c0, 408 int64_t __c1) 409 __REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) { 410 return (v128_t)(__i64x2){__c0, __c1}; 411} 412 413static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u64x2_const(uint64_t __c0, 414 uint64_t __c1) 415 __REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) { 416 return (v128_t)(__u64x2){__c0, __c1}; 417} 418 419static __inline__ v128_t __DEFAULT_FN_ATTRS 420wasm_f32x4_const(float __c0, float __c1, float __c2, float __c3) 421 __REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) __REQUIRE_CONSTANT(__c2) 422 __REQUIRE_CONSTANT(__c3) { 423 return (v128_t)(__f32x4){__c0, __c1, __c2, __c3}; 424} 425 426static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_const(double __c0, 427 double __c1) 428 __REQUIRE_CONSTANT(__c0) __REQUIRE_CONSTANT(__c1) { 429 return (v128_t)(__f64x2){__c0, __c1}; 430} 431 432static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_const_splat(int8_t __c) 433 __REQUIRE_CONSTANT(__c) { 434 return (v128_t)(__i8x16){__c, __c, __c, __c, __c, __c, __c, __c, 435 __c, __c, __c, __c, __c, __c, __c, __c}; 436} 437 438static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_const_splat(uint8_t __c) 439 __REQUIRE_CONSTANT(__c) { 440 return (v128_t)(__u8x16){__c, __c, __c, __c, __c, __c, __c, __c, 441 __c, __c, __c, __c, __c, __c, __c, __c}; 442} 443 444static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_const_splat(int16_t __c) 445 __REQUIRE_CONSTANT(__c) { 446 return (v128_t)(__i16x8){__c, __c, __c, __c, __c, __c, __c, __c}; 447} 448 449static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_const_splat(uint16_t __c) 450 __REQUIRE_CONSTANT(__c) { 451 return (v128_t)(__u16x8){__c, __c, __c, __c, __c, __c, __c, __c}; 452} 453 454static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_const_splat(int32_t __c) 455 __REQUIRE_CONSTANT(__c) { 456 return (v128_t)(__i32x4){__c, __c, __c, __c}; 457} 458 459static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_const_splat(uint32_t __c) 460 __REQUIRE_CONSTANT(__c) { 461 return (v128_t)(__u32x4){__c, __c, __c, __c}; 462} 463 464static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_const_splat(int64_t __c) 465 __REQUIRE_CONSTANT(__c) { 466 return (v128_t)(__i64x2){__c, __c}; 467} 468 469static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u64x2_const_splat(uint64_t __c) 470 __REQUIRE_CONSTANT(__c) { 471 return (v128_t)(__u64x2){__c, __c}; 472} 473 474static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_const_splat(float __c) 475 __REQUIRE_CONSTANT(__c) { 476 return (v128_t)(__f32x4){__c, __c, __c, __c}; 477} 478 479static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_const_splat(double __c) 480 __REQUIRE_CONSTANT(__c) { 481 return (v128_t)(__f64x2){__c, __c}; 482} 483 484static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_splat(int8_t __a) { 485 return (v128_t)(__i8x16){__a, __a, __a, __a, __a, __a, __a, __a, 486 __a, __a, __a, __a, __a, __a, __a, __a}; 487} 488 489static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_splat(uint8_t __a) { 490 return (v128_t)(__u8x16){__a, __a, __a, __a, __a, __a, __a, __a, 491 __a, __a, __a, __a, __a, __a, __a, __a}; 492} 493 494static __inline__ int8_t __DEFAULT_FN_ATTRS wasm_i8x16_extract_lane(v128_t __a, 495 int __i) 496 __REQUIRE_CONSTANT(__i) { 497 return ((__i8x16)__a)[__i]; 498} 499 500static __inline__ uint8_t __DEFAULT_FN_ATTRS wasm_u8x16_extract_lane(v128_t __a, 501 int __i) 502 __REQUIRE_CONSTANT(__i) { 503 return ((__u8x16)__a)[__i]; 504} 505 506static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_replace_lane(v128_t __a, 507 int __i, 508 int8_t __b) 509 __REQUIRE_CONSTANT(__i) { 510 __i8x16 __v = (__i8x16)__a; 511 __v[__i] = __b; 512 return (v128_t)__v; 513} 514 515static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_replace_lane(v128_t __a, 516 int __i, 517 uint8_t __b) 518 __REQUIRE_CONSTANT(__i) { 519 __u8x16 __v = (__u8x16)__a; 520 __v[__i] = __b; 521 return (v128_t)__v; 522} 523 524static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_splat(int16_t __a) { 525 return (v128_t)(__i16x8){__a, __a, __a, __a, __a, __a, __a, __a}; 526} 527 528static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_splat(uint16_t __a) { 529 return (v128_t)(__u16x8){__a, __a, __a, __a, __a, __a, __a, __a}; 530} 531 532static __inline__ int16_t __DEFAULT_FN_ATTRS wasm_i16x8_extract_lane(v128_t __a, 533 int __i) 534 __REQUIRE_CONSTANT(__i) { 535 return ((__i16x8)__a)[__i]; 536} 537 538static __inline__ uint16_t __DEFAULT_FN_ATTRS 539wasm_u16x8_extract_lane(v128_t __a, int __i) __REQUIRE_CONSTANT(__i) { 540 return ((__u16x8)__a)[__i]; 541} 542 543static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_replace_lane(v128_t __a, 544 int __i, 545 int16_t __b) 546 __REQUIRE_CONSTANT(__i) { 547 __i16x8 __v = (__i16x8)__a; 548 __v[__i] = __b; 549 return (v128_t)__v; 550} 551 552static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_replace_lane( 553 v128_t __a, int __i, uint16_t __b) __REQUIRE_CONSTANT(__i) { 554 __u16x8 __v = (__u16x8)__a; 555 __v[__i] = __b; 556 return (v128_t)__v; 557} 558 559static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_splat(int32_t __a) { 560 return (v128_t)(__i32x4){__a, __a, __a, __a}; 561} 562 563static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_splat(uint32_t __a) { 564 return (v128_t)(__u32x4){__a, __a, __a, __a}; 565} 566 567static __inline__ int32_t __DEFAULT_FN_ATTRS wasm_i32x4_extract_lane(v128_t __a, 568 int __i) 569 __REQUIRE_CONSTANT(__i) { 570 return ((__i32x4)__a)[__i]; 571} 572 573static __inline__ uint32_t __DEFAULT_FN_ATTRS 574wasm_u32x4_extract_lane(v128_t __a, int __i) __REQUIRE_CONSTANT(__i) { 575 return ((__u32x4)__a)[__i]; 576} 577 578static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_replace_lane(v128_t __a, 579 int __i, 580 int32_t __b) 581 __REQUIRE_CONSTANT(__i) { 582 __i32x4 __v = (__i32x4)__a; 583 __v[__i] = __b; 584 return (v128_t)__v; 585} 586 587static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_replace_lane( 588 v128_t __a, int __i, uint32_t __b) __REQUIRE_CONSTANT(__i) { 589 __u32x4 __v = (__u32x4)__a; 590 __v[__i] = __b; 591 return (v128_t)__v; 592} 593 594static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_splat(int64_t __a) { 595 return (v128_t)(__i64x2){__a, __a}; 596} 597 598static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u64x2_splat(uint64_t __a) { 599 return (v128_t)(__u64x2){__a, __a}; 600} 601 602static __inline__ int64_t __DEFAULT_FN_ATTRS wasm_i64x2_extract_lane(v128_t __a, 603 int __i) 604 __REQUIRE_CONSTANT(__i) { 605 return ((__i64x2)__a)[__i]; 606} 607 608static __inline__ uint64_t __DEFAULT_FN_ATTRS 609wasm_u64x2_extract_lane(v128_t __a, int __i) __REQUIRE_CONSTANT(__i) { 610 return ((__u64x2)__a)[__i]; 611} 612 613static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_replace_lane(v128_t __a, 614 int __i, 615 int64_t __b) 616 __REQUIRE_CONSTANT(__i) { 617 __i64x2 __v = (__i64x2)__a; 618 __v[__i] = __b; 619 return (v128_t)__v; 620} 621 622static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u64x2_replace_lane( 623 v128_t __a, int __i, uint64_t __b) __REQUIRE_CONSTANT(__i) { 624 __u64x2 __v = (__u64x2)__a; 625 __v[__i] = __b; 626 return (v128_t)__v; 627} 628 629static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_splat(float __a) { 630 return (v128_t)(__f32x4){__a, __a, __a, __a}; 631} 632 633static __inline__ float __DEFAULT_FN_ATTRS wasm_f32x4_extract_lane(v128_t __a, 634 int __i) 635 __REQUIRE_CONSTANT(__i) { 636 return ((__f32x4)__a)[__i]; 637} 638 639static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_replace_lane(v128_t __a, 640 int __i, 641 float __b) 642 __REQUIRE_CONSTANT(__i) { 643 __f32x4 __v = (__f32x4)__a; 644 __v[__i] = __b; 645 return (v128_t)__v; 646} 647 648static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_splat(double __a) { 649 return (v128_t)(__f64x2){__a, __a}; 650} 651 652static __inline__ double __DEFAULT_FN_ATTRS wasm_f64x2_extract_lane(v128_t __a, 653 int __i) 654 __REQUIRE_CONSTANT(__i) { 655 return ((__f64x2)__a)[__i]; 656} 657 658static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_replace_lane(v128_t __a, 659 int __i, 660 double __b) 661 __REQUIRE_CONSTANT(__i) { 662 __f64x2 __v = (__f64x2)__a; 663 __v[__i] = __b; 664 return (v128_t)__v; 665} 666 667static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_eq(v128_t __a, 668 v128_t __b) { 669 return (v128_t)((__i8x16)__a == (__i8x16)__b); 670} 671 672static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_ne(v128_t __a, 673 v128_t __b) { 674 return (v128_t)((__i8x16)__a != (__i8x16)__b); 675} 676 677static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_lt(v128_t __a, 678 v128_t __b) { 679 return (v128_t)((__i8x16)__a < (__i8x16)__b); 680} 681 682static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_lt(v128_t __a, 683 v128_t __b) { 684 return (v128_t)((__u8x16)__a < (__u8x16)__b); 685} 686 687static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_gt(v128_t __a, 688 v128_t __b) { 689 return (v128_t)((__i8x16)__a > (__i8x16)__b); 690} 691 692static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_gt(v128_t __a, 693 v128_t __b) { 694 return (v128_t)((__u8x16)__a > (__u8x16)__b); 695} 696 697static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_le(v128_t __a, 698 v128_t __b) { 699 return (v128_t)((__i8x16)__a <= (__i8x16)__b); 700} 701 702static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_le(v128_t __a, 703 v128_t __b) { 704 return (v128_t)((__u8x16)__a <= (__u8x16)__b); 705} 706 707static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_ge(v128_t __a, 708 v128_t __b) { 709 return (v128_t)((__i8x16)__a >= (__i8x16)__b); 710} 711 712static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_ge(v128_t __a, 713 v128_t __b) { 714 return (v128_t)((__u8x16)__a >= (__u8x16)__b); 715} 716 717static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_eq(v128_t __a, 718 v128_t __b) { 719 return (v128_t)((__i16x8)__a == (__i16x8)__b); 720} 721 722static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_ne(v128_t __a, 723 v128_t __b) { 724 return (v128_t)((__u16x8)__a != (__u16x8)__b); 725} 726 727static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_lt(v128_t __a, 728 v128_t __b) { 729 return (v128_t)((__i16x8)__a < (__i16x8)__b); 730} 731 732static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_lt(v128_t __a, 733 v128_t __b) { 734 return (v128_t)((__u16x8)__a < (__u16x8)__b); 735} 736 737static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_gt(v128_t __a, 738 v128_t __b) { 739 return (v128_t)((__i16x8)__a > (__i16x8)__b); 740} 741 742static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_gt(v128_t __a, 743 v128_t __b) { 744 return (v128_t)((__u16x8)__a > (__u16x8)__b); 745} 746 747static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_le(v128_t __a, 748 v128_t __b) { 749 return (v128_t)((__i16x8)__a <= (__i16x8)__b); 750} 751 752static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_le(v128_t __a, 753 v128_t __b) { 754 return (v128_t)((__u16x8)__a <= (__u16x8)__b); 755} 756 757static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_ge(v128_t __a, 758 v128_t __b) { 759 return (v128_t)((__i16x8)__a >= (__i16x8)__b); 760} 761 762static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_ge(v128_t __a, 763 v128_t __b) { 764 return (v128_t)((__u16x8)__a >= (__u16x8)__b); 765} 766 767static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_eq(v128_t __a, 768 v128_t __b) { 769 return (v128_t)((__i32x4)__a == (__i32x4)__b); 770} 771 772static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_ne(v128_t __a, 773 v128_t __b) { 774 return (v128_t)((__i32x4)__a != (__i32x4)__b); 775} 776 777static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_lt(v128_t __a, 778 v128_t __b) { 779 return (v128_t)((__i32x4)__a < (__i32x4)__b); 780} 781 782static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_lt(v128_t __a, 783 v128_t __b) { 784 return (v128_t)((__u32x4)__a < (__u32x4)__b); 785} 786 787static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_gt(v128_t __a, 788 v128_t __b) { 789 return (v128_t)((__i32x4)__a > (__i32x4)__b); 790} 791 792static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_gt(v128_t __a, 793 v128_t __b) { 794 return (v128_t)((__u32x4)__a > (__u32x4)__b); 795} 796 797static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_le(v128_t __a, 798 v128_t __b) { 799 return (v128_t)((__i32x4)__a <= (__i32x4)__b); 800} 801 802static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_le(v128_t __a, 803 v128_t __b) { 804 return (v128_t)((__u32x4)__a <= (__u32x4)__b); 805} 806 807static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_ge(v128_t __a, 808 v128_t __b) { 809 return (v128_t)((__i32x4)__a >= (__i32x4)__b); 810} 811 812static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_ge(v128_t __a, 813 v128_t __b) { 814 return (v128_t)((__u32x4)__a >= (__u32x4)__b); 815} 816 817static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_eq(v128_t __a, 818 v128_t __b) { 819 return (v128_t)((__i64x2)__a == (__i64x2)__b); 820} 821 822static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_ne(v128_t __a, 823 v128_t __b) { 824 return (v128_t)((__i64x2)__a != (__i64x2)__b); 825} 826 827static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_lt(v128_t __a, 828 v128_t __b) { 829 return (v128_t)((__i64x2)__a < (__i64x2)__b); 830} 831 832static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_gt(v128_t __a, 833 v128_t __b) { 834 return (v128_t)((__i64x2)__a > (__i64x2)__b); 835} 836 837static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_le(v128_t __a, 838 v128_t __b) { 839 return (v128_t)((__i64x2)__a <= (__i64x2)__b); 840} 841 842static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_ge(v128_t __a, 843 v128_t __b) { 844 return (v128_t)((__i64x2)__a >= (__i64x2)__b); 845} 846 847static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_eq(v128_t __a, 848 v128_t __b) { 849 return (v128_t)((__f32x4)__a == (__f32x4)__b); 850} 851 852static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_ne(v128_t __a, 853 v128_t __b) { 854 return (v128_t)((__f32x4)__a != (__f32x4)__b); 855} 856 857static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_lt(v128_t __a, 858 v128_t __b) { 859 return (v128_t)((__f32x4)__a < (__f32x4)__b); 860} 861 862static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_gt(v128_t __a, 863 v128_t __b) { 864 return (v128_t)((__f32x4)__a > (__f32x4)__b); 865} 866 867static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_le(v128_t __a, 868 v128_t __b) { 869 return (v128_t)((__f32x4)__a <= (__f32x4)__b); 870} 871 872static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_ge(v128_t __a, 873 v128_t __b) { 874 return (v128_t)((__f32x4)__a >= (__f32x4)__b); 875} 876 877static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_eq(v128_t __a, 878 v128_t __b) { 879 return (v128_t)((__f64x2)__a == (__f64x2)__b); 880} 881 882static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_ne(v128_t __a, 883 v128_t __b) { 884 return (v128_t)((__f64x2)__a != (__f64x2)__b); 885} 886 887static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_lt(v128_t __a, 888 v128_t __b) { 889 return (v128_t)((__f64x2)__a < (__f64x2)__b); 890} 891 892static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_gt(v128_t __a, 893 v128_t __b) { 894 return (v128_t)((__f64x2)__a > (__f64x2)__b); 895} 896 897static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_le(v128_t __a, 898 v128_t __b) { 899 return (v128_t)((__f64x2)__a <= (__f64x2)__b); 900} 901 902static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_ge(v128_t __a, 903 v128_t __b) { 904 return (v128_t)((__f64x2)__a >= (__f64x2)__b); 905} 906 907static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_v128_not(v128_t __a) { 908 return ~__a; 909} 910 911static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_v128_and(v128_t __a, 912 v128_t __b) { 913 return __a & __b; 914} 915 916static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_v128_or(v128_t __a, 917 v128_t __b) { 918 return __a | __b; 919} 920 921static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_v128_xor(v128_t __a, 922 v128_t __b) { 923 return __a ^ __b; 924} 925 926static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_v128_andnot(v128_t __a, 927 v128_t __b) { 928 return __a & ~__b; 929} 930 931static __inline__ bool __DEFAULT_FN_ATTRS wasm_v128_any_true(v128_t __a) { 932 return __builtin_wasm_any_true_v128((__i8x16)__a); 933} 934 935static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_v128_bitselect(v128_t __a, 936 v128_t __b, 937 v128_t __mask) { 938 return (v128_t)__builtin_wasm_bitselect((__i32x4)__a, (__i32x4)__b, 939 (__i32x4)__mask); 940} 941 942static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_abs(v128_t __a) { 943 return (v128_t)__builtin_wasm_abs_i8x16((__i8x16)__a); 944} 945 946static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_neg(v128_t __a) { 947 return (v128_t)(-(__u8x16)__a); 948} 949 950static __inline__ bool __DEFAULT_FN_ATTRS wasm_i8x16_all_true(v128_t __a) { 951 return __builtin_wasm_all_true_i8x16((__i8x16)__a); 952} 953 954static __inline__ uint32_t __DEFAULT_FN_ATTRS wasm_i8x16_bitmask(v128_t __a) { 955 return __builtin_wasm_bitmask_i8x16((__i8x16)__a); 956} 957 958static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_popcnt(v128_t __a) { 959 return (v128_t)__builtin_wasm_popcnt_i8x16((__i8x16)__a); 960} 961 962static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_shl(v128_t __a, 963 uint32_t __b) { 964 return (v128_t)((__i8x16)__a << (__b & 0x7)); 965} 966 967static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_shr(v128_t __a, 968 uint32_t __b) { 969 return (v128_t)((__i8x16)__a >> (__b & 0x7)); 970} 971 972static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_shr(v128_t __a, 973 uint32_t __b) { 974 return (v128_t)((__u8x16)__a >> (__b & 0x7)); 975} 976 977static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_add(v128_t __a, 978 v128_t __b) { 979 return (v128_t)((__u8x16)__a + (__u8x16)__b); 980} 981 982static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_add_sat(v128_t __a, 983 v128_t __b) { 984 return (v128_t)__builtin_wasm_add_sat_s_i8x16((__i8x16)__a, (__i8x16)__b); 985} 986 987static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_add_sat(v128_t __a, 988 v128_t __b) { 989 return (v128_t)__builtin_wasm_add_sat_u_i8x16((__u8x16)__a, (__u8x16)__b); 990} 991 992static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_sub(v128_t __a, 993 v128_t __b) { 994 return (v128_t)((__u8x16)__a - (__u8x16)__b); 995} 996 997static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_sub_sat(v128_t __a, 998 v128_t __b) { 999 return (v128_t)__builtin_wasm_sub_sat_s_i8x16((__i8x16)__a, (__i8x16)__b); 1000} 1001 1002static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_sub_sat(v128_t __a, 1003 v128_t __b) { 1004 return (v128_t)__builtin_wasm_sub_sat_u_i8x16((__u8x16)__a, (__u8x16)__b); 1005} 1006 1007static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_min(v128_t __a, 1008 v128_t __b) { 1009 return (v128_t)__builtin_wasm_min_s_i8x16((__i8x16)__a, (__i8x16)__b); 1010} 1011 1012static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_min(v128_t __a, 1013 v128_t __b) { 1014 return (v128_t)__builtin_wasm_min_u_i8x16((__u8x16)__a, (__u8x16)__b); 1015} 1016 1017static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_max(v128_t __a, 1018 v128_t __b) { 1019 return (v128_t)__builtin_wasm_max_s_i8x16((__i8x16)__a, (__i8x16)__b); 1020} 1021 1022static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_max(v128_t __a, 1023 v128_t __b) { 1024 return (v128_t)__builtin_wasm_max_u_i8x16((__u8x16)__a, (__u8x16)__b); 1025} 1026 1027static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u8x16_avgr(v128_t __a, 1028 v128_t __b) { 1029 return (v128_t)__builtin_wasm_avgr_u_i8x16((__u8x16)__a, (__u8x16)__b); 1030} 1031 1032static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_abs(v128_t __a) { 1033 return (v128_t)__builtin_wasm_abs_i16x8((__i16x8)__a); 1034} 1035 1036static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_neg(v128_t __a) { 1037 return (v128_t)(-(__u16x8)__a); 1038} 1039 1040static __inline__ bool __DEFAULT_FN_ATTRS wasm_i16x8_all_true(v128_t __a) { 1041 return __builtin_wasm_all_true_i16x8((__i16x8)__a); 1042} 1043 1044static __inline__ uint32_t __DEFAULT_FN_ATTRS wasm_i16x8_bitmask(v128_t __a) { 1045 return __builtin_wasm_bitmask_i16x8((__i16x8)__a); 1046} 1047 1048static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_shl(v128_t __a, 1049 uint32_t __b) { 1050 return (v128_t)((__i16x8)__a << (__b & 0xF)); 1051} 1052 1053static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_shr(v128_t __a, 1054 uint32_t __b) { 1055 return (v128_t)((__i16x8)__a >> (__b & 0xF)); 1056} 1057 1058static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_shr(v128_t __a, 1059 uint32_t __b) { 1060 return (v128_t)((__u16x8)__a >> (__b & 0xF)); 1061} 1062 1063static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_add(v128_t __a, 1064 v128_t __b) { 1065 return (v128_t)((__u16x8)__a + (__u16x8)__b); 1066} 1067 1068static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_add_sat(v128_t __a, 1069 v128_t __b) { 1070 return (v128_t)__builtin_wasm_add_sat_s_i16x8((__i16x8)__a, (__i16x8)__b); 1071} 1072 1073static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_add_sat(v128_t __a, 1074 v128_t __b) { 1075 return (v128_t)__builtin_wasm_add_sat_u_i16x8((__u16x8)__a, (__u16x8)__b); 1076} 1077 1078static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_sub(v128_t __a, 1079 v128_t __b) { 1080 return (v128_t)((__i16x8)__a - (__i16x8)__b); 1081} 1082 1083static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_sub_sat(v128_t __a, 1084 v128_t __b) { 1085 return (v128_t)__builtin_wasm_sub_sat_s_i16x8((__i16x8)__a, (__i16x8)__b); 1086} 1087 1088static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_sub_sat(v128_t __a, 1089 v128_t __b) { 1090 return (v128_t)__builtin_wasm_sub_sat_u_i16x8((__u16x8)__a, (__u16x8)__b); 1091} 1092 1093static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_mul(v128_t __a, 1094 v128_t __b) { 1095 return (v128_t)((__u16x8)__a * (__u16x8)__b); 1096} 1097 1098static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_min(v128_t __a, 1099 v128_t __b) { 1100 return (v128_t)__builtin_wasm_min_s_i16x8((__i16x8)__a, (__i16x8)__b); 1101} 1102 1103static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_min(v128_t __a, 1104 v128_t __b) { 1105 return (v128_t)__builtin_wasm_min_u_i16x8((__u16x8)__a, (__u16x8)__b); 1106} 1107 1108static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_max(v128_t __a, 1109 v128_t __b) { 1110 return (v128_t)__builtin_wasm_max_s_i16x8((__i16x8)__a, (__i16x8)__b); 1111} 1112 1113static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_max(v128_t __a, 1114 v128_t __b) { 1115 return (v128_t)__builtin_wasm_max_u_i16x8((__u16x8)__a, (__u16x8)__b); 1116} 1117 1118static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u16x8_avgr(v128_t __a, 1119 v128_t __b) { 1120 return (v128_t)__builtin_wasm_avgr_u_i16x8((__u16x8)__a, (__u16x8)__b); 1121} 1122 1123static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_abs(v128_t __a) { 1124 return (v128_t)__builtin_wasm_abs_i32x4((__i32x4)__a); 1125} 1126 1127static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_neg(v128_t __a) { 1128 return (v128_t)(-(__u32x4)__a); 1129} 1130 1131static __inline__ bool __DEFAULT_FN_ATTRS wasm_i32x4_all_true(v128_t __a) { 1132 return __builtin_wasm_all_true_i32x4((__i32x4)__a); 1133} 1134 1135static __inline__ uint32_t __DEFAULT_FN_ATTRS wasm_i32x4_bitmask(v128_t __a) { 1136 return __builtin_wasm_bitmask_i32x4((__i32x4)__a); 1137} 1138 1139static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_shl(v128_t __a, 1140 uint32_t __b) { 1141 return (v128_t)((__i32x4)__a << (__b & 0x1F)); 1142} 1143 1144static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_shr(v128_t __a, 1145 uint32_t __b) { 1146 return (v128_t)((__i32x4)__a >> (__b & 0x1F)); 1147} 1148 1149static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_shr(v128_t __a, 1150 uint32_t __b) { 1151 return (v128_t)((__u32x4)__a >> (__b & 0x1F)); 1152} 1153 1154static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_add(v128_t __a, 1155 v128_t __b) { 1156 return (v128_t)((__u32x4)__a + (__u32x4)__b); 1157} 1158 1159static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_sub(v128_t __a, 1160 v128_t __b) { 1161 return (v128_t)((__u32x4)__a - (__u32x4)__b); 1162} 1163 1164static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_mul(v128_t __a, 1165 v128_t __b) { 1166 return (v128_t)((__u32x4)__a * (__u32x4)__b); 1167} 1168 1169static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_min(v128_t __a, 1170 v128_t __b) { 1171 return (v128_t)__builtin_wasm_min_s_i32x4((__i32x4)__a, (__i32x4)__b); 1172} 1173 1174static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_min(v128_t __a, 1175 v128_t __b) { 1176 return (v128_t)__builtin_wasm_min_u_i32x4((__u32x4)__a, (__u32x4)__b); 1177} 1178 1179static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_max(v128_t __a, 1180 v128_t __b) { 1181 return (v128_t)__builtin_wasm_max_s_i32x4((__i32x4)__a, (__i32x4)__b); 1182} 1183 1184static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u32x4_max(v128_t __a, 1185 v128_t __b) { 1186 return (v128_t)__builtin_wasm_max_u_i32x4((__u32x4)__a, (__u32x4)__b); 1187} 1188 1189static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i32x4_dot_i16x8(v128_t __a, 1190 v128_t __b) { 1191 return (v128_t)__builtin_wasm_dot_s_i32x4_i16x8((__i16x8)__a, (__i16x8)__b); 1192} 1193 1194static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_abs(v128_t __a) { 1195 return (v128_t)__builtin_wasm_abs_i64x2((__i64x2)__a); 1196} 1197 1198static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_neg(v128_t __a) { 1199 return (v128_t)(-(__u64x2)__a); 1200} 1201 1202static __inline__ bool __DEFAULT_FN_ATTRS wasm_i64x2_all_true(v128_t __a) { 1203 return __builtin_wasm_all_true_i64x2((__i64x2)__a); 1204} 1205 1206static __inline__ uint32_t __DEFAULT_FN_ATTRS wasm_i64x2_bitmask(v128_t __a) { 1207 return __builtin_wasm_bitmask_i64x2((__i64x2)__a); 1208} 1209 1210static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_shl(v128_t __a, 1211 uint32_t __b) { 1212 return (v128_t)((__i64x2)__a << ((int64_t)__b & 0x3F)); 1213} 1214 1215static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_shr(v128_t __a, 1216 uint32_t __b) { 1217 return (v128_t)((__i64x2)__a >> ((int64_t)__b & 0x3F)); 1218} 1219 1220static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_u64x2_shr(v128_t __a, 1221 uint32_t __b) { 1222 return (v128_t)((__u64x2)__a >> ((int64_t)__b & 0x3F)); 1223} 1224 1225static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_add(v128_t __a, 1226 v128_t __b) { 1227 return (v128_t)((__u64x2)__a + (__u64x2)__b); 1228} 1229 1230static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_sub(v128_t __a, 1231 v128_t __b) { 1232 return (v128_t)((__u64x2)__a - (__u64x2)__b); 1233} 1234 1235static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i64x2_mul(v128_t __a, 1236 v128_t __b) { 1237 return (v128_t)((__u64x2)__a * (__u64x2)__b); 1238} 1239 1240static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_abs(v128_t __a) { 1241 return (v128_t)__builtin_wasm_abs_f32x4((__f32x4)__a); 1242} 1243 1244static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_neg(v128_t __a) { 1245 return (v128_t)(-(__f32x4)__a); 1246} 1247 1248static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_sqrt(v128_t __a) { 1249 return (v128_t)__builtin_wasm_sqrt_f32x4((__f32x4)__a); 1250} 1251 1252static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_ceil(v128_t __a) { 1253 return (v128_t)__builtin_wasm_ceil_f32x4((__f32x4)__a); 1254} 1255 1256static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_floor(v128_t __a) { 1257 return (v128_t)__builtin_wasm_floor_f32x4((__f32x4)__a); 1258} 1259 1260static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_trunc(v128_t __a) { 1261 return (v128_t)__builtin_wasm_trunc_f32x4((__f32x4)__a); 1262} 1263 1264static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_nearest(v128_t __a) { 1265 return (v128_t)__builtin_wasm_nearest_f32x4((__f32x4)__a); 1266} 1267 1268static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_add(v128_t __a, 1269 v128_t __b) { 1270 return (v128_t)((__f32x4)__a + (__f32x4)__b); 1271} 1272 1273static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_sub(v128_t __a, 1274 v128_t __b) { 1275 return (v128_t)((__f32x4)__a - (__f32x4)__b); 1276} 1277 1278static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_mul(v128_t __a, 1279 v128_t __b) { 1280 return (v128_t)((__f32x4)__a * (__f32x4)__b); 1281} 1282 1283static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_div(v128_t __a, 1284 v128_t __b) { 1285 return (v128_t)((__f32x4)__a / (__f32x4)__b); 1286} 1287 1288static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_min(v128_t __a, 1289 v128_t __b) { 1290 return (v128_t)__builtin_wasm_min_f32x4((__f32x4)__a, (__f32x4)__b); 1291} 1292 1293static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_max(v128_t __a, 1294 v128_t __b) { 1295 return (v128_t)__builtin_wasm_max_f32x4((__f32x4)__a, (__f32x4)__b); 1296} 1297 1298static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_pmin(v128_t __a, 1299 v128_t __b) { 1300 return (v128_t)__builtin_wasm_pmin_f32x4((__f32x4)__a, (__f32x4)__b); 1301} 1302 1303static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f32x4_pmax(v128_t __a, 1304 v128_t __b) { 1305 return (v128_t)__builtin_wasm_pmax_f32x4((__f32x4)__a, (__f32x4)__b); 1306} 1307 1308static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_abs(v128_t __a) { 1309 return (v128_t)__builtin_wasm_abs_f64x2((__f64x2)__a); 1310} 1311 1312static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_neg(v128_t __a) { 1313 return (v128_t)(-(__f64x2)__a); 1314} 1315 1316static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_sqrt(v128_t __a) { 1317 return (v128_t)__builtin_wasm_sqrt_f64x2((__f64x2)__a); 1318} 1319 1320static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_ceil(v128_t __a) { 1321 return (v128_t)__builtin_wasm_ceil_f64x2((__f64x2)__a); 1322} 1323 1324static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_floor(v128_t __a) { 1325 return (v128_t)__builtin_wasm_floor_f64x2((__f64x2)__a); 1326} 1327 1328static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_trunc(v128_t __a) { 1329 return (v128_t)__builtin_wasm_trunc_f64x2((__f64x2)__a); 1330} 1331 1332static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_nearest(v128_t __a) { 1333 return (v128_t)__builtin_wasm_nearest_f64x2((__f64x2)__a); 1334} 1335 1336static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_add(v128_t __a, 1337 v128_t __b) { 1338 return (v128_t)((__f64x2)__a + (__f64x2)__b); 1339} 1340 1341static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_sub(v128_t __a, 1342 v128_t __b) { 1343 return (v128_t)((__f64x2)__a - (__f64x2)__b); 1344} 1345 1346static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_mul(v128_t __a, 1347 v128_t __b) { 1348 return (v128_t)((__f64x2)__a * (__f64x2)__b); 1349} 1350 1351static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_div(v128_t __a, 1352 v128_t __b) { 1353 return (v128_t)((__f64x2)__a / (__f64x2)__b); 1354} 1355 1356static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_min(v128_t __a, 1357 v128_t __b) { 1358 return (v128_t)__builtin_wasm_min_f64x2((__f64x2)__a, (__f64x2)__b); 1359} 1360 1361static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_max(v128_t __a, 1362 v128_t __b) { 1363 return (v128_t)__builtin_wasm_max_f64x2((__f64x2)__a, (__f64x2)__b); 1364} 1365 1366static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_pmin(v128_t __a, 1367 v128_t __b) { 1368 return (v128_t)__builtin_wasm_pmin_f64x2((__f64x2)__a, (__f64x2)__b); 1369} 1370 1371static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_f64x2_pmax(v128_t __a, 1372 v128_t __b) { 1373 return (v128_t)__builtin_wasm_pmax_f64x2((__f64x2)__a, (__f64x2)__b); 1374} 1375 1376static __inline__ v128_t __DEFAULT_FN_ATTRS 1377wasm_i32x4_trunc_sat_f32x4(v128_t __a) { 1378 return (v128_t)__builtin_wasm_trunc_saturate_s_i32x4_f32x4((__f32x4)__a); 1379} 1380 1381static __inline__ v128_t __DEFAULT_FN_ATTRS 1382wasm_u32x4_trunc_sat_f32x4(v128_t __a) { 1383 return (v128_t)__builtin_wasm_trunc_saturate_u_i32x4_f32x4((__f32x4)__a); 1384} 1385 1386static __inline__ v128_t __DEFAULT_FN_ATTRS 1387wasm_f32x4_convert_i32x4(v128_t __a) { 1388 return (v128_t) __builtin_convertvector((__i32x4)__a, __f32x4); 1389} 1390 1391static __inline__ v128_t __DEFAULT_FN_ATTRS 1392wasm_f32x4_convert_u32x4(v128_t __a) { 1393 return (v128_t) __builtin_convertvector((__u32x4)__a, __f32x4); 1394} 1395 1396static __inline__ v128_t __DEFAULT_FN_ATTRS 1397wasm_f64x2_convert_low_i32x4(v128_t __a) { 1398 return (v128_t) __builtin_convertvector((__i32x2){__a[0], __a[1]}, __f64x2); 1399} 1400 1401static __inline__ v128_t __DEFAULT_FN_ATTRS 1402wasm_f64x2_convert_low_u32x4(v128_t __a) { 1403 return (v128_t) __builtin_convertvector((__u32x2){__a[0], __a[1]}, __f64x2); 1404} 1405 1406static __inline__ v128_t __DEFAULT_FN_ATTRS 1407wasm_i32x4_trunc_sat_f64x2_zero(v128_t __a) { 1408 return (v128_t)__builtin_wasm_trunc_sat_s_zero_f64x2_i32x4((__f64x2)__a); 1409} 1410 1411static __inline__ v128_t __DEFAULT_FN_ATTRS 1412wasm_u32x4_trunc_sat_f64x2_zero(v128_t __a) { 1413 return (v128_t)__builtin_wasm_trunc_sat_u_zero_f64x2_i32x4((__f64x2)__a); 1414} 1415 1416static __inline__ v128_t __DEFAULT_FN_ATTRS 1417wasm_f32x4_demote_f64x2_zero(v128_t __a) { 1418 return (v128_t) __builtin_convertvector( 1419 __builtin_shufflevector((__f64x2)__a, (__f64x2){0, 0}, 0, 1, 2, 3), 1420 __f32x4); 1421} 1422 1423static __inline__ v128_t __DEFAULT_FN_ATTRS 1424wasm_f64x2_promote_low_f32x4(v128_t __a) { 1425 return (v128_t) __builtin_convertvector( 1426 (__f32x2){((__f32x4)__a)[0], ((__f32x4)__a)[1]}, __f64x2); 1427} 1428 1429#define wasm_i8x16_shuffle(__a, __b, __c0, __c1, __c2, __c3, __c4, __c5, __c6, \ 1430 __c7, __c8, __c9, __c10, __c11, __c12, __c13, \ 1431 __c14, __c15) \ 1432 ((v128_t)__builtin_wasm_shuffle_i8x16( \ 1433 (__i8x16)(__a), (__i8x16)(__b), __c0, __c1, __c2, __c3, __c4, __c5, \ 1434 __c6, __c7, __c8, __c9, __c10, __c11, __c12, __c13, __c14, __c15)) 1435 1436#define wasm_i16x8_shuffle(__a, __b, __c0, __c1, __c2, __c3, __c4, __c5, __c6, \ 1437 __c7) \ 1438 ((v128_t)__builtin_wasm_shuffle_i8x16( \ 1439 (__i8x16)(__a), (__i8x16)(__b), (__c0)*2, (__c0)*2 + 1, (__c1)*2, \ 1440 (__c1)*2 + 1, (__c2)*2, (__c2)*2 + 1, (__c3)*2, (__c3)*2 + 1, (__c4)*2, \ 1441 (__c4)*2 + 1, (__c5)*2, (__c5)*2 + 1, (__c6)*2, (__c6)*2 + 1, (__c7)*2, \ 1442 (__c7)*2 + 1)) 1443 1444#define wasm_i32x4_shuffle(__a, __b, __c0, __c1, __c2, __c3) \ 1445 ((v128_t)__builtin_wasm_shuffle_i8x16( \ 1446 (__i8x16)(__a), (__i8x16)(__b), (__c0)*4, (__c0)*4 + 1, (__c0)*4 + 2, \ 1447 (__c0)*4 + 3, (__c1)*4, (__c1)*4 + 1, (__c1)*4 + 2, (__c1)*4 + 3, \ 1448 (__c2)*4, (__c2)*4 + 1, (__c2)*4 + 2, (__c2)*4 + 3, (__c3)*4, \ 1449 (__c3)*4 + 1, (__c3)*4 + 2, (__c3)*4 + 3)) 1450 1451#define wasm_i64x2_shuffle(__a, __b, __c0, __c1) \ 1452 ((v128_t)__builtin_wasm_shuffle_i8x16( \ 1453 (__i8x16)(__a), (__i8x16)(__b), (__c0)*8, (__c0)*8 + 1, (__c0)*8 + 2, \ 1454 (__c0)*8 + 3, (__c0)*8 + 4, (__c0)*8 + 5, (__c0)*8 + 6, (__c0)*8 + 7, \ 1455 (__c1)*8, (__c1)*8 + 1, (__c1)*8 + 2, (__c1)*8 + 3, (__c1)*8 + 4, \ 1456 (__c1)*8 + 5, (__c1)*8 + 6, (__c1)*8 + 7)) 1457 1458static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i8x16_swizzle(v128_t __a, 1459 v128_t __b) { 1460 return (v128_t)__builtin_wasm_swizzle_i8x16((__i8x16)__a, (__i8x16)__b); 1461} 1462 1463static __inline__ v128_t __DEFAULT_FN_ATTRS 1464wasm_i8x16_narrow_i16x8(v128_t __a, v128_t __b) { 1465 return (v128_t)__builtin_wasm_narrow_s_i8x16_i16x8((__i16x8)__a, 1466 (__i16x8)__b); 1467} 1468 1469static __inline__ v128_t __DEFAULT_FN_ATTRS 1470wasm_u8x16_narrow_i16x8(v128_t __a, v128_t __b) { 1471 return (v128_t)__builtin_wasm_narrow_u_i8x16_i16x8((__i16x8)__a, 1472 (__i16x8)__b); 1473} 1474 1475static __inline__ v128_t __DEFAULT_FN_ATTRS 1476wasm_i16x8_narrow_i32x4(v128_t __a, v128_t __b) { 1477 return (v128_t)__builtin_wasm_narrow_s_i16x8_i32x4((__i32x4)__a, 1478 (__i32x4)__b); 1479} 1480 1481static __inline__ v128_t __DEFAULT_FN_ATTRS 1482wasm_u16x8_narrow_i32x4(v128_t __a, v128_t __b) { 1483 return (v128_t)__builtin_wasm_narrow_u_i16x8_i32x4((__i32x4)__a, 1484 (__i32x4)__b); 1485} 1486 1487static __inline__ v128_t __DEFAULT_FN_ATTRS 1488wasm_i16x8_extend_low_i8x16(v128_t __a) { 1489 return (v128_t) __builtin_convertvector( 1490 (__i8x8){((__i8x16)__a)[0], ((__i8x16)__a)[1], ((__i8x16)__a)[2], 1491 ((__i8x16)__a)[3], ((__i8x16)__a)[4], ((__i8x16)__a)[5], 1492 ((__i8x16)__a)[6], ((__i8x16)__a)[7]}, 1493 __i16x8); 1494} 1495 1496static __inline__ v128_t __DEFAULT_FN_ATTRS 1497wasm_i16x8_extend_high_i8x16(v128_t __a) { 1498 return (v128_t) __builtin_convertvector( 1499 (__i8x8){((__i8x16)__a)[8], ((__i8x16)__a)[9], ((__i8x16)__a)[10], 1500 ((__i8x16)__a)[11], ((__i8x16)__a)[12], ((__i8x16)__a)[13], 1501 ((__i8x16)__a)[14], ((__i8x16)__a)[15]}, 1502 __i16x8); 1503} 1504 1505static __inline__ v128_t __DEFAULT_FN_ATTRS 1506wasm_u16x8_extend_low_u8x16(v128_t __a) { 1507 return (v128_t) __builtin_convertvector( 1508 (__u8x8){((__u8x16)__a)[0], ((__u8x16)__a)[1], ((__u8x16)__a)[2], 1509 ((__u8x16)__a)[3], ((__u8x16)__a)[4], ((__u8x16)__a)[5], 1510 ((__u8x16)__a)[6], ((__u8x16)__a)[7]}, 1511 __u16x8); 1512} 1513 1514static __inline__ v128_t __DEFAULT_FN_ATTRS 1515wasm_u16x8_extend_high_u8x16(v128_t __a) { 1516 return (v128_t) __builtin_convertvector( 1517 (__u8x8){((__u8x16)__a)[8], ((__u8x16)__a)[9], ((__u8x16)__a)[10], 1518 ((__u8x16)__a)[11], ((__u8x16)__a)[12], ((__u8x16)__a)[13], 1519 ((__u8x16)__a)[14], ((__u8x16)__a)[15]}, 1520 __u16x8); 1521} 1522 1523static __inline__ v128_t __DEFAULT_FN_ATTRS 1524wasm_i32x4_extend_low_i16x8(v128_t __a) { 1525 return (v128_t) __builtin_convertvector( 1526 (__i16x4){((__i16x8)__a)[0], ((__i16x8)__a)[1], ((__i16x8)__a)[2], 1527 ((__i16x8)__a)[3]}, 1528 __i32x4); 1529} 1530 1531static __inline__ v128_t __DEFAULT_FN_ATTRS 1532wasm_i32x4_extend_high_i16x8(v128_t __a) { 1533 return (v128_t) __builtin_convertvector( 1534 (__i16x4){((__i16x8)__a)[4], ((__i16x8)__a)[5], ((__i16x8)__a)[6], 1535 ((__i16x8)__a)[7]}, 1536 __i32x4); 1537} 1538 1539static __inline__ v128_t __DEFAULT_FN_ATTRS 1540wasm_u32x4_extend_low_u16x8(v128_t __a) { 1541 return (v128_t) __builtin_convertvector( 1542 (__u16x4){((__u16x8)__a)[0], ((__u16x8)__a)[1], ((__u16x8)__a)[2], 1543 ((__u16x8)__a)[3]}, 1544 __u32x4); 1545} 1546 1547static __inline__ v128_t __DEFAULT_FN_ATTRS 1548wasm_u32x4_extend_high_u16x8(v128_t __a) { 1549 return (v128_t) __builtin_convertvector( 1550 (__u16x4){((__u16x8)__a)[4], ((__u16x8)__a)[5], ((__u16x8)__a)[6], 1551 ((__u16x8)__a)[7]}, 1552 __u32x4); 1553} 1554 1555static __inline__ v128_t __DEFAULT_FN_ATTRS 1556wasm_i64x2_extend_low_i32x4(v128_t __a) { 1557 return (v128_t) __builtin_convertvector( 1558 (__i32x2){((__i32x4)__a)[0], ((__i32x4)__a)[1]}, __i64x2); 1559} 1560 1561static __inline__ v128_t __DEFAULT_FN_ATTRS 1562wasm_i64x2_extend_high_i32x4(v128_t __a) { 1563 return (v128_t) __builtin_convertvector( 1564 (__i32x2){((__i32x4)__a)[2], ((__i32x4)__a)[3]}, __i64x2); 1565} 1566 1567static __inline__ v128_t __DEFAULT_FN_ATTRS 1568wasm_u64x2_extend_low_u32x4(v128_t __a) { 1569 return (v128_t) __builtin_convertvector( 1570 (__u32x2){((__u32x4)__a)[0], ((__u32x4)__a)[1]}, __u64x2); 1571} 1572 1573static __inline__ v128_t __DEFAULT_FN_ATTRS 1574wasm_u64x2_extend_high_u32x4(v128_t __a) { 1575 return (v128_t) __builtin_convertvector( 1576 (__u32x2){((__u32x4)__a)[2], ((__u32x4)__a)[3]}, __u64x2); 1577} 1578 1579static __inline__ v128_t __DEFAULT_FN_ATTRS 1580wasm_i16x8_extadd_pairwise_i8x16(v128_t __a) { 1581 return (v128_t)__builtin_wasm_extadd_pairwise_i8x16_s_i16x8((__i8x16)__a); 1582} 1583 1584static __inline__ v128_t __DEFAULT_FN_ATTRS 1585wasm_u16x8_extadd_pairwise_u8x16(v128_t __a) { 1586 return (v128_t)__builtin_wasm_extadd_pairwise_i8x16_u_i16x8((__u8x16)__a); 1587} 1588 1589static __inline__ v128_t __DEFAULT_FN_ATTRS 1590wasm_i32x4_extadd_pairwise_i16x8(v128_t __a) { 1591 return (v128_t)__builtin_wasm_extadd_pairwise_i16x8_s_i32x4((__i16x8)__a); 1592} 1593 1594static __inline__ v128_t __DEFAULT_FN_ATTRS 1595wasm_u32x4_extadd_pairwise_u16x8(v128_t __a) { 1596 return (v128_t)__builtin_wasm_extadd_pairwise_i16x8_u_i32x4((__u16x8)__a); 1597} 1598 1599static __inline__ v128_t __DEFAULT_FN_ATTRS 1600wasm_i16x8_extmul_low_i8x16(v128_t __a, v128_t __b) { 1601 return (v128_t)((__i16x8)wasm_i16x8_extend_low_i8x16(__a) * 1602 (__i16x8)wasm_i16x8_extend_low_i8x16(__b)); 1603} 1604 1605static __inline__ v128_t __DEFAULT_FN_ATTRS 1606wasm_i16x8_extmul_high_i8x16(v128_t __a, v128_t __b) { 1607 return (v128_t)((__i16x8)wasm_i16x8_extend_high_i8x16(__a) * 1608 (__i16x8)wasm_i16x8_extend_high_i8x16(__b)); 1609} 1610 1611static __inline__ v128_t __DEFAULT_FN_ATTRS 1612wasm_u16x8_extmul_low_u8x16(v128_t __a, v128_t __b) { 1613 return (v128_t)((__u16x8)wasm_u16x8_extend_low_u8x16(__a) * 1614 (__u16x8)wasm_u16x8_extend_low_u8x16(__b)); 1615} 1616 1617static __inline__ v128_t __DEFAULT_FN_ATTRS 1618wasm_u16x8_extmul_high_u8x16(v128_t __a, v128_t __b) { 1619 return (v128_t)((__u16x8)wasm_u16x8_extend_high_u8x16(__a) * 1620 (__u16x8)wasm_u16x8_extend_high_u8x16(__b)); 1621} 1622 1623static __inline__ v128_t __DEFAULT_FN_ATTRS 1624wasm_i32x4_extmul_low_i16x8(v128_t __a, v128_t __b) { 1625 return (v128_t)((__i32x4)wasm_i32x4_extend_low_i16x8(__a) * 1626 (__i32x4)wasm_i32x4_extend_low_i16x8(__b)); 1627} 1628 1629static __inline__ v128_t __DEFAULT_FN_ATTRS 1630wasm_i32x4_extmul_high_i16x8(v128_t __a, v128_t __b) { 1631 return (v128_t)((__i32x4)wasm_i32x4_extend_high_i16x8(__a) * 1632 (__i32x4)wasm_i32x4_extend_high_i16x8(__b)); 1633} 1634 1635static __inline__ v128_t __DEFAULT_FN_ATTRS 1636wasm_u32x4_extmul_low_u16x8(v128_t __a, v128_t __b) { 1637 return (v128_t)((__u32x4)wasm_u32x4_extend_low_u16x8(__a) * 1638 (__u32x4)wasm_u32x4_extend_low_u16x8(__b)); 1639} 1640 1641static __inline__ v128_t __DEFAULT_FN_ATTRS 1642wasm_u32x4_extmul_high_u16x8(v128_t __a, v128_t __b) { 1643 return (v128_t)((__u32x4)wasm_u32x4_extend_high_u16x8(__a) * 1644 (__u32x4)wasm_u32x4_extend_high_u16x8(__b)); 1645} 1646 1647static __inline__ v128_t __DEFAULT_FN_ATTRS 1648wasm_i64x2_extmul_low_i32x4(v128_t __a, v128_t __b) { 1649 return (v128_t)((__i64x2)wasm_i64x2_extend_low_i32x4(__a) * 1650 (__i64x2)wasm_i64x2_extend_low_i32x4(__b)); 1651} 1652 1653static __inline__ v128_t __DEFAULT_FN_ATTRS 1654wasm_i64x2_extmul_high_i32x4(v128_t __a, v128_t __b) { 1655 return (v128_t)((__i64x2)wasm_i64x2_extend_high_i32x4(__a) * 1656 (__i64x2)wasm_i64x2_extend_high_i32x4(__b)); 1657} 1658 1659static __inline__ v128_t __DEFAULT_FN_ATTRS 1660wasm_u64x2_extmul_low_u32x4(v128_t __a, v128_t __b) { 1661 return (v128_t)((__u64x2)wasm_u64x2_extend_low_u32x4(__a) * 1662 (__u64x2)wasm_u64x2_extend_low_u32x4(__b)); 1663} 1664 1665static __inline__ v128_t __DEFAULT_FN_ATTRS 1666wasm_u64x2_extmul_high_u32x4(v128_t __a, v128_t __b) { 1667 return (v128_t)((__u64x2)wasm_u64x2_extend_high_u32x4(__a) * 1668 (__u64x2)wasm_u64x2_extend_high_u32x4(__b)); 1669} 1670 1671static __inline__ v128_t __DEFAULT_FN_ATTRS wasm_i16x8_q15mulr_sat(v128_t __a, 1672 v128_t __b) { 1673 return (v128_t)__builtin_wasm_q15mulr_sat_s_i16x8((__i16x8)__a, (__i16x8)__b); 1674} 1675 1676// Old intrinsic names supported to ease transitioning to the standard names. Do 1677// not use these; they will be removed in the near future. 1678 1679#define __DEPRECATED_FN_ATTRS(__replacement) \ 1680 __DEFAULT_FN_ATTRS __attribute__( \ 1681 (deprecated("use " __replacement " instead", __replacement))) 1682 1683#define __WASM_STR(X) #X 1684 1685#ifdef __DEPRECATED 1686#define __DEPRECATED_WASM_MACRO(__name, __replacement) \ 1687 _Pragma(__WASM_STR(GCC warning( \ 1688 "'" __name "' is deprecated: use '" __replacement "' instead"))) 1689#else 1690#define __DEPRECATED_WASM_MACRO(__name, __replacement) 1691#endif 1692 1693static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_v128_load8_splat") 1694wasm_v8x16_load_splat(const void *__mem) { 1695 return wasm_v128_load8_splat(__mem); 1696} 1697 1698static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_v128_load16_splat") 1699wasm_v16x8_load_splat(const void *__mem) { 1700 return wasm_v128_load16_splat(__mem); 1701} 1702 1703static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_v128_load32_splat") 1704wasm_v32x4_load_splat(const void *__mem) { 1705 return wasm_v128_load32_splat(__mem); 1706} 1707 1708static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_v128_load64_splat") 1709wasm_v64x2_load_splat(const void *__mem) { 1710 return wasm_v128_load64_splat(__mem); 1711} 1712 1713static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_i16x8_load8x8") 1714wasm_i16x8_load_8x8(const void *__mem) { 1715 return wasm_i16x8_load8x8(__mem); 1716} 1717 1718static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_u16x8_load8x8") 1719wasm_u16x8_load_8x8(const void *__mem) { 1720 return wasm_u16x8_load8x8(__mem); 1721} 1722 1723static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_i32x4_load16x4") 1724wasm_i32x4_load_16x4(const void *__mem) { 1725 return wasm_i32x4_load16x4(__mem); 1726} 1727 1728static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_u32x4_load16x4") 1729wasm_u32x4_load_16x4(const void *__mem) { 1730 return wasm_u32x4_load16x4(__mem); 1731} 1732 1733static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_i64x2_load32x2") 1734wasm_i64x2_load_32x2(const void *__mem) { 1735 return wasm_i64x2_load32x2(__mem); 1736} 1737 1738static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_u64x2_load32x2") 1739wasm_u64x2_load_32x2(const void *__mem) { 1740 return wasm_u64x2_load32x2(__mem); 1741} 1742 1743#define wasm_v8x16_shuffle(__a, __b, __c0, __c1, __c2, __c3, __c4, __c5, __c6, \ 1744 __c7, __c8, __c9, __c10, __c11, __c12, __c13, \ 1745 __c14, __c15) \ 1746 __DEPRECATED_WASM_MACRO("wasm_v8x16_shuffle", "wasm_i8x16_shuffle") \ 1747 wasm_i8x16_shuffle(__a, __b, __c0, __c1, __c2, __c3, __c4, __c5, __c6, __c7, \ 1748 __c8, __c9, __c10, __c11, __c12, __c13, __c14, __c15) 1749 1750#define wasm_v16x8_shuffle(__a, __b, __c0, __c1, __c2, __c3, __c4, __c5, __c6, \ 1751 __c7) \ 1752 __DEPRECATED_WASM_MACRO("wasm_v16x8_shuffle", "wasm_i16x8_shuffle") \ 1753 wasm_i16x8_shuffle(__a, __b, __c0, __c1, __c2, __c3, __c4, __c5, __c6, __c7) 1754 1755#define wasm_v32x4_shuffle(__a, __b, __c0, __c1, __c2, __c3) \ 1756 __DEPRECATED_WASM_MACRO("wasm_v32x4_shuffle", "wasm_i32x4_shuffle") \ 1757 wasm_i32x4_shuffle(__a, __b, __c0, __c1, __c2, __c3) 1758 1759#define wasm_v64x2_shuffle(__a, __b, __c0, __c1) \ 1760 __DEPRECATED_WASM_MACRO("wasm_v64x2_shuffle", "wasm_i64x2_shuffle") \ 1761 wasm_i64x2_shuffle(__a, __b, __c0, __c1) 1762 1763// Relaxed SIMD intrinsics 1764 1765#define __RELAXED_FN_ATTRS \ 1766 __attribute__((__always_inline__, __nodebug__, __target__("relaxed-simd"), \ 1767 __min_vector_width__(128))) 1768 1769static __inline__ v128_t __RELAXED_FN_ATTRS 1770wasm_f32x4_relaxed_madd(v128_t __a, v128_t __b, v128_t __c) { 1771 return (v128_t)__builtin_wasm_relaxed_madd_f32x4((__f32x4)__a, (__f32x4)__b, 1772 (__f32x4)__c); 1773} 1774 1775static __inline__ v128_t __RELAXED_FN_ATTRS 1776wasm_f32x4_relaxed_nmadd(v128_t __a, v128_t __b, v128_t __c) { 1777 return (v128_t)__builtin_wasm_relaxed_nmadd_f32x4((__f32x4)__a, (__f32x4)__b, 1778 (__f32x4)__c); 1779} 1780 1781static __inline__ v128_t __RELAXED_FN_ATTRS 1782wasm_f64x2_relaxed_madd(v128_t __a, v128_t __b, v128_t __c) { 1783 return (v128_t)__builtin_wasm_relaxed_madd_f64x2((__f64x2)__a, (__f64x2)__b, 1784 (__f64x2)__c); 1785} 1786 1787static __inline__ v128_t __RELAXED_FN_ATTRS 1788wasm_f64x2_relaxed_nmadd(v128_t __a, v128_t __b, v128_t __c) { 1789 return (v128_t)__builtin_wasm_relaxed_nmadd_f64x2((__f64x2)__a, (__f64x2)__b, 1790 (__f64x2)__c); 1791} 1792 1793static __inline__ v128_t __RELAXED_FN_ATTRS 1794wasm_i8x16_relaxed_laneselect(v128_t __a, v128_t __b, v128_t __m) { 1795 return (v128_t)__builtin_wasm_relaxed_laneselect_i8x16( 1796 (__i8x16)__a, (__i8x16)__b, (__i8x16)__m); 1797} 1798 1799static __inline__ v128_t __RELAXED_FN_ATTRS 1800wasm_i16x8_relaxed_laneselect(v128_t __a, v128_t __b, v128_t __m) { 1801 return (v128_t)__builtin_wasm_relaxed_laneselect_i16x8( 1802 (__i16x8)__a, (__i16x8)__b, (__i16x8)__m); 1803} 1804 1805static __inline__ v128_t __RELAXED_FN_ATTRS 1806wasm_i32x4_relaxed_laneselect(v128_t __a, v128_t __b, v128_t __m) { 1807 return (v128_t)__builtin_wasm_relaxed_laneselect_i32x4( 1808 (__i32x4)__a, (__i32x4)__b, (__i32x4)__m); 1809} 1810 1811static __inline__ v128_t __RELAXED_FN_ATTRS 1812wasm_i64x2_relaxed_laneselect(v128_t __a, v128_t __b, v128_t __m) { 1813 return (v128_t)__builtin_wasm_relaxed_laneselect_i64x2( 1814 (__i64x2)__a, (__i64x2)__b, (__i64x2)__m); 1815} 1816 1817static __inline__ v128_t __RELAXED_FN_ATTRS 1818wasm_i8x16_relaxed_swizzle(v128_t __a, v128_t __s) { 1819 return (v128_t)__builtin_wasm_relaxed_swizzle_i8x16((__i8x16)__a, 1820 (__i8x16)__s); 1821} 1822 1823static __inline__ v128_t __RELAXED_FN_ATTRS wasm_f32x4_relaxed_min(v128_t __a, 1824 v128_t __b) { 1825 return (v128_t)__builtin_wasm_relaxed_min_f32x4((__f32x4)__a, (__f32x4)__b); 1826} 1827 1828static __inline__ v128_t __RELAXED_FN_ATTRS wasm_f32x4_relaxed_max(v128_t __a, 1829 v128_t __b) { 1830 return (v128_t)__builtin_wasm_relaxed_max_f32x4((__f32x4)__a, (__f32x4)__b); 1831} 1832 1833static __inline__ v128_t __RELAXED_FN_ATTRS wasm_f64x2_relaxed_min(v128_t __a, 1834 v128_t __b) { 1835 return (v128_t)__builtin_wasm_relaxed_min_f64x2((__f64x2)__a, (__f64x2)__b); 1836} 1837 1838static __inline__ v128_t __RELAXED_FN_ATTRS wasm_f64x2_relaxed_max(v128_t __a, 1839 v128_t __b) { 1840 return (v128_t)__builtin_wasm_relaxed_max_f64x2((__f64x2)__a, (__f64x2)__b); 1841} 1842 1843static __inline__ v128_t __RELAXED_FN_ATTRS 1844wasm_i32x4_relaxed_trunc_f32x4(v128_t __a) { 1845 return (v128_t)__builtin_wasm_relaxed_trunc_s_i32x4_f32x4((__f32x4)__a); 1846} 1847 1848static __inline__ v128_t __RELAXED_FN_ATTRS 1849wasm_u32x4_relaxed_trunc_f32x4(v128_t __a) { 1850 return (v128_t)__builtin_wasm_relaxed_trunc_u_i32x4_f32x4((__f32x4)__a); 1851} 1852 1853static __inline__ v128_t __RELAXED_FN_ATTRS 1854wasm_i32x4_relaxed_trunc_f64x2_zero(v128_t __a) { 1855 return (v128_t)__builtin_wasm_relaxed_trunc_s_zero_i32x4_f64x2((__f64x2)__a); 1856} 1857 1858static __inline__ v128_t __RELAXED_FN_ATTRS 1859wasm_u32x4_relaxed_trunc_f64x2_zero(v128_t __a) { 1860 return (v128_t)__builtin_wasm_relaxed_trunc_u_zero_i32x4_f64x2((__f64x2)__a); 1861} 1862 1863static __inline__ v128_t __RELAXED_FN_ATTRS 1864wasm_i16x8_relaxed_q15mulr(v128_t __a, v128_t __b) { 1865 return (v128_t)__builtin_wasm_relaxed_q15mulr_s_i16x8((__i16x8)__a, 1866 (__i16x8)__b); 1867} 1868 1869static __inline__ v128_t __RELAXED_FN_ATTRS 1870wasm_i16x8_relaxed_dot_i8x16_i7x16(v128_t __a, v128_t __b) { 1871 return (v128_t)__builtin_wasm_relaxed_dot_i8x16_i7x16_s_i16x8((__i8x16)__a, 1872 (__i8x16)__b); 1873} 1874 1875static __inline__ v128_t __RELAXED_FN_ATTRS 1876wasm_i32x4_relaxed_dot_i8x16_i7x16_add(v128_t __a, v128_t __b, v128_t __c) { 1877 return (v128_t)__builtin_wasm_relaxed_dot_i8x16_i7x16_add_s_i32x4( 1878 (__i8x16)__a, (__i8x16)__b, (__i32x4)__c); 1879} 1880 1881// Deprecated intrinsics 1882 1883static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_i8x16_swizzle") 1884wasm_v8x16_swizzle(v128_t __a, v128_t __b) { 1885 return wasm_i8x16_swizzle(__a, __b); 1886} 1887 1888static __inline__ bool __DEPRECATED_FN_ATTRS("wasm_v128_any_true") 1889wasm_i8x16_any_true(v128_t __a) { 1890 return wasm_v128_any_true(__a); 1891} 1892 1893static __inline__ bool __DEPRECATED_FN_ATTRS("wasm_v128_any_true") 1894wasm_i16x8_any_true(v128_t __a) { 1895 return wasm_v128_any_true(__a); 1896} 1897 1898static __inline__ bool __DEPRECATED_FN_ATTRS("wasm_v128_any_true") 1899wasm_i32x4_any_true(v128_t __a) { 1900 return wasm_v128_any_true(__a); 1901} 1902 1903static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_i8x16_add_sat") 1904wasm_i8x16_add_saturate(v128_t __a, v128_t __b) { 1905 return wasm_i8x16_add_sat(__a, __b); 1906} 1907 1908static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_u8x16_add_sat") 1909wasm_u8x16_add_saturate(v128_t __a, v128_t __b) { 1910 return wasm_u8x16_add_sat(__a, __b); 1911} 1912 1913static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_i8x16_sub_sat") 1914wasm_i8x16_sub_saturate(v128_t __a, v128_t __b) { 1915 return wasm_i8x16_sub_sat(__a, __b); 1916} 1917 1918static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_u8x16_sub_sat") 1919wasm_u8x16_sub_saturate(v128_t __a, v128_t __b) { 1920 return wasm_u8x16_sub_sat(__a, __b); 1921} 1922 1923static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_i16x8_add_sat") 1924wasm_i16x8_add_saturate(v128_t __a, v128_t __b) { 1925 return wasm_i16x8_add_sat(__a, __b); 1926} 1927 1928static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_u16x8_add_sat") 1929wasm_u16x8_add_saturate(v128_t __a, v128_t __b) { 1930 return wasm_u16x8_add_sat(__a, __b); 1931} 1932 1933static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_i16x8_sub_sat") 1934wasm_i16x8_sub_saturate(v128_t __a, v128_t __b) { 1935 return wasm_i16x8_sub_sat(__a, __b); 1936} 1937 1938static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_u16x8_sub_sat") 1939wasm_u16x8_sub_saturate(v128_t __a, v128_t __b) { 1940 return wasm_u16x8_sub_sat(__a, __b); 1941} 1942 1943static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_i16x8_extend_low_i8x16") 1944wasm_i16x8_widen_low_i8x16(v128_t __a) { 1945 return wasm_i16x8_extend_low_i8x16(__a); 1946} 1947 1948static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_i16x8_extend_high_i8x16") 1949wasm_i16x8_widen_high_i8x16(v128_t __a) { 1950 return wasm_i16x8_extend_high_i8x16(__a); 1951} 1952 1953static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_u16x8_extend_low_u8x16") 1954wasm_i16x8_widen_low_u8x16(v128_t __a) { 1955 return wasm_u16x8_extend_low_u8x16(__a); 1956} 1957 1958static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_u16x8_extend_high_u8x16") 1959wasm_i16x8_widen_high_u8x16(v128_t __a) { 1960 return wasm_u16x8_extend_high_u8x16(__a); 1961} 1962 1963static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_i32x4_extend_low_i16x8") 1964wasm_i32x4_widen_low_i16x8(v128_t __a) { 1965 return wasm_i32x4_extend_low_i16x8(__a); 1966} 1967 1968static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_i32x4_extend_high_i16x8") 1969wasm_i32x4_widen_high_i16x8(v128_t __a) { 1970 return wasm_i32x4_extend_high_i16x8(__a); 1971} 1972 1973static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_u32x4_extend_low_u16x8") 1974wasm_i32x4_widen_low_u16x8(v128_t __a) { 1975 return wasm_u32x4_extend_low_u16x8(__a); 1976} 1977 1978static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_u32x4_extend_high_u16x8") 1979wasm_i32x4_widen_high_u16x8(v128_t __a) { 1980 return wasm_u32x4_extend_high_u16x8(__a); 1981} 1982 1983static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_i32x4_trunc_sat_f32x4") 1984wasm_i32x4_trunc_saturate_f32x4(v128_t __a) { 1985 return wasm_i32x4_trunc_sat_f32x4(__a); 1986} 1987 1988static __inline__ v128_t __DEPRECATED_FN_ATTRS("wasm_u32x4_trunc_sat_f32x4") 1989wasm_u32x4_trunc_saturate_f32x4(v128_t __a) { 1990 return wasm_u32x4_trunc_sat_f32x4(__a); 1991} 1992 1993// Undefine helper macros 1994#undef __DEFAULT_FN_ATTRS 1995#undef __DEPRECATED_FN_ATTRS 1996 1997#endif // __WASM_SIMD128_H 1998