1/* Builtin functions for rs6000/powerpc. 2 Copyright (C) 2009-2015 Free Software Foundation, Inc. 3 Contributed by Michael Meissner (meissner@linux.vnet.ibm.com) 4 5 This file is part of GCC. 6 7 GCC is free software; you can redistribute it and/or modify it 8 under the terms of the GNU General Public License as published 9 by the Free Software Foundation; either version 3, or (at your 10 option) any later version. 11 12 GCC is distributed in the hope that it will be useful, but WITHOUT 13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 15 License for more details. 16 17 Under Section 7 of GPL version 3, you are granted additional 18 permissions described in the GCC Runtime Library Exception, version 19 3.1, as published by the Free Software Foundation. 20 21 You should have received a copy of the GNU General Public License and 22 a copy of the GCC Runtime Library Exception along with this program; 23 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 24 <http://www.gnu.org/licenses/>. */ 25 26/* Before including this file, some macros must be defined: 27 RS6000_BUILTIN_1 -- 1 arg builtins 28 RS6000_BUILTIN_2 -- 2 arg builtins 29 RS6000_BUILTIN_3 -- 3 arg builtins 30 RS6000_BUILTIN_A -- ABS builtins 31 RS6000_BUILTIN_D -- DST builtins 32 RS6000_BUILTIN_E -- SPE EVSEL builtins. 33 RS6000_BUILTIN_H -- HTM builtins 34 RS6000_BUILTIN_P -- Altivec, VSX, ISA 2.07 vector predicate builtins 35 RS6000_BUILTIN_Q -- Paired floating point VSX predicate builtins 36 RS6000_BUILTIN_S -- SPE predicate builtins 37 RS6000_BUILTIN_X -- special builtins 38 39 Each of the above macros takes 4 arguments: 40 ENUM Enumeration name 41 NAME String literal for the name 42 MASK Mask of bits that indicate which options enables the builtin 43 ATTR builtin attribute information. 44 ICODE Insn code of the function that implents the builtin. */ 45 46#ifndef RS6000_BUILTIN_1 47 #error "RS6000_BUILTIN_1 is not defined." 48#endif 49 50#ifndef RS6000_BUILTIN_2 51 #error "RS6000_BUILTIN_2 is not defined." 52#endif 53 54#ifndef RS6000_BUILTIN_3 55 #error "RS6000_BUILTIN_3 is not defined." 56#endif 57 58#ifndef RS6000_BUILTIN_A 59 #error "RS6000_BUILTIN_A is not defined." 60#endif 61 62#ifndef RS6000_BUILTIN_D 63 #error "RS6000_BUILTIN_D is not defined." 64#endif 65 66#ifndef RS6000_BUILTIN_E 67 #error "RS6000_BUILTIN_E is not defined." 68#endif 69 70#ifndef RS6000_BUILTIN_H 71 #error "RS6000_BUILTIN_H is not defined." 72#endif 73 74#ifndef RS6000_BUILTIN_P 75 #error "RS6000_BUILTIN_P is not defined." 76#endif 77 78#ifndef RS6000_BUILTIN_Q 79 #error "RS6000_BUILTIN_Q is not defined." 80#endif 81 82#ifndef RS6000_BUILTIN_S 83 #error "RS6000_BUILTIN_S is not defined." 84#endif 85 86#ifndef RS6000_BUILTIN_X 87 #error "RS6000_BUILTIN_X is not defined." 88#endif 89 90#ifndef BU_AV_1 91/* Define convenience macros using token pasting to allow fitting everything in 92 one line. */ 93 94/* Altivec convenience macros. */ 95#define BU_ALTIVEC_1(ENUM, NAME, ATTR, ICODE) \ 96 RS6000_BUILTIN_1 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 97 "__builtin_altivec_" NAME, /* NAME */ \ 98 RS6000_BTM_ALTIVEC, /* MASK */ \ 99 (RS6000_BTC_ ## ATTR /* ATTR */ \ 100 | RS6000_BTC_UNARY), \ 101 CODE_FOR_ ## ICODE) /* ICODE */ 102 103#define BU_ALTIVEC_2(ENUM, NAME, ATTR, ICODE) \ 104 RS6000_BUILTIN_2 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 105 "__builtin_altivec_" NAME, /* NAME */ \ 106 RS6000_BTM_ALTIVEC, /* MASK */ \ 107 (RS6000_BTC_ ## ATTR /* ATTR */ \ 108 | RS6000_BTC_BINARY), \ 109 CODE_FOR_ ## ICODE) /* ICODE */ 110 111#define BU_ALTIVEC_3(ENUM, NAME, ATTR, ICODE) \ 112 RS6000_BUILTIN_3 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 113 "__builtin_altivec_" NAME, /* NAME */ \ 114 RS6000_BTM_ALTIVEC, /* MASK */ \ 115 (RS6000_BTC_ ## ATTR /* ATTR */ \ 116 | RS6000_BTC_TERNARY), \ 117 CODE_FOR_ ## ICODE) /* ICODE */ 118 119#define BU_ALTIVEC_A(ENUM, NAME, ATTR, ICODE) \ 120 RS6000_BUILTIN_A (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 121 "__builtin_altivec_" NAME, /* NAME */ \ 122 RS6000_BTM_ALTIVEC, /* MASK */ \ 123 (RS6000_BTC_ ## ATTR /* ATTR */ \ 124 | RS6000_BTC_ABS), \ 125 CODE_FOR_ ## ICODE) /* ICODE */ 126 127#define BU_ALTIVEC_D(ENUM, NAME, ATTR, ICODE) \ 128 RS6000_BUILTIN_D (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 129 "__builtin_altivec_" NAME, /* NAME */ \ 130 RS6000_BTM_ALTIVEC, /* MASK */ \ 131 (RS6000_BTC_ ## ATTR /* ATTR */ \ 132 | RS6000_BTC_DST), \ 133 CODE_FOR_ ## ICODE) /* ICODE */ 134 135#define BU_ALTIVEC_P(ENUM, NAME, ATTR, ICODE) \ 136 RS6000_BUILTIN_P (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 137 "__builtin_altivec_" NAME, /* NAME */ \ 138 RS6000_BTM_ALTIVEC, /* MASK */ \ 139 (RS6000_BTC_ ## ATTR /* ATTR */ \ 140 | RS6000_BTC_PREDICATE), \ 141 CODE_FOR_ ## ICODE) /* ICODE */ 142 143#define BU_ALTIVEC_X(ENUM, NAME, ATTR) \ 144 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 145 "__builtin_altivec_" NAME, /* NAME */ \ 146 RS6000_BTM_ALTIVEC, /* MASK */ \ 147 (RS6000_BTC_ ## ATTR /* ATTR */ \ 148 | RS6000_BTC_SPECIAL), \ 149 CODE_FOR_nothing) /* ICODE */ 150 151#define BU_ALTIVEC_C(ENUM, NAME, ATTR) \ 152 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 153 "__builtin_altivec_" NAME, /* NAME */ \ 154 (RS6000_BTM_ALTIVEC /* MASK */ \ 155 | RS6000_BTM_CELL), \ 156 (RS6000_BTC_ ## ATTR /* ATTR */ \ 157 | RS6000_BTC_SPECIAL), \ 158 CODE_FOR_nothing) /* ICODE */ 159 160/* Altivec overloaded builtin function macros. */ 161#define BU_ALTIVEC_OVERLOAD_1(ENUM, NAME) \ 162 RS6000_BUILTIN_1 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 163 "__builtin_vec_" NAME, /* NAME */ \ 164 RS6000_BTM_ALTIVEC, /* MASK */ \ 165 (RS6000_BTC_OVERLOADED /* ATTR */ \ 166 | RS6000_BTC_UNARY), \ 167 CODE_FOR_nothing) /* ICODE */ 168 169#define BU_ALTIVEC_OVERLOAD_2(ENUM, NAME) \ 170 RS6000_BUILTIN_2 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 171 "__builtin_vec_" NAME, /* NAME */ \ 172 RS6000_BTM_ALTIVEC, /* MASK */ \ 173 (RS6000_BTC_OVERLOADED /* ATTR */ \ 174 | RS6000_BTC_BINARY), \ 175 CODE_FOR_nothing) /* ICODE */ 176 177#define BU_ALTIVEC_OVERLOAD_3(ENUM, NAME) \ 178 RS6000_BUILTIN_3 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 179 "__builtin_vec_" NAME, /* NAME */ \ 180 RS6000_BTM_ALTIVEC, /* MASK */ \ 181 (RS6000_BTC_OVERLOADED /* ATTR */ \ 182 | RS6000_BTC_TERNARY), \ 183 CODE_FOR_nothing) /* ICODE */ 184 185#define BU_ALTIVEC_OVERLOAD_A(ENUM, NAME) \ 186 RS6000_BUILTIN_A (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 187 "__builtin_vec_" NAME, /* NAME */ \ 188 RS6000_BTM_ALTIVEC, /* MASK */ \ 189 (RS6000_BTC_OVERLOADED /* ATTR */ \ 190 | RS6000_BTC_ABS), \ 191 CODE_FOR_nothing) /* ICODE */ 192 193#define BU_ALTIVEC_OVERLOAD_D(ENUM, NAME) \ 194 RS6000_BUILTIN_D (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 195 "__builtin_vec_" NAME, /* NAME */ \ 196 RS6000_BTM_ALTIVEC, /* MASK */ \ 197 (RS6000_BTC_OVERLOADED /* ATTR */ \ 198 | RS6000_BTC_DST), \ 199 CODE_FOR_nothing) /* ICODE */ 200 201#define BU_ALTIVEC_OVERLOAD_P(ENUM, NAME) \ 202 RS6000_BUILTIN_P (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 203 "__builtin_vec_" NAME, /* NAME */ \ 204 RS6000_BTM_ALTIVEC, /* MASK */ \ 205 (RS6000_BTC_OVERLOADED /* ATTR */ \ 206 | RS6000_BTC_PREDICATE), \ 207 CODE_FOR_nothing) /* ICODE */ 208 209#define BU_ALTIVEC_OVERLOAD_X(ENUM, NAME) \ 210 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 211 "__builtin_vec_" NAME, /* NAME */ \ 212 RS6000_BTM_ALTIVEC, /* MASK */ \ 213 (RS6000_BTC_OVERLOADED /* ATTR */ \ 214 | RS6000_BTC_SPECIAL), \ 215 CODE_FOR_nothing) /* ICODE */ 216 217/* VSX convenience macros. */ 218#define BU_VSX_1(ENUM, NAME, ATTR, ICODE) \ 219 RS6000_BUILTIN_1 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 220 "__builtin_vsx_" NAME, /* NAME */ \ 221 RS6000_BTM_VSX, /* MASK */ \ 222 (RS6000_BTC_ ## ATTR /* ATTR */ \ 223 | RS6000_BTC_UNARY), \ 224 CODE_FOR_ ## ICODE) /* ICODE */ 225 226#define BU_VSX_2(ENUM, NAME, ATTR, ICODE) \ 227 RS6000_BUILTIN_2 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 228 "__builtin_vsx_" NAME, /* NAME */ \ 229 RS6000_BTM_VSX, /* MASK */ \ 230 (RS6000_BTC_ ## ATTR /* ATTR */ \ 231 | RS6000_BTC_BINARY), \ 232 CODE_FOR_ ## ICODE) /* ICODE */ 233 234#define BU_VSX_3(ENUM, NAME, ATTR, ICODE) \ 235 RS6000_BUILTIN_3 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 236 "__builtin_vsx_" NAME, /* NAME */ \ 237 RS6000_BTM_VSX, /* MASK */ \ 238 (RS6000_BTC_ ## ATTR /* ATTR */ \ 239 | RS6000_BTC_TERNARY), \ 240 CODE_FOR_ ## ICODE) /* ICODE */ 241 242#define BU_VSX_A(ENUM, NAME, ATTR, ICODE) \ 243 RS6000_BUILTIN_A (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 244 "__builtin_vsx_" NAME, /* NAME */ \ 245 RS6000_BTM_VSX, /* MASK */ \ 246 (RS6000_BTC_ ## ATTR /* ATTR */ \ 247 | RS6000_BTC_ABS), \ 248 CODE_FOR_ ## ICODE) /* ICODE */ 249 250#define BU_VSX_P(ENUM, NAME, ATTR, ICODE) \ 251 RS6000_BUILTIN_P (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 252 "__builtin_vsx_" NAME, /* NAME */ \ 253 RS6000_BTM_VSX, /* MASK */ \ 254 (RS6000_BTC_ ## ATTR /* ATTR */ \ 255 | RS6000_BTC_PREDICATE), \ 256 CODE_FOR_ ## ICODE) /* ICODE */ 257 258#define BU_VSX_X(ENUM, NAME, ATTR) \ 259 RS6000_BUILTIN_X (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 260 "__builtin_vsx_" NAME, /* NAME */ \ 261 RS6000_BTM_VSX, /* MASK */ \ 262 (RS6000_BTC_ ## ATTR /* ATTR */ \ 263 | RS6000_BTC_SPECIAL), \ 264 CODE_FOR_nothing) /* ICODE */ 265 266/* VSX overloaded builtin function macros. */ 267#define BU_VSX_OVERLOAD_1(ENUM, NAME) \ 268 RS6000_BUILTIN_1 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 269 "__builtin_vec_" NAME, /* NAME */ \ 270 RS6000_BTM_VSX, /* MASK */ \ 271 (RS6000_BTC_OVERLOADED /* ATTR */ \ 272 | RS6000_BTC_UNARY), \ 273 CODE_FOR_nothing) /* ICODE */ 274 275#define BU_VSX_OVERLOAD_2(ENUM, NAME) \ 276 RS6000_BUILTIN_2 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 277 "__builtin_vec_" NAME, /* NAME */ \ 278 RS6000_BTM_VSX, /* MASK */ \ 279 (RS6000_BTC_OVERLOADED /* ATTR */ \ 280 | RS6000_BTC_BINARY), \ 281 CODE_FOR_nothing) /* ICODE */ 282 283#define BU_VSX_OVERLOAD_3(ENUM, NAME) \ 284 RS6000_BUILTIN_3 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 285 "__builtin_vec_" NAME, /* NAME */ \ 286 RS6000_BTM_VSX, /* MASK */ \ 287 (RS6000_BTC_OVERLOADED /* ATTR */ \ 288 | RS6000_BTC_TERNARY), \ 289 CODE_FOR_nothing) /* ICODE */ 290 291/* xxpermdi and xxsldwi are overloaded functions, but had __builtin_vsx names 292 instead of __builtin_vec. */ 293#define BU_VSX_OVERLOAD_3V(ENUM, NAME) \ 294 RS6000_BUILTIN_3 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 295 "__builtin_vsx_" NAME, /* NAME */ \ 296 RS6000_BTM_VSX, /* MASK */ \ 297 (RS6000_BTC_OVERLOADED /* ATTR */ \ 298 | RS6000_BTC_TERNARY), \ 299 CODE_FOR_nothing) /* ICODE */ 300 301#define BU_VSX_OVERLOAD_X(ENUM, NAME) \ 302 RS6000_BUILTIN_X (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 303 "__builtin_vec_" NAME, /* NAME */ \ 304 RS6000_BTM_VSX, /* MASK */ \ 305 (RS6000_BTC_OVERLOADED /* ATTR */ \ 306 | RS6000_BTC_SPECIAL), \ 307 CODE_FOR_nothing) /* ICODE */ 308 309/* ISA 2.07 (power8) vector convenience macros. */ 310/* For the instructions that are encoded as altivec instructions use 311 __builtin_altivec_ as the builtin name. */ 312#define BU_P8V_AV_1(ENUM, NAME, ATTR, ICODE) \ 313 RS6000_BUILTIN_1 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \ 314 "__builtin_altivec_" NAME, /* NAME */ \ 315 RS6000_BTM_P8_VECTOR, /* MASK */ \ 316 (RS6000_BTC_ ## ATTR /* ATTR */ \ 317 | RS6000_BTC_UNARY), \ 318 CODE_FOR_ ## ICODE) /* ICODE */ 319 320#define BU_P8V_AV_2(ENUM, NAME, ATTR, ICODE) \ 321 RS6000_BUILTIN_2 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \ 322 "__builtin_altivec_" NAME, /* NAME */ \ 323 RS6000_BTM_P8_VECTOR, /* MASK */ \ 324 (RS6000_BTC_ ## ATTR /* ATTR */ \ 325 | RS6000_BTC_BINARY), \ 326 CODE_FOR_ ## ICODE) /* ICODE */ 327 328#define BU_P8V_AV_3(ENUM, NAME, ATTR, ICODE) \ 329 RS6000_BUILTIN_3 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \ 330 "__builtin_altivec_" NAME, /* NAME */ \ 331 RS6000_BTM_P8_VECTOR, /* MASK */ \ 332 (RS6000_BTC_ ## ATTR /* ATTR */ \ 333 | RS6000_BTC_TERNARY), \ 334 CODE_FOR_ ## ICODE) /* ICODE */ 335 336#define BU_P8V_AV_P(ENUM, NAME, ATTR, ICODE) \ 337 RS6000_BUILTIN_P (P8V_BUILTIN_ ## ENUM, /* ENUM */ \ 338 "__builtin_altivec_" NAME, /* NAME */ \ 339 RS6000_BTM_P8_VECTOR, /* MASK */ \ 340 (RS6000_BTC_ ## ATTR /* ATTR */ \ 341 | RS6000_BTC_PREDICATE), \ 342 CODE_FOR_ ## ICODE) /* ICODE */ 343 344/* For the instructions encoded as VSX instructions use __builtin_vsx as the 345 builtin name. */ 346#define BU_P8V_VSX_1(ENUM, NAME, ATTR, ICODE) \ 347 RS6000_BUILTIN_1 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \ 348 "__builtin_vsx_" NAME, /* NAME */ \ 349 RS6000_BTM_P8_VECTOR, /* MASK */ \ 350 (RS6000_BTC_ ## ATTR /* ATTR */ \ 351 | RS6000_BTC_UNARY), \ 352 CODE_FOR_ ## ICODE) /* ICODE */ 353 354#define BU_P8V_OVERLOAD_1(ENUM, NAME) \ 355 RS6000_BUILTIN_1 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 356 "__builtin_vec_" NAME, /* NAME */ \ 357 RS6000_BTM_P8_VECTOR, /* MASK */ \ 358 (RS6000_BTC_OVERLOADED /* ATTR */ \ 359 | RS6000_BTC_UNARY), \ 360 CODE_FOR_nothing) /* ICODE */ 361 362#define BU_P8V_OVERLOAD_2(ENUM, NAME) \ 363 RS6000_BUILTIN_2 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 364 "__builtin_vec_" NAME, /* NAME */ \ 365 RS6000_BTM_P8_VECTOR, /* MASK */ \ 366 (RS6000_BTC_OVERLOADED /* ATTR */ \ 367 | RS6000_BTC_BINARY), \ 368 CODE_FOR_nothing) /* ICODE */ 369 370#define BU_P8V_OVERLOAD_3(ENUM, NAME) \ 371 RS6000_BUILTIN_3 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 372 "__builtin_vec_" NAME, /* NAME */ \ 373 RS6000_BTM_P8_VECTOR, /* MASK */ \ 374 (RS6000_BTC_OVERLOADED /* ATTR */ \ 375 | RS6000_BTC_TERNARY), \ 376 CODE_FOR_nothing) /* ICODE */ 377 378/* Crypto convenience macros. */ 379#define BU_CRYPTO_1(ENUM, NAME, ATTR, ICODE) \ 380 RS6000_BUILTIN_1 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 381 "__builtin_crypto_" NAME, /* NAME */ \ 382 RS6000_BTM_CRYPTO, /* MASK */ \ 383 (RS6000_BTC_ ## ATTR /* ATTR */ \ 384 | RS6000_BTC_UNARY), \ 385 CODE_FOR_ ## ICODE) /* ICODE */ 386 387#define BU_CRYPTO_2(ENUM, NAME, ATTR, ICODE) \ 388 RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 389 "__builtin_crypto_" NAME, /* NAME */ \ 390 RS6000_BTM_CRYPTO, /* MASK */ \ 391 (RS6000_BTC_ ## ATTR /* ATTR */ \ 392 | RS6000_BTC_BINARY), \ 393 CODE_FOR_ ## ICODE) /* ICODE */ 394 395#define BU_CRYPTO_2A(ENUM, NAME, ATTR, ICODE) \ 396 RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 397 "__builtin_crypto_" NAME, /* NAME */ \ 398 RS6000_BTM_P8_VECTOR, /* MASK */ \ 399 (RS6000_BTC_ ## ATTR /* ATTR */ \ 400 | RS6000_BTC_BINARY), \ 401 CODE_FOR_ ## ICODE) /* ICODE */ 402 403#define BU_CRYPTO_3(ENUM, NAME, ATTR, ICODE) \ 404 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 405 "__builtin_crypto_" NAME, /* NAME */ \ 406 RS6000_BTM_CRYPTO, /* MASK */ \ 407 (RS6000_BTC_ ## ATTR /* ATTR */ \ 408 | RS6000_BTC_TERNARY), \ 409 CODE_FOR_ ## ICODE) /* ICODE */ 410 411#define BU_CRYPTO_3A(ENUM, NAME, ATTR, ICODE) \ 412 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 413 "__builtin_crypto_" NAME, /* NAME */ \ 414 RS6000_BTM_P8_VECTOR, /* MASK */ \ 415 (RS6000_BTC_ ## ATTR /* ATTR */ \ 416 | RS6000_BTC_TERNARY), \ 417 CODE_FOR_ ## ICODE) /* ICODE */ 418 419#define BU_CRYPTO_OVERLOAD_1(ENUM, NAME) \ 420 RS6000_BUILTIN_1 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 421 "__builtin_crypto_" NAME, /* NAME */ \ 422 RS6000_BTM_CRYPTO, /* MASK */ \ 423 (RS6000_BTC_OVERLOADED /* ATTR */ \ 424 | RS6000_BTC_UNARY), \ 425 CODE_FOR_nothing) /* ICODE */ 426 427#define BU_CRYPTO_OVERLOAD_2A(ENUM, NAME) \ 428 RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 429 "__builtin_crypto_" NAME, /* NAME */ \ 430 RS6000_BTM_P8_VECTOR, /* MASK */ \ 431 (RS6000_BTC_OVERLOADED /* ATTR */ \ 432 | RS6000_BTC_BINARY), \ 433 CODE_FOR_nothing) /* ICODE */ 434 435#define BU_CRYPTO_OVERLOAD_3(ENUM, NAME) \ 436 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 437 "__builtin_crypto_" NAME, /* NAME */ \ 438 RS6000_BTM_CRYPTO, /* MASK */ \ 439 (RS6000_BTC_OVERLOADED /* ATTR */ \ 440 | RS6000_BTC_TERNARY), \ 441 CODE_FOR_nothing) /* ICODE */ 442 443#define BU_CRYPTO_OVERLOAD_3A(ENUM, NAME) \ 444 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 445 "__builtin_crypto_" NAME, /* NAME */ \ 446 RS6000_BTM_P8_VECTOR, /* MASK */ \ 447 (RS6000_BTC_OVERLOADED /* ATTR */ \ 448 | RS6000_BTC_TERNARY), \ 449 CODE_FOR_nothing) /* ICODE */ 450 451/* HTM convenience macros. */ 452#define BU_HTM_0(ENUM, NAME, ATTR, ICODE) \ 453 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \ 454 "__builtin_" NAME, /* NAME */ \ 455 RS6000_BTM_HTM, /* MASK */ \ 456 RS6000_BTC_ ## ATTR, /* ATTR */ \ 457 CODE_FOR_ ## ICODE) /* ICODE */ 458 459#define BU_HTM_1(ENUM, NAME, ATTR, ICODE) \ 460 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \ 461 "__builtin_" NAME, /* NAME */ \ 462 RS6000_BTM_HTM, /* MASK */ \ 463 (RS6000_BTC_ ## ATTR /* ATTR */ \ 464 | RS6000_BTC_UNARY), \ 465 CODE_FOR_ ## ICODE) /* ICODE */ 466 467#define BU_HTM_2(ENUM, NAME, ATTR, ICODE) \ 468 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \ 469 "__builtin_" NAME, /* NAME */ \ 470 RS6000_BTM_HTM, /* MASK */ \ 471 (RS6000_BTC_ ## ATTR /* ATTR */ \ 472 | RS6000_BTC_BINARY), \ 473 CODE_FOR_ ## ICODE) /* ICODE */ 474 475#define BU_HTM_3(ENUM, NAME, ATTR, ICODE) \ 476 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \ 477 "__builtin_" NAME, /* NAME */ \ 478 RS6000_BTM_HTM, /* MASK */ \ 479 (RS6000_BTC_ ## ATTR /* ATTR */ \ 480 | RS6000_BTC_TERNARY), \ 481 CODE_FOR_ ## ICODE) /* ICODE */ 482 483#define BU_HTM_V1(ENUM, NAME, ATTR, ICODE) \ 484 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \ 485 "__builtin_" NAME, /* NAME */ \ 486 RS6000_BTM_HTM, /* MASK */ \ 487 (RS6000_BTC_ ## ATTR /* ATTR */ \ 488 | RS6000_BTC_UNARY \ 489 | RS6000_BTC_VOID), \ 490 CODE_FOR_ ## ICODE) /* ICODE */ 491 492/* SPE convenience macros. */ 493#define BU_SPE_1(ENUM, NAME, ATTR, ICODE) \ 494 RS6000_BUILTIN_1 (SPE_BUILTIN_ ## ENUM, /* ENUM */ \ 495 "__builtin_spe_" NAME, /* NAME */ \ 496 RS6000_BTM_SPE, /* MASK */ \ 497 (RS6000_BTC_ ## ATTR /* ATTR */ \ 498 | RS6000_BTC_UNARY), \ 499 CODE_FOR_ ## ICODE) /* ICODE */ 500 501#define BU_SPE_2(ENUM, NAME, ATTR, ICODE) \ 502 RS6000_BUILTIN_2 (SPE_BUILTIN_ ## ENUM, /* ENUM */ \ 503 "__builtin_spe_" NAME, /* NAME */ \ 504 RS6000_BTM_SPE, /* MASK */ \ 505 (RS6000_BTC_ ## ATTR /* ATTR */ \ 506 | RS6000_BTC_BINARY), \ 507 CODE_FOR_ ## ICODE) /* ICODE */ 508 509#define BU_SPE_3(ENUM, NAME, ATTR, ICODE) \ 510 RS6000_BUILTIN_3 (SPE_BUILTIN_ ## ENUM, /* ENUM */ \ 511 "__builtin_spe_" NAME, /* NAME */ \ 512 RS6000_BTM_SPE, /* MASK */ \ 513 (RS6000_BTC_ ## ATTR /* ATTR */ \ 514 | RS6000_BTC_TERNARY), \ 515 CODE_FOR_ ## ICODE) /* ICODE */ 516 517#define BU_SPE_E(ENUM, NAME, ATTR, ICODE) \ 518 RS6000_BUILTIN_E (SPE_BUILTIN_ ## ENUM, /* ENUM */ \ 519 "__builtin_spe_" NAME, /* NAME */ \ 520 RS6000_BTM_SPE, /* MASK */ \ 521 (RS6000_BTC_ ## ATTR /* ATTR */ \ 522 | RS6000_BTC_EVSEL), \ 523 CODE_FOR_ ## ICODE) /* ICODE */ 524 525#define BU_SPE_P(ENUM, NAME, ATTR, ICODE) \ 526 RS6000_BUILTIN_S (SPE_BUILTIN_ ## ENUM, /* ENUM */ \ 527 "__builtin_spe_" NAME, /* NAME */ \ 528 RS6000_BTM_SPE, /* MASK */ \ 529 (RS6000_BTC_ ## ATTR /* ATTR */ \ 530 | RS6000_BTC_PREDICATE), \ 531 CODE_FOR_ ## ICODE) /* ICODE */ 532 533#define BU_SPE_X(ENUM, NAME, ATTR) \ 534 RS6000_BUILTIN_X (SPE_BUILTIN_ ## ENUM, /* ENUM */ \ 535 "__builtin_spe_" NAME, /* NAME */ \ 536 RS6000_BTM_SPE, /* MASK */ \ 537 (RS6000_BTC_ ## ATTR /* ATTR */ \ 538 | RS6000_BTC_SPECIAL), \ 539 CODE_FOR_nothing) /* ICODE */ 540 541/* Paired floating point convenience macros. */ 542#define BU_PAIRED_1(ENUM, NAME, ATTR, ICODE) \ 543 RS6000_BUILTIN_1 (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \ 544 "__builtin_paired_" NAME, /* NAME */ \ 545 RS6000_BTM_PAIRED, /* MASK */ \ 546 (RS6000_BTC_ ## ATTR /* ATTR */ \ 547 | RS6000_BTC_UNARY), \ 548 CODE_FOR_ ## ICODE) /* ICODE */ 549 550#define BU_PAIRED_2(ENUM, NAME, ATTR, ICODE) \ 551 RS6000_BUILTIN_2 (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \ 552 "__builtin_paired_" NAME, /* NAME */ \ 553 RS6000_BTM_PAIRED, /* MASK */ \ 554 (RS6000_BTC_ ## ATTR /* ATTR */ \ 555 | RS6000_BTC_BINARY), \ 556 CODE_FOR_ ## ICODE) /* ICODE */ 557 558#define BU_PAIRED_3(ENUM, NAME, ATTR, ICODE) \ 559 RS6000_BUILTIN_3 (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \ 560 "__builtin_paired_" NAME, /* NAME */ \ 561 RS6000_BTM_PAIRED, /* MASK */ \ 562 (RS6000_BTC_ ## ATTR /* ATTR */ \ 563 | RS6000_BTC_TERNARY), \ 564 CODE_FOR_ ## ICODE) /* ICODE */ 565 566#define BU_PAIRED_P(ENUM, NAME, ATTR, ICODE) \ 567 RS6000_BUILTIN_Q (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \ 568 "__builtin_paired_" NAME, /* NAME */ \ 569 RS6000_BTM_PAIRED, /* MASK */ \ 570 (RS6000_BTC_ ## ATTR /* ATTR */ \ 571 | RS6000_BTC_PREDICATE), \ 572 CODE_FOR_ ## ICODE) /* ICODE */ 573 574#define BU_PAIRED_X(ENUM, NAME, ATTR) \ 575 RS6000_BUILTIN_X (PAIRED_BUILTIN_ ## ENUM, /* ENUM */ \ 576 "__builtin_paired_" NAME, /* NAME */ \ 577 RS6000_BTM_PAIRED, /* MASK */ \ 578 (RS6000_BTC_ ## ATTR /* ATTR */ \ 579 | RS6000_BTC_SPECIAL), \ 580 CODE_FOR_nothing) /* ICODE */ 581 582#define BU_SPECIAL_X(ENUM, NAME, MASK, ATTR) \ 583 RS6000_BUILTIN_X (ENUM, /* ENUM */ \ 584 NAME, /* NAME */ \ 585 MASK, /* MASK */ \ 586 (ATTR | RS6000_BTC_SPECIAL), /* ATTR */ \ 587 CODE_FOR_nothing) /* ICODE */ 588 589 590/* Decimal floating point builtins for instructions. */ 591#define BU_DFP_MISC_1(ENUM, NAME, ATTR, ICODE) \ 592 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 593 "__builtin_" NAME, /* NAME */ \ 594 RS6000_BTM_DFP, /* MASK */ \ 595 (RS6000_BTC_ ## ATTR /* ATTR */ \ 596 | RS6000_BTC_UNARY), \ 597 CODE_FOR_ ## ICODE) /* ICODE */ 598 599#define BU_DFP_MISC_2(ENUM, NAME, ATTR, ICODE) \ 600 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 601 "__builtin_" NAME, /* NAME */ \ 602 RS6000_BTM_DFP, /* MASK */ \ 603 (RS6000_BTC_ ## ATTR /* ATTR */ \ 604 | RS6000_BTC_BINARY), \ 605 CODE_FOR_ ## ICODE) /* ICODE */ 606 607 608/* Miscellaneous builtins for instructions added in ISA 2.06. These 609 instructions don't require either the DFP or VSX options, just the basic ISA 610 2.06 (popcntd) enablement since they operate on general purpose 611 registers. */ 612#define BU_P7_MISC_1(ENUM, NAME, ATTR, ICODE) \ 613 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 614 "__builtin_" NAME, /* NAME */ \ 615 RS6000_BTM_POPCNTD, /* MASK */ \ 616 (RS6000_BTC_ ## ATTR /* ATTR */ \ 617 | RS6000_BTC_UNARY), \ 618 CODE_FOR_ ## ICODE) /* ICODE */ 619 620#define BU_P7_MISC_2(ENUM, NAME, ATTR, ICODE) \ 621 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 622 "__builtin_" NAME, /* NAME */ \ 623 RS6000_BTM_POPCNTD, /* MASK */ \ 624 (RS6000_BTC_ ## ATTR /* ATTR */ \ 625 | RS6000_BTC_BINARY), \ 626 CODE_FOR_ ## ICODE) /* ICODE */ 627 628 629/* Miscellaneous builtins for instructions added in ISA 2.07. These 630 instructions do require the ISA 2.07 vector support, but they aren't vector 631 instructions. */ 632#define BU_P8V_MISC_3(ENUM, NAME, ATTR, ICODE) \ 633 RS6000_BUILTIN_3 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 634 "__builtin_" NAME, /* NAME */ \ 635 RS6000_BTM_P8_VECTOR, /* MASK */ \ 636 (RS6000_BTC_ ## ATTR /* ATTR */ \ 637 | RS6000_BTC_TERNARY), \ 638 CODE_FOR_ ## ICODE) /* ICODE */ 639 640/* 128-bit long double floating point builtins. */ 641#define BU_LDBL128_2(ENUM, NAME, ATTR, ICODE) \ 642 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 643 "__builtin_" NAME, /* NAME */ \ 644 (RS6000_BTM_HARD_FLOAT /* MASK */ \ 645 | RS6000_BTM_LDBL128), \ 646 (RS6000_BTC_ ## ATTR /* ATTR */ \ 647 | RS6000_BTC_BINARY), \ 648 CODE_FOR_ ## ICODE) /* ICODE */ 649 650#endif 651 652/* Insure 0 is not a legitimate index. */ 653BU_SPECIAL_X (RS6000_BUILTIN_NONE, NULL, 0, RS6000_BTC_MISC) 654 655/* 3 argument Altivec builtins. */ 656BU_ALTIVEC_3 (VMADDFP, "vmaddfp", FP, fmav4sf4) 657BU_ALTIVEC_3 (VMHADDSHS, "vmhaddshs", SAT, altivec_vmhaddshs) 658BU_ALTIVEC_3 (VMHRADDSHS, "vmhraddshs", SAT, altivec_vmhraddshs) 659BU_ALTIVEC_3 (VMLADDUHM, "vmladduhm", CONST, altivec_vmladduhm) 660BU_ALTIVEC_3 (VMSUMUBM, "vmsumubm", CONST, altivec_vmsumubm) 661BU_ALTIVEC_3 (VMSUMMBM, "vmsummbm", CONST, altivec_vmsummbm) 662BU_ALTIVEC_3 (VMSUMUHM, "vmsumuhm", CONST, altivec_vmsumuhm) 663BU_ALTIVEC_3 (VMSUMSHM, "vmsumshm", CONST, altivec_vmsumshm) 664BU_ALTIVEC_3 (VMSUMUHS, "vmsumuhs", SAT, altivec_vmsumuhs) 665BU_ALTIVEC_3 (VMSUMSHS, "vmsumshs", SAT, altivec_vmsumshs) 666BU_ALTIVEC_3 (VNMSUBFP, "vnmsubfp", FP, nfmsv4sf4) 667BU_ALTIVEC_3 (VPERM_1TI, "vperm_1ti", CONST, altivec_vperm_v1ti) 668BU_ALTIVEC_3 (VPERM_2DF, "vperm_2df", CONST, altivec_vperm_v2df) 669BU_ALTIVEC_3 (VPERM_2DI, "vperm_2di", CONST, altivec_vperm_v2di) 670BU_ALTIVEC_3 (VPERM_4SF, "vperm_4sf", CONST, altivec_vperm_v4sf) 671BU_ALTIVEC_3 (VPERM_4SI, "vperm_4si", CONST, altivec_vperm_v4si) 672BU_ALTIVEC_3 (VPERM_8HI, "vperm_8hi", CONST, altivec_vperm_v8hi) 673BU_ALTIVEC_3 (VPERM_16QI, "vperm_16qi", CONST, altivec_vperm_v16qi_uns) 674BU_ALTIVEC_3 (VPERM_1TI_UNS, "vperm_1ti_uns", CONST, altivec_vperm_v1ti_uns) 675BU_ALTIVEC_3 (VPERM_2DI_UNS, "vperm_2di_uns", CONST, altivec_vperm_v2di_uns) 676BU_ALTIVEC_3 (VPERM_4SI_UNS, "vperm_4si_uns", CONST, altivec_vperm_v4si_uns) 677BU_ALTIVEC_3 (VPERM_8HI_UNS, "vperm_8hi_uns", CONST, altivec_vperm_v8hi_uns) 678BU_ALTIVEC_3 (VPERM_16QI_UNS, "vperm_16qi_uns", CONST, altivec_vperm_v16qi_uns) 679BU_ALTIVEC_3 (VSEL_4SF, "vsel_4sf", CONST, vector_select_v4sf) 680BU_ALTIVEC_3 (VSEL_4SI, "vsel_4si", CONST, vector_select_v4si) 681BU_ALTIVEC_3 (VSEL_8HI, "vsel_8hi", CONST, vector_select_v8hi) 682BU_ALTIVEC_3 (VSEL_16QI, "vsel_16qi", CONST, vector_select_v16qi) 683BU_ALTIVEC_3 (VSEL_2DF, "vsel_2df", CONST, vector_select_v2df) 684BU_ALTIVEC_3 (VSEL_2DI, "vsel_2di", CONST, vector_select_v2di) 685BU_ALTIVEC_3 (VSEL_1TI, "vsel_1ti", CONST, vector_select_v1ti) 686BU_ALTIVEC_3 (VSEL_4SI_UNS, "vsel_4si_uns", CONST, vector_select_v4si_uns) 687BU_ALTIVEC_3 (VSEL_8HI_UNS, "vsel_8hi_uns", CONST, vector_select_v8hi_uns) 688BU_ALTIVEC_3 (VSEL_16QI_UNS, "vsel_16qi_uns", CONST, vector_select_v16qi_uns) 689BU_ALTIVEC_3 (VSEL_2DI_UNS, "vsel_2di_uns", CONST, vector_select_v2di_uns) 690BU_ALTIVEC_3 (VSEL_1TI_UNS, "vsel_1ti_uns", CONST, vector_select_v1ti_uns) 691BU_ALTIVEC_3 (VSLDOI_16QI, "vsldoi_16qi", CONST, altivec_vsldoi_v16qi) 692BU_ALTIVEC_3 (VSLDOI_8HI, "vsldoi_8hi", CONST, altivec_vsldoi_v8hi) 693BU_ALTIVEC_3 (VSLDOI_4SI, "vsldoi_4si", CONST, altivec_vsldoi_v4si) 694BU_ALTIVEC_3 (VSLDOI_4SF, "vsldoi_4sf", CONST, altivec_vsldoi_v4sf) 695 696/* Altivec DST builtins. */ 697BU_ALTIVEC_D (DST, "dst", MISC, altivec_dst) 698BU_ALTIVEC_D (DSTT, "dstt", MISC, altivec_dstt) 699BU_ALTIVEC_D (DSTST, "dstst", MISC, altivec_dstst) 700BU_ALTIVEC_D (DSTSTT, "dststt", MISC, altivec_dststt) 701 702/* Altivec 2 argument builtin functions. */ 703BU_ALTIVEC_2 (VADDUBM, "vaddubm", CONST, addv16qi3) 704BU_ALTIVEC_2 (VADDUHM, "vadduhm", CONST, addv8hi3) 705BU_ALTIVEC_2 (VADDUWM, "vadduwm", CONST, addv4si3) 706BU_ALTIVEC_2 (VADDFP, "vaddfp", CONST, addv4sf3) 707BU_ALTIVEC_2 (VADDCUW, "vaddcuw", CONST, altivec_vaddcuw) 708BU_ALTIVEC_2 (VADDUBS, "vaddubs", CONST, altivec_vaddubs) 709BU_ALTIVEC_2 (VADDSBS, "vaddsbs", CONST, altivec_vaddsbs) 710BU_ALTIVEC_2 (VADDUHS, "vadduhs", CONST, altivec_vadduhs) 711BU_ALTIVEC_2 (VADDSHS, "vaddshs", CONST, altivec_vaddshs) 712BU_ALTIVEC_2 (VADDUWS, "vadduws", CONST, altivec_vadduws) 713BU_ALTIVEC_2 (VADDSWS, "vaddsws", CONST, altivec_vaddsws) 714BU_ALTIVEC_2 (VAND, "vand", CONST, andv4si3) 715BU_ALTIVEC_2 (VANDC, "vandc", CONST, andcv4si3) 716BU_ALTIVEC_2 (VAVGUB, "vavgub", CONST, altivec_vavgub) 717BU_ALTIVEC_2 (VAVGSB, "vavgsb", CONST, altivec_vavgsb) 718BU_ALTIVEC_2 (VAVGUH, "vavguh", CONST, altivec_vavguh) 719BU_ALTIVEC_2 (VAVGSH, "vavgsh", CONST, altivec_vavgsh) 720BU_ALTIVEC_2 (VAVGUW, "vavguw", CONST, altivec_vavguw) 721BU_ALTIVEC_2 (VAVGSW, "vavgsw", CONST, altivec_vavgsw) 722BU_ALTIVEC_2 (VCFUX, "vcfux", CONST, altivec_vcfux) 723BU_ALTIVEC_2 (VCFSX, "vcfsx", CONST, altivec_vcfsx) 724BU_ALTIVEC_2 (VCMPBFP, "vcmpbfp", CONST, altivec_vcmpbfp) 725BU_ALTIVEC_2 (VCMPEQUB, "vcmpequb", CONST, vector_eqv16qi) 726BU_ALTIVEC_2 (VCMPEQUH, "vcmpequh", CONST, vector_eqv8hi) 727BU_ALTIVEC_2 (VCMPEQUW, "vcmpequw", CONST, vector_eqv4si) 728BU_ALTIVEC_2 (VCMPEQFP, "vcmpeqfp", CONST, vector_eqv4sf) 729BU_ALTIVEC_2 (VCMPGEFP, "vcmpgefp", CONST, vector_gev4sf) 730BU_ALTIVEC_2 (VCMPGTUB, "vcmpgtub", CONST, vector_gtuv16qi) 731BU_ALTIVEC_2 (VCMPGTSB, "vcmpgtsb", CONST, vector_gtv16qi) 732BU_ALTIVEC_2 (VCMPGTUH, "vcmpgtuh", CONST, vector_gtuv8hi) 733BU_ALTIVEC_2 (VCMPGTSH, "vcmpgtsh", CONST, vector_gtv8hi) 734BU_ALTIVEC_2 (VCMPGTUW, "vcmpgtuw", CONST, vector_gtuv4si) 735BU_ALTIVEC_2 (VCMPGTSW, "vcmpgtsw", CONST, vector_gtv4si) 736BU_ALTIVEC_2 (VCMPGTFP, "vcmpgtfp", CONST, vector_gtv4sf) 737BU_ALTIVEC_2 (VCTSXS, "vctsxs", CONST, altivec_vctsxs) 738BU_ALTIVEC_2 (VCTUXS, "vctuxs", CONST, altivec_vctuxs) 739BU_ALTIVEC_2 (VMAXUB, "vmaxub", CONST, umaxv16qi3) 740BU_ALTIVEC_2 (VMAXSB, "vmaxsb", CONST, smaxv16qi3) 741BU_ALTIVEC_2 (VMAXUH, "vmaxuh", CONST, umaxv8hi3) 742BU_ALTIVEC_2 (VMAXSH, "vmaxsh", CONST, smaxv8hi3) 743BU_ALTIVEC_2 (VMAXUW, "vmaxuw", CONST, umaxv4si3) 744BU_ALTIVEC_2 (VMAXSW, "vmaxsw", CONST, smaxv4si3) 745BU_ALTIVEC_2 (VMAXFP, "vmaxfp", CONST, smaxv4sf3) 746BU_ALTIVEC_2 (VMRGHB, "vmrghb", CONST, altivec_vmrghb) 747BU_ALTIVEC_2 (VMRGHH, "vmrghh", CONST, altivec_vmrghh) 748BU_ALTIVEC_2 (VMRGHW, "vmrghw", CONST, altivec_vmrghw) 749BU_ALTIVEC_2 (VMRGLB, "vmrglb", CONST, altivec_vmrglb) 750BU_ALTIVEC_2 (VMRGLH, "vmrglh", CONST, altivec_vmrglh) 751BU_ALTIVEC_2 (VMRGLW, "vmrglw", CONST, altivec_vmrglw) 752BU_ALTIVEC_2 (VMINUB, "vminub", CONST, uminv16qi3) 753BU_ALTIVEC_2 (VMINSB, "vminsb", CONST, sminv16qi3) 754BU_ALTIVEC_2 (VMINUH, "vminuh", CONST, uminv8hi3) 755BU_ALTIVEC_2 (VMINSH, "vminsh", CONST, sminv8hi3) 756BU_ALTIVEC_2 (VMINUW, "vminuw", CONST, uminv4si3) 757BU_ALTIVEC_2 (VMINSW, "vminsw", CONST, sminv4si3) 758BU_ALTIVEC_2 (VMINFP, "vminfp", CONST, sminv4sf3) 759BU_ALTIVEC_2 (VMULEUB, "vmuleub", CONST, vec_widen_umult_even_v16qi) 760BU_ALTIVEC_2 (VMULEUB_UNS, "vmuleub_uns", CONST, vec_widen_umult_even_v16qi) 761BU_ALTIVEC_2 (VMULESB, "vmulesb", CONST, vec_widen_smult_even_v16qi) 762BU_ALTIVEC_2 (VMULEUH, "vmuleuh", CONST, vec_widen_umult_even_v8hi) 763BU_ALTIVEC_2 (VMULEUH_UNS, "vmuleuh_uns", CONST, vec_widen_umult_even_v8hi) 764BU_ALTIVEC_2 (VMULESH, "vmulesh", CONST, vec_widen_smult_even_v8hi) 765BU_ALTIVEC_2 (VMULOUB, "vmuloub", CONST, vec_widen_umult_odd_v16qi) 766BU_ALTIVEC_2 (VMULOUB_UNS, "vmuloub_uns", CONST, vec_widen_umult_odd_v16qi) 767BU_ALTIVEC_2 (VMULOSB, "vmulosb", CONST, vec_widen_smult_odd_v16qi) 768BU_ALTIVEC_2 (VMULOUH, "vmulouh", CONST, vec_widen_umult_odd_v8hi) 769BU_ALTIVEC_2 (VMULOUH_UNS, "vmulouh_uns", CONST, vec_widen_umult_odd_v8hi) 770BU_ALTIVEC_2 (VMULOSH, "vmulosh", CONST, vec_widen_smult_odd_v8hi) 771BU_ALTIVEC_2 (VNOR, "vnor", CONST, norv4si3) 772BU_ALTIVEC_2 (VOR, "vor", CONST, iorv4si3) 773BU_ALTIVEC_2 (VPKUHUM, "vpkuhum", CONST, altivec_vpkuhum) 774BU_ALTIVEC_2 (VPKUWUM, "vpkuwum", CONST, altivec_vpkuwum) 775BU_ALTIVEC_2 (VPKPX, "vpkpx", CONST, altivec_vpkpx) 776BU_ALTIVEC_2 (VPKSHSS, "vpkshss", CONST, altivec_vpkshss) 777BU_ALTIVEC_2 (VPKSWSS, "vpkswss", CONST, altivec_vpkswss) 778BU_ALTIVEC_2 (VPKUHUS, "vpkuhus", CONST, altivec_vpkuhus) 779BU_ALTIVEC_2 (VPKSHUS, "vpkshus", CONST, altivec_vpkshus) 780BU_ALTIVEC_2 (VPKUWUS, "vpkuwus", CONST, altivec_vpkuwus) 781BU_ALTIVEC_2 (VPKSWUS, "vpkswus", CONST, altivec_vpkswus) 782BU_ALTIVEC_2 (VRECIPFP, "vrecipdivfp", CONST, recipv4sf3) 783BU_ALTIVEC_2 (VRLB, "vrlb", CONST, vrotlv16qi3) 784BU_ALTIVEC_2 (VRLH, "vrlh", CONST, vrotlv8hi3) 785BU_ALTIVEC_2 (VRLW, "vrlw", CONST, vrotlv4si3) 786BU_ALTIVEC_2 (VSLB, "vslb", CONST, vashlv16qi3) 787BU_ALTIVEC_2 (VSLH, "vslh", CONST, vashlv8hi3) 788BU_ALTIVEC_2 (VSLW, "vslw", CONST, vashlv4si3) 789BU_ALTIVEC_2 (VSL, "vsl", CONST, altivec_vsl) 790BU_ALTIVEC_2 (VSLO, "vslo", CONST, altivec_vslo) 791BU_ALTIVEC_2 (VSPLTB, "vspltb", CONST, altivec_vspltb) 792BU_ALTIVEC_2 (VSPLTH, "vsplth", CONST, altivec_vsplth) 793BU_ALTIVEC_2 (VSPLTW, "vspltw", CONST, altivec_vspltw) 794BU_ALTIVEC_2 (VSRB, "vsrb", CONST, vlshrv16qi3) 795BU_ALTIVEC_2 (VSRH, "vsrh", CONST, vlshrv8hi3) 796BU_ALTIVEC_2 (VSRW, "vsrw", CONST, vlshrv4si3) 797BU_ALTIVEC_2 (VSRAB, "vsrab", CONST, vashrv16qi3) 798BU_ALTIVEC_2 (VSRAH, "vsrah", CONST, vashrv8hi3) 799BU_ALTIVEC_2 (VSRAW, "vsraw", CONST, vashrv4si3) 800BU_ALTIVEC_2 (VSR, "vsr", CONST, altivec_vsr) 801BU_ALTIVEC_2 (VSRO, "vsro", CONST, altivec_vsro) 802BU_ALTIVEC_2 (VSUBUBM, "vsububm", CONST, subv16qi3) 803BU_ALTIVEC_2 (VSUBUHM, "vsubuhm", CONST, subv8hi3) 804BU_ALTIVEC_2 (VSUBUWM, "vsubuwm", CONST, subv4si3) 805BU_ALTIVEC_2 (VSUBFP, "vsubfp", CONST, subv4sf3) 806BU_ALTIVEC_2 (VSUBCUW, "vsubcuw", CONST, altivec_vsubcuw) 807BU_ALTIVEC_2 (VSUBUBS, "vsububs", CONST, altivec_vsububs) 808BU_ALTIVEC_2 (VSUBSBS, "vsubsbs", CONST, altivec_vsubsbs) 809BU_ALTIVEC_2 (VSUBUHS, "vsubuhs", CONST, altivec_vsubuhs) 810BU_ALTIVEC_2 (VSUBSHS, "vsubshs", CONST, altivec_vsubshs) 811BU_ALTIVEC_2 (VSUBUWS, "vsubuws", CONST, altivec_vsubuws) 812BU_ALTIVEC_2 (VSUBSWS, "vsubsws", CONST, altivec_vsubsws) 813BU_ALTIVEC_2 (VSUM4UBS, "vsum4ubs", CONST, altivec_vsum4ubs) 814BU_ALTIVEC_2 (VSUM4SBS, "vsum4sbs", CONST, altivec_vsum4sbs) 815BU_ALTIVEC_2 (VSUM4SHS, "vsum4shs", CONST, altivec_vsum4shs) 816BU_ALTIVEC_2 (VSUM2SWS, "vsum2sws", CONST, altivec_vsum2sws) 817BU_ALTIVEC_2 (VSUMSWS, "vsumsws", CONST, altivec_vsumsws) 818BU_ALTIVEC_2 (VXOR, "vxor", CONST, xorv4si3) 819BU_ALTIVEC_2 (COPYSIGN_V4SF, "copysignfp", CONST, vector_copysignv4sf3) 820 821/* Altivec ABS functions. */ 822BU_ALTIVEC_A (ABS_V4SI, "abs_v4si", CONST, absv4si2) 823BU_ALTIVEC_A (ABS_V8HI, "abs_v8hi", CONST, absv8hi2) 824BU_ALTIVEC_A (ABS_V4SF, "abs_v4sf", CONST, absv4sf2) 825BU_ALTIVEC_A (ABS_V16QI, "abs_v16qi", CONST, absv16qi2) 826BU_ALTIVEC_A (ABSS_V4SI, "abss_v4si", SAT, altivec_abss_v4si) 827BU_ALTIVEC_A (ABSS_V8HI, "abss_v8hi", SAT, altivec_abss_v8hi) 828BU_ALTIVEC_A (ABSS_V16QI, "abss_v16qi", SAT, altivec_abss_v16qi) 829 830/* 1 argument Altivec builtin functions. */ 831BU_ALTIVEC_1 (VEXPTEFP, "vexptefp", FP, altivec_vexptefp) 832BU_ALTIVEC_1 (VLOGEFP, "vlogefp", FP, altivec_vlogefp) 833BU_ALTIVEC_1 (VREFP, "vrefp", FP, rev4sf2) 834BU_ALTIVEC_1 (VRFIM, "vrfim", FP, vector_floorv4sf2) 835BU_ALTIVEC_1 (VRFIN, "vrfin", FP, altivec_vrfin) 836BU_ALTIVEC_1 (VRFIP, "vrfip", FP, vector_ceilv4sf2) 837BU_ALTIVEC_1 (VRFIZ, "vrfiz", FP, vector_btruncv4sf2) 838BU_ALTIVEC_1 (VRSQRTFP, "vrsqrtfp", FP, rsqrtv4sf2) 839BU_ALTIVEC_1 (VRSQRTEFP, "vrsqrtefp", FP, rsqrtev4sf2) 840BU_ALTIVEC_1 (VSPLTISB, "vspltisb", CONST, altivec_vspltisb) 841BU_ALTIVEC_1 (VSPLTISH, "vspltish", CONST, altivec_vspltish) 842BU_ALTIVEC_1 (VSPLTISW, "vspltisw", CONST, altivec_vspltisw) 843BU_ALTIVEC_1 (VUPKHSB, "vupkhsb", CONST, altivec_vupkhsb) 844BU_ALTIVEC_1 (VUPKHPX, "vupkhpx", CONST, altivec_vupkhpx) 845BU_ALTIVEC_1 (VUPKHSH, "vupkhsh", CONST, altivec_vupkhsh) 846BU_ALTIVEC_1 (VUPKLSB, "vupklsb", CONST, altivec_vupklsb) 847BU_ALTIVEC_1 (VUPKLPX, "vupklpx", CONST, altivec_vupklpx) 848BU_ALTIVEC_1 (VUPKLSH, "vupklsh", CONST, altivec_vupklsh) 849 850BU_ALTIVEC_1 (FLOAT_V4SI_V4SF, "float_sisf", FP, floatv4siv4sf2) 851BU_ALTIVEC_1 (UNSFLOAT_V4SI_V4SF, "uns_float_sisf", FP, floatunsv4siv4sf2) 852BU_ALTIVEC_1 (FIX_V4SF_V4SI, "fix_sfsi", FP, fix_truncv4sfv4si2) 853BU_ALTIVEC_1 (FIXUNS_V4SF_V4SI, "fixuns_sfsi", FP, fixuns_truncv4sfv4si2) 854 855/* Altivec predicate functions. */ 856BU_ALTIVEC_P (VCMPBFP_P, "vcmpbfp_p", CONST, altivec_vcmpbfp_p) 857BU_ALTIVEC_P (VCMPEQFP_P, "vcmpeqfp_p", CONST, vector_eq_v4sf_p) 858BU_ALTIVEC_P (VCMPGEFP_P, "vcmpgefp_p", CONST, vector_ge_v4sf_p) 859BU_ALTIVEC_P (VCMPGTFP_P, "vcmpgtfp_p", CONST, vector_gt_v4sf_p) 860BU_ALTIVEC_P (VCMPEQUW_P, "vcmpequw_p", CONST, vector_eq_v4si_p) 861BU_ALTIVEC_P (VCMPGTSW_P, "vcmpgtsw_p", CONST, vector_gt_v4si_p) 862BU_ALTIVEC_P (VCMPGTUW_P, "vcmpgtuw_p", CONST, vector_gtu_v4si_p) 863BU_ALTIVEC_P (VCMPEQUH_P, "vcmpequh_p", CONST, vector_eq_v8hi_p) 864BU_ALTIVEC_P (VCMPGTSH_P, "vcmpgtsh_p", CONST, vector_gt_v8hi_p) 865BU_ALTIVEC_P (VCMPGTUH_P, "vcmpgtuh_p", CONST, vector_gtu_v8hi_p) 866BU_ALTIVEC_P (VCMPEQUB_P, "vcmpequb_p", CONST, vector_eq_v16qi_p) 867BU_ALTIVEC_P (VCMPGTSB_P, "vcmpgtsb_p", CONST, vector_gt_v16qi_p) 868BU_ALTIVEC_P (VCMPGTUB_P, "vcmpgtub_p", CONST, vector_gtu_v16qi_p) 869 870/* AltiVec builtins that are handled as special cases. */ 871BU_ALTIVEC_X (ST_INTERNAL_4si, "st_internal_4si", MEM) 872BU_ALTIVEC_X (LD_INTERNAL_4si, "ld_internal_4si", MEM) 873BU_ALTIVEC_X (ST_INTERNAL_8hi, "st_internal_8hi", MEM) 874BU_ALTIVEC_X (LD_INTERNAL_8hi, "ld_internal_8hi", MEM) 875BU_ALTIVEC_X (ST_INTERNAL_16qi, "st_internal_16qi", MEM) 876BU_ALTIVEC_X (LD_INTERNAL_16qi, "ld_internal_16qi", MEM) 877BU_ALTIVEC_X (ST_INTERNAL_4sf, "st_internal_16qi", MEM) 878BU_ALTIVEC_X (LD_INTERNAL_4sf, "ld_internal_4sf", MEM) 879BU_ALTIVEC_X (ST_INTERNAL_2df, "st_internal_4sf", MEM) 880BU_ALTIVEC_X (LD_INTERNAL_2df, "ld_internal_2df", MEM) 881BU_ALTIVEC_X (ST_INTERNAL_2di, "st_internal_2di", MEM) 882BU_ALTIVEC_X (LD_INTERNAL_2di, "ld_internal_2di", MEM) 883BU_ALTIVEC_X (ST_INTERNAL_1ti, "st_internal_1ti", MEM) 884BU_ALTIVEC_X (LD_INTERNAL_1ti, "ld_internal_1ti", MEM) 885BU_ALTIVEC_X (MTVSCR, "mtvscr", MISC) 886BU_ALTIVEC_X (MFVSCR, "mfvscr", MISC) 887BU_ALTIVEC_X (DSSALL, "dssall", MISC) 888BU_ALTIVEC_X (DSS, "dss", MISC) 889BU_ALTIVEC_X (LVSL, "lvsl", MEM) 890BU_ALTIVEC_X (LVSR, "lvsr", MEM) 891BU_ALTIVEC_X (LVEBX, "lvebx", MEM) 892BU_ALTIVEC_X (LVEHX, "lvehx", MEM) 893BU_ALTIVEC_X (LVEWX, "lvewx", MEM) 894BU_ALTIVEC_X (LVXL, "lvxl", MEM) 895BU_ALTIVEC_X (LVXL_V2DF, "lvxl_v2df", MEM) 896BU_ALTIVEC_X (LVXL_V2DI, "lvxl_v2di", MEM) 897BU_ALTIVEC_X (LVXL_V4SF, "lvxl_v4sf", MEM) 898BU_ALTIVEC_X (LVXL_V4SI, "lvxl_v4si", MEM) 899BU_ALTIVEC_X (LVXL_V8HI, "lvxl_v8hi", MEM) 900BU_ALTIVEC_X (LVXL_V16QI, "lvxl_v16qi", MEM) 901BU_ALTIVEC_X (LVX, "lvx", MEM) 902BU_ALTIVEC_X (LVX_V2DF, "lvx_v2df", MEM) 903BU_ALTIVEC_X (LVX_V2DI, "lvx_v2di", MEM) 904BU_ALTIVEC_X (LVX_V4SF, "lvx_v4sf", MEM) 905BU_ALTIVEC_X (LVX_V4SI, "lvx_v4si", MEM) 906BU_ALTIVEC_X (LVX_V8HI, "lvx_v8hi", MEM) 907BU_ALTIVEC_X (LVX_V16QI, "lvx_v16qi", MEM) 908BU_ALTIVEC_X (STVX, "stvx", MEM) 909BU_ALTIVEC_X (STVX_V2DF, "stvx_v2df", MEM) 910BU_ALTIVEC_X (STVX_V2DI, "stvx_v2di", MEM) 911BU_ALTIVEC_X (STVX_V4SF, "stvx_v4sf", MEM) 912BU_ALTIVEC_X (STVX_V4SI, "stvx_v4si", MEM) 913BU_ALTIVEC_X (STVX_V8HI, "stvx_v8hi", MEM) 914BU_ALTIVEC_X (STVX_V16QI, "stvx_v16qi", MEM) 915BU_ALTIVEC_C (LVLX, "lvlx", MEM) 916BU_ALTIVEC_C (LVLXL, "lvlxl", MEM) 917BU_ALTIVEC_C (LVRX, "lvrx", MEM) 918BU_ALTIVEC_C (LVRXL, "lvrxl", MEM) 919BU_ALTIVEC_X (STVEBX, "stvebx", MEM) 920BU_ALTIVEC_X (STVEHX, "stvehx", MEM) 921BU_ALTIVEC_X (STVEWX, "stvewx", MEM) 922BU_ALTIVEC_X (STVXL, "stvxl", MEM) 923BU_ALTIVEC_X (STVXL_V2DF, "stvxl_v2df", MEM) 924BU_ALTIVEC_X (STVXL_V2DI, "stvxl_v2di", MEM) 925BU_ALTIVEC_X (STVXL_V4SF, "stvxl_v4sf", MEM) 926BU_ALTIVEC_X (STVXL_V4SI, "stvxl_v4si", MEM) 927BU_ALTIVEC_X (STVXL_V8HI, "stvxl_v8hi", MEM) 928BU_ALTIVEC_X (STVXL_V16QI, "stvxl_v16qi", MEM) 929BU_ALTIVEC_C (STVLX, "stvlx", MEM) 930BU_ALTIVEC_C (STVLXL, "stvlxl", MEM) 931BU_ALTIVEC_C (STVRX, "stvrx", MEM) 932BU_ALTIVEC_C (STVRXL, "stvrxl", MEM) 933BU_ALTIVEC_X (MASK_FOR_LOAD, "mask_for_load", MISC) 934BU_ALTIVEC_X (MASK_FOR_STORE, "mask_for_store", MISC) 935BU_ALTIVEC_X (VEC_INIT_V4SI, "vec_init_v4si", CONST) 936BU_ALTIVEC_X (VEC_INIT_V8HI, "vec_init_v8hi", CONST) 937BU_ALTIVEC_X (VEC_INIT_V16QI, "vec_init_v16qi", CONST) 938BU_ALTIVEC_X (VEC_INIT_V4SF, "vec_init_v4sf", CONST) 939BU_ALTIVEC_X (VEC_SET_V4SI, "vec_set_v4si", CONST) 940BU_ALTIVEC_X (VEC_SET_V8HI, "vec_set_v8hi", CONST) 941BU_ALTIVEC_X (VEC_SET_V16QI, "vec_set_v16qi", CONST) 942BU_ALTIVEC_X (VEC_SET_V4SF, "vec_set_v4sf", CONST) 943BU_ALTIVEC_X (VEC_EXT_V4SI, "vec_ext_v4si", CONST) 944BU_ALTIVEC_X (VEC_EXT_V8HI, "vec_ext_v8hi", CONST) 945BU_ALTIVEC_X (VEC_EXT_V16QI, "vec_ext_v16qi", CONST) 946BU_ALTIVEC_X (VEC_EXT_V4SF, "vec_ext_v4sf", CONST) 947 948/* Altivec overloaded builtins. */ 949/* For now, don't set the classification for overloaded functions. 950 The function should be converted to the type specific instruction 951 before we get to the point about classifying the builtin type. */ 952 953/* 3 argument Altivec overloaded builtins. */ 954BU_ALTIVEC_OVERLOAD_3 (MADD, "madd") 955BU_ALTIVEC_OVERLOAD_3 (MADDS, "madds") 956BU_ALTIVEC_OVERLOAD_3 (MLADD, "mladd") 957BU_ALTIVEC_OVERLOAD_3 (MRADDS, "mradds") 958BU_ALTIVEC_OVERLOAD_3 (MSUM, "msum") 959BU_ALTIVEC_OVERLOAD_3 (MSUMS, "msums") 960BU_ALTIVEC_OVERLOAD_3 (NMSUB, "nmsub") 961BU_ALTIVEC_OVERLOAD_3 (PERM, "perm") 962BU_ALTIVEC_OVERLOAD_3 (SEL, "sel") 963BU_ALTIVEC_OVERLOAD_3 (VMSUMMBM, "vmsummbm") 964BU_ALTIVEC_OVERLOAD_3 (VMSUMSHM, "vmsumshm") 965BU_ALTIVEC_OVERLOAD_3 (VMSUMSHS, "vmsumshs") 966BU_ALTIVEC_OVERLOAD_3 (VMSUMUBM, "vmsumubm") 967BU_ALTIVEC_OVERLOAD_3 (VMSUMUHM, "vmsumuhm") 968BU_ALTIVEC_OVERLOAD_3 (VMSUMUHS, "vmsumuhs") 969 970/* Altivec DST overloaded builtins. */ 971BU_ALTIVEC_OVERLOAD_D (DST, "dst") 972BU_ALTIVEC_OVERLOAD_D (DSTT, "dstt") 973BU_ALTIVEC_OVERLOAD_D (DSTST, "dstst") 974BU_ALTIVEC_OVERLOAD_D (DSTSTT, "dststt") 975 976/* 2 argument Altivec overloaded builtins. */ 977BU_ALTIVEC_OVERLOAD_2 (ADD, "add") 978BU_ALTIVEC_OVERLOAD_2 (ADDC, "addc") 979BU_ALTIVEC_OVERLOAD_2 (ADDS, "adds") 980BU_ALTIVEC_OVERLOAD_2 (AND, "and") 981BU_ALTIVEC_OVERLOAD_2 (ANDC, "andc") 982BU_ALTIVEC_OVERLOAD_2 (AVG, "avg") 983BU_ALTIVEC_OVERLOAD_2 (CMPB, "cmpb") 984BU_ALTIVEC_OVERLOAD_2 (CMPEQ, "cmpeq") 985BU_ALTIVEC_OVERLOAD_2 (CMPGE, "cmpge") 986BU_ALTIVEC_OVERLOAD_2 (CMPGT, "cmpgt") 987BU_ALTIVEC_OVERLOAD_2 (CMPLE, "cmple") 988BU_ALTIVEC_OVERLOAD_2 (CMPLT, "cmplt") 989BU_ALTIVEC_OVERLOAD_2 (COPYSIGN, "copysign") 990BU_ALTIVEC_OVERLOAD_2 (MAX, "max") 991BU_ALTIVEC_OVERLOAD_2 (MERGEH, "mergeh") 992BU_ALTIVEC_OVERLOAD_2 (MERGEL, "mergel") 993BU_ALTIVEC_OVERLOAD_2 (MIN, "min") 994BU_ALTIVEC_OVERLOAD_2 (MULE, "mule") 995BU_ALTIVEC_OVERLOAD_2 (MULO, "mulo") 996BU_ALTIVEC_OVERLOAD_2 (NOR, "nor") 997BU_ALTIVEC_OVERLOAD_2 (OR, "or") 998BU_ALTIVEC_OVERLOAD_2 (PACK, "pack") 999BU_ALTIVEC_OVERLOAD_2 (PACKPX, "packpx") 1000BU_ALTIVEC_OVERLOAD_2 (PACKS, "packs") 1001BU_ALTIVEC_OVERLOAD_2 (PACKSU, "packsu") 1002BU_ALTIVEC_OVERLOAD_2 (RECIP, "recipdiv") 1003BU_ALTIVEC_OVERLOAD_2 (RL, "rl") 1004BU_ALTIVEC_OVERLOAD_2 (SL, "sl") 1005BU_ALTIVEC_OVERLOAD_2 (SLL, "sll") 1006BU_ALTIVEC_OVERLOAD_2 (SLO, "slo") 1007BU_ALTIVEC_OVERLOAD_2 (SR, "sr") 1008BU_ALTIVEC_OVERLOAD_2 (SRA, "sra") 1009BU_ALTIVEC_OVERLOAD_2 (SRL, "srl") 1010BU_ALTIVEC_OVERLOAD_2 (SRO, "sro") 1011BU_ALTIVEC_OVERLOAD_2 (SUB, "sub") 1012BU_ALTIVEC_OVERLOAD_2 (SUBC, "subc") 1013BU_ALTIVEC_OVERLOAD_2 (SUBS, "subs") 1014BU_ALTIVEC_OVERLOAD_2 (SUM2S, "sum2s") 1015BU_ALTIVEC_OVERLOAD_2 (SUM4S, "sum4s") 1016BU_ALTIVEC_OVERLOAD_2 (SUMS, "sums") 1017BU_ALTIVEC_OVERLOAD_2 (VADDFP, "vaddfp") 1018BU_ALTIVEC_OVERLOAD_2 (VADDSBS, "vaddsbs") 1019BU_ALTIVEC_OVERLOAD_2 (VADDSHS, "vaddshs") 1020BU_ALTIVEC_OVERLOAD_2 (VADDSWS, "vaddsws") 1021BU_ALTIVEC_OVERLOAD_2 (VADDUBM, "vaddubm") 1022BU_ALTIVEC_OVERLOAD_2 (VADDUBS, "vaddubs") 1023BU_ALTIVEC_OVERLOAD_2 (VADDUHM, "vadduhm") 1024BU_ALTIVEC_OVERLOAD_2 (VADDUHS, "vadduhs") 1025BU_ALTIVEC_OVERLOAD_2 (VADDUWM, "vadduwm") 1026BU_ALTIVEC_OVERLOAD_2 (VADDUWS, "vadduws") 1027BU_ALTIVEC_OVERLOAD_2 (VAVGSB, "vavgsb") 1028BU_ALTIVEC_OVERLOAD_2 (VAVGSH, "vavgsh") 1029BU_ALTIVEC_OVERLOAD_2 (VAVGSW, "vavgsw") 1030BU_ALTIVEC_OVERLOAD_2 (VAVGUB, "vavgub") 1031BU_ALTIVEC_OVERLOAD_2 (VAVGUH, "vavguh") 1032BU_ALTIVEC_OVERLOAD_2 (VAVGUW, "vavguw") 1033BU_ALTIVEC_OVERLOAD_2 (VCMPEQFP, "vcmpeqfp") 1034BU_ALTIVEC_OVERLOAD_2 (VCMPEQUB, "vcmpequb") 1035BU_ALTIVEC_OVERLOAD_2 (VCMPEQUH, "vcmpequh") 1036BU_ALTIVEC_OVERLOAD_2 (VCMPEQUW, "vcmpequw") 1037BU_ALTIVEC_OVERLOAD_2 (VCMPGTFP, "vcmpgtfp") 1038BU_ALTIVEC_OVERLOAD_2 (VCMPGTSB, "vcmpgtsb") 1039BU_ALTIVEC_OVERLOAD_2 (VCMPGTSH, "vcmpgtsh") 1040BU_ALTIVEC_OVERLOAD_2 (VCMPGTSW, "vcmpgtsw") 1041BU_ALTIVEC_OVERLOAD_2 (VCMPGTUB, "vcmpgtub") 1042BU_ALTIVEC_OVERLOAD_2 (VCMPGTUH, "vcmpgtuh") 1043BU_ALTIVEC_OVERLOAD_2 (VCMPGTUW, "vcmpgtuw") 1044BU_ALTIVEC_OVERLOAD_2 (VMAXFP, "vmaxfp") 1045BU_ALTIVEC_OVERLOAD_2 (VMAXSB, "vmaxsb") 1046BU_ALTIVEC_OVERLOAD_2 (VMAXSH, "vmaxsh") 1047BU_ALTIVEC_OVERLOAD_2 (VMAXSW, "vmaxsw") 1048BU_ALTIVEC_OVERLOAD_2 (VMAXUB, "vmaxub") 1049BU_ALTIVEC_OVERLOAD_2 (VMAXUH, "vmaxuh") 1050BU_ALTIVEC_OVERLOAD_2 (VMAXUW, "vmaxuw") 1051BU_ALTIVEC_OVERLOAD_2 (VMINFP, "vminfp") 1052BU_ALTIVEC_OVERLOAD_2 (VMINSB, "vminsb") 1053BU_ALTIVEC_OVERLOAD_2 (VMINSH, "vminsh") 1054BU_ALTIVEC_OVERLOAD_2 (VMINSW, "vminsw") 1055BU_ALTIVEC_OVERLOAD_2 (VMINUB, "vminub") 1056BU_ALTIVEC_OVERLOAD_2 (VMINUH, "vminuh") 1057BU_ALTIVEC_OVERLOAD_2 (VMINUW, "vminuw") 1058BU_ALTIVEC_OVERLOAD_2 (VMRGHB, "vmrghb") 1059BU_ALTIVEC_OVERLOAD_2 (VMRGHH, "vmrghh") 1060BU_ALTIVEC_OVERLOAD_2 (VMRGHW, "vmrghw") 1061BU_ALTIVEC_OVERLOAD_2 (VMRGLB, "vmrglb") 1062BU_ALTIVEC_OVERLOAD_2 (VMRGLH, "vmrglh") 1063BU_ALTIVEC_OVERLOAD_2 (VMRGLW, "vmrglw") 1064BU_ALTIVEC_OVERLOAD_2 (VMULESB, "vmulesb") 1065BU_ALTIVEC_OVERLOAD_2 (VMULESH, "vmulesh") 1066BU_ALTIVEC_OVERLOAD_2 (VMULEUB, "vmuleub") 1067BU_ALTIVEC_OVERLOAD_2 (VMULEUH, "vmuleuh") 1068BU_ALTIVEC_OVERLOAD_2 (VMULOSB, "vmulosb") 1069BU_ALTIVEC_OVERLOAD_2 (VMULOSH, "vmulosh") 1070BU_ALTIVEC_OVERLOAD_2 (VMULOUB, "vmuloub") 1071BU_ALTIVEC_OVERLOAD_2 (VMULOUH, "vmulouh") 1072BU_ALTIVEC_OVERLOAD_2 (VPKSHSS, "vpkshss") 1073BU_ALTIVEC_OVERLOAD_2 (VPKSHUS, "vpkshus") 1074BU_ALTIVEC_OVERLOAD_2 (VPKSWSS, "vpkswss") 1075BU_ALTIVEC_OVERLOAD_2 (VPKSWUS, "vpkswus") 1076BU_ALTIVEC_OVERLOAD_2 (VPKUHUM, "vpkuhum") 1077BU_ALTIVEC_OVERLOAD_2 (VPKUHUS, "vpkuhus") 1078BU_ALTIVEC_OVERLOAD_2 (VPKUWUM, "vpkuwum") 1079BU_ALTIVEC_OVERLOAD_2 (VPKUWUS, "vpkuwus") 1080BU_ALTIVEC_OVERLOAD_2 (VRLB, "vrlb") 1081BU_ALTIVEC_OVERLOAD_2 (VRLH, "vrlh") 1082BU_ALTIVEC_OVERLOAD_2 (VRLW, "vrlw") 1083BU_ALTIVEC_OVERLOAD_2 (VSLB, "vslb") 1084BU_ALTIVEC_OVERLOAD_2 (VSLH, "vslh") 1085BU_ALTIVEC_OVERLOAD_2 (VSLW, "vslw") 1086BU_ALTIVEC_OVERLOAD_2 (VSRAB, "vsrab") 1087BU_ALTIVEC_OVERLOAD_2 (VSRAH, "vsrah") 1088BU_ALTIVEC_OVERLOAD_2 (VSRAW, "vsraw") 1089BU_ALTIVEC_OVERLOAD_2 (VSRB, "vsrb") 1090BU_ALTIVEC_OVERLOAD_2 (VSRH, "vsrh") 1091BU_ALTIVEC_OVERLOAD_2 (VSRW, "vsrw") 1092BU_ALTIVEC_OVERLOAD_2 (VSUBFP, "vsubfp") 1093BU_ALTIVEC_OVERLOAD_2 (VSUBSBS, "vsubsbs") 1094BU_ALTIVEC_OVERLOAD_2 (VSUBSHS, "vsubshs") 1095BU_ALTIVEC_OVERLOAD_2 (VSUBSWS, "vsubsws") 1096BU_ALTIVEC_OVERLOAD_2 (VSUBUBM, "vsububm") 1097BU_ALTIVEC_OVERLOAD_2 (VSUBUBS, "vsububs") 1098BU_ALTIVEC_OVERLOAD_2 (VSUBUHM, "vsubuhm") 1099BU_ALTIVEC_OVERLOAD_2 (VSUBUHS, "vsubuhs") 1100BU_ALTIVEC_OVERLOAD_2 (VSUBUWM, "vsubuwm") 1101BU_ALTIVEC_OVERLOAD_2 (VSUBUWS, "vsubuws") 1102BU_ALTIVEC_OVERLOAD_2 (VSUM4SBS, "vsum4sbs") 1103BU_ALTIVEC_OVERLOAD_2 (VSUM4SHS, "vsum4shs") 1104BU_ALTIVEC_OVERLOAD_2 (VSUM4UBS, "vsum4ubs") 1105BU_ALTIVEC_OVERLOAD_2 (XOR, "xor") 1106 1107/* 1 argument Altivec overloaded functions. */ 1108BU_ALTIVEC_OVERLOAD_1 (ABS, "abs") 1109BU_ALTIVEC_OVERLOAD_1 (ABSS, "abss") 1110BU_ALTIVEC_OVERLOAD_1 (CEIL, "ceil") 1111BU_ALTIVEC_OVERLOAD_1 (EXPTE, "expte") 1112BU_ALTIVEC_OVERLOAD_1 (FLOOR, "floor") 1113BU_ALTIVEC_OVERLOAD_1 (LOGE, "loge") 1114BU_ALTIVEC_OVERLOAD_1 (MTVSCR, "mtvscr") 1115BU_ALTIVEC_OVERLOAD_1 (NEARBYINT, "nearbyint") 1116BU_ALTIVEC_OVERLOAD_1 (RE, "re") 1117BU_ALTIVEC_OVERLOAD_1 (RINT, "rint") 1118BU_ALTIVEC_OVERLOAD_1 (ROUND, "round") 1119BU_ALTIVEC_OVERLOAD_1 (RSQRT, "rsqrt") 1120BU_ALTIVEC_OVERLOAD_1 (RSQRTE, "rsqrte") 1121BU_ALTIVEC_OVERLOAD_1 (SQRT, "sqrt") 1122BU_ALTIVEC_OVERLOAD_1 (TRUNC, "trunc") 1123BU_ALTIVEC_OVERLOAD_1 (UNPACKH, "unpackh") 1124BU_ALTIVEC_OVERLOAD_1 (UNPACKL, "unpackl") 1125BU_ALTIVEC_OVERLOAD_1 (VUPKHPX, "vupkhpx") 1126BU_ALTIVEC_OVERLOAD_1 (VUPKHSB, "vupkhsb") 1127BU_ALTIVEC_OVERLOAD_1 (VUPKHSH, "vupkhsh") 1128BU_ALTIVEC_OVERLOAD_1 (VUPKLPX, "vupklpx") 1129BU_ALTIVEC_OVERLOAD_1 (VUPKLSB, "vupklsb") 1130BU_ALTIVEC_OVERLOAD_1 (VUPKLSH, "vupklsh") 1131 1132/* Overloaded altivec predicates. */ 1133BU_ALTIVEC_OVERLOAD_P (VCMPEQ_P, "vcmpeq_p") 1134BU_ALTIVEC_OVERLOAD_P (VCMPGT_P, "vcmpgt_p") 1135BU_ALTIVEC_OVERLOAD_P (VCMPGE_P, "vcmpge_p") 1136 1137/* Overloaded Altivec builtins that are handled as special cases. */ 1138BU_ALTIVEC_OVERLOAD_X (CTF, "ctf") 1139BU_ALTIVEC_OVERLOAD_X (CTS, "cts") 1140BU_ALTIVEC_OVERLOAD_X (CTU, "ctu") 1141BU_ALTIVEC_OVERLOAD_X (EXTRACT, "extract") 1142BU_ALTIVEC_OVERLOAD_X (INSERT, "insert") 1143BU_ALTIVEC_OVERLOAD_X (LD, "ld") 1144BU_ALTIVEC_OVERLOAD_X (LDE, "lde") 1145BU_ALTIVEC_OVERLOAD_X (LDL, "ldl") 1146BU_ALTIVEC_OVERLOAD_X (LVEBX, "lvebx") 1147BU_ALTIVEC_OVERLOAD_X (LVEHX, "lvehx") 1148BU_ALTIVEC_OVERLOAD_X (LVEWX, "lvewx") 1149BU_ALTIVEC_OVERLOAD_X (LVLX, "lvlx") 1150BU_ALTIVEC_OVERLOAD_X (LVLXL, "lvlxl") 1151BU_ALTIVEC_OVERLOAD_X (LVRX, "lvrx") 1152BU_ALTIVEC_OVERLOAD_X (LVRXL, "lvrxl") 1153BU_ALTIVEC_OVERLOAD_X (LVSL, "lvsl") 1154BU_ALTIVEC_OVERLOAD_X (LVSR, "lvsr") 1155BU_ALTIVEC_OVERLOAD_X (PROMOTE, "promote") 1156BU_ALTIVEC_OVERLOAD_X (SLD, "sld") 1157BU_ALTIVEC_OVERLOAD_X (SPLAT, "splat") 1158BU_ALTIVEC_OVERLOAD_X (SPLATS, "splats") 1159BU_ALTIVEC_OVERLOAD_X (ST, "st") 1160BU_ALTIVEC_OVERLOAD_X (STE, "ste") 1161BU_ALTIVEC_OVERLOAD_X (STEP, "step") 1162BU_ALTIVEC_OVERLOAD_X (STL, "stl") 1163BU_ALTIVEC_OVERLOAD_X (STVEBX, "stvebx") 1164BU_ALTIVEC_OVERLOAD_X (STVEHX, "stvehx") 1165BU_ALTIVEC_OVERLOAD_X (STVEWX, "stvewx") 1166BU_ALTIVEC_OVERLOAD_X (STVLX, "stvlx") 1167BU_ALTIVEC_OVERLOAD_X (STVLXL, "stvlxl") 1168BU_ALTIVEC_OVERLOAD_X (STVRX, "stvrx") 1169BU_ALTIVEC_OVERLOAD_X (STVRXL, "stvrxl") 1170BU_ALTIVEC_OVERLOAD_X (VCFSX, "vcfsx") 1171BU_ALTIVEC_OVERLOAD_X (VCFUX, "vcfux") 1172BU_ALTIVEC_OVERLOAD_X (VSPLTB, "vspltb") 1173BU_ALTIVEC_OVERLOAD_X (VSPLTH, "vsplth") 1174BU_ALTIVEC_OVERLOAD_X (VSPLTW, "vspltw") 1175 1176/* 3 argument VSX builtins. */ 1177BU_VSX_3 (XVMADDSP, "xvmaddsp", CONST, fmav4sf4) 1178BU_VSX_3 (XVMSUBSP, "xvmsubsp", CONST, fmsv4sf4) 1179BU_VSX_3 (XVNMADDSP, "xvnmaddsp", CONST, nfmav4sf4) 1180BU_VSX_3 (XVNMSUBSP, "xvnmsubsp", CONST, nfmsv4sf4) 1181 1182BU_VSX_3 (XVMADDDP, "xvmadddp", CONST, fmav2df4) 1183BU_VSX_3 (XVMSUBDP, "xvmsubdp", CONST, fmsv2df4) 1184BU_VSX_3 (XVNMADDDP, "xvnmadddp", CONST, nfmav2df4) 1185BU_VSX_3 (XVNMSUBDP, "xvnmsubdp", CONST, nfmsv2df4) 1186 1187BU_VSX_3 (XXSEL_1TI, "xxsel_1ti", CONST, vector_select_v1ti) 1188BU_VSX_3 (XXSEL_2DI, "xxsel_2di", CONST, vector_select_v2di) 1189BU_VSX_3 (XXSEL_2DF, "xxsel_2df", CONST, vector_select_v2df) 1190BU_VSX_3 (XXSEL_4SF, "xxsel_4sf", CONST, vector_select_v4sf) 1191BU_VSX_3 (XXSEL_4SI, "xxsel_4si", CONST, vector_select_v4si) 1192BU_VSX_3 (XXSEL_8HI, "xxsel_8hi", CONST, vector_select_v8hi) 1193BU_VSX_3 (XXSEL_16QI, "xxsel_16qi", CONST, vector_select_v16qi) 1194BU_VSX_3 (XXSEL_1TI_UNS, "xxsel_1ti_uns", CONST, vector_select_v1ti_uns) 1195BU_VSX_3 (XXSEL_2DI_UNS, "xxsel_2di_uns", CONST, vector_select_v2di_uns) 1196BU_VSX_3 (XXSEL_4SI_UNS, "xxsel_4si_uns", CONST, vector_select_v4si_uns) 1197BU_VSX_3 (XXSEL_8HI_UNS, "xxsel_8hi_uns", CONST, vector_select_v8hi_uns) 1198BU_VSX_3 (XXSEL_16QI_UNS, "xxsel_16qi_uns", CONST, vector_select_v16qi_uns) 1199 1200BU_VSX_3 (VPERM_1TI, "vperm_1ti", CONST, altivec_vperm_v1ti) 1201BU_VSX_3 (VPERM_2DI, "vperm_2di", CONST, altivec_vperm_v2di) 1202BU_VSX_3 (VPERM_2DF, "vperm_2df", CONST, altivec_vperm_v2df) 1203BU_VSX_3 (VPERM_4SF, "vperm_4sf", CONST, altivec_vperm_v4sf) 1204BU_VSX_3 (VPERM_4SI, "vperm_4si", CONST, altivec_vperm_v4si) 1205BU_VSX_3 (VPERM_8HI, "vperm_8hi", CONST, altivec_vperm_v8hi) 1206BU_VSX_3 (VPERM_16QI, "vperm_16qi", CONST, altivec_vperm_v16qi) 1207BU_VSX_3 (VPERM_1TI_UNS, "vperm_1ti_uns", CONST, altivec_vperm_v1ti_uns) 1208BU_VSX_3 (VPERM_2DI_UNS, "vperm_2di_uns", CONST, altivec_vperm_v2di_uns) 1209BU_VSX_3 (VPERM_4SI_UNS, "vperm_4si_uns", CONST, altivec_vperm_v4si_uns) 1210BU_VSX_3 (VPERM_8HI_UNS, "vperm_8hi_uns", CONST, altivec_vperm_v8hi_uns) 1211BU_VSX_3 (VPERM_16QI_UNS, "vperm_16qi_uns", CONST, altivec_vperm_v16qi_uns) 1212 1213BU_VSX_3 (XXPERMDI_1TI, "xxpermdi_1ti", CONST, vsx_xxpermdi_v1ti) 1214BU_VSX_3 (XXPERMDI_2DF, "xxpermdi_2df", CONST, vsx_xxpermdi_v2df) 1215BU_VSX_3 (XXPERMDI_2DI, "xxpermdi_2di", CONST, vsx_xxpermdi_v2di) 1216BU_VSX_3 (XXPERMDI_4SF, "xxpermdi_4sf", CONST, vsx_xxpermdi_v4sf) 1217BU_VSX_3 (XXPERMDI_4SI, "xxpermdi_4si", CONST, vsx_xxpermdi_v4si) 1218BU_VSX_3 (XXPERMDI_8HI, "xxpermdi_8hi", CONST, vsx_xxpermdi_v8hi) 1219BU_VSX_3 (XXPERMDI_16QI, "xxpermdi_16qi", CONST, vsx_xxpermdi_v16qi) 1220BU_VSX_3 (SET_1TI, "set_1ti", CONST, vsx_set_v1ti) 1221BU_VSX_3 (SET_2DF, "set_2df", CONST, vsx_set_v2df) 1222BU_VSX_3 (SET_2DI, "set_2di", CONST, vsx_set_v2di) 1223BU_VSX_3 (XXSLDWI_2DI, "xxsldwi_2di", CONST, vsx_xxsldwi_v2di) 1224BU_VSX_3 (XXSLDWI_2DF, "xxsldwi_2df", CONST, vsx_xxsldwi_v2df) 1225BU_VSX_3 (XXSLDWI_4SF, "xxsldwi_4sf", CONST, vsx_xxsldwi_v4sf) 1226BU_VSX_3 (XXSLDWI_4SI, "xxsldwi_4si", CONST, vsx_xxsldwi_v4si) 1227BU_VSX_3 (XXSLDWI_8HI, "xxsldwi_8hi", CONST, vsx_xxsldwi_v8hi) 1228BU_VSX_3 (XXSLDWI_16QI, "xxsldwi_16qi", CONST, vsx_xxsldwi_v16qi) 1229 1230/* 2 argument VSX builtins. */ 1231BU_VSX_2 (XVADDDP, "xvadddp", FP, addv2df3) 1232BU_VSX_2 (XVSUBDP, "xvsubdp", FP, subv2df3) 1233BU_VSX_2 (XVMULDP, "xvmuldp", FP, mulv2df3) 1234BU_VSX_2 (XVDIVDP, "xvdivdp", FP, divv2df3) 1235BU_VSX_2 (RECIP_V2DF, "xvrecipdivdp", FP, recipv2df3) 1236BU_VSX_2 (XVMINDP, "xvmindp", CONST, sminv2df3) 1237BU_VSX_2 (XVMAXDP, "xvmaxdp", CONST, smaxv2df3) 1238BU_VSX_2 (XVTDIVDP_FE, "xvtdivdp_fe", CONST, vsx_tdivv2df3_fe) 1239BU_VSX_2 (XVTDIVDP_FG, "xvtdivdp_fg", CONST, vsx_tdivv2df3_fg) 1240BU_VSX_2 (XVCMPEQDP, "xvcmpeqdp", CONST, vector_eqv2df) 1241BU_VSX_2 (XVCMPGTDP, "xvcmpgtdp", CONST, vector_gtv2df) 1242BU_VSX_2 (XVCMPGEDP, "xvcmpgedp", CONST, vector_gev2df) 1243 1244BU_VSX_2 (XVADDSP, "xvaddsp", FP, addv4sf3) 1245BU_VSX_2 (XVSUBSP, "xvsubsp", FP, subv4sf3) 1246BU_VSX_2 (XVMULSP, "xvmulsp", FP, mulv4sf3) 1247BU_VSX_2 (XVDIVSP, "xvdivsp", FP, divv4sf3) 1248BU_VSX_2 (RECIP_V4SF, "xvrecipdivsp", FP, recipv4sf3) 1249BU_VSX_2 (XVMINSP, "xvminsp", CONST, sminv4sf3) 1250BU_VSX_2 (XVMAXSP, "xvmaxsp", CONST, smaxv4sf3) 1251BU_VSX_2 (XVTDIVSP_FE, "xvtdivsp_fe", CONST, vsx_tdivv4sf3_fe) 1252BU_VSX_2 (XVTDIVSP_FG, "xvtdivsp_fg", CONST, vsx_tdivv4sf3_fg) 1253BU_VSX_2 (XVCMPEQSP, "xvcmpeqsp", CONST, vector_eqv4sf) 1254BU_VSX_2 (XVCMPGTSP, "xvcmpgtsp", CONST, vector_gtv4sf) 1255BU_VSX_2 (XVCMPGESP, "xvcmpgesp", CONST, vector_gev4sf) 1256 1257BU_VSX_2 (XSMINDP, "xsmindp", CONST, smindf3) 1258BU_VSX_2 (XSMAXDP, "xsmaxdp", CONST, smaxdf3) 1259BU_VSX_2 (XSTDIVDP_FE, "xstdivdp_fe", CONST, vsx_tdivdf3_fe) 1260BU_VSX_2 (XSTDIVDP_FG, "xstdivdp_fg", CONST, vsx_tdivdf3_fg) 1261BU_VSX_2 (CPSGNDP, "cpsgndp", CONST, vector_copysignv2df3) 1262BU_VSX_2 (CPSGNSP, "cpsgnsp", CONST, vector_copysignv4sf3) 1263 1264BU_VSX_2 (CONCAT_2DF, "concat_2df", CONST, vsx_concat_v2df) 1265BU_VSX_2 (CONCAT_2DI, "concat_2di", CONST, vsx_concat_v2di) 1266BU_VSX_2 (SPLAT_2DF, "splat_2df", CONST, vsx_splat_v2df) 1267BU_VSX_2 (SPLAT_2DI, "splat_2di", CONST, vsx_splat_v2di) 1268BU_VSX_2 (XXMRGHW_4SF, "xxmrghw", CONST, vsx_xxmrghw_v4sf) 1269BU_VSX_2 (XXMRGHW_4SI, "xxmrghw_4si", CONST, vsx_xxmrghw_v4si) 1270BU_VSX_2 (XXMRGLW_4SF, "xxmrglw", CONST, vsx_xxmrglw_v4sf) 1271BU_VSX_2 (XXMRGLW_4SI, "xxmrglw_4si", CONST, vsx_xxmrglw_v4si) 1272BU_VSX_2 (VEC_MERGEL_V2DF, "mergel_2df", CONST, vsx_mergel_v2df) 1273BU_VSX_2 (VEC_MERGEL_V2DI, "mergel_2di", CONST, vsx_mergel_v2di) 1274BU_VSX_2 (VEC_MERGEH_V2DF, "mergeh_2df", CONST, vsx_mergeh_v2df) 1275BU_VSX_2 (VEC_MERGEH_V2DI, "mergeh_2di", CONST, vsx_mergeh_v2di) 1276BU_VSX_2 (XXSPLTD_V2DF, "xxspltd_2df", CONST, vsx_xxspltd_v2df) 1277BU_VSX_2 (XXSPLTD_V2DI, "xxspltd_2di", CONST, vsx_xxspltd_v2di) 1278BU_VSX_2 (DIV_V2DI, "div_2di", CONST, vsx_div_v2di) 1279BU_VSX_2 (UDIV_V2DI, "udiv_2di", CONST, vsx_udiv_v2di) 1280BU_VSX_2 (MUL_V2DI, "mul_2di", CONST, vsx_mul_v2di) 1281 1282BU_VSX_2 (XVCVSXDDP_SCALE, "xvcvsxddp_scale", CONST, vsx_xvcvsxddp_scale) 1283BU_VSX_2 (XVCVUXDDP_SCALE, "xvcvuxddp_scale", CONST, vsx_xvcvuxddp_scale) 1284BU_VSX_2 (XVCVDPSXDS_SCALE, "xvcvdpsxds_scale", CONST, vsx_xvcvdpsxds_scale) 1285BU_VSX_2 (XVCVDPUXDS_SCALE, "xvcvdpuxds_scale", CONST, vsx_xvcvdpuxds_scale) 1286 1287/* VSX abs builtin functions. */ 1288BU_VSX_A (XVABSDP, "xvabsdp", CONST, absv2df2) 1289BU_VSX_A (XVNABSDP, "xvnabsdp", CONST, vsx_nabsv2df2) 1290BU_VSX_A (XVABSSP, "xvabssp", CONST, absv4sf2) 1291BU_VSX_A (XVNABSSP, "xvnabssp", CONST, vsx_nabsv4sf2) 1292 1293/* 1 argument VSX builtin functions. */ 1294BU_VSX_1 (XVNEGDP, "xvnegdp", CONST, negv2df2) 1295BU_VSX_1 (XVSQRTDP, "xvsqrtdp", CONST, sqrtv2df2) 1296BU_VSX_1 (RSQRT_2DF, "xvrsqrtdp", CONST, rsqrtv2df2) 1297BU_VSX_1 (XVRSQRTEDP, "xvrsqrtedp", CONST, rsqrtev2df2) 1298BU_VSX_1 (XVTSQRTDP_FE, "xvtsqrtdp_fe", CONST, vsx_tsqrtv2df2_fe) 1299BU_VSX_1 (XVTSQRTDP_FG, "xvtsqrtdp_fg", CONST, vsx_tsqrtv2df2_fg) 1300BU_VSX_1 (XVREDP, "xvredp", CONST, vsx_frev2df2) 1301 1302BU_VSX_1 (XVNEGSP, "xvnegsp", CONST, negv4sf2) 1303BU_VSX_1 (XVSQRTSP, "xvsqrtsp", CONST, sqrtv4sf2) 1304BU_VSX_1 (RSQRT_4SF, "xvrsqrtsp", CONST, rsqrtv4sf2) 1305BU_VSX_1 (XVRSQRTESP, "xvrsqrtesp", CONST, rsqrtev4sf2) 1306BU_VSX_1 (XVTSQRTSP_FE, "xvtsqrtsp_fe", CONST, vsx_tsqrtv4sf2_fe) 1307BU_VSX_1 (XVTSQRTSP_FG, "xvtsqrtsp_fg", CONST, vsx_tsqrtv4sf2_fg) 1308BU_VSX_1 (XVRESP, "xvresp", CONST, vsx_frev4sf2) 1309 1310BU_VSX_1 (XSCVDPSP, "xscvdpsp", CONST, vsx_xscvdpsp) 1311BU_VSX_1 (XSCVSPDP, "xscvspdp", CONST, vsx_xscvspdp) 1312BU_VSX_1 (XVCVDPSP, "xvcvdpsp", CONST, vsx_xvcvdpsp) 1313BU_VSX_1 (XVCVSPDP, "xvcvspdp", CONST, vsx_xvcvspdp) 1314BU_VSX_1 (XSTSQRTDP_FE, "xstsqrtdp_fe", CONST, vsx_tsqrtdf2_fe) 1315BU_VSX_1 (XSTSQRTDP_FG, "xstsqrtdp_fg", CONST, vsx_tsqrtdf2_fg) 1316 1317BU_VSX_1 (XVCVDPSXDS, "xvcvdpsxds", CONST, vsx_fix_truncv2dfv2di2) 1318BU_VSX_1 (XVCVDPUXDS, "xvcvdpuxds", CONST, vsx_fixuns_truncv2dfv2di2) 1319BU_VSX_1 (XVCVDPUXDS_UNS, "xvcvdpuxds_uns", CONST, vsx_fixuns_truncv2dfv2di2) 1320BU_VSX_1 (XVCVSXDDP, "xvcvsxddp", CONST, vsx_floatv2div2df2) 1321BU_VSX_1 (XVCVUXDDP, "xvcvuxddp", CONST, vsx_floatunsv2div2df2) 1322BU_VSX_1 (XVCVUXDDP_UNS, "xvcvuxddp_uns", CONST, vsx_floatunsv2div2df2) 1323 1324BU_VSX_1 (XVCVSPSXWS, "xvcvspsxws", CONST, vsx_fix_truncv4sfv4si2) 1325BU_VSX_1 (XVCVSPUXWS, "xvcvspuxws", CONST, vsx_fixuns_truncv4sfv4si2) 1326BU_VSX_1 (XVCVSXWSP, "xvcvsxwsp", CONST, vsx_floatv4siv4sf2) 1327BU_VSX_1 (XVCVUXWSP, "xvcvuxwsp", CONST, vsx_floatunsv4siv4sf2) 1328 1329BU_VSX_1 (XVCVDPSXWS, "xvcvdpsxws", CONST, vsx_xvcvdpsxws) 1330BU_VSX_1 (XVCVDPUXWS, "xvcvdpuxws", CONST, vsx_xvcvdpuxws) 1331BU_VSX_1 (XVCVSXWDP, "xvcvsxwdp", CONST, vsx_xvcvsxwdp) 1332BU_VSX_1 (XVCVUXWDP, "xvcvuxwdp", CONST, vsx_xvcvuxwdp) 1333BU_VSX_1 (XVRDPI, "xvrdpi", CONST, vsx_xvrdpi) 1334BU_VSX_1 (XVRDPIC, "xvrdpic", CONST, vsx_xvrdpic) 1335BU_VSX_1 (XVRDPIM, "xvrdpim", CONST, vsx_floorv2df2) 1336BU_VSX_1 (XVRDPIP, "xvrdpip", CONST, vsx_ceilv2df2) 1337BU_VSX_1 (XVRDPIZ, "xvrdpiz", CONST, vsx_btruncv2df2) 1338 1339BU_VSX_1 (XVCVSPSXDS, "xvcvspsxds", CONST, vsx_xvcvspsxds) 1340BU_VSX_1 (XVCVSPUXDS, "xvcvspuxds", CONST, vsx_xvcvspuxds) 1341BU_VSX_1 (XVCVSXDSP, "xvcvsxdsp", CONST, vsx_xvcvsxdsp) 1342BU_VSX_1 (XVCVUXDSP, "xvcvuxdsp", CONST, vsx_xvcvuxdsp) 1343BU_VSX_1 (XVRSPI, "xvrspi", CONST, vsx_xvrspi) 1344BU_VSX_1 (XVRSPIC, "xvrspic", CONST, vsx_xvrspic) 1345BU_VSX_1 (XVRSPIM, "xvrspim", CONST, vsx_floorv4sf2) 1346BU_VSX_1 (XVRSPIP, "xvrspip", CONST, vsx_ceilv4sf2) 1347BU_VSX_1 (XVRSPIZ, "xvrspiz", CONST, vsx_btruncv4sf2) 1348 1349BU_VSX_1 (XSRDPI, "xsrdpi", CONST, vsx_xsrdpi) 1350BU_VSX_1 (XSRDPIC, "xsrdpic", CONST, vsx_xsrdpic) 1351BU_VSX_1 (XSRDPIM, "xsrdpim", CONST, floordf2) 1352BU_VSX_1 (XSRDPIP, "xsrdpip", CONST, ceildf2) 1353BU_VSX_1 (XSRDPIZ, "xsrdpiz", CONST, btruncdf2) 1354 1355/* VSX predicate functions. */ 1356BU_VSX_P (XVCMPEQSP_P, "xvcmpeqsp_p", CONST, vector_eq_v4sf_p) 1357BU_VSX_P (XVCMPGESP_P, "xvcmpgesp_p", CONST, vector_ge_v4sf_p) 1358BU_VSX_P (XVCMPGTSP_P, "xvcmpgtsp_p", CONST, vector_gt_v4sf_p) 1359BU_VSX_P (XVCMPEQDP_P, "xvcmpeqdp_p", CONST, vector_eq_v2df_p) 1360BU_VSX_P (XVCMPGEDP_P, "xvcmpgedp_p", CONST, vector_ge_v2df_p) 1361BU_VSX_P (XVCMPGTDP_P, "xvcmpgtdp_p", CONST, vector_gt_v2df_p) 1362 1363/* VSX builtins that are handled as special cases. */ 1364BU_VSX_X (LXSDX, "lxsdx", MEM) 1365BU_VSX_X (LXVD2X_V1TI, "lxvd2x_v1ti", MEM) 1366BU_VSX_X (LXVD2X_V2DF, "lxvd2x_v2df", MEM) 1367BU_VSX_X (LXVD2X_V2DI, "lxvd2x_v2di", MEM) 1368BU_VSX_X (LXVDSX, "lxvdsx", MEM) 1369BU_VSX_X (LXVW4X_V4SF, "lxvw4x_v4sf", MEM) 1370BU_VSX_X (LXVW4X_V4SI, "lxvw4x_v4si", MEM) 1371BU_VSX_X (LXVW4X_V8HI, "lxvw4x_v8hi", MEM) 1372BU_VSX_X (LXVW4X_V16QI, "lxvw4x_v16qi", MEM) 1373BU_VSX_X (STXSDX, "stxsdx", MEM) 1374BU_VSX_X (STXVD2X_V1TI, "stxvd2x_v1ti", MEM) 1375BU_VSX_X (STXVD2X_V2DF, "stxvd2x_v2df", MEM) 1376BU_VSX_X (STXVD2X_V2DI, "stxvd2x_v2di", MEM) 1377BU_VSX_X (STXVW4X_V4SF, "stxvw4x_v4sf", MEM) 1378BU_VSX_X (STXVW4X_V4SI, "stxvw4x_v4si", MEM) 1379BU_VSX_X (STXVW4X_V8HI, "stxvw4x_v8hi", MEM) 1380BU_VSX_X (STXVW4X_V16QI, "stxvw4x_v16qi", MEM) 1381BU_VSX_X (XSABSDP, "xsabsdp", CONST) 1382BU_VSX_X (XSADDDP, "xsadddp", FP) 1383BU_VSX_X (XSCMPODP, "xscmpodp", FP) 1384BU_VSX_X (XSCMPUDP, "xscmpudp", FP) 1385BU_VSX_X (XSCVDPSXDS, "xscvdpsxds", FP) 1386BU_VSX_X (XSCVDPSXWS, "xscvdpsxws", FP) 1387BU_VSX_X (XSCVDPUXDS, "xscvdpuxds", FP) 1388BU_VSX_X (XSCVDPUXWS, "xscvdpuxws", FP) 1389BU_VSX_X (XSCVSXDDP, "xscvsxddp", FP) 1390BU_VSX_X (XSCVUXDDP, "xscvuxddp", FP) 1391BU_VSX_X (XSDIVDP, "xsdivdp", FP) 1392BU_VSX_X (XSMADDADP, "xsmaddadp", FP) 1393BU_VSX_X (XSMADDMDP, "xsmaddmdp", FP) 1394BU_VSX_X (XSMOVDP, "xsmovdp", FP) 1395BU_VSX_X (XSMSUBADP, "xsmsubadp", FP) 1396BU_VSX_X (XSMSUBMDP, "xsmsubmdp", FP) 1397BU_VSX_X (XSMULDP, "xsmuldp", FP) 1398BU_VSX_X (XSNABSDP, "xsnabsdp", FP) 1399BU_VSX_X (XSNEGDP, "xsnegdp", FP) 1400BU_VSX_X (XSNMADDADP, "xsnmaddadp", FP) 1401BU_VSX_X (XSNMADDMDP, "xsnmaddmdp", FP) 1402BU_VSX_X (XSNMSUBADP, "xsnmsubadp", FP) 1403BU_VSX_X (XSNMSUBMDP, "xsnmsubmdp", FP) 1404BU_VSX_X (XSSUBDP, "xssubdp", FP) 1405BU_VSX_X (VEC_INIT_V1TI, "vec_init_v1ti", CONST) 1406BU_VSX_X (VEC_INIT_V2DF, "vec_init_v2df", CONST) 1407BU_VSX_X (VEC_INIT_V2DI, "vec_init_v2di", CONST) 1408BU_VSX_X (VEC_SET_V1TI, "vec_set_v1ti", CONST) 1409BU_VSX_X (VEC_SET_V2DF, "vec_set_v2df", CONST) 1410BU_VSX_X (VEC_SET_V2DI, "vec_set_v2di", CONST) 1411BU_VSX_X (VEC_EXT_V1TI, "vec_ext_v1ti", CONST) 1412BU_VSX_X (VEC_EXT_V2DF, "vec_ext_v2df", CONST) 1413BU_VSX_X (VEC_EXT_V2DI, "vec_ext_v2di", CONST) 1414 1415/* VSX overloaded builtins, add the overloaded functions not present in 1416 Altivec. */ 1417 1418/* 3 argument VSX overloaded builtins. */ 1419BU_VSX_OVERLOAD_3 (MSUB, "msub") 1420BU_VSX_OVERLOAD_3 (NMADD, "nmadd") 1421BU_VSX_OVERLOAD_3V (XXPERMDI, "xxpermdi") 1422BU_VSX_OVERLOAD_3V (XXSLDWI, "xxsldwi") 1423 1424/* 2 argument VSX overloaded builtin functions. */ 1425BU_VSX_OVERLOAD_2 (MUL, "mul") 1426BU_VSX_OVERLOAD_2 (DIV, "div") 1427BU_VSX_OVERLOAD_2 (XXMRGHW, "xxmrghw") 1428BU_VSX_OVERLOAD_2 (XXMRGLW, "xxmrglw") 1429BU_VSX_OVERLOAD_2 (XXSPLTD, "xxspltd") 1430BU_VSX_OVERLOAD_2 (XXSPLTW, "xxspltw") 1431 1432/* VSX builtins that are handled as special cases. */ 1433BU_VSX_OVERLOAD_X (LD, "ld") 1434BU_VSX_OVERLOAD_X (ST, "st") 1435 1436/* 1 argument VSX instructions added in ISA 2.07. */ 1437BU_P8V_VSX_1 (XSCVSPDPN, "xscvspdpn", CONST, vsx_xscvspdpn) 1438BU_P8V_VSX_1 (XSCVDPSPN, "xscvdpspn", CONST, vsx_xscvdpspn) 1439 1440/* 1 argument altivec instructions added in ISA 2.07. */ 1441BU_P8V_AV_1 (ABS_V2DI, "abs_v2di", CONST, absv2di2) 1442BU_P8V_AV_1 (VUPKHSW, "vupkhsw", CONST, altivec_vupkhsw) 1443BU_P8V_AV_1 (VUPKLSW, "vupklsw", CONST, altivec_vupklsw) 1444BU_P8V_AV_1 (VCLZB, "vclzb", CONST, clzv16qi2) 1445BU_P8V_AV_1 (VCLZH, "vclzh", CONST, clzv8hi2) 1446BU_P8V_AV_1 (VCLZW, "vclzw", CONST, clzv4si2) 1447BU_P8V_AV_1 (VCLZD, "vclzd", CONST, clzv2di2) 1448BU_P8V_AV_1 (VPOPCNTB, "vpopcntb", CONST, popcountv16qi2) 1449BU_P8V_AV_1 (VPOPCNTH, "vpopcnth", CONST, popcountv8hi2) 1450BU_P8V_AV_1 (VPOPCNTW, "vpopcntw", CONST, popcountv4si2) 1451BU_P8V_AV_1 (VPOPCNTD, "vpopcntd", CONST, popcountv2di2) 1452BU_P8V_AV_1 (VGBBD, "vgbbd", CONST, p8v_vgbbd) 1453 1454/* 2 argument altivec instructions added in ISA 2.07. */ 1455BU_P8V_AV_2 (VADDCUQ, "vaddcuq", CONST, altivec_vaddcuq) 1456BU_P8V_AV_2 (VADDUDM, "vaddudm", CONST, addv2di3) 1457BU_P8V_AV_2 (VADDUQM, "vadduqm", CONST, altivec_vadduqm) 1458BU_P8V_AV_2 (VMINSD, "vminsd", CONST, sminv2di3) 1459BU_P8V_AV_2 (VMAXSD, "vmaxsd", CONST, smaxv2di3) 1460BU_P8V_AV_2 (VMINUD, "vminud", CONST, uminv2di3) 1461BU_P8V_AV_2 (VMAXUD, "vmaxud", CONST, umaxv2di3) 1462BU_P8V_AV_2 (VMRGEW, "vmrgew", CONST, p8_vmrgew) 1463BU_P8V_AV_2 (VMRGOW, "vmrgow", CONST, p8_vmrgow) 1464BU_P8V_AV_2 (VBPERMQ, "vbpermq", CONST, altivec_vbpermq) 1465BU_P8V_AV_2 (VPKUDUM, "vpkudum", CONST, altivec_vpkudum) 1466BU_P8V_AV_2 (VPKSDSS, "vpksdss", CONST, altivec_vpksdss) 1467BU_P8V_AV_2 (VPKUDUS, "vpkudus", CONST, altivec_vpkudus) 1468BU_P8V_AV_2 (VPKSDUS, "vpksdus", CONST, altivec_vpksdus) 1469BU_P8V_AV_2 (VRLD, "vrld", CONST, vrotlv2di3) 1470BU_P8V_AV_2 (VSLD, "vsld", CONST, vashlv2di3) 1471BU_P8V_AV_2 (VSRD, "vsrd", CONST, vlshrv2di3) 1472BU_P8V_AV_2 (VSRAD, "vsrad", CONST, vashrv2di3) 1473BU_P8V_AV_2 (VSUBCUQ, "vsubcuq", CONST, altivec_vsubcuq) 1474BU_P8V_AV_2 (VSUBUDM, "vsubudm", CONST, subv2di3) 1475BU_P8V_AV_2 (VSUBUQM, "vsubuqm", CONST, altivec_vsubuqm) 1476 1477BU_P8V_AV_2 (EQV_V16QI, "eqv_v16qi", CONST, eqvv16qi3) 1478BU_P8V_AV_2 (EQV_V8HI, "eqv_v8hi", CONST, eqvv8hi3) 1479BU_P8V_AV_2 (EQV_V4SI, "eqv_v4si", CONST, eqvv4si3) 1480BU_P8V_AV_2 (EQV_V2DI, "eqv_v2di", CONST, eqvv2di3) 1481BU_P8V_AV_2 (EQV_V1TI, "eqv_v1ti", CONST, eqvv1ti3) 1482BU_P8V_AV_2 (EQV_V4SF, "eqv_v4sf", CONST, eqvv4sf3) 1483BU_P8V_AV_2 (EQV_V2DF, "eqv_v2df", CONST, eqvv2df3) 1484 1485BU_P8V_AV_2 (NAND_V16QI, "nand_v16qi", CONST, nandv16qi3) 1486BU_P8V_AV_2 (NAND_V8HI, "nand_v8hi", CONST, nandv8hi3) 1487BU_P8V_AV_2 (NAND_V4SI, "nand_v4si", CONST, nandv4si3) 1488BU_P8V_AV_2 (NAND_V2DI, "nand_v2di", CONST, nandv2di3) 1489BU_P8V_AV_2 (NAND_V1TI, "nand_v1ti", CONST, nandv1ti3) 1490BU_P8V_AV_2 (NAND_V4SF, "nand_v4sf", CONST, nandv4sf3) 1491BU_P8V_AV_2 (NAND_V2DF, "nand_v2df", CONST, nandv2df3) 1492 1493BU_P8V_AV_2 (ORC_V16QI, "orc_v16qi", CONST, orcv16qi3) 1494BU_P8V_AV_2 (ORC_V8HI, "orc_v8hi", CONST, orcv8hi3) 1495BU_P8V_AV_2 (ORC_V4SI, "orc_v4si", CONST, orcv4si3) 1496BU_P8V_AV_2 (ORC_V2DI, "orc_v2di", CONST, orcv2di3) 1497BU_P8V_AV_2 (ORC_V1TI, "orc_v1ti", CONST, orcv1ti3) 1498BU_P8V_AV_2 (ORC_V4SF, "orc_v4sf", CONST, orcv4sf3) 1499BU_P8V_AV_2 (ORC_V2DF, "orc_v2df", CONST, orcv2df3) 1500 1501/* 3 argument altivec instructions added in ISA 2.07. */ 1502BU_P8V_AV_3 (VADDEUQM, "vaddeuqm", CONST, altivec_vaddeuqm) 1503BU_P8V_AV_3 (VADDECUQ, "vaddecuq", CONST, altivec_vaddecuq) 1504BU_P8V_AV_3 (VSUBEUQM, "vsubeuqm", CONST, altivec_vsubeuqm) 1505BU_P8V_AV_3 (VSUBECUQ, "vsubecuq", CONST, altivec_vsubecuq) 1506 1507/* Vector comparison instructions added in ISA 2.07. */ 1508BU_P8V_AV_2 (VCMPEQUD, "vcmpequd", CONST, vector_eqv2di) 1509BU_P8V_AV_2 (VCMPGTSD, "vcmpgtsd", CONST, vector_gtv2di) 1510BU_P8V_AV_2 (VCMPGTUD, "vcmpgtud", CONST, vector_gtuv2di) 1511 1512/* Vector comparison predicate instructions added in ISA 2.07. */ 1513BU_P8V_AV_P (VCMPEQUD_P, "vcmpequd_p", CONST, vector_eq_v2di_p) 1514BU_P8V_AV_P (VCMPGTSD_P, "vcmpgtsd_p", CONST, vector_gt_v2di_p) 1515BU_P8V_AV_P (VCMPGTUD_P, "vcmpgtud_p", CONST, vector_gtu_v2di_p) 1516 1517/* ISA 2.07 vector overloaded 1 argument functions. */ 1518BU_P8V_OVERLOAD_1 (VUPKHSW, "vupkhsw") 1519BU_P8V_OVERLOAD_1 (VUPKLSW, "vupklsw") 1520BU_P8V_OVERLOAD_1 (VCLZ, "vclz") 1521BU_P8V_OVERLOAD_1 (VCLZB, "vclzb") 1522BU_P8V_OVERLOAD_1 (VCLZH, "vclzh") 1523BU_P8V_OVERLOAD_1 (VCLZW, "vclzw") 1524BU_P8V_OVERLOAD_1 (VCLZD, "vclzd") 1525BU_P8V_OVERLOAD_1 (VPOPCNT, "vpopcnt") 1526BU_P8V_OVERLOAD_1 (VPOPCNTB, "vpopcntb") 1527BU_P8V_OVERLOAD_1 (VPOPCNTH, "vpopcnth") 1528BU_P8V_OVERLOAD_1 (VPOPCNTW, "vpopcntw") 1529BU_P8V_OVERLOAD_1 (VPOPCNTD, "vpopcntd") 1530BU_P8V_OVERLOAD_1 (VGBBD, "vgbbd") 1531 1532/* ISA 2.07 vector overloaded 2 argument functions. */ 1533BU_P8V_OVERLOAD_2 (EQV, "eqv") 1534BU_P8V_OVERLOAD_2 (NAND, "nand") 1535BU_P8V_OVERLOAD_2 (ORC, "orc") 1536BU_P8V_OVERLOAD_2 (VADDCUQ, "vaddcuq") 1537BU_P8V_OVERLOAD_2 (VADDUDM, "vaddudm") 1538BU_P8V_OVERLOAD_2 (VADDUQM, "vadduqm") 1539BU_P8V_OVERLOAD_2 (VBPERMQ, "vbpermq") 1540BU_P8V_OVERLOAD_2 (VMAXSD, "vmaxsd") 1541BU_P8V_OVERLOAD_2 (VMAXUD, "vmaxud") 1542BU_P8V_OVERLOAD_2 (VMINSD, "vminsd") 1543BU_P8V_OVERLOAD_2 (VMINUD, "vminud") 1544BU_P8V_OVERLOAD_2 (VMRGEW, "vmrgew") 1545BU_P8V_OVERLOAD_2 (VMRGOW, "vmrgow") 1546BU_P8V_OVERLOAD_2 (VPKSDSS, "vpksdss") 1547BU_P8V_OVERLOAD_2 (VPKSDUS, "vpksdus") 1548BU_P8V_OVERLOAD_2 (VPKUDUM, "vpkudum") 1549BU_P8V_OVERLOAD_2 (VPKUDUS, "vpkudus") 1550BU_P8V_OVERLOAD_2 (VRLD, "vrld") 1551BU_P8V_OVERLOAD_2 (VSLD, "vsld") 1552BU_P8V_OVERLOAD_2 (VSRAD, "vsrad") 1553BU_P8V_OVERLOAD_2 (VSRD, "vsrd") 1554BU_P8V_OVERLOAD_2 (VSUBCUQ, "vsubcuq") 1555BU_P8V_OVERLOAD_2 (VSUBUDM, "vsubudm") 1556BU_P8V_OVERLOAD_2 (VSUBUQM, "vsubuqm") 1557 1558/* ISA 2.07 vector overloaded 3 argument functions. */ 1559BU_P8V_OVERLOAD_3 (VADDECUQ, "vaddecuq") 1560BU_P8V_OVERLOAD_3 (VADDEUQM, "vaddeuqm") 1561BU_P8V_OVERLOAD_3 (VSUBECUQ, "vsubecuq") 1562BU_P8V_OVERLOAD_3 (VSUBEUQM, "vsubeuqm") 1563 1564 1565/* 2 argument extended divide functions added in ISA 2.06. */ 1566BU_P7_MISC_2 (DIVWE, "divwe", CONST, dive_si) 1567BU_P7_MISC_2 (DIVWEO, "divweo", CONST, diveo_si) 1568BU_P7_MISC_2 (DIVWEU, "divweu", CONST, diveu_si) 1569BU_P7_MISC_2 (DIVWEUO, "divweuo", CONST, diveuo_si) 1570BU_P7_MISC_2 (DIVDE, "divde", CONST, dive_di) 1571BU_P7_MISC_2 (DIVDEO, "divdeo", CONST, diveo_di) 1572BU_P7_MISC_2 (DIVDEU, "divdeu", CONST, diveu_di) 1573BU_P7_MISC_2 (DIVDEUO, "divdeuo", CONST, diveuo_di) 1574 1575/* 1 argument DFP (decimal floating point) functions added in ISA 2.05. */ 1576BU_DFP_MISC_1 (DXEX, "dxex", CONST, dfp_dxex_dd) 1577BU_DFP_MISC_1 (DXEXQ, "dxexq", CONST, dfp_dxex_td) 1578 1579/* 2 argument DFP (decimal floating point) functions added in ISA 2.05. */ 1580BU_DFP_MISC_2 (DDEDPD, "ddedpd", CONST, dfp_ddedpd_dd) 1581BU_DFP_MISC_2 (DDEDPDQ, "ddedpdq", CONST, dfp_ddedpd_td) 1582BU_DFP_MISC_2 (DENBCD, "denbcd", CONST, dfp_denbcd_dd) 1583BU_DFP_MISC_2 (DENBCDQ, "denbcdq", CONST, dfp_denbcd_td) 1584BU_DFP_MISC_2 (DIEX, "diex", CONST, dfp_diex_dd) 1585BU_DFP_MISC_2 (DIEXQ, "diexq", CONST, dfp_diex_td) 1586BU_DFP_MISC_2 (DSCLI, "dscli", CONST, dfp_dscli_dd) 1587BU_DFP_MISC_2 (DSCLIQ, "dscliq", CONST, dfp_dscli_td) 1588BU_DFP_MISC_2 (DSCRI, "dscri", CONST, dfp_dscri_dd) 1589BU_DFP_MISC_2 (DSCRIQ, "dscriq", CONST, dfp_dscri_td) 1590 1591/* 1 argument BCD functions added in ISA 2.06. */ 1592BU_P7_MISC_1 (CDTBCD, "cdtbcd", CONST, cdtbcd) 1593BU_P7_MISC_1 (CBCDTD, "cbcdtd", CONST, cbcdtd) 1594 1595/* 2 argument BCD functions added in ISA 2.06. */ 1596BU_P7_MISC_2 (ADDG6S, "addg6s", CONST, addg6s) 1597 1598/* 3 argument BCD functions added in ISA 2.07. */ 1599BU_P8V_MISC_3 (BCDADD, "bcdadd", CONST, bcdadd) 1600BU_P8V_MISC_3 (BCDADD_LT, "bcdadd_lt", CONST, bcdadd_lt) 1601BU_P8V_MISC_3 (BCDADD_EQ, "bcdadd_eq", CONST, bcdadd_eq) 1602BU_P8V_MISC_3 (BCDADD_GT, "bcdadd_gt", CONST, bcdadd_gt) 1603BU_P8V_MISC_3 (BCDADD_OV, "bcdadd_ov", CONST, bcdadd_unordered) 1604BU_P8V_MISC_3 (BCDSUB, "bcdsub", CONST, bcdsub) 1605BU_P8V_MISC_3 (BCDSUB_LT, "bcdsub_lt", CONST, bcdsub_lt) 1606BU_P8V_MISC_3 (BCDSUB_EQ, "bcdsub_eq", CONST, bcdsub_eq) 1607BU_P8V_MISC_3 (BCDSUB_GT, "bcdsub_gt", CONST, bcdsub_gt) 1608BU_P8V_MISC_3 (BCDSUB_OV, "bcdsub_ov", CONST, bcdsub_unordered) 1609 1610/* 2 argument pack/unpack 128-bit floating point types. */ 1611BU_DFP_MISC_2 (PACK_TD, "pack_dec128", CONST, packtd) 1612BU_DFP_MISC_2 (UNPACK_TD, "unpack_dec128", CONST, unpacktd) 1613 1614BU_LDBL128_2 (PACK_TF, "pack_longdouble", CONST, packtf) 1615BU_LDBL128_2 (UNPACK_TF, "unpack_longdouble", CONST, unpacktf) 1616 1617BU_P7_MISC_2 (PACK_V1TI, "pack_vector_int128", CONST, packv1ti) 1618BU_P7_MISC_2 (UNPACK_V1TI, "unpack_vector_int128", CONST, unpackv1ti) 1619 1620 1621/* 1 argument crypto functions. */ 1622BU_CRYPTO_1 (VSBOX, "vsbox", CONST, crypto_vsbox) 1623 1624/* 2 argument crypto functions. */ 1625BU_CRYPTO_2 (VCIPHER, "vcipher", CONST, crypto_vcipher) 1626BU_CRYPTO_2 (VCIPHERLAST, "vcipherlast", CONST, crypto_vcipherlast) 1627BU_CRYPTO_2 (VNCIPHER, "vncipher", CONST, crypto_vncipher) 1628BU_CRYPTO_2 (VNCIPHERLAST, "vncipherlast", CONST, crypto_vncipherlast) 1629BU_CRYPTO_2A (VPMSUMB, "vpmsumb", CONST, crypto_vpmsumb) 1630BU_CRYPTO_2A (VPMSUMH, "vpmsumh", CONST, crypto_vpmsumh) 1631BU_CRYPTO_2A (VPMSUMW, "vpmsumw", CONST, crypto_vpmsumw) 1632BU_CRYPTO_2A (VPMSUMD, "vpmsumd", CONST, crypto_vpmsumd) 1633 1634/* 3 argument crypto functions. */ 1635BU_CRYPTO_3A (VPERMXOR_V2DI, "vpermxor_v2di", CONST, crypto_vpermxor_v2di) 1636BU_CRYPTO_3A (VPERMXOR_V4SI, "vpermxor_v4si", CONST, crypto_vpermxor_v4si) 1637BU_CRYPTO_3A (VPERMXOR_V8HI, "vpermxor_v8hi", CONST, crypto_vpermxor_v8hi) 1638BU_CRYPTO_3A (VPERMXOR_V16QI, "vpermxor_v16qi", CONST, crypto_vpermxor_v16qi) 1639BU_CRYPTO_3 (VSHASIGMAW, "vshasigmaw", CONST, crypto_vshasigmaw) 1640BU_CRYPTO_3 (VSHASIGMAD, "vshasigmad", CONST, crypto_vshasigmad) 1641 1642/* 2 argument crypto overloaded functions. */ 1643BU_CRYPTO_OVERLOAD_2A (VPMSUM, "vpmsum") 1644 1645/* 3 argument crypto overloaded functions. */ 1646BU_CRYPTO_OVERLOAD_3A (VPERMXOR, "vpermxor") 1647BU_CRYPTO_OVERLOAD_3 (VSHASIGMA, "vshasigma") 1648 1649 1650/* HTM functions. */ 1651BU_HTM_1 (TABORT, "tabort", CR, tabort) 1652BU_HTM_3 (TABORTDC, "tabortdc", CR, tabortdc) 1653BU_HTM_3 (TABORTDCI, "tabortdci", CR, tabortdci) 1654BU_HTM_3 (TABORTWC, "tabortwc", CR, tabortwc) 1655BU_HTM_3 (TABORTWCI, "tabortwci", CR, tabortwci) 1656BU_HTM_1 (TBEGIN, "tbegin", CR, tbegin) 1657BU_HTM_0 (TCHECK, "tcheck", CR, tcheck) 1658BU_HTM_1 (TEND, "tend", CR, tend) 1659BU_HTM_0 (TENDALL, "tendall", CR, tend) 1660BU_HTM_0 (TRECHKPT, "trechkpt", CR, trechkpt) 1661BU_HTM_1 (TRECLAIM, "treclaim", CR, treclaim) 1662BU_HTM_0 (TRESUME, "tresume", CR, tsr) 1663BU_HTM_0 (TSUSPEND, "tsuspend", CR, tsr) 1664BU_HTM_1 (TSR, "tsr", CR, tsr) 1665BU_HTM_0 (TTEST, "ttest", CR, ttest) 1666 1667BU_HTM_0 (GET_TFHAR, "get_tfhar", SPR, nothing) 1668BU_HTM_V1 (SET_TFHAR, "set_tfhar", SPR, nothing) 1669BU_HTM_0 (GET_TFIAR, "get_tfiar", SPR, nothing) 1670BU_HTM_V1 (SET_TFIAR, "set_tfiar", SPR, nothing) 1671BU_HTM_0 (GET_TEXASR, "get_texasr", SPR, nothing) 1672BU_HTM_V1 (SET_TEXASR, "set_texasr", SPR, nothing) 1673BU_HTM_0 (GET_TEXASRU, "get_texasru", SPR, nothing) 1674BU_HTM_V1 (SET_TEXASRU, "set_texasru", SPR, nothing) 1675 1676 1677/* 3 argument paired floating point builtins. */ 1678BU_PAIRED_3 (MSUB, "msub", FP, fmsv2sf4) 1679BU_PAIRED_3 (MADD, "madd", FP, fmav2sf4) 1680BU_PAIRED_3 (MADDS0, "madds0", FP, paired_madds0) 1681BU_PAIRED_3 (MADDS1, "madds1", FP, paired_madds1) 1682BU_PAIRED_3 (NMSUB, "nmsub", FP, nfmsv2sf4) 1683BU_PAIRED_3 (NMADD, "nmadd", FP, nfmav2sf4) 1684BU_PAIRED_3 (SUM0, "sum0", FP, paired_sum0) 1685BU_PAIRED_3 (SUM1, "sum1", FP, paired_sum1) 1686BU_PAIRED_3 (SELV2SF4, "selv2sf4", CONST, selv2sf4) 1687 1688/* 2 argument paired floating point builtins. */ 1689BU_PAIRED_2 (DIVV2SF3, "divv2sf3", FP, paired_divv2sf3) 1690BU_PAIRED_2 (ADDV2SF3, "addv2sf3", FP, paired_addv2sf3) 1691BU_PAIRED_2 (SUBV2SF3, "subv2sf3", FP, paired_subv2sf3) 1692BU_PAIRED_2 (MULV2SF3, "mulv2sf3", FP, paired_mulv2sf3) 1693BU_PAIRED_2 (MULS0, "muls0", FP, paired_muls0) 1694BU_PAIRED_2 (MULS1, "muls1", FP, paired_muls1) 1695BU_PAIRED_2 (MERGE00, "merge00", CONST, paired_merge00) 1696BU_PAIRED_2 (MERGE01, "merge01", CONST, paired_merge01) 1697BU_PAIRED_2 (MERGE10, "merge10", CONST, paired_merge10) 1698BU_PAIRED_2 (MERGE11, "merge11", CONST, paired_merge11) 1699 1700/* 1 argument paired floating point builtin functions. */ 1701BU_PAIRED_1 (ABSV2SF2, "absv2sf2", CONST, paired_absv2sf2) 1702BU_PAIRED_1 (NABSV2SF2, "nabsv2sf2", CONST, nabsv2sf2) 1703BU_PAIRED_1 (NEGV2SF2, "negv2sf2", CONST, paired_negv2sf2) 1704BU_PAIRED_1 (SQRTV2SF2, "sqrtv2sf2", FP, sqrtv2sf2) 1705BU_PAIRED_1 (RESV2SF, "resv2sf2", FP, resv2sf2) 1706 1707/* PAIRED builtins that are handled as special cases. */ 1708BU_PAIRED_X (STX, "stx", MISC) 1709BU_PAIRED_X (LX, "lx", MISC) 1710 1711/* Paired predicates. */ 1712BU_PAIRED_P (CMPU0, "cmpu0", CONST, paired_cmpu0) 1713BU_PAIRED_P (CMPU1, "cmpu1", CONST, paired_cmpu1) 1714 1715/* PowerPC E500 builtins (SPE). */ 1716 1717BU_SPE_2 (EVADDW, "evaddw", MISC, addv2si3) 1718BU_SPE_2 (EVAND, "evand", MISC, andv2si3) 1719BU_SPE_2 (EVANDC, "evandc", MISC, spe_evandc) 1720BU_SPE_2 (EVDIVWS, "evdivws", MISC, divv2si3) 1721BU_SPE_2 (EVDIVWU, "evdivwu", MISC, spe_evdivwu) 1722BU_SPE_2 (EVEQV, "eveqv", MISC, spe_eveqv) 1723BU_SPE_2 (EVFSADD, "evfsadd", MISC, spe_evfsadd) 1724BU_SPE_2 (EVFSDIV, "evfsdiv", MISC, spe_evfsdiv) 1725BU_SPE_2 (EVFSMUL, "evfsmul", MISC, spe_evfsmul) 1726BU_SPE_2 (EVFSSUB, "evfssub", MISC, spe_evfssub) 1727BU_SPE_2 (EVMERGEHI, "evmergehi", MISC, spe_evmergehi) 1728BU_SPE_2 (EVMERGEHILO, "evmergehilo", MISC, spe_evmergehilo) 1729BU_SPE_2 (EVMERGELO, "evmergelo", MISC, spe_evmergelo) 1730BU_SPE_2 (EVMERGELOHI, "evmergelohi", MISC, spe_evmergelohi) 1731BU_SPE_2 (EVMHEGSMFAA, "evmhegsmfaa", MISC, spe_evmhegsmfaa) 1732BU_SPE_2 (EVMHEGSMFAN, "evmhegsmfan", MISC, spe_evmhegsmfan) 1733BU_SPE_2 (EVMHEGSMIAA, "evmhegsmiaa", MISC, spe_evmhegsmiaa) 1734BU_SPE_2 (EVMHEGSMIAN, "evmhegsmian", MISC, spe_evmhegsmian) 1735BU_SPE_2 (EVMHEGUMIAA, "evmhegumiaa", MISC, spe_evmhegumiaa) 1736BU_SPE_2 (EVMHEGUMIAN, "evmhegumian", MISC, spe_evmhegumian) 1737BU_SPE_2 (EVMHESMF, "evmhesmf", MISC, spe_evmhesmf) 1738BU_SPE_2 (EVMHESMFA, "evmhesmfa", MISC, spe_evmhesmfa) 1739BU_SPE_2 (EVMHESMFAAW, "evmhesmfaaw", MISC, spe_evmhesmfaaw) 1740BU_SPE_2 (EVMHESMFANW, "evmhesmfanw", MISC, spe_evmhesmfanw) 1741BU_SPE_2 (EVMHESMI, "evmhesmi", MISC, spe_evmhesmi) 1742BU_SPE_2 (EVMHESMIA, "evmhesmia", MISC, spe_evmhesmia) 1743BU_SPE_2 (EVMHESMIAAW, "evmhesmiaaw", MISC, spe_evmhesmiaaw) 1744BU_SPE_2 (EVMHESMIANW, "evmhesmianw", MISC, spe_evmhesmianw) 1745BU_SPE_2 (EVMHESSF, "evmhessf", MISC, spe_evmhessf) 1746BU_SPE_2 (EVMHESSFA, "evmhessfa", MISC, spe_evmhessfa) 1747BU_SPE_2 (EVMHESSFAAW, "evmhessfaaw", MISC, spe_evmhessfaaw) 1748BU_SPE_2 (EVMHESSFANW, "evmhessfanw", MISC, spe_evmhessfanw) 1749BU_SPE_2 (EVMHESSIAAW, "evmhessiaaw", MISC, spe_evmhessiaaw) 1750BU_SPE_2 (EVMHESSIANW, "evmhessianw", MISC, spe_evmhessianw) 1751BU_SPE_2 (EVMHEUMI, "evmheumi", MISC, spe_evmheumi) 1752BU_SPE_2 (EVMHEUMIA, "evmheumia", MISC, spe_evmheumia) 1753BU_SPE_2 (EVMHEUMIAAW, "evmheumiaaw", MISC, spe_evmheumiaaw) 1754BU_SPE_2 (EVMHEUMIANW, "evmheumianw", MISC, spe_evmheumianw) 1755BU_SPE_2 (EVMHEUSIAAW, "evmheusiaaw", MISC, spe_evmheusiaaw) 1756BU_SPE_2 (EVMHEUSIANW, "evmheusianw", MISC, spe_evmheusianw) 1757BU_SPE_2 (EVMHOGSMFAA, "evmhogsmfaa", MISC, spe_evmhogsmfaa) 1758BU_SPE_2 (EVMHOGSMFAN, "evmhogsmfan", MISC, spe_evmhogsmfan) 1759BU_SPE_2 (EVMHOGSMIAA, "evmhogsmiaa", MISC, spe_evmhogsmiaa) 1760BU_SPE_2 (EVMHOGSMIAN, "evmhogsmian", MISC, spe_evmhogsmian) 1761BU_SPE_2 (EVMHOGUMIAA, "evmhogumiaa", MISC, spe_evmhogumiaa) 1762BU_SPE_2 (EVMHOGUMIAN, "evmhogumian", MISC, spe_evmhogumian) 1763BU_SPE_2 (EVMHOSMF, "evmhosmf", MISC, spe_evmhosmf) 1764BU_SPE_2 (EVMHOSMFA, "evmhosmfa", MISC, spe_evmhosmfa) 1765BU_SPE_2 (EVMHOSMFAAW, "evmhosmfaaw", MISC, spe_evmhosmfaaw) 1766BU_SPE_2 (EVMHOSMFANW, "evmhosmfanw", MISC, spe_evmhosmfanw) 1767BU_SPE_2 (EVMHOSMI, "evmhosmi", MISC, spe_evmhosmi) 1768BU_SPE_2 (EVMHOSMIA, "evmhosmia", MISC, spe_evmhosmia) 1769BU_SPE_2 (EVMHOSMIAAW, "evmhosmiaaw", MISC, spe_evmhosmiaaw) 1770BU_SPE_2 (EVMHOSMIANW, "evmhosmianw", MISC, spe_evmhosmianw) 1771BU_SPE_2 (EVMHOSSF, "evmhossf", MISC, spe_evmhossf) 1772BU_SPE_2 (EVMHOSSFA, "evmhossfa", MISC, spe_evmhossfa) 1773BU_SPE_2 (EVMHOSSFAAW, "evmhossfaaw", MISC, spe_evmhossfaaw) 1774BU_SPE_2 (EVMHOSSFANW, "evmhossfanw", MISC, spe_evmhossfanw) 1775BU_SPE_2 (EVMHOSSIAAW, "evmhossiaaw", MISC, spe_evmhossiaaw) 1776BU_SPE_2 (EVMHOSSIANW, "evmhossianw", MISC, spe_evmhossianw) 1777BU_SPE_2 (EVMHOUMI, "evmhoumi", MISC, spe_evmhoumi) 1778BU_SPE_2 (EVMHOUMIA, "evmhoumia", MISC, spe_evmhoumia) 1779BU_SPE_2 (EVMHOUMIAAW, "evmhoumiaaw", MISC, spe_evmhoumiaaw) 1780BU_SPE_2 (EVMHOUMIANW, "evmhoumianw", MISC, spe_evmhoumianw) 1781BU_SPE_2 (EVMHOUSIAAW, "evmhousiaaw", MISC, spe_evmhousiaaw) 1782BU_SPE_2 (EVMHOUSIANW, "evmhousianw", MISC, spe_evmhousianw) 1783BU_SPE_2 (EVMWHSMF, "evmwhsmf", MISC, spe_evmwhsmf) 1784BU_SPE_2 (EVMWHSMFA, "evmwhsmfa", MISC, spe_evmwhsmfa) 1785BU_SPE_2 (EVMWHSMI, "evmwhsmi", MISC, spe_evmwhsmi) 1786BU_SPE_2 (EVMWHSMIA, "evmwhsmia", MISC, spe_evmwhsmia) 1787BU_SPE_2 (EVMWHSSF, "evmwhssf", MISC, spe_evmwhssf) 1788BU_SPE_2 (EVMWHSSFA, "evmwhssfa", MISC, spe_evmwhssfa) 1789BU_SPE_2 (EVMWHUMI, "evmwhumi", MISC, spe_evmwhumi) 1790BU_SPE_2 (EVMWHUMIA, "evmwhumia", MISC, spe_evmwhumia) 1791BU_SPE_2 (EVMWLSMIAAW, "evmwlsmiaaw", MISC, spe_evmwlsmiaaw) 1792BU_SPE_2 (EVMWLSMIANW, "evmwlsmianw", MISC, spe_evmwlsmianw) 1793BU_SPE_2 (EVMWLSSIAAW, "evmwlssiaaw", MISC, spe_evmwlssiaaw) 1794BU_SPE_2 (EVMWLSSIANW, "evmwlssianw", MISC, spe_evmwlssianw) 1795BU_SPE_2 (EVMWLUMI, "evmwlumi", MISC, spe_evmwlumi) 1796BU_SPE_2 (EVMWLUMIA, "evmwlumia", MISC, spe_evmwlumia) 1797BU_SPE_2 (EVMWLUMIAAW, "evmwlumiaaw", MISC, spe_evmwlumiaaw) 1798BU_SPE_2 (EVMWLUMIANW, "evmwlumianw", MISC, spe_evmwlumianw) 1799BU_SPE_2 (EVMWLUSIAAW, "evmwlusiaaw", MISC, spe_evmwlusiaaw) 1800BU_SPE_2 (EVMWLUSIANW, "evmwlusianw", MISC, spe_evmwlusianw) 1801BU_SPE_2 (EVMWSMF, "evmwsmf", MISC, spe_evmwsmf) 1802BU_SPE_2 (EVMWSMFA, "evmwsmfa", MISC, spe_evmwsmfa) 1803BU_SPE_2 (EVMWSMFAA, "evmwsmfaa", MISC, spe_evmwsmfaa) 1804BU_SPE_2 (EVMWSMFAN, "evmwsmfan", MISC, spe_evmwsmfan) 1805BU_SPE_2 (EVMWSMI, "evmwsmi", MISC, spe_evmwsmi) 1806BU_SPE_2 (EVMWSMIA, "evmwsmia", MISC, spe_evmwsmia) 1807BU_SPE_2 (EVMWSMIAA, "evmwsmiaa", MISC, spe_evmwsmiaa) 1808BU_SPE_2 (EVMWSMIAN, "evmwsmian", MISC, spe_evmwsmian) 1809BU_SPE_2 (EVMWSSF, "evmwssf", MISC, spe_evmwssf) 1810BU_SPE_2 (EVMWSSFA, "evmwssfa", MISC, spe_evmwssfa) 1811BU_SPE_2 (EVMWSSFAA, "evmwssfaa", MISC, spe_evmwssfaa) 1812BU_SPE_2 (EVMWSSFAN, "evmwssfan", MISC, spe_evmwssfan) 1813BU_SPE_2 (EVMWUMI, "evmwumi", MISC, spe_evmwumi) 1814BU_SPE_2 (EVMWUMIA, "evmwumia", MISC, spe_evmwumia) 1815BU_SPE_2 (EVMWUMIAA, "evmwumiaa", MISC, spe_evmwumiaa) 1816BU_SPE_2 (EVMWUMIAN, "evmwumian", MISC, spe_evmwumian) 1817BU_SPE_2 (EVNAND, "evnand", MISC, spe_evnand) 1818BU_SPE_2 (EVNOR, "evnor", MISC, spe_evnor) 1819BU_SPE_2 (EVOR, "evor", MISC, spe_evor) 1820BU_SPE_2 (EVORC, "evorc", MISC, spe_evorc) 1821BU_SPE_2 (EVRLW, "evrlw", MISC, spe_evrlw) 1822BU_SPE_2 (EVSLW, "evslw", MISC, spe_evslw) 1823BU_SPE_2 (EVSRWS, "evsrws", MISC, spe_evsrws) 1824BU_SPE_2 (EVSRWU, "evsrwu", MISC, spe_evsrwu) 1825BU_SPE_2 (EVSUBFW, "evsubfw", MISC, subv2si3) 1826 1827/* SPE binary operations expecting a 5-bit unsigned literal. */ 1828BU_SPE_2 (EVADDIW, "evaddiw", MISC, spe_evaddiw) 1829 1830BU_SPE_2 (EVRLWI, "evrlwi", MISC, spe_evrlwi) 1831BU_SPE_2 (EVSLWI, "evslwi", MISC, spe_evslwi) 1832BU_SPE_2 (EVSRWIS, "evsrwis", MISC, spe_evsrwis) 1833BU_SPE_2 (EVSRWIU, "evsrwiu", MISC, spe_evsrwiu) 1834BU_SPE_2 (EVSUBIFW, "evsubifw", MISC, spe_evsubifw) 1835BU_SPE_2 (EVMWHSSFAA, "evmwhssfaa", MISC, spe_evmwhssfaa) 1836BU_SPE_2 (EVMWHSSMAA, "evmwhssmaa", MISC, spe_evmwhssmaa) 1837BU_SPE_2 (EVMWHSMFAA, "evmwhsmfaa", MISC, spe_evmwhsmfaa) 1838BU_SPE_2 (EVMWHSMIAA, "evmwhsmiaa", MISC, spe_evmwhsmiaa) 1839BU_SPE_2 (EVMWHUSIAA, "evmwhusiaa", MISC, spe_evmwhusiaa) 1840BU_SPE_2 (EVMWHUMIAA, "evmwhumiaa", MISC, spe_evmwhumiaa) 1841BU_SPE_2 (EVMWHSSFAN, "evmwhssfan", MISC, spe_evmwhssfan) 1842BU_SPE_2 (EVMWHSSIAN, "evmwhssian", MISC, spe_evmwhssian) 1843BU_SPE_2 (EVMWHSMFAN, "evmwhsmfan", MISC, spe_evmwhsmfan) 1844BU_SPE_2 (EVMWHSMIAN, "evmwhsmian", MISC, spe_evmwhsmian) 1845BU_SPE_2 (EVMWHUSIAN, "evmwhusian", MISC, spe_evmwhusian) 1846BU_SPE_2 (EVMWHUMIAN, "evmwhumian", MISC, spe_evmwhumian) 1847BU_SPE_2 (EVMWHGSSFAA, "evmwhgssfaa", MISC, spe_evmwhgssfaa) 1848BU_SPE_2 (EVMWHGSMFAA, "evmwhgsmfaa", MISC, spe_evmwhgsmfaa) 1849BU_SPE_2 (EVMWHGSMIAA, "evmwhgsmiaa", MISC, spe_evmwhgsmiaa) 1850BU_SPE_2 (EVMWHGUMIAA, "evmwhgumiaa", MISC, spe_evmwhgumiaa) 1851BU_SPE_2 (EVMWHGSSFAN, "evmwhgssfan", MISC, spe_evmwhgssfan) 1852BU_SPE_2 (EVMWHGSMFAN, "evmwhgsmfan", MISC, spe_evmwhgsmfan) 1853BU_SPE_2 (EVMWHGSMIAN, "evmwhgsmian", MISC, spe_evmwhgsmian) 1854BU_SPE_2 (EVMWHGUMIAN, "evmwhgumian", MISC, spe_evmwhgumian) 1855BU_SPE_2 (BRINC, "brinc", MISC, spe_brinc) 1856BU_SPE_2 (EVXOR, "evxor", MISC, xorv2si3) 1857 1858/* SPE predicate builtins. */ 1859BU_SPE_P (EVCMPEQ, "evcmpeq", MISC, spe_evcmpeq) 1860BU_SPE_P (EVCMPGTS, "evcmpgts", MISC, spe_evcmpgts) 1861BU_SPE_P (EVCMPGTU, "evcmpgtu", MISC, spe_evcmpgtu) 1862BU_SPE_P (EVCMPLTS, "evcmplts", MISC, spe_evcmplts) 1863BU_SPE_P (EVCMPLTU, "evcmpltu", MISC, spe_evcmpltu) 1864BU_SPE_P (EVFSCMPEQ, "evfscmpeq", MISC, spe_evfscmpeq) 1865BU_SPE_P (EVFSCMPGT, "evfscmpgt", MISC, spe_evfscmpgt) 1866BU_SPE_P (EVFSCMPLT, "evfscmplt", MISC, spe_evfscmplt) 1867BU_SPE_P (EVFSTSTEQ, "evfststeq", MISC, spe_evfststeq) 1868BU_SPE_P (EVFSTSTGT, "evfststgt", MISC, spe_evfststgt) 1869BU_SPE_P (EVFSTSTLT, "evfststlt", MISC, spe_evfststlt) 1870 1871/* SPE evsel builtins. */ 1872BU_SPE_E (EVSEL_CMPGTS, "evsel_gts", MISC, spe_evcmpgts) 1873BU_SPE_E (EVSEL_CMPGTU, "evsel_gtu", MISC, spe_evcmpgtu) 1874BU_SPE_E (EVSEL_CMPLTS, "evsel_lts", MISC, spe_evcmplts) 1875BU_SPE_E (EVSEL_CMPLTU, "evsel_ltu", MISC, spe_evcmpltu) 1876BU_SPE_E (EVSEL_CMPEQ, "evsel_eq", MISC, spe_evcmpeq) 1877BU_SPE_E (EVSEL_FSCMPGT, "evsel_fsgt", MISC, spe_evfscmpgt) 1878BU_SPE_E (EVSEL_FSCMPLT, "evsel_fslt", MISC, spe_evfscmplt) 1879BU_SPE_E (EVSEL_FSCMPEQ, "evsel_fseq", MISC, spe_evfscmpeq) 1880BU_SPE_E (EVSEL_FSTSTGT, "evsel_fststgt", MISC, spe_evfststgt) 1881BU_SPE_E (EVSEL_FSTSTLT, "evsel_fststlt", MISC, spe_evfststlt) 1882BU_SPE_E (EVSEL_FSTSTEQ, "evsel_fststeq", MISC, spe_evfststeq) 1883 1884BU_SPE_1 (EVABS, "evabs", CONST, absv2si2) 1885BU_SPE_1 (EVADDSMIAAW, "evaddsmiaaw", CONST, spe_evaddsmiaaw) 1886BU_SPE_1 (EVADDSSIAAW, "evaddssiaaw", CONST, spe_evaddssiaaw) 1887BU_SPE_1 (EVADDUMIAAW, "evaddumiaaw", CONST, spe_evaddumiaaw) 1888BU_SPE_1 (EVADDUSIAAW, "evaddusiaaw", CONST, spe_evaddusiaaw) 1889BU_SPE_1 (EVCNTLSW, "evcntlsw", CONST, spe_evcntlsw) 1890BU_SPE_1 (EVCNTLZW, "evcntlzw", CONST, spe_evcntlzw) 1891BU_SPE_1 (EVEXTSB, "evextsb", CONST, spe_evextsb) 1892BU_SPE_1 (EVEXTSH, "evextsh", CONST, spe_evextsh) 1893BU_SPE_1 (EVFSABS, "evfsabs", CONST, spe_evfsabs) 1894BU_SPE_1 (EVFSCFSF, "evfscfsf", CONST, spe_evfscfsf) 1895BU_SPE_1 (EVFSCFSI, "evfscfsi", CONST, spe_evfscfsi) 1896BU_SPE_1 (EVFSCFUF, "evfscfuf", CONST, spe_evfscfuf) 1897BU_SPE_1 (EVFSCFUI, "evfscfui", CONST, spe_evfscfui) 1898BU_SPE_1 (EVFSCTSF, "evfsctsf", CONST, spe_evfsctsf) 1899BU_SPE_1 (EVFSCTSI, "evfsctsi", CONST, spe_evfsctsi) 1900BU_SPE_1 (EVFSCTSIZ, "evfsctsiz", CONST, spe_evfsctsiz) 1901BU_SPE_1 (EVFSCTUF, "evfsctuf", CONST, spe_evfsctuf) 1902BU_SPE_1 (EVFSCTUI, "evfsctui", CONST, spe_evfsctui) 1903BU_SPE_1 (EVFSCTUIZ, "evfsctuiz", CONST, spe_evfsctuiz) 1904BU_SPE_1 (EVFSNABS, "evfsnabs", CONST, spe_evfsnabs) 1905BU_SPE_1 (EVFSNEG, "evfsneg", CONST, spe_evfsneg) 1906BU_SPE_1 (EVMRA, "evmra", CONST, spe_evmra) 1907BU_SPE_1 (EVNEG, "evneg", CONST, negv2si2) 1908BU_SPE_1 (EVRNDW, "evrndw", CONST, spe_evrndw) 1909BU_SPE_1 (EVSUBFSMIAAW, "evsubfsmiaaw", CONST, spe_evsubfsmiaaw) 1910BU_SPE_1 (EVSUBFSSIAAW, "evsubfssiaaw", CONST, spe_evsubfssiaaw) 1911BU_SPE_1 (EVSUBFUMIAAW, "evsubfumiaaw", CONST, spe_evsubfumiaaw) 1912BU_SPE_1 (EVSUBFUSIAAW, "evsubfusiaaw", CONST, spe_evsubfusiaaw) 1913 1914/* SPE builtins that are handled as special cases. */ 1915BU_SPE_X (EVLDD, "evldd", MISC) 1916BU_SPE_X (EVLDDX, "evlddx", MISC) 1917BU_SPE_X (EVLDH, "evldh", MISC) 1918BU_SPE_X (EVLDHX, "evldhx", MISC) 1919BU_SPE_X (EVLDW, "evldw", MISC) 1920BU_SPE_X (EVLDWX, "evldwx", MISC) 1921BU_SPE_X (EVLHHESPLAT, "evlhhesplat", MISC) 1922BU_SPE_X (EVLHHESPLATX, "evlhhesplatx", MISC) 1923BU_SPE_X (EVLHHOSSPLAT, "evlhhossplat", MISC) 1924BU_SPE_X (EVLHHOSSPLATX, "evlhhossplatx", MISC) 1925BU_SPE_X (EVLHHOUSPLAT, "evlhhousplat", MISC) 1926BU_SPE_X (EVLHHOUSPLATX, "evlhhousplatx", MISC) 1927BU_SPE_X (EVLWHE, "evlwhe", MISC) 1928BU_SPE_X (EVLWHEX, "evlwhex", MISC) 1929BU_SPE_X (EVLWHOS, "evlwhos", MISC) 1930BU_SPE_X (EVLWHOSX, "evlwhosx", MISC) 1931BU_SPE_X (EVLWHOU, "evlwhou", MISC) 1932BU_SPE_X (EVLWHOUX, "evlwhoux", MISC) 1933BU_SPE_X (EVLWHSPLAT, "evlwhsplat", MISC) 1934BU_SPE_X (EVLWHSPLATX, "evlwhsplatx", MISC) 1935BU_SPE_X (EVLWWSPLAT, "evlwwsplat", MISC) 1936BU_SPE_X (EVLWWSPLATX, "evlwwsplatx", MISC) 1937BU_SPE_X (EVSPLATFI, "evsplatfi", MISC) 1938BU_SPE_X (EVSPLATI, "evsplati", MISC) 1939BU_SPE_X (EVSTDD, "evstdd", MISC) 1940BU_SPE_X (EVSTDDX, "evstddx", MISC) 1941BU_SPE_X (EVSTDH, "evstdh", MISC) 1942BU_SPE_X (EVSTDHX, "evstdhx", MISC) 1943BU_SPE_X (EVSTDW, "evstdw", MISC) 1944BU_SPE_X (EVSTDWX, "evstdwx", MISC) 1945BU_SPE_X (EVSTWHE, "evstwhe", MISC) 1946BU_SPE_X (EVSTWHEX, "evstwhex", MISC) 1947BU_SPE_X (EVSTWHO, "evstwho", MISC) 1948BU_SPE_X (EVSTWHOX, "evstwhox", MISC) 1949BU_SPE_X (EVSTWWE, "evstwwe", MISC) 1950BU_SPE_X (EVSTWWEX, "evstwwex", MISC) 1951BU_SPE_X (EVSTWWO, "evstwwo", MISC) 1952BU_SPE_X (EVSTWWOX, "evstwwox", MISC) 1953BU_SPE_X (MFSPEFSCR, "mfspefscr", MISC) 1954BU_SPE_X (MTSPEFSCR, "mtspefscr", MISC) 1955 1956 1957/* Power7 builtins, that aren't VSX instructions. */ 1958BU_SPECIAL_X (POWER7_BUILTIN_BPERMD, "__builtin_bpermd", RS6000_BTM_POPCNTD, 1959 RS6000_BTC_CONST) 1960 1961/* Miscellaneous builtins. */ 1962BU_SPECIAL_X (RS6000_BUILTIN_RECIP, "__builtin_recipdiv", RS6000_BTM_FRE, 1963 RS6000_BTC_FP) 1964 1965BU_SPECIAL_X (RS6000_BUILTIN_RECIPF, "__builtin_recipdivf", RS6000_BTM_FRES, 1966 RS6000_BTC_FP) 1967 1968BU_SPECIAL_X (RS6000_BUILTIN_RSQRT, "__builtin_rsqrt", RS6000_BTM_FRSQRTE, 1969 RS6000_BTC_FP) 1970 1971BU_SPECIAL_X (RS6000_BUILTIN_RSQRTF, "__builtin_rsqrtf", RS6000_BTM_FRSQRTES, 1972 RS6000_BTC_FP) 1973 1974BU_SPECIAL_X (RS6000_BUILTIN_GET_TB, "__builtin_ppc_get_timebase", 1975 RS6000_BTM_ALWAYS, RS6000_BTC_MISC) 1976 1977BU_SPECIAL_X (RS6000_BUILTIN_MFTB, "__builtin_ppc_mftb", 1978 RS6000_BTM_ALWAYS, RS6000_BTC_MISC) 1979 1980BU_SPECIAL_X (RS6000_BUILTIN_MFFS, "__builtin_mffs", 1981 RS6000_BTM_ALWAYS, RS6000_BTC_MISC) 1982 1983RS6000_BUILTIN_X (RS6000_BUILTIN_MTFSF, "__builtin_mtfsf", 1984 RS6000_BTM_ALWAYS, 1985 RS6000_BTC_MISC | RS6000_BTC_UNARY | RS6000_BTC_VOID, 1986 CODE_FOR_rs6000_mtfsf) 1987 1988/* Darwin CfString builtin. */ 1989BU_SPECIAL_X (RS6000_BUILTIN_CFSTRING, "__builtin_cfstring", RS6000_BTM_ALWAYS, 1990 RS6000_BTC_MISC) 1991