1 /* Copyright (C) 2011-2019 Free Software Foundation, Inc. 2 3 This file is part of GCC. 4 5 GCC is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3, or (at your option) 8 any later version. 9 10 GCC is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 Under Section 7 of GPL version 3, you are granted additional 16 permissions described in the GCC Runtime Library Exception, version 17 3.1, as published by the Free Software Foundation. 18 19 You should have received a copy of the GNU General Public License and 20 a copy of the GCC Runtime Library Exception along with this program; 21 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 22 <http://www.gnu.org/licenses/>. */ 23 24 #ifndef _VISINTRIN_H_INCLUDED 25 #define _VISINTRIN_H_INCLUDED 26 27 #ifdef __VIS__ 28 29 typedef int __v2si __attribute__ ((__vector_size__ (8))); 30 typedef int __v1si __attribute__ ((__vector_size__ (4))); 31 typedef short __v4hi __attribute__ ((__vector_size__ (8))); 32 typedef short __v2hi __attribute__ ((__vector_size__ (4))); 33 typedef unsigned char __v8qi __attribute__ ((__vector_size__ (8))); 34 typedef unsigned char __v4qi __attribute__ ((__vector_size__ (4))); 35 typedef int __i64 __attribute__ ((__mode__ (DI))); 36 37 #if __VIS__ >= 0x200 38 39 extern __inline void 40 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 41 __vis_write_gsr (__i64 __A) 42 { 43 __builtin_vis_write_gsr (__A); 44 } 45 46 extern __inline __i64 47 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 48 __vis_read_gsr (void) 49 { 50 return __builtin_vis_read_gsr (); 51 } 52 53 #endif /* __VIS__ >= 0x200 */ 54 55 extern __inline void * 56 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 57 __vis_alignaddr (void *__A, long __B) 58 { 59 return __builtin_vis_alignaddr (__A, __B); 60 } 61 62 extern __inline void * 63 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 64 __vis_alignaddrl (void *__A, long __B) 65 { 66 return __builtin_vis_alignaddrl (__A, __B); 67 } 68 69 extern __inline __i64 70 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 71 __vis_faligndatadi (__i64 __A, __i64 __B) 72 { 73 return __builtin_vis_faligndatadi (__A, __B); 74 } 75 76 extern __inline __v2si 77 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 78 __vis_faligndatav2si (__v2si __A, __v2si __B) 79 { 80 return __builtin_vis_faligndatav2si (__A, __B); 81 } 82 83 extern __inline __v4hi 84 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 85 __vis_faligndatav4hi (__v4hi __A, __v4hi __B) 86 { 87 return __builtin_vis_faligndatav4hi (__A, __B); 88 } 89 90 extern __inline __v8qi 91 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 92 __vis_faligndatav8qi (__v8qi __A, __v8qi __B) 93 { 94 return __builtin_vis_faligndatav8qi (__A, __B); 95 } 96 97 extern __inline __v4hi 98 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 99 __vis_fexpand (__v4qi __A) 100 { 101 return __builtin_vis_fexpand (__A); 102 } 103 104 extern __inline __v4hi 105 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 106 __vis_fmul8x16 (__v4qi __A, __v4hi __B) 107 { 108 return __builtin_vis_fmul8x16 (__A, __B); 109 } 110 111 extern __inline __v4hi 112 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 113 __vis_fmul8x16au (__v4qi __A, __v2hi __B) 114 { 115 return __builtin_vis_fmul8x16au (__A, __B); 116 } 117 118 extern __inline __v4hi 119 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 120 __vis_fmul8x16al (__v4qi __A, __v2hi __B) 121 { 122 return __builtin_vis_fmul8x16al (__A, __B); 123 } 124 125 extern __inline __v4hi 126 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 127 __vis_fmul8sux16 (__v8qi __A, __v4hi __B) 128 { 129 return __builtin_vis_fmul8sux16 (__A, __B); 130 } 131 132 extern __inline __v4hi 133 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 134 __vis_fmul8ulx16 (__v8qi __A, __v4hi __B) 135 { 136 return __builtin_vis_fmul8ulx16 (__A, __B); 137 } 138 139 extern __inline __v2si 140 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 141 __vis_fmuld8sux16 (__v4qi __A, __v2hi __B) 142 { 143 return __builtin_vis_fmuld8sux16 (__A, __B); 144 } 145 146 extern __inline __v2si 147 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 148 __vis_fmuld8ulx16 (__v4qi __A, __v2hi __B) 149 { 150 return __builtin_vis_fmuld8ulx16 (__A, __B); 151 } 152 153 extern __inline __v4qi 154 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 155 __vis_fpack16 (__v4hi __A) 156 { 157 return __builtin_vis_fpack16 (__A); 158 } 159 160 extern __inline __v8qi 161 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 162 __vis_fpack32 (__v2si __A, __v8qi __B) 163 { 164 return __builtin_vis_fpack32 (__A, __B); 165 } 166 167 extern __inline __v2hi 168 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 169 __vis_fpackfix (__v2si __A) 170 { 171 return __builtin_vis_fpackfix (__A); 172 } 173 174 extern __inline __v8qi 175 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 176 __vis_fpmerge (__v4qi __A, __v4qi __B) 177 { 178 return __builtin_vis_fpmerge (__A, __B); 179 } 180 181 extern __inline __i64 182 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 183 __vis_pdist (__v8qi __A, __v8qi __B, __i64 __C) 184 { 185 return __builtin_vis_pdist (__A, __B, __C); 186 } 187 188 extern __inline long 189 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 190 __vis_edge8 (void *__A, void *__B) 191 { 192 return __builtin_vis_edge8 (__A, __B); 193 } 194 195 extern __inline long 196 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 197 __vis_edge8l (void *__A, void *__B) 198 { 199 return __builtin_vis_edge8l (__A, __B); 200 } 201 202 extern __inline long 203 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 204 __vis_edge16 (void *__A, void *__B) 205 { 206 return __builtin_vis_edge16 (__A, __B); 207 } 208 209 extern __inline long 210 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 211 __vis_edge16l (void *__A, void *__B) 212 { 213 return __builtin_vis_edge16l (__A, __B); 214 } 215 216 extern __inline long 217 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 218 __vis_edge32 (void *__A, void *__B) 219 { 220 return __builtin_vis_edge32 (__A, __B); 221 } 222 223 extern __inline long 224 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 225 __vis_edge32l (void *__A, void *__B) 226 { 227 return __builtin_vis_edge32l (__A, __B); 228 } 229 230 extern __inline long 231 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 232 __vis_fcmple16 (__v4hi __A, __v4hi __B) 233 { 234 return __builtin_vis_fcmple16 (__A, __B); 235 } 236 237 extern __inline long 238 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 239 __vis_fcmple32 (__v2si __A, __v2si __B) 240 { 241 return __builtin_vis_fcmple32 (__A, __B); 242 } 243 244 extern __inline long 245 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 246 __vis_fcmpne16 (__v4hi __A, __v4hi __B) 247 { 248 return __builtin_vis_fcmpne16 (__A, __B); 249 } 250 251 extern __inline long 252 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 253 __vis_fcmpne32 (__v2si __A, __v2si __B) 254 { 255 return __builtin_vis_fcmpne32 (__A, __B); 256 } 257 258 extern __inline long 259 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 260 __vis_fcmpgt16 (__v4hi __A, __v4hi __B) 261 { 262 return __builtin_vis_fcmpgt16 (__A, __B); 263 } 264 265 extern __inline long 266 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 267 __vis_fcmpgt32 (__v2si __A, __v2si __B) 268 { 269 return __builtin_vis_fcmpgt32 (__A, __B); 270 } 271 272 extern __inline long 273 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 274 __vis_fcmpeq16 (__v4hi __A, __v4hi __B) 275 { 276 return __builtin_vis_fcmpeq16 (__A, __B); 277 } 278 279 extern __inline long 280 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 281 __vis_fcmpeq32 (__v2si __A, __v2si __B) 282 { 283 return __builtin_vis_fcmpeq32 (__A, __B); 284 } 285 286 extern __inline __v4hi 287 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 288 __vis_fpadd16 (__v4hi __A, __v4hi __B) 289 { 290 return __builtin_vis_fpadd16 (__A, __B); 291 } 292 293 extern __inline __v2hi 294 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 295 __vis_fpadd16s (__v2hi __A, __v2hi __B) 296 { 297 return __builtin_vis_fpadd16s (__A, __B); 298 } 299 300 extern __inline __v2si 301 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 302 __vis_fpadd32 (__v2si __A, __v2si __B) 303 { 304 return __builtin_vis_fpadd32 (__A, __B); 305 } 306 307 extern __inline __v1si 308 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 309 __vis_fpadd32s (__v1si __A, __v1si __B) 310 { 311 return __builtin_vis_fpadd32s (__A, __B); 312 } 313 314 extern __inline __v4hi 315 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 316 __vis_fpsub16 (__v4hi __A, __v4hi __B) 317 { 318 return __builtin_vis_fpsub16 (__A, __B); 319 } 320 321 extern __inline __v2hi 322 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 323 __vis_fpsub16s (__v2hi __A, __v2hi __B) 324 { 325 return __builtin_vis_fpsub16s (__A, __B); 326 } 327 328 extern __inline __v2si 329 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 330 __vis_fpsub32 (__v2si __A, __v2si __B) 331 { 332 return __builtin_vis_fpsub32 (__A, __B); 333 } 334 335 extern __inline __v1si 336 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 337 __vis_fpsub32s (__v1si __A, __v1si __B) 338 { 339 return __builtin_vis_fpsub32s (__A, __B); 340 } 341 342 extern __inline long 343 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 344 __vis_array8 (long __A, long __B) 345 { 346 return __builtin_vis_array8 (__A, __B); 347 } 348 349 extern __inline long 350 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 351 __vis_array16 (long __A, long __B) 352 { 353 return __builtin_vis_array16 (__A, __B); 354 } 355 356 extern __inline long 357 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 358 __vis_array32 (long __A, long __B) 359 { 360 return __builtin_vis_array32 (__A, __B); 361 } 362 363 #if __VIS__ >= 0x200 364 365 extern __inline long 366 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 367 __vis_bmask (long __A, long __B) 368 { 369 return __builtin_vis_bmask (__A, __B); 370 } 371 372 extern __inline __i64 373 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 374 __vis_bshuffledi (__i64 __A, __i64 __B) 375 { 376 return __builtin_vis_bshuffledi (__A, __B); 377 } 378 379 extern __inline __v2si 380 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 381 __vis_bshufflev2si (__v2si __A, __v2si __B) 382 { 383 return __builtin_vis_bshufflev2si (__A, __B); 384 } 385 386 extern __inline __v4hi 387 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 388 __vis_bshufflev4hi (__v4hi __A, __v4hi __B) 389 { 390 return __builtin_vis_bshufflev4hi (__A, __B); 391 } 392 393 extern __inline __v8qi 394 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 395 __vis_bshufflev8qi (__v8qi __A, __v8qi __B) 396 { 397 return __builtin_vis_bshufflev8qi (__A, __B); 398 } 399 400 extern __inline long 401 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 402 __vis_edge8n (void *__A, void *__B) 403 { 404 return __builtin_vis_edge8n (__A, __B); 405 } 406 407 extern __inline long 408 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 409 __vis_edge8ln (void *__A, void *__B) 410 { 411 return __builtin_vis_edge8ln (__A, __B); 412 } 413 414 extern __inline long 415 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 416 __vis_edge16n (void *__A, void *__B) 417 { 418 return __builtin_vis_edge16n (__A, __B); 419 } 420 421 extern __inline long 422 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 423 __vis_edge16ln (void *__A, void *__B) 424 { 425 return __builtin_vis_edge16ln (__A, __B); 426 } 427 428 extern __inline long 429 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 430 __vis_edge32n (void *__A, void *__B) 431 { 432 return __builtin_vis_edge32n (__A, __B); 433 } 434 435 extern __inline long 436 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 437 __vis_edge32ln (void *__A, void *__B) 438 { 439 return __builtin_vis_edge32ln (__A, __B); 440 } 441 442 #endif /* __VIS__ >= 0x200 */ 443 444 #if __VIS__ >= 0x300 445 446 extern __inline void 447 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 448 __vis_cmask8 (long __A) 449 { 450 return __builtin_vis_cmask8 (__A); 451 } 452 453 extern __inline void 454 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 455 __vis_cmask16 (long __A) 456 { 457 return __builtin_vis_cmask16 (__A); 458 } 459 460 extern __inline void 461 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 462 __vis_cmask32 (long __A) 463 { 464 return __builtin_vis_cmask32 (__A); 465 } 466 467 extern __inline __v4hi 468 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 469 __vis_fchksm16 (__v4hi __A, __v4hi __B) 470 { 471 return __builtin_vis_fchksm16 (__A, __B); 472 } 473 474 extern __inline __v4hi 475 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 476 __vis_fsll16 (__v4hi __A, __v4hi __B) 477 { 478 return __builtin_vis_fsll16 (__A, __B); 479 } 480 481 extern __inline __v4hi 482 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 483 __vis_fslas16 (__v4hi __A, __v4hi __B) 484 { 485 return __builtin_vis_fslas16 (__A, __B); 486 } 487 488 extern __inline __v4hi 489 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 490 __vis_fsrl16 (__v4hi __A, __v4hi __B) 491 { 492 return __builtin_vis_fsrl16 (__A, __B); 493 } 494 495 extern __inline __v4hi 496 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 497 __vis_fsra16 (__v4hi __A, __v4hi __B) 498 { 499 return __builtin_vis_fsra16 (__A, __B); 500 } 501 502 extern __inline __v2si 503 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 504 __vis_fsll32 (__v2si __A, __v2si __B) 505 { 506 return __builtin_vis_fsll32 (__A, __B); 507 } 508 509 extern __inline __v2si 510 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 511 __vis_fslas32 (__v2si __A, __v2si __B) 512 { 513 return __builtin_vis_fslas32 (__A, __B); 514 } 515 516 extern __inline __v2si 517 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 518 __vis_fsrl32 (__v2si __A, __v2si __B) 519 { 520 return __builtin_vis_fsrl32 (__A, __B); 521 } 522 523 extern __inline __v2si 524 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 525 __vis_fsra32 (__v2si __A, __v2si __B) 526 { 527 return __builtin_vis_fsra32 (__A, __B); 528 } 529 530 extern __inline long 531 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 532 __vis_pdistn (__v8qi __A, __v8qi __B) 533 { 534 return __builtin_vis_pdistn (__A, __B); 535 } 536 537 extern __inline __v4hi 538 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 539 __vis_fmean16 (__v4hi __A, __v4hi __B) 540 { 541 return __builtin_vis_fmean16 (__A, __B); 542 } 543 544 extern __inline __i64 545 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 546 __vis_fpadd64 (__i64 __A, __i64 __B) 547 { 548 return __builtin_vis_fpadd64 (__A, __B); 549 } 550 551 extern __inline __i64 552 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 553 __vis_fpsub64 (__i64 __A, __i64 __B) 554 { 555 return __builtin_vis_fpsub64 (__A, __B); 556 } 557 558 extern __inline __v4hi 559 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 560 __vis_fpadds16 (__v4hi __A, __v4hi __B) 561 { 562 return __builtin_vis_fpadds16 (__A, __B); 563 } 564 565 extern __inline __v2hi 566 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 567 __vis_fpadds16s (__v2hi __A, __v2hi __B) 568 { 569 return __builtin_vis_fpadds16s (__A, __B); 570 } 571 572 extern __inline __v4hi 573 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 574 __vis_fpsubs16 (__v4hi __A, __v4hi __B) 575 { 576 return __builtin_vis_fpsubs16 (__A, __B); 577 } 578 579 extern __inline __v2hi 580 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 581 __vis_fpsubs16s (__v2hi __A, __v2hi __B) 582 { 583 return __builtin_vis_fpsubs16s (__A, __B); 584 } 585 586 extern __inline __v2si 587 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 588 __vis_fpadds32 (__v2si __A, __v2si __B) 589 { 590 return __builtin_vis_fpadds32 (__A, __B); 591 } 592 593 extern __inline __v1si 594 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 595 __vis_fpadds32s (__v1si __A, __v1si __B) 596 { 597 return __builtin_vis_fpadds32s (__A, __B); 598 } 599 600 extern __inline __v2si 601 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 602 __vis_fpsubs32 (__v2si __A, __v2si __B) 603 { 604 return __builtin_vis_fpsubs32 (__A, __B); 605 } 606 607 extern __inline __v1si 608 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 609 __vis_fpsubs32s (__v1si __A, __v1si __B) 610 { 611 return __builtin_vis_fpsubs32s (__A, __B); 612 } 613 614 extern __inline long 615 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 616 __vis_fucmple8 (__v8qi __A, __v8qi __B) 617 { 618 return __builtin_vis_fucmple8 (__A, __B); 619 } 620 621 extern __inline long 622 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 623 __vis_fucmpne8 (__v8qi __A, __v8qi __B) 624 { 625 return __builtin_vis_fucmpne8 (__A, __B); 626 } 627 628 extern __inline long 629 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 630 __vis_fucmpgt8 (__v8qi __A, __v8qi __B) 631 { 632 return __builtin_vis_fucmpgt8 (__A, __B); 633 } 634 635 extern __inline long 636 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 637 __vis_fucmpeq8 (__v8qi __A, __v8qi __B) 638 { 639 return __builtin_vis_fucmpeq8 (__A, __B); 640 } 641 642 extern __inline float 643 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 644 __vis_fhadds (float __A, float __B) 645 { 646 return __builtin_vis_fhadds (__A, __B); 647 } 648 649 extern __inline double 650 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 651 __vis_fhaddd (double __A, double __B) 652 { 653 return __builtin_vis_fhaddd (__A, __B); 654 } 655 656 extern __inline float 657 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 658 __vis_fhsubs (float __A, float __B) 659 { 660 return __builtin_vis_fhsubs (__A, __B); 661 } 662 663 extern __inline double 664 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 665 __vis_fhsubd (double __A, double __B) 666 { 667 return __builtin_vis_fhsubd (__A, __B); 668 } 669 670 extern __inline float 671 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 672 __vis_fnhadds (float __A, float __B) 673 { 674 return __builtin_vis_fnhadds (__A, __B); 675 } 676 677 extern __inline double 678 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 679 __vis_fnhaddd (double __A, double __B) 680 { 681 return __builtin_vis_fnhaddd (__A, __B); 682 } 683 684 extern __inline __i64 685 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 686 __vis_umulxhi (__i64 __A, __i64 __B) 687 { 688 return __builtin_vis_umulxhi (__A, __B); 689 } 690 691 extern __inline __i64 692 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 693 __vis_xmulx (__i64 __A, __i64 __B) 694 { 695 return __builtin_vis_xmulx (__A, __B); 696 } 697 698 extern __inline __i64 699 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 700 __vis_xmulxhi (__i64 __A, __i64 __B) 701 { 702 return __builtin_vis_xmulxhi (__A, __B); 703 } 704 705 #endif /* __VIS__ >= 0x300 */ 706 707 #if __VIS__ >= 0x400 708 709 extern __inline __v8qi 710 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 711 __vis_fpadd8 (__v8qi __A, __v8qi __B) 712 { 713 return __builtin_vis_fpadd8 (__A, __B); 714 } 715 716 extern __inline __v8qi 717 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 718 __vis_fpadds8 (__v8qi __A, __v8qi __B) 719 { 720 return __builtin_vis_fpadds8 (__A, __B); 721 } 722 723 extern __inline __v8qi 724 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 725 __vis_fpaddus8 (__v8qi __A, __v8qi __B) 726 { 727 return __builtin_vis_fpaddus8 (__A, __B); 728 } 729 730 extern __inline __v4hi 731 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 732 __vis_fpaddus16 (__v4hi __A, __v4hi __B) 733 { 734 return __builtin_vis_fpaddus16 (__A, __B); 735 } 736 737 extern __inline long 738 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 739 __vis_fpcmple8 (__v8qi __A, __v8qi __B) 740 { 741 return __builtin_vis_fpcmple8 (__A, __B); 742 } 743 744 extern __inline long 745 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 746 __vis_fpcmpgt8 (__v8qi __A, __v8qi __B) 747 { 748 return __builtin_vis_fpcmpgt8 (__A, __B); 749 } 750 751 extern __inline long 752 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 753 __vis_fpcmpule16 (__v4hi __A, __v4hi __B) 754 { 755 return __builtin_vis_fpcmpule16 (__A, __B); 756 } 757 758 extern __inline long 759 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 760 __vis_fpcmpugt16 (__v4hi __A, __v4hi __B) 761 { 762 return __builtin_vis_fpcmpugt16 (__A, __B); 763 } 764 765 extern __inline long 766 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 767 __vis_fpcmpule32 (__v2si __A, __v2si __B) 768 { 769 return __builtin_vis_fpcmpule32 (__A, __B); 770 } 771 772 extern __inline long 773 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 774 __vis_fpcmpugt32 (__v2si __A, __v2si __B) 775 { 776 return __builtin_vis_fpcmpugt32 (__A, __B); 777 } 778 779 extern __inline __v8qi 780 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 781 __vis_fpmax8 (__v8qi __A, __v8qi __B) 782 { 783 return __builtin_vis_fpmax8 (__A, __B); 784 } 785 786 extern __inline __v4hi 787 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 788 __vis_fpmax16 (__v4hi __A, __v4hi __B) 789 { 790 return __builtin_vis_fpmax16 (__A, __B); 791 } 792 793 extern __inline __v2si 794 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 795 __vis_fpmax32 (__v2si __A, __v2si __B) 796 { 797 return __builtin_vis_fpmax32 (__A, __B); 798 } 799 800 extern __inline __v8qi 801 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 802 __vis_fpmaxu8 (__v8qi __A, __v8qi __B) 803 { 804 return __builtin_vis_fpmaxu8 (__A, __B); 805 } 806 807 extern __inline __v4hi 808 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 809 __vis_fpmaxu16 (__v4hi __A, __v4hi __B) 810 { 811 return __builtin_vis_fpmaxu16 (__A, __B); 812 } 813 814 extern __inline __v2si 815 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 816 __vis_fpmaxu32 (__v2si __A, __v2si __B) 817 { 818 return __builtin_vis_fpmaxu32 (__A, __B); 819 } 820 821 extern __inline __v8qi 822 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 823 __vis_fpmin8 (__v8qi __A, __v8qi __B) 824 { 825 return __builtin_vis_fpmin8 (__A, __B); 826 } 827 828 extern __inline __v4hi 829 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 830 __vis_fpmin16 (__v4hi __A, __v4hi __B) 831 { 832 return __builtin_vis_fpmin16 (__A, __B); 833 } 834 835 extern __inline __v2si 836 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 837 __vis_fpmin32 (__v2si __A, __v2si __B) 838 { 839 return __builtin_vis_fpmin32 (__A, __B); 840 } 841 842 extern __inline __v8qi 843 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 844 __vis_fpminu8 (__v8qi __A, __v8qi __B) 845 { 846 return __builtin_vis_fpminu8 (__A, __B); 847 } 848 849 extern __inline __v4hi 850 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 851 __vis_fpminu16 (__v4hi __A, __v4hi __B) 852 { 853 return __builtin_vis_fpminu16 (__A, __B); 854 } 855 856 extern __inline __v2si 857 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 858 __vis_fpminu32 (__v2si __A, __v2si __B) 859 { 860 return __builtin_vis_fpminu32 (__A, __B); 861 } 862 863 extern __inline __v8qi 864 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 865 __vis_fpsub8 (__v8qi __A, __v8qi __B) 866 { 867 return __builtin_vis_fpsub8 (__A, __B); 868 } 869 870 extern __inline __v8qi 871 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 872 __vis_fpsubs8 (__v8qi __A, __v8qi __B) 873 { 874 return __builtin_vis_fpsubs8 (__A, __B); 875 } 876 877 extern __inline __v8qi 878 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 879 __vis_fpsubus8 (__v8qi __A, __v8qi __B) 880 { 881 return __builtin_vis_fpsubus8 (__A, __B); 882 } 883 884 extern __inline __v4hi 885 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) 886 __vis_fpsubus16 (__v4hi __A, __v4hi __B) 887 { 888 return __builtin_vis_fpsubus16 (__A, __B); 889 } 890 891 #endif /* __VIS__ >= 0x400 */ 892 893 #endif /* __VIS__ */ 894 895 #endif /* _VISINTRIN_H_INCLUDED */ 896