1 /*===---- arm_fp16.h - ARM FP16 intrinsics ---------------------------------=== 2 * 3 * Permission is hereby granted, free of charge, to any person obtaining a copy 4 * of this software and associated documentation files (the "Software"), to deal 5 * in the Software without restriction, including without limitation the rights 6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 * copies of the Software, and to permit persons to whom the Software is 8 * furnished to do so, subject to the following conditions: 9 * 10 * The above copyright notice and this permission notice shall be included in 11 * all copies or substantial portions of the Software. 12 * 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 * THE SOFTWARE. 20 * 21 *===-----------------------------------------------------------------------=== 22 */ 23 24 #ifndef __ARM_FP16_H 25 #define __ARM_FP16_H 26 27 #include <stdint.h> 28 29 typedef __fp16 float16_t; 30 #define __ai static __inline__ __attribute__((__always_inline__, __nodebug__)) 31 32 #if defined(__aarch64__) 33 #define vabdh_f16(__p0, __p1) __extension__ ({ \ 34 float16_t __ret; \ 35 float16_t __s0 = __p0; \ 36 float16_t __s1 = __p1; \ 37 __ret = (float16_t) __builtin_neon_vabdh_f16(__s0, __s1); \ 38 __ret; \ 39 }) 40 #define vabsh_f16(__p0) __extension__ ({ \ 41 float16_t __ret; \ 42 float16_t __s0 = __p0; \ 43 __ret = (float16_t) __builtin_neon_vabsh_f16(__s0); \ 44 __ret; \ 45 }) 46 #define vaddh_f16(__p0, __p1) __extension__ ({ \ 47 float16_t __ret; \ 48 float16_t __s0 = __p0; \ 49 float16_t __s1 = __p1; \ 50 __ret = (float16_t) __builtin_neon_vaddh_f16(__s0, __s1); \ 51 __ret; \ 52 }) 53 #define vcageh_f16(__p0, __p1) __extension__ ({ \ 54 uint16_t __ret; \ 55 float16_t __s0 = __p0; \ 56 float16_t __s1 = __p1; \ 57 __ret = (uint16_t) __builtin_neon_vcageh_f16(__s0, __s1); \ 58 __ret; \ 59 }) 60 #define vcagth_f16(__p0, __p1) __extension__ ({ \ 61 uint16_t __ret; \ 62 float16_t __s0 = __p0; \ 63 float16_t __s1 = __p1; \ 64 __ret = (uint16_t) __builtin_neon_vcagth_f16(__s0, __s1); \ 65 __ret; \ 66 }) 67 #define vcaleh_f16(__p0, __p1) __extension__ ({ \ 68 uint16_t __ret; \ 69 float16_t __s0 = __p0; \ 70 float16_t __s1 = __p1; \ 71 __ret = (uint16_t) __builtin_neon_vcaleh_f16(__s0, __s1); \ 72 __ret; \ 73 }) 74 #define vcalth_f16(__p0, __p1) __extension__ ({ \ 75 uint16_t __ret; \ 76 float16_t __s0 = __p0; \ 77 float16_t __s1 = __p1; \ 78 __ret = (uint16_t) __builtin_neon_vcalth_f16(__s0, __s1); \ 79 __ret; \ 80 }) 81 #define vceqh_f16(__p0, __p1) __extension__ ({ \ 82 uint16_t __ret; \ 83 float16_t __s0 = __p0; \ 84 float16_t __s1 = __p1; \ 85 __ret = (uint16_t) __builtin_neon_vceqh_f16(__s0, __s1); \ 86 __ret; \ 87 }) 88 #define vceqzh_f16(__p0) __extension__ ({ \ 89 uint16_t __ret; \ 90 float16_t __s0 = __p0; \ 91 __ret = (uint16_t) __builtin_neon_vceqzh_f16(__s0); \ 92 __ret; \ 93 }) 94 #define vcgeh_f16(__p0, __p1) __extension__ ({ \ 95 uint16_t __ret; \ 96 float16_t __s0 = __p0; \ 97 float16_t __s1 = __p1; \ 98 __ret = (uint16_t) __builtin_neon_vcgeh_f16(__s0, __s1); \ 99 __ret; \ 100 }) 101 #define vcgezh_f16(__p0) __extension__ ({ \ 102 uint16_t __ret; \ 103 float16_t __s0 = __p0; \ 104 __ret = (uint16_t) __builtin_neon_vcgezh_f16(__s0); \ 105 __ret; \ 106 }) 107 #define vcgth_f16(__p0, __p1) __extension__ ({ \ 108 uint16_t __ret; \ 109 float16_t __s0 = __p0; \ 110 float16_t __s1 = __p1; \ 111 __ret = (uint16_t) __builtin_neon_vcgth_f16(__s0, __s1); \ 112 __ret; \ 113 }) 114 #define vcgtzh_f16(__p0) __extension__ ({ \ 115 uint16_t __ret; \ 116 float16_t __s0 = __p0; \ 117 __ret = (uint16_t) __builtin_neon_vcgtzh_f16(__s0); \ 118 __ret; \ 119 }) 120 #define vcleh_f16(__p0, __p1) __extension__ ({ \ 121 uint16_t __ret; \ 122 float16_t __s0 = __p0; \ 123 float16_t __s1 = __p1; \ 124 __ret = (uint16_t) __builtin_neon_vcleh_f16(__s0, __s1); \ 125 __ret; \ 126 }) 127 #define vclezh_f16(__p0) __extension__ ({ \ 128 uint16_t __ret; \ 129 float16_t __s0 = __p0; \ 130 __ret = (uint16_t) __builtin_neon_vclezh_f16(__s0); \ 131 __ret; \ 132 }) 133 #define vclth_f16(__p0, __p1) __extension__ ({ \ 134 uint16_t __ret; \ 135 float16_t __s0 = __p0; \ 136 float16_t __s1 = __p1; \ 137 __ret = (uint16_t) __builtin_neon_vclth_f16(__s0, __s1); \ 138 __ret; \ 139 }) 140 #define vcltzh_f16(__p0) __extension__ ({ \ 141 uint16_t __ret; \ 142 float16_t __s0 = __p0; \ 143 __ret = (uint16_t) __builtin_neon_vcltzh_f16(__s0); \ 144 __ret; \ 145 }) 146 #define vcvth_n_s16_f16(__p0, __p1) __extension__ ({ \ 147 int16_t __ret; \ 148 float16_t __s0 = __p0; \ 149 __ret = (int16_t) __builtin_neon_vcvth_n_s16_f16(__s0, __p1); \ 150 __ret; \ 151 }) 152 #define vcvth_n_s32_f16(__p0, __p1) __extension__ ({ \ 153 int32_t __ret; \ 154 float16_t __s0 = __p0; \ 155 __ret = (int32_t) __builtin_neon_vcvth_n_s32_f16(__s0, __p1); \ 156 __ret; \ 157 }) 158 #define vcvth_n_s64_f16(__p0, __p1) __extension__ ({ \ 159 int64_t __ret; \ 160 float16_t __s0 = __p0; \ 161 __ret = (int64_t) __builtin_neon_vcvth_n_s64_f16(__s0, __p1); \ 162 __ret; \ 163 }) 164 #define vcvth_n_u16_f16(__p0, __p1) __extension__ ({ \ 165 uint16_t __ret; \ 166 float16_t __s0 = __p0; \ 167 __ret = (uint16_t) __builtin_neon_vcvth_n_u16_f16(__s0, __p1); \ 168 __ret; \ 169 }) 170 #define vcvth_n_u32_f16(__p0, __p1) __extension__ ({ \ 171 uint32_t __ret; \ 172 float16_t __s0 = __p0; \ 173 __ret = (uint32_t) __builtin_neon_vcvth_n_u32_f16(__s0, __p1); \ 174 __ret; \ 175 }) 176 #define vcvth_n_u64_f16(__p0, __p1) __extension__ ({ \ 177 uint64_t __ret; \ 178 float16_t __s0 = __p0; \ 179 __ret = (uint64_t) __builtin_neon_vcvth_n_u64_f16(__s0, __p1); \ 180 __ret; \ 181 }) 182 #define vcvth_s16_f16(__p0) __extension__ ({ \ 183 int16_t __ret; \ 184 float16_t __s0 = __p0; \ 185 __ret = (int16_t) __builtin_neon_vcvth_s16_f16(__s0); \ 186 __ret; \ 187 }) 188 #define vcvth_s32_f16(__p0) __extension__ ({ \ 189 int32_t __ret; \ 190 float16_t __s0 = __p0; \ 191 __ret = (int32_t) __builtin_neon_vcvth_s32_f16(__s0); \ 192 __ret; \ 193 }) 194 #define vcvth_s64_f16(__p0) __extension__ ({ \ 195 int64_t __ret; \ 196 float16_t __s0 = __p0; \ 197 __ret = (int64_t) __builtin_neon_vcvth_s64_f16(__s0); \ 198 __ret; \ 199 }) 200 #define vcvth_u16_f16(__p0) __extension__ ({ \ 201 uint16_t __ret; \ 202 float16_t __s0 = __p0; \ 203 __ret = (uint16_t) __builtin_neon_vcvth_u16_f16(__s0); \ 204 __ret; \ 205 }) 206 #define vcvth_u32_f16(__p0) __extension__ ({ \ 207 uint32_t __ret; \ 208 float16_t __s0 = __p0; \ 209 __ret = (uint32_t) __builtin_neon_vcvth_u32_f16(__s0); \ 210 __ret; \ 211 }) 212 #define vcvth_u64_f16(__p0) __extension__ ({ \ 213 uint64_t __ret; \ 214 float16_t __s0 = __p0; \ 215 __ret = (uint64_t) __builtin_neon_vcvth_u64_f16(__s0); \ 216 __ret; \ 217 }) 218 #define vcvtah_s16_f16(__p0) __extension__ ({ \ 219 int16_t __ret; \ 220 float16_t __s0 = __p0; \ 221 __ret = (int16_t) __builtin_neon_vcvtah_s16_f16(__s0); \ 222 __ret; \ 223 }) 224 #define vcvtah_s32_f16(__p0) __extension__ ({ \ 225 int32_t __ret; \ 226 float16_t __s0 = __p0; \ 227 __ret = (int32_t) __builtin_neon_vcvtah_s32_f16(__s0); \ 228 __ret; \ 229 }) 230 #define vcvtah_s64_f16(__p0) __extension__ ({ \ 231 int64_t __ret; \ 232 float16_t __s0 = __p0; \ 233 __ret = (int64_t) __builtin_neon_vcvtah_s64_f16(__s0); \ 234 __ret; \ 235 }) 236 #define vcvtah_u16_f16(__p0) __extension__ ({ \ 237 uint16_t __ret; \ 238 float16_t __s0 = __p0; \ 239 __ret = (uint16_t) __builtin_neon_vcvtah_u16_f16(__s0); \ 240 __ret; \ 241 }) 242 #define vcvtah_u32_f16(__p0) __extension__ ({ \ 243 uint32_t __ret; \ 244 float16_t __s0 = __p0; \ 245 __ret = (uint32_t) __builtin_neon_vcvtah_u32_f16(__s0); \ 246 __ret; \ 247 }) 248 #define vcvtah_u64_f16(__p0) __extension__ ({ \ 249 uint64_t __ret; \ 250 float16_t __s0 = __p0; \ 251 __ret = (uint64_t) __builtin_neon_vcvtah_u64_f16(__s0); \ 252 __ret; \ 253 }) 254 #define vcvth_f16_u16(__p0) __extension__ ({ \ 255 float16_t __ret; \ 256 uint16_t __s0 = __p0; \ 257 __ret = (float16_t) __builtin_neon_vcvth_f16_u16(__s0); \ 258 __ret; \ 259 }) 260 #define vcvth_f16_s16(__p0) __extension__ ({ \ 261 float16_t __ret; \ 262 int16_t __s0 = __p0; \ 263 __ret = (float16_t) __builtin_neon_vcvth_f16_s16(__s0); \ 264 __ret; \ 265 }) 266 #define vcvth_f16_u32(__p0) __extension__ ({ \ 267 float16_t __ret; \ 268 uint32_t __s0 = __p0; \ 269 __ret = (float16_t) __builtin_neon_vcvth_f16_u32(__s0); \ 270 __ret; \ 271 }) 272 #define vcvth_f16_s32(__p0) __extension__ ({ \ 273 float16_t __ret; \ 274 int32_t __s0 = __p0; \ 275 __ret = (float16_t) __builtin_neon_vcvth_f16_s32(__s0); \ 276 __ret; \ 277 }) 278 #define vcvth_f16_u64(__p0) __extension__ ({ \ 279 float16_t __ret; \ 280 uint64_t __s0 = __p0; \ 281 __ret = (float16_t) __builtin_neon_vcvth_f16_u64(__s0); \ 282 __ret; \ 283 }) 284 #define vcvth_f16_s64(__p0) __extension__ ({ \ 285 float16_t __ret; \ 286 int64_t __s0 = __p0; \ 287 __ret = (float16_t) __builtin_neon_vcvth_f16_s64(__s0); \ 288 __ret; \ 289 }) 290 #define vcvth_n_f16_u32(__p0, __p1) __extension__ ({ \ 291 float16_t __ret; \ 292 uint32_t __s0 = __p0; \ 293 __ret = (float16_t) __builtin_neon_vcvth_n_f16_u32(__s0, __p1); \ 294 __ret; \ 295 }) 296 #define vcvth_n_f16_s32(__p0, __p1) __extension__ ({ \ 297 float16_t __ret; \ 298 int32_t __s0 = __p0; \ 299 __ret = (float16_t) __builtin_neon_vcvth_n_f16_s32(__s0, __p1); \ 300 __ret; \ 301 }) 302 #define vcvth_n_f16_u64(__p0, __p1) __extension__ ({ \ 303 float16_t __ret; \ 304 uint64_t __s0 = __p0; \ 305 __ret = (float16_t) __builtin_neon_vcvth_n_f16_u64(__s0, __p1); \ 306 __ret; \ 307 }) 308 #define vcvth_n_f16_s64(__p0, __p1) __extension__ ({ \ 309 float16_t __ret; \ 310 int64_t __s0 = __p0; \ 311 __ret = (float16_t) __builtin_neon_vcvth_n_f16_s64(__s0, __p1); \ 312 __ret; \ 313 }) 314 #define vcvth_n_f16_u16(__p0, __p1) __extension__ ({ \ 315 float16_t __ret; \ 316 uint16_t __s0 = __p0; \ 317 __ret = (float16_t) __builtin_neon_vcvth_n_f16_u16(__s0, __p1); \ 318 __ret; \ 319 }) 320 #define vcvth_n_f16_s16(__p0, __p1) __extension__ ({ \ 321 float16_t __ret; \ 322 int16_t __s0 = __p0; \ 323 __ret = (float16_t) __builtin_neon_vcvth_n_f16_s16(__s0, __p1); \ 324 __ret; \ 325 }) 326 #define vcvtmh_s16_f16(__p0) __extension__ ({ \ 327 int16_t __ret; \ 328 float16_t __s0 = __p0; \ 329 __ret = (int16_t) __builtin_neon_vcvtmh_s16_f16(__s0); \ 330 __ret; \ 331 }) 332 #define vcvtmh_s32_f16(__p0) __extension__ ({ \ 333 int32_t __ret; \ 334 float16_t __s0 = __p0; \ 335 __ret = (int32_t) __builtin_neon_vcvtmh_s32_f16(__s0); \ 336 __ret; \ 337 }) 338 #define vcvtmh_s64_f16(__p0) __extension__ ({ \ 339 int64_t __ret; \ 340 float16_t __s0 = __p0; \ 341 __ret = (int64_t) __builtin_neon_vcvtmh_s64_f16(__s0); \ 342 __ret; \ 343 }) 344 #define vcvtmh_u16_f16(__p0) __extension__ ({ \ 345 uint16_t __ret; \ 346 float16_t __s0 = __p0; \ 347 __ret = (uint16_t) __builtin_neon_vcvtmh_u16_f16(__s0); \ 348 __ret; \ 349 }) 350 #define vcvtmh_u32_f16(__p0) __extension__ ({ \ 351 uint32_t __ret; \ 352 float16_t __s0 = __p0; \ 353 __ret = (uint32_t) __builtin_neon_vcvtmh_u32_f16(__s0); \ 354 __ret; \ 355 }) 356 #define vcvtmh_u64_f16(__p0) __extension__ ({ \ 357 uint64_t __ret; \ 358 float16_t __s0 = __p0; \ 359 __ret = (uint64_t) __builtin_neon_vcvtmh_u64_f16(__s0); \ 360 __ret; \ 361 }) 362 #define vcvtnh_s16_f16(__p0) __extension__ ({ \ 363 int16_t __ret; \ 364 float16_t __s0 = __p0; \ 365 __ret = (int16_t) __builtin_neon_vcvtnh_s16_f16(__s0); \ 366 __ret; \ 367 }) 368 #define vcvtnh_s32_f16(__p0) __extension__ ({ \ 369 int32_t __ret; \ 370 float16_t __s0 = __p0; \ 371 __ret = (int32_t) __builtin_neon_vcvtnh_s32_f16(__s0); \ 372 __ret; \ 373 }) 374 #define vcvtnh_s64_f16(__p0) __extension__ ({ \ 375 int64_t __ret; \ 376 float16_t __s0 = __p0; \ 377 __ret = (int64_t) __builtin_neon_vcvtnh_s64_f16(__s0); \ 378 __ret; \ 379 }) 380 #define vcvtnh_u16_f16(__p0) __extension__ ({ \ 381 uint16_t __ret; \ 382 float16_t __s0 = __p0; \ 383 __ret = (uint16_t) __builtin_neon_vcvtnh_u16_f16(__s0); \ 384 __ret; \ 385 }) 386 #define vcvtnh_u32_f16(__p0) __extension__ ({ \ 387 uint32_t __ret; \ 388 float16_t __s0 = __p0; \ 389 __ret = (uint32_t) __builtin_neon_vcvtnh_u32_f16(__s0); \ 390 __ret; \ 391 }) 392 #define vcvtnh_u64_f16(__p0) __extension__ ({ \ 393 uint64_t __ret; \ 394 float16_t __s0 = __p0; \ 395 __ret = (uint64_t) __builtin_neon_vcvtnh_u64_f16(__s0); \ 396 __ret; \ 397 }) 398 #define vcvtph_s16_f16(__p0) __extension__ ({ \ 399 int16_t __ret; \ 400 float16_t __s0 = __p0; \ 401 __ret = (int16_t) __builtin_neon_vcvtph_s16_f16(__s0); \ 402 __ret; \ 403 }) 404 #define vcvtph_s32_f16(__p0) __extension__ ({ \ 405 int32_t __ret; \ 406 float16_t __s0 = __p0; \ 407 __ret = (int32_t) __builtin_neon_vcvtph_s32_f16(__s0); \ 408 __ret; \ 409 }) 410 #define vcvtph_s64_f16(__p0) __extension__ ({ \ 411 int64_t __ret; \ 412 float16_t __s0 = __p0; \ 413 __ret = (int64_t) __builtin_neon_vcvtph_s64_f16(__s0); \ 414 __ret; \ 415 }) 416 #define vcvtph_u16_f16(__p0) __extension__ ({ \ 417 uint16_t __ret; \ 418 float16_t __s0 = __p0; \ 419 __ret = (uint16_t) __builtin_neon_vcvtph_u16_f16(__s0); \ 420 __ret; \ 421 }) 422 #define vcvtph_u32_f16(__p0) __extension__ ({ \ 423 uint32_t __ret; \ 424 float16_t __s0 = __p0; \ 425 __ret = (uint32_t) __builtin_neon_vcvtph_u32_f16(__s0); \ 426 __ret; \ 427 }) 428 #define vcvtph_u64_f16(__p0) __extension__ ({ \ 429 uint64_t __ret; \ 430 float16_t __s0 = __p0; \ 431 __ret = (uint64_t) __builtin_neon_vcvtph_u64_f16(__s0); \ 432 __ret; \ 433 }) 434 #define vdivh_f16(__p0, __p1) __extension__ ({ \ 435 float16_t __ret; \ 436 float16_t __s0 = __p0; \ 437 float16_t __s1 = __p1; \ 438 __ret = (float16_t) __builtin_neon_vdivh_f16(__s0, __s1); \ 439 __ret; \ 440 }) 441 #define vfmah_f16(__p0, __p1, __p2) __extension__ ({ \ 442 float16_t __ret; \ 443 float16_t __s0 = __p0; \ 444 float16_t __s1 = __p1; \ 445 float16_t __s2 = __p2; \ 446 __ret = (float16_t) __builtin_neon_vfmah_f16(__s0, __s1, __s2); \ 447 __ret; \ 448 }) 449 #define vfmsh_f16(__p0, __p1, __p2) __extension__ ({ \ 450 float16_t __ret; \ 451 float16_t __s0 = __p0; \ 452 float16_t __s1 = __p1; \ 453 float16_t __s2 = __p2; \ 454 __ret = (float16_t) __builtin_neon_vfmsh_f16(__s0, __s1, __s2); \ 455 __ret; \ 456 }) 457 #define vmaxh_f16(__p0, __p1) __extension__ ({ \ 458 float16_t __ret; \ 459 float16_t __s0 = __p0; \ 460 float16_t __s1 = __p1; \ 461 __ret = (float16_t) __builtin_neon_vmaxh_f16(__s0, __s1); \ 462 __ret; \ 463 }) 464 #define vmaxnmh_f16(__p0, __p1) __extension__ ({ \ 465 float16_t __ret; \ 466 float16_t __s0 = __p0; \ 467 float16_t __s1 = __p1; \ 468 __ret = (float16_t) __builtin_neon_vmaxnmh_f16(__s0, __s1); \ 469 __ret; \ 470 }) 471 #define vminh_f16(__p0, __p1) __extension__ ({ \ 472 float16_t __ret; \ 473 float16_t __s0 = __p0; \ 474 float16_t __s1 = __p1; \ 475 __ret = (float16_t) __builtin_neon_vminh_f16(__s0, __s1); \ 476 __ret; \ 477 }) 478 #define vminnmh_f16(__p0, __p1) __extension__ ({ \ 479 float16_t __ret; \ 480 float16_t __s0 = __p0; \ 481 float16_t __s1 = __p1; \ 482 __ret = (float16_t) __builtin_neon_vminnmh_f16(__s0, __s1); \ 483 __ret; \ 484 }) 485 #define vmulh_f16(__p0, __p1) __extension__ ({ \ 486 float16_t __ret; \ 487 float16_t __s0 = __p0; \ 488 float16_t __s1 = __p1; \ 489 __ret = (float16_t) __builtin_neon_vmulh_f16(__s0, __s1); \ 490 __ret; \ 491 }) 492 #define vmulxh_f16(__p0, __p1) __extension__ ({ \ 493 float16_t __ret; \ 494 float16_t __s0 = __p0; \ 495 float16_t __s1 = __p1; \ 496 __ret = (float16_t) __builtin_neon_vmulxh_f16(__s0, __s1); \ 497 __ret; \ 498 }) 499 #define vnegh_f16(__p0) __extension__ ({ \ 500 float16_t __ret; \ 501 float16_t __s0 = __p0; \ 502 __ret = (float16_t) __builtin_neon_vnegh_f16(__s0); \ 503 __ret; \ 504 }) 505 #define vrecpeh_f16(__p0) __extension__ ({ \ 506 float16_t __ret; \ 507 float16_t __s0 = __p0; \ 508 __ret = (float16_t) __builtin_neon_vrecpeh_f16(__s0); \ 509 __ret; \ 510 }) 511 #define vrecpsh_f16(__p0, __p1) __extension__ ({ \ 512 float16_t __ret; \ 513 float16_t __s0 = __p0; \ 514 float16_t __s1 = __p1; \ 515 __ret = (float16_t) __builtin_neon_vrecpsh_f16(__s0, __s1); \ 516 __ret; \ 517 }) 518 #define vrecpxh_f16(__p0) __extension__ ({ \ 519 float16_t __ret; \ 520 float16_t __s0 = __p0; \ 521 __ret = (float16_t) __builtin_neon_vrecpxh_f16(__s0); \ 522 __ret; \ 523 }) 524 #define vrndh_f16(__p0) __extension__ ({ \ 525 float16_t __ret; \ 526 float16_t __s0 = __p0; \ 527 __ret = (float16_t) __builtin_neon_vrndh_f16(__s0); \ 528 __ret; \ 529 }) 530 #define vrndah_f16(__p0) __extension__ ({ \ 531 float16_t __ret; \ 532 float16_t __s0 = __p0; \ 533 __ret = (float16_t) __builtin_neon_vrndah_f16(__s0); \ 534 __ret; \ 535 }) 536 #define vrndih_f16(__p0) __extension__ ({ \ 537 float16_t __ret; \ 538 float16_t __s0 = __p0; \ 539 __ret = (float16_t) __builtin_neon_vrndih_f16(__s0); \ 540 __ret; \ 541 }) 542 #define vrndmh_f16(__p0) __extension__ ({ \ 543 float16_t __ret; \ 544 float16_t __s0 = __p0; \ 545 __ret = (float16_t) __builtin_neon_vrndmh_f16(__s0); \ 546 __ret; \ 547 }) 548 #define vrndnh_f16(__p0) __extension__ ({ \ 549 float16_t __ret; \ 550 float16_t __s0 = __p0; \ 551 __ret = (float16_t) __builtin_neon_vrndnh_f16(__s0); \ 552 __ret; \ 553 }) 554 #define vrndph_f16(__p0) __extension__ ({ \ 555 float16_t __ret; \ 556 float16_t __s0 = __p0; \ 557 __ret = (float16_t) __builtin_neon_vrndph_f16(__s0); \ 558 __ret; \ 559 }) 560 #define vrndxh_f16(__p0) __extension__ ({ \ 561 float16_t __ret; \ 562 float16_t __s0 = __p0; \ 563 __ret = (float16_t) __builtin_neon_vrndxh_f16(__s0); \ 564 __ret; \ 565 }) 566 #define vrsqrteh_f16(__p0) __extension__ ({ \ 567 float16_t __ret; \ 568 float16_t __s0 = __p0; \ 569 __ret = (float16_t) __builtin_neon_vrsqrteh_f16(__s0); \ 570 __ret; \ 571 }) 572 #define vrsqrtsh_f16(__p0, __p1) __extension__ ({ \ 573 float16_t __ret; \ 574 float16_t __s0 = __p0; \ 575 float16_t __s1 = __p1; \ 576 __ret = (float16_t) __builtin_neon_vrsqrtsh_f16(__s0, __s1); \ 577 __ret; \ 578 }) 579 #define vsqrth_f16(__p0) __extension__ ({ \ 580 float16_t __ret; \ 581 float16_t __s0 = __p0; \ 582 __ret = (float16_t) __builtin_neon_vsqrth_f16(__s0); \ 583 __ret; \ 584 }) 585 #define vsubh_f16(__p0, __p1) __extension__ ({ \ 586 float16_t __ret; \ 587 float16_t __s0 = __p0; \ 588 float16_t __s1 = __p1; \ 589 __ret = (float16_t) __builtin_neon_vsubh_f16(__s0, __s1); \ 590 __ret; \ 591 }) 592 #endif 593 594 #undef __ai 595 596 #endif /* __ARM_FP16_H */ 597