zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

arm_fp16.h (17349B) - Raw


      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__) || defined(__arm64ec__)
     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 */