1/* Builtin functions for rs6000/powerpc. 2 Copyright (C) 2009-2020 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_0 -- 0 arg builtins 28 RS6000_BUILTIN_1 -- 1 arg builtins 29 RS6000_BUILTIN_2 -- 2 arg builtins 30 RS6000_BUILTIN_3 -- 3 arg builtins 31 RS6000_BUILTIN_A -- ABS builtins 32 RS6000_BUILTIN_D -- DST builtins 33 RS6000_BUILTIN_H -- HTM builtins 34 RS6000_BUILTIN_M -- MMA builtins 35 RS6000_BUILTIN_P -- Altivec, VSX, ISA 2.07 vector predicate builtins 36 RS6000_BUILTIN_X -- special builtins 37 38 Each of the above macros takes 4 arguments: 39 ENUM Enumeration name 40 NAME String literal for the name 41 MASK Mask of bits that indicate which options enables the builtin 42 ATTR builtin attribute information. 43 ICODE Insn code of the function that implements the builtin. */ 44 45#ifndef RS6000_BUILTIN_COMPAT 46 #undef BU_COMPAT 47 #define BU_COMPAT(ENUM, COMPAT_NAME) 48 49#ifndef RS6000_BUILTIN_0 50 #error "RS6000_BUILTIN_0 is not defined." 51#endif 52 53#ifndef RS6000_BUILTIN_1 54 #error "RS6000_BUILTIN_1 is not defined." 55#endif 56 57#ifndef RS6000_BUILTIN_2 58 #error "RS6000_BUILTIN_2 is not defined." 59#endif 60 61#ifndef RS6000_BUILTIN_3 62 #error "RS6000_BUILTIN_3 is not defined." 63#endif 64 65#ifndef RS6000_BUILTIN_A 66 #error "RS6000_BUILTIN_A is not defined." 67#endif 68 69#ifndef RS6000_BUILTIN_D 70 #error "RS6000_BUILTIN_D is not defined." 71#endif 72 73#ifndef RS6000_BUILTIN_H 74 #error "RS6000_BUILTIN_H is not defined." 75#endif 76 77#ifndef RS6000_BUILTIN_M 78 #error "RS6000_BUILTIN_M is not defined." 79#endif 80 81#ifndef RS6000_BUILTIN_P 82 #error "RS6000_BUILTIN_P is not defined." 83#endif 84 85#ifndef RS6000_BUILTIN_X 86 #error "RS6000_BUILTIN_X is not defined." 87#endif 88 89#else 90 /* Compatibility builtins. These builtins are simply mapped into 91 their compatible builtin function identified by ENUM. */ 92 #undef BU_COMPAT 93 #define BU_COMPAT(ENUM, COMPAT_NAME) { ENUM, "__builtin_" COMPAT_NAME }, 94 95 #undef RS6000_BUILTIN_0 96 #undef RS6000_BUILTIN_1 97 #undef RS6000_BUILTIN_2 98 #undef RS6000_BUILTIN_3 99 #undef RS6000_BUILTIN_4 100 #undef RS6000_BUILTIN_A 101 #undef RS6000_BUILTIN_D 102 #undef RS6000_BUILTIN_H 103 #undef RS6000_BUILTIN_M 104 #undef RS6000_BUILTIN_P 105 #undef RS6000_BUILTIN_X 106 #define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) 107 #define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE) 108 #define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE) 109 #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE) 110 #define RS6000_BUILTIN_4(ENUM, NAME, MASK, ATTR, ICODE) 111 #define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE) 112 #define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE) 113 #define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE) 114 #define RS6000_BUILTIN_M(ENUM, NAME, MASK, ATTR, ICODE) 115 #define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE) 116 #define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE) 117#endif 118 119#ifndef BU_AV_1 120/* Define convenience macros using token pasting to allow fitting everything in 121 one line. */ 122 123/* Altivec convenience macros. */ 124#define BU_ALTIVEC_1(ENUM, NAME, ATTR, ICODE) \ 125 RS6000_BUILTIN_1 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 126 "__builtin_altivec_" NAME, /* NAME */ \ 127 RS6000_BTM_ALTIVEC, /* MASK */ \ 128 (RS6000_BTC_ ## ATTR /* ATTR */ \ 129 | RS6000_BTC_UNARY), \ 130 CODE_FOR_ ## ICODE) /* ICODE */ 131 132#define BU_ALTIVEC_2(ENUM, NAME, ATTR, ICODE) \ 133 RS6000_BUILTIN_2 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 134 "__builtin_altivec_" NAME, /* NAME */ \ 135 RS6000_BTM_ALTIVEC, /* MASK */ \ 136 (RS6000_BTC_ ## ATTR /* ATTR */ \ 137 | RS6000_BTC_BINARY), \ 138 CODE_FOR_ ## ICODE) /* ICODE */ 139 140#define BU_ALTIVEC_3(ENUM, NAME, ATTR, ICODE) \ 141 RS6000_BUILTIN_3 (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 142 "__builtin_altivec_" NAME, /* NAME */ \ 143 RS6000_BTM_ALTIVEC, /* MASK */ \ 144 (RS6000_BTC_ ## ATTR /* ATTR */ \ 145 | RS6000_BTC_TERNARY), \ 146 CODE_FOR_ ## ICODE) /* ICODE */ 147 148#define BU_ALTIVEC_A(ENUM, NAME, ATTR, ICODE) \ 149 RS6000_BUILTIN_A (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 150 "__builtin_altivec_" NAME, /* NAME */ \ 151 RS6000_BTM_ALTIVEC, /* MASK */ \ 152 (RS6000_BTC_ ## ATTR /* ATTR */ \ 153 | RS6000_BTC_ABS), \ 154 CODE_FOR_ ## ICODE) /* ICODE */ 155 156#define BU_ALTIVEC_D(ENUM, NAME, ATTR, ICODE) \ 157 RS6000_BUILTIN_D (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 158 "__builtin_altivec_" NAME, /* NAME */ \ 159 RS6000_BTM_ALTIVEC, /* MASK */ \ 160 (RS6000_BTC_ ## ATTR /* ATTR */ \ 161 | RS6000_BTC_DST), \ 162 CODE_FOR_ ## ICODE) /* ICODE */ 163 164/* All builtins defined with the RS6000_BUILTIN_P macro expect three 165 arguments, the first of which is an integer constant that clarifies 166 the implementation's use of CR6 flags. The integer constant 167 argument may have four values: __CR6_EQ (0) means the predicate is 168 considered true if the equality-test flag of the CR6 condition 169 register is true following execution of the code identified by the 170 ICODE pattern, __CR_EQ_REV (1) means the predicate is considered 171 true if the equality-test flag is false, __CR6_LT (2) means the 172 predicate is considered true if the less-than-test flag is true, and 173 __CR6_LT_REV (3) means the predicate is considered true if the 174 less-than-test flag is false. For all builtins defined by this 175 macro, the pattern selected by ICODE expects three operands, a 176 target and two inputs and is presumed to overwrite the flags of 177 condition register CR6 as a side effect of computing a result into 178 the target register. However, the built-in invocation provides 179 four operands, a target, an integer constant mode, and two inputs. 180 The second and third operands of the built-in function's invocation 181 are automatically mapped into operands 1 and 2 of the pattern 182 identifed by the ICODE argument and additional code is emitted, 183 depending on the value of the constant integer first argument. 184 This special processing happens within the implementation of 185 altivec_expand_predicate_builtin(), which is defined within 186 rs6000.c. The implementation of altivec_expand_predicate_builtin() 187 allocates a scratch register having the same mode as operand 0 to hold 188 the result produced by evaluating ICODE. */ 189 190#define BU_ALTIVEC_P(ENUM, NAME, ATTR, ICODE) \ 191 RS6000_BUILTIN_P (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 192 "__builtin_altivec_" NAME, /* NAME */ \ 193 RS6000_BTM_ALTIVEC, /* MASK */ \ 194 (RS6000_BTC_ ## ATTR /* ATTR */ \ 195 | RS6000_BTC_PREDICATE), \ 196 CODE_FOR_ ## ICODE) /* ICODE */ 197 198#define BU_ALTIVEC_X(ENUM, NAME, ATTR) \ 199 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 200 "__builtin_altivec_" NAME, /* NAME */ \ 201 RS6000_BTM_ALTIVEC, /* MASK */ \ 202 (RS6000_BTC_ ## ATTR /* ATTR */ \ 203 | RS6000_BTC_SPECIAL), \ 204 CODE_FOR_nothing) /* ICODE */ 205 206#define BU_ALTIVEC_C(ENUM, NAME, ATTR) \ 207 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_ ## ENUM, /* ENUM */ \ 208 "__builtin_altivec_" NAME, /* NAME */ \ 209 (RS6000_BTM_ALTIVEC /* MASK */ \ 210 | RS6000_BTM_CELL), \ 211 (RS6000_BTC_ ## ATTR /* ATTR */ \ 212 | RS6000_BTC_SPECIAL), \ 213 CODE_FOR_nothing) /* ICODE */ 214 215/* Altivec overloaded builtin function macros. */ 216#define BU_ALTIVEC_OVERLOAD_1(ENUM, NAME) \ 217 RS6000_BUILTIN_1 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 218 "__builtin_vec_" NAME, /* NAME */ \ 219 RS6000_BTM_ALTIVEC, /* MASK */ \ 220 (RS6000_BTC_OVERLOADED /* ATTR */ \ 221 | RS6000_BTC_UNARY), \ 222 CODE_FOR_nothing) /* ICODE */ 223 224#define BU_ALTIVEC_OVERLOAD_2(ENUM, NAME) \ 225 RS6000_BUILTIN_2 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 226 "__builtin_vec_" NAME, /* NAME */ \ 227 RS6000_BTM_ALTIVEC, /* MASK */ \ 228 (RS6000_BTC_OVERLOADED /* ATTR */ \ 229 | RS6000_BTC_BINARY), \ 230 CODE_FOR_nothing) /* ICODE */ 231 232#define BU_ALTIVEC_OVERLOAD_3(ENUM, NAME) \ 233 RS6000_BUILTIN_3 (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 234 "__builtin_vec_" NAME, /* NAME */ \ 235 RS6000_BTM_ALTIVEC, /* MASK */ \ 236 (RS6000_BTC_OVERLOADED /* ATTR */ \ 237 | RS6000_BTC_TERNARY), \ 238 CODE_FOR_nothing) /* ICODE */ 239 240#define BU_ALTIVEC_OVERLOAD_A(ENUM, NAME) \ 241 RS6000_BUILTIN_A (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 242 "__builtin_vec_" NAME, /* NAME */ \ 243 RS6000_BTM_ALTIVEC, /* MASK */ \ 244 (RS6000_BTC_OVERLOADED /* ATTR */ \ 245 | RS6000_BTC_ABS), \ 246 CODE_FOR_nothing) /* ICODE */ 247 248#define BU_ALTIVEC_OVERLOAD_D(ENUM, NAME) \ 249 RS6000_BUILTIN_D (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 250 "__builtin_vec_" NAME, /* NAME */ \ 251 RS6000_BTM_ALTIVEC, /* MASK */ \ 252 (RS6000_BTC_OVERLOADED /* ATTR */ \ 253 | RS6000_BTC_DST), \ 254 CODE_FOR_nothing) /* ICODE */ 255 256/* See the comment on BU_ALTIVEC_P. */ 257#define BU_ALTIVEC_OVERLOAD_P(ENUM, NAME) \ 258 RS6000_BUILTIN_P (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 259 "__builtin_vec_" NAME, /* NAME */ \ 260 RS6000_BTM_ALTIVEC, /* MASK */ \ 261 (RS6000_BTC_OVERLOADED /* ATTR */ \ 262 | RS6000_BTC_PREDICATE), \ 263 CODE_FOR_nothing) /* ICODE */ 264 265#define BU_ALTIVEC_OVERLOAD_X(ENUM, NAME) \ 266 RS6000_BUILTIN_X (ALTIVEC_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 267 "__builtin_vec_" NAME, /* NAME */ \ 268 RS6000_BTM_ALTIVEC, /* MASK */ \ 269 (RS6000_BTC_OVERLOADED /* ATTR */ \ 270 | RS6000_BTC_SPECIAL), \ 271 CODE_FOR_nothing) /* ICODE */ 272 273/* VSX convenience macros. */ 274#define BU_VSX_1(ENUM, NAME, ATTR, ICODE) \ 275 RS6000_BUILTIN_1 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 276 "__builtin_vsx_" NAME, /* NAME */ \ 277 RS6000_BTM_VSX, /* MASK */ \ 278 (RS6000_BTC_ ## ATTR /* ATTR */ \ 279 | RS6000_BTC_UNARY), \ 280 CODE_FOR_ ## ICODE) /* ICODE */ 281 282#define BU_VSX_2(ENUM, NAME, ATTR, ICODE) \ 283 RS6000_BUILTIN_2 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 284 "__builtin_vsx_" NAME, /* NAME */ \ 285 RS6000_BTM_VSX, /* MASK */ \ 286 (RS6000_BTC_ ## ATTR /* ATTR */ \ 287 | RS6000_BTC_BINARY), \ 288 CODE_FOR_ ## ICODE) /* ICODE */ 289 290#define BU_VSX_3(ENUM, NAME, ATTR, ICODE) \ 291 RS6000_BUILTIN_3 (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 292 "__builtin_vsx_" NAME, /* NAME */ \ 293 RS6000_BTM_VSX, /* MASK */ \ 294 (RS6000_BTC_ ## ATTR /* ATTR */ \ 295 | RS6000_BTC_TERNARY), \ 296 CODE_FOR_ ## ICODE) /* ICODE */ 297 298#define BU_VSX_A(ENUM, NAME, ATTR, ICODE) \ 299 RS6000_BUILTIN_A (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 300 "__builtin_vsx_" NAME, /* NAME */ \ 301 RS6000_BTM_VSX, /* MASK */ \ 302 (RS6000_BTC_ ## ATTR /* ATTR */ \ 303 | RS6000_BTC_ABS), \ 304 CODE_FOR_ ## ICODE) /* ICODE */ 305 306/* See the comment on BU_ALTIVEC_P. */ 307#define BU_VSX_P(ENUM, NAME, ATTR, ICODE) \ 308 RS6000_BUILTIN_P (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 309 "__builtin_vsx_" NAME, /* NAME */ \ 310 RS6000_BTM_VSX, /* MASK */ \ 311 (RS6000_BTC_ ## ATTR /* ATTR */ \ 312 | RS6000_BTC_PREDICATE), \ 313 CODE_FOR_ ## ICODE) /* ICODE */ 314 315#define BU_VSX_X(ENUM, NAME, ATTR) \ 316 RS6000_BUILTIN_X (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 317 "__builtin_vsx_" NAME, /* NAME */ \ 318 RS6000_BTM_VSX, /* MASK */ \ 319 (RS6000_BTC_ ## ATTR /* ATTR */ \ 320 | RS6000_BTC_SPECIAL), \ 321 CODE_FOR_nothing) /* ICODE */ 322 323#define BU_VSX_MISC_2(ENUM, NAME, ATTR, ICODE) \ 324 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 325 "__builtin_" NAME, /* NAME */ \ 326 RS6000_BTM_VSX, /* MASK */ \ 327 (RS6000_BTC_ ## ATTR /* ATTR */ \ 328 | RS6000_BTC_BINARY), \ 329 CODE_FOR_ ## ICODE) /* ICODE */ 330 331/* VSX overloaded builtin function macros. */ 332#define BU_VSX_OVERLOAD_1(ENUM, NAME) \ 333 RS6000_BUILTIN_1 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 334 "__builtin_vec_" NAME, /* NAME */ \ 335 RS6000_BTM_VSX, /* MASK */ \ 336 (RS6000_BTC_OVERLOADED /* ATTR */ \ 337 | RS6000_BTC_UNARY), \ 338 CODE_FOR_nothing) /* ICODE */ 339 340#define BU_VSX_OVERLOAD_2(ENUM, NAME) \ 341 RS6000_BUILTIN_2 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 342 "__builtin_vec_" NAME, /* NAME */ \ 343 RS6000_BTM_VSX, /* MASK */ \ 344 (RS6000_BTC_OVERLOADED /* ATTR */ \ 345 | RS6000_BTC_BINARY), \ 346 CODE_FOR_nothing) /* ICODE */ 347 348#define BU_VSX_OVERLOAD_3(ENUM, NAME) \ 349 RS6000_BUILTIN_3 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 350 "__builtin_vec_" NAME, /* NAME */ \ 351 RS6000_BTM_VSX, /* MASK */ \ 352 (RS6000_BTC_OVERLOADED /* ATTR */ \ 353 | RS6000_BTC_TERNARY), \ 354 CODE_FOR_nothing) /* ICODE */ 355 356/* xxpermdi and xxsldwi are overloaded functions, but had __builtin_vsx names 357 instead of __builtin_vec. */ 358#define BU_VSX_OVERLOAD_3V(ENUM, NAME) \ 359 RS6000_BUILTIN_3 (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 360 "__builtin_vsx_" NAME, /* NAME */ \ 361 RS6000_BTM_VSX, /* MASK */ \ 362 (RS6000_BTC_OVERLOADED /* ATTR */ \ 363 | RS6000_BTC_TERNARY), \ 364 CODE_FOR_nothing) /* ICODE */ 365 366#define BU_VSX_OVERLOAD_X(ENUM, NAME) \ 367 RS6000_BUILTIN_X (VSX_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 368 "__builtin_vec_" NAME, /* NAME */ \ 369 RS6000_BTM_VSX, /* MASK */ \ 370 (RS6000_BTC_OVERLOADED /* ATTR */ \ 371 | RS6000_BTC_SPECIAL), \ 372 CODE_FOR_nothing) /* ICODE */ 373 374/* MMA convenience macros. */ 375 376#define BU_MMA_1(ENUM, NAME, ATTR, ICODE) \ 377 RS6000_BUILTIN_M (MMA_BUILTIN_ ## ENUM, /* ENUM */ \ 378 "__builtin_mma_" NAME, /* NAME */ \ 379 RS6000_BTM_MMA, /* MASK */ \ 380 (RS6000_BTC_ ## ATTR /* ATTR */ \ 381 | RS6000_BTC_UNARY \ 382 | RS6000_BTC_VOID \ 383 | RS6000_BTC_GIMPLE), \ 384 CODE_FOR_nothing) /* ICODE */ \ 385 RS6000_BUILTIN_M (MMA_BUILTIN_ ## ENUM ## _INTERNAL, /* ENUM */ \ 386 "__builtin_mma_" NAME "_internal", /* NAME */ \ 387 RS6000_BTM_MMA, /* MASK */ \ 388 (RS6000_BTC_ ## ATTR /* ATTR */ \ 389 | RS6000_BTC_UNARY), \ 390 CODE_FOR_ ## ICODE) /* ICODE */ 391 392#define BU_MMA_M2(ENUM, NAME, ATTR, ICODE) \ 393 RS6000_BUILTIN_M (MMA_BUILTIN_ ## ENUM, /* ENUM */ \ 394 "__builtin_mma_" NAME, /* NAME */ \ 395 RS6000_BTM_MMA, /* MASK */ \ 396 (RS6000_BTC_ ## ATTR /* ATTR */ \ 397 | RS6000_BTC_BINARY \ 398 | RS6000_BTC_VOID \ 399 | RS6000_BTC_GIMPLE), \ 400 CODE_FOR_nothing) /* ICODE */ 401 402/* Like BU_MMA_M2, but uses "vsx" rather than "mma" naming. */ 403#define BU_MMA_V2(ENUM, NAME, ATTR, ICODE) \ 404 RS6000_BUILTIN_M (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 405 "__builtin_vsx_" NAME, /* NAME */ \ 406 RS6000_BTM_MMA, /* MASK */ \ 407 (RS6000_BTC_ ## ATTR /* ATTR */ \ 408 | RS6000_BTC_BINARY \ 409 | RS6000_BTC_VOID \ 410 | RS6000_BTC_GIMPLE), \ 411 CODE_FOR_nothing) /* ICODE */ 412 413#define BU_MMA_3(ENUM, NAME, ATTR, ICODE) \ 414 RS6000_BUILTIN_M (MMA_BUILTIN_ ## ENUM, /* ENUM */ \ 415 "__builtin_mma_" NAME, /* NAME */ \ 416 RS6000_BTM_MMA, /* MASK */ \ 417 (RS6000_BTC_ ## ATTR /* ATTR */ \ 418 | RS6000_BTC_TERNARY \ 419 | RS6000_BTC_VOID \ 420 | RS6000_BTC_GIMPLE), \ 421 CODE_FOR_nothing) /* ICODE */ \ 422 RS6000_BUILTIN_M (MMA_BUILTIN_ ## ENUM ## _INTERNAL, /* ENUM */ \ 423 "__builtin_mma_" NAME "_internal", /* NAME */ \ 424 RS6000_BTM_MMA, /* MASK */ \ 425 (RS6000_BTC_ ## ATTR /* ATTR */ \ 426 | RS6000_BTC_TERNARY), \ 427 CODE_FOR_ ## ICODE) /* ICODE */ 428 429/* Like BU_MMA_3, but uses "vsx" rather than "mma" naming. */ 430#define BU_MMA_V3(ENUM, NAME, ATTR, ICODE) \ 431 RS6000_BUILTIN_M (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 432 "__builtin_vsx_" NAME, /* NAME */ \ 433 RS6000_BTM_MMA, /* MASK */ \ 434 (RS6000_BTC_ ## ATTR /* ATTR */ \ 435 | RS6000_BTC_TERNARY \ 436 | RS6000_BTC_VOID \ 437 | RS6000_BTC_GIMPLE), \ 438 CODE_FOR_nothing) /* ICODE */ \ 439 RS6000_BUILTIN_M (VSX_BUILTIN_ ## ENUM ## _INTERNAL, /* ENUM */ \ 440 "__builtin_vsx_" NAME "_internal", /* NAME */ \ 441 RS6000_BTM_MMA, /* MASK */ \ 442 (RS6000_BTC_ ## ATTR /* ATTR */ \ 443 | RS6000_BTC_TERNARY), \ 444 CODE_FOR_ ## ICODE) /* ICODE */ 445 446#define BU_MMA_5(ENUM, NAME, ATTR, ICODE) \ 447 RS6000_BUILTIN_M (MMA_BUILTIN_ ## ENUM, /* ENUM */ \ 448 "__builtin_mma_" NAME, /* NAME */ \ 449 RS6000_BTM_MMA, /* MASK */ \ 450 (RS6000_BTC_ ## ATTR /* ATTR */ \ 451 | RS6000_BTC_QUINARY \ 452 | RS6000_BTC_VOID \ 453 | RS6000_BTC_GIMPLE), \ 454 CODE_FOR_nothing) /* ICODE */ \ 455 RS6000_BUILTIN_M (MMA_BUILTIN_ ## ENUM ## _INTERNAL, /* ENUM */ \ 456 "__builtin_mma_" NAME "_internal", /* NAME */ \ 457 RS6000_BTM_MMA, /* MASK */ \ 458 (RS6000_BTC_ ## ATTR /* ATTR */ \ 459 | RS6000_BTC_QUINARY), \ 460 CODE_FOR_ ## ICODE) /* ICODE */ 461 462#define BU_MMA_6(ENUM, NAME, ATTR, ICODE) \ 463 RS6000_BUILTIN_M (MMA_BUILTIN_ ## ENUM, /* ENUM */ \ 464 "__builtin_mma_" NAME, /* NAME */ \ 465 RS6000_BTM_MMA, /* MASK */ \ 466 (RS6000_BTC_ ## ATTR /* ATTR */ \ 467 | RS6000_BTC_SENARY \ 468 | RS6000_BTC_VOID \ 469 | RS6000_BTC_GIMPLE), \ 470 CODE_FOR_nothing) /* ICODE */ \ 471 RS6000_BUILTIN_M (MMA_BUILTIN_ ## ENUM ## _INTERNAL, /* ENUM */ \ 472 "__builtin_mma_" NAME "_internal", /* NAME */ \ 473 RS6000_BTM_MMA, /* MASK */ \ 474 (RS6000_BTC_ ## ATTR /* ATTR */ \ 475 | RS6000_BTC_SENARY), \ 476 CODE_FOR_ ## ICODE) /* ICODE */ 477 478#define BU_MMA_PAIR_LD(ENUM, NAME, ATTR) \ 479 RS6000_BUILTIN_M (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 480 "__builtin_vsx_" NAME, /* NAME */ \ 481 RS6000_BTM_MMA, /* MASK */ \ 482 (RS6000_BTC_ ## ATTR /* ATTR */ \ 483 | RS6000_BTC_BINARY \ 484 | RS6000_BTC_GIMPLE), \ 485 CODE_FOR_nothing) /* ICODE */ 486 487#define BU_MMA_PAIR_ST(ENUM, NAME, ATTR) \ 488 RS6000_BUILTIN_M (VSX_BUILTIN_ ## ENUM, /* ENUM */ \ 489 "__builtin_vsx_" NAME, /* NAME */ \ 490 RS6000_BTM_MMA, /* MASK */ \ 491 (RS6000_BTC_ ## ATTR /* ATTR */ \ 492 | RS6000_BTC_TERNARY \ 493 | RS6000_BTC_VOID \ 494 | RS6000_BTC_GIMPLE), \ 495 CODE_FOR_nothing) /* ICODE */ 496 497/* ISA 2.05 (power6) convenience macros. */ 498/* For functions that depend on the CMPB instruction */ 499#define BU_P6_2(ENUM, NAME, ATTR, ICODE) \ 500 RS6000_BUILTIN_2 (P6_BUILTIN_ ## ENUM, /* ENUM */ \ 501 "__builtin_p6_" NAME, /* NAME */ \ 502 RS6000_BTM_CMPB, /* MASK */ \ 503 (RS6000_BTC_ ## ATTR /* ATTR */ \ 504 | RS6000_BTC_BINARY), \ 505 CODE_FOR_ ## ICODE) /* ICODE */ 506 507/* For functions that depend on 64-BIT support and on the CMPB instruction */ 508#define BU_P6_64BIT_2(ENUM, NAME, ATTR, ICODE) \ 509 RS6000_BUILTIN_2 (P6_BUILTIN_ ## ENUM, /* ENUM */ \ 510 "__builtin_p6_" NAME, /* NAME */ \ 511 RS6000_BTM_CMPB \ 512 | RS6000_BTM_64BIT, /* MASK */ \ 513 (RS6000_BTC_ ## ATTR /* ATTR */ \ 514 | RS6000_BTC_BINARY), \ 515 CODE_FOR_ ## ICODE) /* ICODE */ 516 517#define BU_P6_OVERLOAD_2(ENUM, NAME) \ 518 RS6000_BUILTIN_2 (P6_OV_BUILTIN_ ## ENUM, /* ENUM */ \ 519 "__builtin_" NAME, /* NAME */ \ 520 RS6000_BTM_CMPB, /* MASK */ \ 521 (RS6000_BTC_OVERLOADED /* ATTR */ \ 522 | RS6000_BTC_BINARY), \ 523 CODE_FOR_nothing) /* ICODE */ 524 525/* ISA 2.07 (power8) vector convenience macros. */ 526/* For the instructions that are encoded as altivec instructions use 527 __builtin_altivec_ as the builtin name. */ 528#define BU_P8V_AV_1(ENUM, NAME, ATTR, ICODE) \ 529 RS6000_BUILTIN_1 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \ 530 "__builtin_altivec_" NAME, /* NAME */ \ 531 RS6000_BTM_P8_VECTOR, /* MASK */ \ 532 (RS6000_BTC_ ## ATTR /* ATTR */ \ 533 | RS6000_BTC_UNARY), \ 534 CODE_FOR_ ## ICODE) /* ICODE */ 535 536#define BU_P8V_AV_2(ENUM, NAME, ATTR, ICODE) \ 537 RS6000_BUILTIN_2 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \ 538 "__builtin_altivec_" NAME, /* NAME */ \ 539 RS6000_BTM_P8_VECTOR, /* MASK */ \ 540 (RS6000_BTC_ ## ATTR /* ATTR */ \ 541 | RS6000_BTC_BINARY), \ 542 CODE_FOR_ ## ICODE) /* ICODE */ 543 544#define BU_P8V_AV_3(ENUM, NAME, ATTR, ICODE) \ 545 RS6000_BUILTIN_3 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \ 546 "__builtin_altivec_" NAME, /* NAME */ \ 547 RS6000_BTM_P8_VECTOR, /* MASK */ \ 548 (RS6000_BTC_ ## ATTR /* ATTR */ \ 549 | RS6000_BTC_TERNARY), \ 550 CODE_FOR_ ## ICODE) /* ICODE */ 551 552/* See the comment on BU_ALTIVEC_P. */ 553#define BU_P8V_AV_P(ENUM, NAME, ATTR, ICODE) \ 554 RS6000_BUILTIN_P (P8V_BUILTIN_ ## ENUM, /* ENUM */ \ 555 "__builtin_altivec_" NAME, /* NAME */ \ 556 RS6000_BTM_P8_VECTOR, /* MASK */ \ 557 (RS6000_BTC_ ## ATTR /* ATTR */ \ 558 | RS6000_BTC_PREDICATE), \ 559 CODE_FOR_ ## ICODE) /* ICODE */ 560 561/* For the instructions encoded as VSX instructions use __builtin_vsx as the 562 builtin name. */ 563#define BU_P8V_VSX_1(ENUM, NAME, ATTR, ICODE) \ 564 RS6000_BUILTIN_1 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \ 565 "__builtin_vsx_" NAME, /* NAME */ \ 566 RS6000_BTM_P8_VECTOR, /* MASK */ \ 567 (RS6000_BTC_ ## ATTR /* ATTR */ \ 568 | RS6000_BTC_UNARY), \ 569 CODE_FOR_ ## ICODE) /* ICODE */ 570 571#define BU_P8V_VSX_2(ENUM, NAME, ATTR, ICODE) \ 572 RS6000_BUILTIN_2 (P8V_BUILTIN_ ## ENUM, /* ENUM */ \ 573 "__builtin_vsx_" NAME, /* NAME */ \ 574 RS6000_BTM_P8_VECTOR, /* MASK */ \ 575 (RS6000_BTC_ ## ATTR /* ATTR */ \ 576 | RS6000_BTC_BINARY), \ 577 CODE_FOR_ ## ICODE) /* ICODE */ 578 579#define BU_P8V_OVERLOAD_1(ENUM, NAME) \ 580 RS6000_BUILTIN_1 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 581 "__builtin_vec_" NAME, /* NAME */ \ 582 RS6000_BTM_P8_VECTOR, /* MASK */ \ 583 (RS6000_BTC_OVERLOADED /* ATTR */ \ 584 | RS6000_BTC_UNARY), \ 585 CODE_FOR_nothing) /* ICODE */ 586 587#define BU_P8V_OVERLOAD_2(ENUM, NAME) \ 588 RS6000_BUILTIN_2 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 589 "__builtin_vec_" NAME, /* NAME */ \ 590 RS6000_BTM_P8_VECTOR, /* MASK */ \ 591 (RS6000_BTC_OVERLOADED /* ATTR */ \ 592 | RS6000_BTC_BINARY), \ 593 CODE_FOR_nothing) /* ICODE */ 594 595#define BU_P8V_OVERLOAD_3(ENUM, NAME) \ 596 RS6000_BUILTIN_3 (P8V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 597 "__builtin_vec_" NAME, /* NAME */ \ 598 RS6000_BTM_P8_VECTOR, /* MASK */ \ 599 (RS6000_BTC_OVERLOADED /* ATTR */ \ 600 | RS6000_BTC_TERNARY), \ 601 CODE_FOR_nothing) /* ICODE */ 602 603/* Crypto convenience macros. */ 604#define BU_CRYPTO_1(ENUM, NAME, ATTR, ICODE) \ 605 RS6000_BUILTIN_1 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 606 "__builtin_crypto_" NAME, /* NAME */ \ 607 RS6000_BTM_CRYPTO, /* MASK */ \ 608 (RS6000_BTC_ ## ATTR /* ATTR */ \ 609 | RS6000_BTC_UNARY), \ 610 CODE_FOR_ ## ICODE) /* ICODE */ 611 612#define BU_CRYPTO_2(ENUM, NAME, ATTR, ICODE) \ 613 RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 614 "__builtin_crypto_" NAME, /* NAME */ \ 615 RS6000_BTM_CRYPTO, /* MASK */ \ 616 (RS6000_BTC_ ## ATTR /* ATTR */ \ 617 | RS6000_BTC_BINARY), \ 618 CODE_FOR_ ## ICODE) /* ICODE */ 619 620#define BU_CRYPTO_2A(ENUM, NAME, ATTR, ICODE) \ 621 RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 622 "__builtin_crypto_" NAME, /* NAME */ \ 623 RS6000_BTM_P8_VECTOR, /* MASK */ \ 624 (RS6000_BTC_ ## ATTR /* ATTR */ \ 625 | RS6000_BTC_BINARY), \ 626 CODE_FOR_ ## ICODE) /* ICODE */ 627 628#define BU_CRYPTO_3(ENUM, NAME, ATTR, ICODE) \ 629 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 630 "__builtin_crypto_" NAME, /* NAME */ \ 631 RS6000_BTM_CRYPTO, /* MASK */ \ 632 (RS6000_BTC_ ## ATTR /* ATTR */ \ 633 | RS6000_BTC_TERNARY), \ 634 CODE_FOR_ ## ICODE) /* ICODE */ 635 636#define BU_CRYPTO_3A(ENUM, NAME, ATTR, ICODE) \ 637 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 638 "__builtin_crypto_" NAME, /* NAME */ \ 639 RS6000_BTM_P8_VECTOR, /* MASK */ \ 640 (RS6000_BTC_ ## ATTR /* ATTR */ \ 641 | RS6000_BTC_TERNARY), \ 642 CODE_FOR_ ## ICODE) /* ICODE */ 643 644#define BU_CRYPTO_OVERLOAD_1(ENUM, NAME) \ 645 RS6000_BUILTIN_1 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 646 "__builtin_crypto_" NAME, /* NAME */ \ 647 RS6000_BTM_CRYPTO, /* MASK */ \ 648 (RS6000_BTC_OVERLOADED /* ATTR */ \ 649 | RS6000_BTC_UNARY), \ 650 CODE_FOR_nothing) /* ICODE */ 651 652#define BU_CRYPTO_OVERLOAD_2A(ENUM, NAME) \ 653 RS6000_BUILTIN_2 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 654 "__builtin_crypto_" NAME, /* NAME */ \ 655 RS6000_BTM_P8_VECTOR, /* MASK */ \ 656 (RS6000_BTC_OVERLOADED /* ATTR */ \ 657 | RS6000_BTC_BINARY), \ 658 CODE_FOR_nothing) /* ICODE */ 659 660#define BU_CRYPTO_OVERLOAD_3(ENUM, NAME) \ 661 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 662 "__builtin_crypto_" NAME, /* NAME */ \ 663 RS6000_BTM_CRYPTO, /* MASK */ \ 664 (RS6000_BTC_OVERLOADED /* ATTR */ \ 665 | RS6000_BTC_TERNARY), \ 666 CODE_FOR_nothing) /* ICODE */ 667 668#define BU_CRYPTO_OVERLOAD_3A(ENUM, NAME) \ 669 RS6000_BUILTIN_3 (CRYPTO_BUILTIN_ ## ENUM, /* ENUM */ \ 670 "__builtin_crypto_" NAME, /* NAME */ \ 671 RS6000_BTM_P8_VECTOR, /* MASK */ \ 672 (RS6000_BTC_OVERLOADED /* ATTR */ \ 673 | RS6000_BTC_TERNARY), \ 674 CODE_FOR_nothing) /* ICODE */ 675 676/* HTM convenience macros. */ 677#define BU_HTM_0(ENUM, NAME, ATTR, ICODE) \ 678 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \ 679 "__builtin_" NAME, /* NAME */ \ 680 RS6000_BTM_HTM, /* MASK */ \ 681 RS6000_BTC_ ## ATTR, /* ATTR */ \ 682 CODE_FOR_ ## ICODE) /* ICODE */ 683 684#define BU_HTM_1(ENUM, NAME, ATTR, ICODE) \ 685 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \ 686 "__builtin_" NAME, /* NAME */ \ 687 RS6000_BTM_HTM, /* MASK */ \ 688 (RS6000_BTC_ ## ATTR /* ATTR */ \ 689 | RS6000_BTC_UNARY), \ 690 CODE_FOR_ ## ICODE) /* ICODE */ 691 692#define BU_HTM_2(ENUM, NAME, ATTR, ICODE) \ 693 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \ 694 "__builtin_" NAME, /* NAME */ \ 695 RS6000_BTM_HTM, /* MASK */ \ 696 (RS6000_BTC_ ## ATTR /* ATTR */ \ 697 | RS6000_BTC_BINARY), \ 698 CODE_FOR_ ## ICODE) /* ICODE */ 699 700#define BU_HTM_3(ENUM, NAME, ATTR, ICODE) \ 701 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \ 702 "__builtin_" NAME, /* NAME */ \ 703 RS6000_BTM_HTM, /* MASK */ \ 704 (RS6000_BTC_ ## ATTR /* ATTR */ \ 705 | RS6000_BTC_TERNARY), \ 706 CODE_FOR_ ## ICODE) /* ICODE */ 707 708#define BU_HTM_V1(ENUM, NAME, ATTR, ICODE) \ 709 RS6000_BUILTIN_H (HTM_BUILTIN_ ## ENUM, /* ENUM */ \ 710 "__builtin_" NAME, /* NAME */ \ 711 RS6000_BTM_HTM, /* MASK */ \ 712 (RS6000_BTC_ ## ATTR /* ATTR */ \ 713 | RS6000_BTC_UNARY \ 714 | RS6000_BTC_VOID), \ 715 CODE_FOR_ ## ICODE) /* ICODE */ 716 717#define BU_SPECIAL_X(ENUM, NAME, MASK, ATTR) \ 718 RS6000_BUILTIN_X (ENUM, /* ENUM */ \ 719 NAME, /* NAME */ \ 720 MASK, /* MASK */ \ 721 (ATTR | RS6000_BTC_SPECIAL), /* ATTR */ \ 722 CODE_FOR_nothing) /* ICODE */ 723 724 725/* Decimal floating point builtins for instructions. */ 726#define BU_DFP_MISC_1(ENUM, NAME, ATTR, ICODE) \ 727 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 728 "__builtin_" NAME, /* NAME */ \ 729 RS6000_BTM_DFP, /* MASK */ \ 730 (RS6000_BTC_ ## ATTR /* ATTR */ \ 731 | RS6000_BTC_UNARY), \ 732 CODE_FOR_ ## ICODE) /* ICODE */ 733 734#define BU_DFP_MISC_2(ENUM, NAME, ATTR, ICODE) \ 735 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 736 "__builtin_" NAME, /* NAME */ \ 737 RS6000_BTM_DFP, /* MASK */ \ 738 (RS6000_BTC_ ## ATTR /* ATTR */ \ 739 | RS6000_BTC_BINARY), \ 740 CODE_FOR_ ## ICODE) /* ICODE */ 741 742/* Miscellaneous builtins for instructions added in ISA 2.06. These 743 instructions don't require either the DFP or VSX options, just the basic ISA 744 2.06 (popcntd) enablement since they operate on general purpose 745 registers. */ 746#define BU_P7_MISC_1(ENUM, NAME, ATTR, ICODE) \ 747 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 748 "__builtin_" NAME, /* NAME */ \ 749 RS6000_BTM_POPCNTD, /* MASK */ \ 750 (RS6000_BTC_ ## ATTR /* ATTR */ \ 751 | RS6000_BTC_UNARY), \ 752 CODE_FOR_ ## ICODE) /* ICODE */ 753 754#define BU_P7_MISC_2(ENUM, NAME, ATTR, ICODE) \ 755 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 756 "__builtin_" NAME, /* NAME */ \ 757 RS6000_BTM_POPCNTD, /* MASK */ \ 758 (RS6000_BTC_ ## ATTR /* ATTR */ \ 759 | RS6000_BTC_BINARY), \ 760 CODE_FOR_ ## ICODE) /* ICODE */ 761 762#define BU_P7_POWERPC64_MISC_2(ENUM, NAME, ATTR, ICODE) \ 763 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 764 "__builtin_" NAME, /* NAME */ \ 765 RS6000_BTM_POPCNTD \ 766 | RS6000_BTM_POWERPC64, /* MASK */ \ 767 (RS6000_BTC_ ## ATTR /* ATTR */ \ 768 | RS6000_BTC_BINARY), \ 769 CODE_FOR_ ## ICODE) /* ICODE */ 770 771#define BU_P7_MISC_X(ENUM, NAME, ATTR) \ 772 RS6000_BUILTIN_X (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 773 "__builtin_" NAME, /* NAME */ \ 774 RS6000_BTM_POPCNTD, /* MASK */ \ 775 (RS6000_BTC_ ## ATTR /* ATTR */ \ 776 | RS6000_BTC_SPECIAL), \ 777 CODE_FOR_nothing) /* ICODE */ 778 779 780/* Miscellaneous builtins for instructions added in ISA 2.07. These 781 instructions do require the ISA 2.07 vector support, but they aren't vector 782 instructions. */ 783#define BU_P8V_MISC_3(ENUM, NAME, ATTR, ICODE) \ 784 RS6000_BUILTIN_3 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 785 "__builtin_" NAME, /* NAME */ \ 786 RS6000_BTM_P8_VECTOR, /* MASK */ \ 787 (RS6000_BTC_ ## ATTR /* ATTR */ \ 788 | RS6000_BTC_TERNARY), \ 789 CODE_FOR_ ## ICODE) /* ICODE */ 790 791/* 128-bit long double floating point builtins. */ 792#define BU_LDBL128_2(ENUM, NAME, ATTR, ICODE) \ 793 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 794 "__builtin_" NAME, /* NAME */ \ 795 (RS6000_BTM_HARD_FLOAT /* MASK */ \ 796 | RS6000_BTM_LDBL128), \ 797 (RS6000_BTC_ ## ATTR /* ATTR */ \ 798 | RS6000_BTC_BINARY), \ 799 CODE_FOR_ ## ICODE) /* ICODE */ 800 801/* 128-bit __ibm128 floating point builtins (use -mfloat128 to indicate that 802 __ibm128 is available). */ 803#define BU_IBM128_2(ENUM, NAME, ATTR, ICODE) \ 804 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 805 "__builtin_" NAME, /* NAME */ \ 806 (RS6000_BTM_HARD_FLOAT /* MASK */ \ 807 | RS6000_BTM_FLOAT128), \ 808 (RS6000_BTC_ ## ATTR /* ATTR */ \ 809 | RS6000_BTC_BINARY), \ 810 CODE_FOR_ ## ICODE) /* ICODE */ 811 812/* Miscellaneous builtins for instructions added in ISA 3.0. These 813 instructions don't require either the DFP or VSX options, just the basic 814 ISA 3.0 enablement since they operate on general purpose registers. */ 815#define BU_P9_MISC_0(ENUM, NAME, ATTR, ICODE) \ 816 RS6000_BUILTIN_0 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 817 "__builtin_" NAME, /* NAME */ \ 818 RS6000_BTM_P9_MISC, /* MASK */ \ 819 (RS6000_BTC_ ## ATTR /* ATTR */ \ 820 | RS6000_BTC_SPECIAL), \ 821 CODE_FOR_ ## ICODE) /* ICODE */ 822 823#define BU_P9_MISC_1(ENUM, NAME, ATTR, ICODE) \ 824 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 825 "__builtin_" NAME, /* NAME */ \ 826 RS6000_BTM_P9_MISC, /* MASK */ \ 827 (RS6000_BTC_ ## ATTR /* ATTR */ \ 828 | RS6000_BTC_UNARY), \ 829 CODE_FOR_ ## ICODE) /* ICODE */ 830 831/* Miscellaneous builtins for instructions added in ISA 3.0. These 832 instructions don't require either the DFP or VSX options, just the basic 833 ISA 3.0 enablement since they operate on general purpose registers, 834 and they require 64-bit addressing. */ 835#define BU_P9_64BIT_MISC_0(ENUM, NAME, ATTR, ICODE) \ 836 RS6000_BUILTIN_0 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 837 "__builtin_" NAME, /* NAME */ \ 838 RS6000_BTM_P9_MISC \ 839 | RS6000_BTM_64BIT, /* MASK */ \ 840 (RS6000_BTC_ ## ATTR /* ATTR */ \ 841 | RS6000_BTC_SPECIAL), \ 842 CODE_FOR_ ## ICODE) /* ICODE */ 843 844/* Miscellaneous builtins for decimal floating point instructions 845 added in ISA 3.0. These instructions don't require the VSX 846 options, just the basic ISA 3.0 enablement since they operate on 847 general purpose registers. */ 848#define BU_P9_DFP_MISC_0(ENUM, NAME, ATTR, ICODE) \ 849 RS6000_BUILTIN_0 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 850 "__builtin_" NAME, /* NAME */ \ 851 RS6000_BTM_P9_MISC, /* MASK */ \ 852 (RS6000_BTC_ ## ATTR /* ATTR */ \ 853 | RS6000_BTC_SPECIAL), \ 854 CODE_FOR_ ## ICODE) /* ICODE */ 855 856#define BU_P9_DFP_MISC_1(ENUM, NAME, ATTR, ICODE) \ 857 RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 858 "__builtin_" NAME, /* NAME */ \ 859 RS6000_BTM_P9_MISC, /* MASK */ \ 860 (RS6000_BTC_ ## ATTR /* ATTR */ \ 861 | RS6000_BTC_SPECIAL), \ 862 CODE_FOR_ ## ICODE) /* ICODE */ 863 864#define BU_P9_DFP_MISC_2(ENUM, NAME, ATTR, ICODE) \ 865 RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \ 866 "__builtin_" NAME, /* NAME */ \ 867 RS6000_BTM_P9_MISC, /* MASK */ \ 868 (RS6000_BTC_ ## ATTR /* ATTR */ \ 869 | RS6000_BTC_SPECIAL), \ 870 CODE_FOR_ ## ICODE) /* ICODE */ 871 872/* Decimal floating point overloaded functions added in ISA 3.0 */ 873#define BU_P9_DFP_OVERLOAD_1(ENUM, NAME) \ 874 RS6000_BUILTIN_1 (P9_BUILTIN_DFP_ ## ENUM, /* ENUM */ \ 875 "__builtin_dfp_" NAME, /* NAME */ \ 876 RS6000_BTM_P9_MISC, /* MASK */ \ 877 (RS6000_BTC_OVERLOADED /* ATTR */ \ 878 | RS6000_BTC_UNARY), \ 879 CODE_FOR_nothing) /* ICODE */ 880 881#define BU_P9_DFP_OVERLOAD_2(ENUM, NAME) \ 882 RS6000_BUILTIN_2 (P9_BUILTIN_DFP_ ## ENUM, /* ENUM */ \ 883 "__builtin_dfp_" NAME, /* NAME */ \ 884 RS6000_BTM_P9_MISC, /* MASK */ \ 885 (RS6000_BTC_OVERLOADED /* ATTR */ \ 886 | RS6000_BTC_BINARY), \ 887 CODE_FOR_nothing) /* ICODE */ 888 889#define BU_P9_DFP_OVERLOAD_3(ENUM, NAME) \ 890 RS6000_BUILTIN_3 (P9_BUILTIN_DFP_ ## ENUM, /* ENUM */ \ 891 "__builtin_dfp_" NAME, /* NAME */ \ 892 RS6000_BTM_P9_MISC, /* MASK */ \ 893 (RS6000_BTC_OVERLOADED /* ATTR */ \ 894 | RS6000_BTC_TERNARY), \ 895 CODE_FOR_nothing) /* ICODE */ 896 897/* ISA 3.0 (power9) vector convenience macros. */ 898/* For the instructions that are encoded as altivec instructions use 899 __builtin_altivec_ as the builtin name. */ 900#define BU_P9V_AV_1(ENUM, NAME, ATTR, ICODE) \ 901 RS6000_BUILTIN_1 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ 902 "__builtin_altivec_" NAME, /* NAME */ \ 903 RS6000_BTM_P9_VECTOR, /* MASK */ \ 904 (RS6000_BTC_ ## ATTR /* ATTR */ \ 905 | RS6000_BTC_UNARY), \ 906 CODE_FOR_ ## ICODE) /* ICODE */ 907 908#define BU_P9V_AV_2(ENUM, NAME, ATTR, ICODE) \ 909 RS6000_BUILTIN_2 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ 910 "__builtin_altivec_" NAME, /* NAME */ \ 911 RS6000_BTM_P9_VECTOR, /* MASK */ \ 912 (RS6000_BTC_ ## ATTR /* ATTR */ \ 913 | RS6000_BTC_BINARY), \ 914 CODE_FOR_ ## ICODE) /* ICODE */ 915 916#define BU_P9V_AV_3(ENUM, NAME, ATTR, ICODE) \ 917 RS6000_BUILTIN_3 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ 918 "__builtin_altivec_" NAME, /* NAME */ \ 919 RS6000_BTM_P9_VECTOR, /* MASK */ \ 920 (RS6000_BTC_ ## ATTR /* ATTR */ \ 921 | RS6000_BTC_TERNARY), \ 922 CODE_FOR_ ## ICODE) /* ICODE */ 923 924/* See the comment on BU_ALTIVEC_P. */ 925#define BU_P9V_AV_P(ENUM, NAME, ATTR, ICODE) \ 926 RS6000_BUILTIN_P (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ 927 "__builtin_altivec_" NAME, /* NAME */ \ 928 RS6000_BTM_P9_VECTOR, /* MASK */ \ 929 (RS6000_BTC_ ## ATTR /* ATTR */ \ 930 | RS6000_BTC_PREDICATE), \ 931 CODE_FOR_ ## ICODE) /* ICODE */ 932 933#define BU_P9V_AV_X(ENUM, NAME, ATTR) \ 934 RS6000_BUILTIN_X (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ 935 "__builtin_altivec_" NAME, /* NAME */ \ 936 RS6000_BTM_P9_VECTOR, /* MASK */ \ 937 (RS6000_BTC_ ## ATTR /* ATTR */ \ 938 | RS6000_BTC_SPECIAL), \ 939 CODE_FOR_nothing) /* ICODE */ 940 941#define BU_P9V_64BIT_AV_X(ENUM, NAME, ATTR) \ 942 RS6000_BUILTIN_X (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ 943 "__builtin_altivec_" NAME, /* NAME */ \ 944 (RS6000_BTM_P9_VECTOR \ 945 | RS6000_BTM_64BIT), /* MASK */ \ 946 (RS6000_BTC_ ## ATTR /* ATTR */ \ 947 | RS6000_BTC_SPECIAL), \ 948 CODE_FOR_nothing) /* ICODE */ 949 950/* For the instructions encoded as VSX instructions use __builtin_vsx as the 951 builtin name. */ 952#define BU_P9V_VSX_1(ENUM, NAME, ATTR, ICODE) \ 953 RS6000_BUILTIN_1 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ 954 "__builtin_vsx_" NAME, /* NAME */ \ 955 RS6000_BTM_P9_VECTOR, /* MASK */ \ 956 (RS6000_BTC_ ## ATTR /* ATTR */ \ 957 | RS6000_BTC_UNARY), \ 958 CODE_FOR_ ## ICODE) /* ICODE */ 959 960#define BU_P9V_64BIT_VSX_1(ENUM, NAME, ATTR, ICODE) \ 961 RS6000_BUILTIN_1 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ 962 "__builtin_vsx_" NAME, /* NAME */ \ 963 (RS6000_BTM_64BIT \ 964 | RS6000_BTM_P9_VECTOR), /* MASK */ \ 965 (RS6000_BTC_ ## ATTR /* ATTR */ \ 966 | RS6000_BTC_UNARY), \ 967 CODE_FOR_ ## ICODE) /* ICODE */ 968 969#define BU_P9V_VSX_2(ENUM, NAME, ATTR, ICODE) \ 970 RS6000_BUILTIN_2 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ 971 "__builtin_vsx_" NAME, /* NAME */ \ 972 RS6000_BTM_P9_VECTOR, /* MASK */ \ 973 (RS6000_BTC_ ## ATTR /* ATTR */ \ 974 | RS6000_BTC_BINARY), \ 975 CODE_FOR_ ## ICODE) /* ICODE */ 976 977#define BU_P9V_64BIT_VSX_2(ENUM, NAME, ATTR, ICODE) \ 978 RS6000_BUILTIN_2 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ 979 "__builtin_vsx_" NAME, /* NAME */ \ 980 (RS6000_BTM_64BIT \ 981 | RS6000_BTM_P9_VECTOR), /* MASK */ \ 982 (RS6000_BTC_ ## ATTR /* ATTR */ \ 983 | RS6000_BTC_BINARY), \ 984 CODE_FOR_ ## ICODE) /* ICODE */ 985 986#define BU_P9V_VSX_3(ENUM, NAME, ATTR, ICODE) \ 987 RS6000_BUILTIN_3 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ 988 "__builtin_vsx_" NAME, /* NAME */ \ 989 RS6000_BTM_P9_VECTOR, /* MASK */ \ 990 (RS6000_BTC_ ## ATTR /* ATTR */ \ 991 | RS6000_BTC_TERNARY), \ 992 CODE_FOR_ ## ICODE) /* ICODE */ 993 994#define BU_P9V_64BIT_VSX_3(ENUM, NAME, ATTR, ICODE) \ 995 RS6000_BUILTIN_2 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ 996 "__builtin_vsx_" NAME, /* NAME */ \ 997 (RS6000_BTM_64BIT \ 998 | RS6000_BTM_P9_VECTOR), /* MASK */ \ 999 (RS6000_BTC_ ## ATTR /* ATTR */ \ 1000 | RS6000_BTC_TERNARY), \ 1001 CODE_FOR_ ## ICODE) /* ICODE */ 1002 1003/* See the comment on BU_ALTIVEC_P. */ 1004#define BU_P9V_OVERLOAD_P(ENUM, NAME) \ 1005 RS6000_BUILTIN_P (P9V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 1006 "__builtin_vec_" NAME, /* NAME */ \ 1007 RS6000_BTM_ALTIVEC, /* MASK */ \ 1008 (RS6000_BTC_OVERLOADED /* ATTR */ \ 1009 | RS6000_BTC_PREDICATE), \ 1010 CODE_FOR_nothing) /* ICODE */ 1011 1012#define BU_P9_2(ENUM, NAME, ATTR, ICODE) \ 1013 RS6000_BUILTIN_2 (P9_BUILTIN_SCALAR_ ## ENUM, /* ENUM */ \ 1014 "__builtin_scalar_" NAME, /* NAME */ \ 1015 RS6000_BTM_P9_VECTOR, /* MASK */ \ 1016 (RS6000_BTC_ ## ATTR /* ATTR */ \ 1017 | RS6000_BTC_BINARY), \ 1018 CODE_FOR_ ## ICODE) /* ICODE */ 1019 1020#define BU_P9_64BIT_2(ENUM, NAME, ATTR, ICODE) \ 1021 RS6000_BUILTIN_2 (P9_BUILTIN_SCALAR_ ## ENUM, /* ENUM */ \ 1022 "__builtin_scalar_" NAME, /* NAME */ \ 1023 RS6000_BTM_P9_VECTOR \ 1024 | RS6000_BTM_64BIT, /* MASK */ \ 1025 (RS6000_BTC_ ## ATTR /* ATTR */ \ 1026 | RS6000_BTC_BINARY), \ 1027 CODE_FOR_ ## ICODE) /* ICODE */ 1028 1029#define BU_P9V_OVERLOAD_1(ENUM, NAME) \ 1030 RS6000_BUILTIN_1 (P9V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 1031 "__builtin_vec_" NAME, /* NAME */ \ 1032 RS6000_BTM_P9_VECTOR, /* MASK */ \ 1033 (RS6000_BTC_OVERLOADED /* ATTR */ \ 1034 | RS6000_BTC_UNARY), \ 1035 CODE_FOR_nothing) /* ICODE */ 1036 1037#define BU_P9V_OVERLOAD_2(ENUM, NAME) \ 1038 RS6000_BUILTIN_2 (P9V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 1039 "__builtin_vec_" NAME, /* NAME */ \ 1040 RS6000_BTM_P9_VECTOR, /* MASK */ \ 1041 (RS6000_BTC_OVERLOADED /* ATTR */ \ 1042 | RS6000_BTC_BINARY), \ 1043 CODE_FOR_nothing) /* ICODE */ 1044 1045#define BU_P9V_OVERLOAD_3(ENUM, NAME) \ 1046 RS6000_BUILTIN_3 (P9V_BUILTIN_VEC_ ## ENUM, /* ENUM */ \ 1047 "__builtin_vec_" NAME, /* NAME */ \ 1048 RS6000_BTM_P9_VECTOR, /* MASK */ \ 1049 (RS6000_BTC_OVERLOADED /* ATTR */ \ 1050 | RS6000_BTC_TERNARY), \ 1051 CODE_FOR_nothing) /* ICODE */ 1052 1053#define BU_P9_OVERLOAD_2(ENUM, NAME) \ 1054 RS6000_BUILTIN_2 (P9_BUILTIN_ ## ENUM, /* ENUM */ \ 1055 "__builtin_" NAME, /* NAME */ \ 1056 RS6000_BTM_P9_VECTOR, /* MASK */ \ 1057 (RS6000_BTC_OVERLOADED /* ATTR */ \ 1058 | RS6000_BTC_BINARY), \ 1059 CODE_FOR_nothing) /* ICODE */ 1060 1061/* Built-in functions for IEEE 128-bit hardware floating point. IEEE 128-bit 1062 hardware requires p9-vector and 64-bit operation. These functions use just 1063 __builtin_ as the prefix. */ 1064#define BU_FLOAT128_HW_1(ENUM, NAME, ATTR, ICODE) \ 1065 RS6000_BUILTIN_1 (FLOAT128_BUILTIN_ ## ENUM, /* ENUM */ \ 1066 "__builtin_" NAME, /* NAME */ \ 1067 RS6000_BTM_FLOAT128_HW, /* MASK */ \ 1068 (RS6000_BTC_ ## ATTR /* ATTR */ \ 1069 | RS6000_BTC_UNARY), \ 1070 CODE_FOR_ ## ICODE) /* ICODE */ 1071 1072#define BU_FLOAT128_HW_2(ENUM, NAME, ATTR, ICODE) \ 1073 RS6000_BUILTIN_2 (FLOAT128_BUILTIN_ ## ENUM, /* ENUM */ \ 1074 "__builtin_" NAME, /* NAME */ \ 1075 RS6000_BTM_FLOAT128_HW, /* MASK */ \ 1076 (RS6000_BTC_ ## ATTR /* ATTR */ \ 1077 | RS6000_BTC_BINARY), \ 1078 CODE_FOR_ ## ICODE) /* ICODE */ 1079 1080#define BU_FLOAT128_HW_3(ENUM, NAME, ATTR, ICODE) \ 1081 RS6000_BUILTIN_3 (FLOAT128_BUILTIN_ ## ENUM, /* ENUM */ \ 1082 "__builtin_" NAME, /* NAME */ \ 1083 RS6000_BTM_FLOAT128_HW, /* MASK */ \ 1084 (RS6000_BTC_ ## ATTR /* ATTR */ \ 1085 | RS6000_BTC_TERNARY), \ 1086 CODE_FOR_ ## ICODE) /* ICODE */ 1087 1088/* Built-in functions for IEEE 128-bit hardware floating point. These 1089 functions use __builtin_vsx_ as the prefix. */ 1090#define BU_FLOAT128_HW_VSX_1(ENUM, NAME, ATTR, ICODE) \ 1091 RS6000_BUILTIN_1 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ 1092 "__builtin_vsx_" NAME, /* NAME */ \ 1093 RS6000_BTM_FLOAT128_HW, /* MASK */ \ 1094 (RS6000_BTC_ ## ATTR /* ATTR */ \ 1095 | RS6000_BTC_UNARY), \ 1096 CODE_FOR_ ## ICODE) /* ICODE */ 1097 1098#define BU_FLOAT128_HW_VSX_2(ENUM, NAME, ATTR, ICODE) \ 1099 RS6000_BUILTIN_2 (P9V_BUILTIN_ ## ENUM, /* ENUM */ \ 1100 "__builtin_vsx_" NAME, /* NAME */ \ 1101 RS6000_BTM_FLOAT128_HW, /* MASK */ \ 1102 (RS6000_BTC_ ## ATTR /* ATTR */ \ 1103 | RS6000_BTC_BINARY), \ 1104 CODE_FOR_ ## ICODE) /* ICODE */ 1105 1106/* Built-ins for ISA 3.1 Altivec instructions. */ 1107#define BU_P10V_VSX_1(ENUM, NAME, ATTR, ICODE)\ 1108 RS6000_BUILTIN_1 (P10V_BUILTIN_ ## ENUM, /* ENUM */ \ 1109 "__builtin_vsx_" NAME, /* NAME */ \ 1110 RS6000_BTM_P10, /* MASK */ \ 1111 (RS6000_BTC_ ## ATTR /* ATTR */ \ 1112 | RS6000_BTC_UNARY), \ 1113 CODE_FOR_ ## ICODE) /* ICODE */ 1114#endif 1115 1116 1117/* Insure 0 is not a legitimate index. */ 1118BU_SPECIAL_X (RS6000_BUILTIN_NONE, NULL, 0, RS6000_BTC_MISC) 1119 1120/* 3 argument Altivec builtins. */ 1121BU_ALTIVEC_3 (VMADDFP, "vmaddfp", FP, fmav4sf4) 1122BU_ALTIVEC_3 (VMHADDSHS, "vmhaddshs", SAT, altivec_vmhaddshs) 1123BU_ALTIVEC_3 (VMHRADDSHS, "vmhraddshs", SAT, altivec_vmhraddshs) 1124BU_ALTIVEC_3 (VMLADDUHM, "vmladduhm", CONST, fmav8hi4) 1125BU_ALTIVEC_3 (VMSUMUBM, "vmsumubm", CONST, altivec_vmsumubm) 1126BU_ALTIVEC_3 (VMSUMMBM, "vmsummbm", CONST, altivec_vmsummbm) 1127BU_ALTIVEC_3 (VMSUMUHM, "vmsumuhm", CONST, altivec_vmsumuhm) 1128BU_ALTIVEC_3 (VMSUMUDM, "vmsumudm", CONST, altivec_vmsumudm) 1129BU_ALTIVEC_3 (VMSUMSHM, "vmsumshm", CONST, altivec_vmsumshm) 1130BU_ALTIVEC_3 (VMSUMUHS, "vmsumuhs", SAT, altivec_vmsumuhs) 1131BU_ALTIVEC_3 (VMSUMSHS, "vmsumshs", SAT, altivec_vmsumshs) 1132BU_ALTIVEC_3 (VNMSUBFP, "vnmsubfp", FP, nfmsv4sf4) 1133BU_ALTIVEC_3 (VPERM_1TI, "vperm_1ti", CONST, altivec_vperm_v1ti) 1134BU_ALTIVEC_3 (VPERM_2DF, "vperm_2df", CONST, altivec_vperm_v2df) 1135BU_ALTIVEC_3 (VPERM_2DI, "vperm_2di", CONST, altivec_vperm_v2di) 1136BU_ALTIVEC_3 (VPERM_4SF, "vperm_4sf", CONST, altivec_vperm_v4sf) 1137BU_ALTIVEC_3 (VPERM_4SI, "vperm_4si", CONST, altivec_vperm_v4si) 1138BU_ALTIVEC_3 (VPERM_8HI, "vperm_8hi", CONST, altivec_vperm_v8hi) 1139BU_ALTIVEC_3 (VPERM_16QI, "vperm_16qi", CONST, altivec_vperm_v16qi_uns) 1140BU_ALTIVEC_3 (VPERM_1TI_UNS, "vperm_1ti_uns", CONST, altivec_vperm_v1ti_uns) 1141BU_ALTIVEC_3 (VPERM_2DI_UNS, "vperm_2di_uns", CONST, altivec_vperm_v2di_uns) 1142BU_ALTIVEC_3 (VPERM_4SI_UNS, "vperm_4si_uns", CONST, altivec_vperm_v4si_uns) 1143BU_ALTIVEC_3 (VPERM_8HI_UNS, "vperm_8hi_uns", CONST, altivec_vperm_v8hi_uns) 1144BU_ALTIVEC_3 (VPERM_16QI_UNS, "vperm_16qi_uns", CONST, altivec_vperm_v16qi_uns) 1145BU_ALTIVEC_3 (VSEL_4SF, "vsel_4sf", CONST, vector_select_v4sf) 1146BU_ALTIVEC_3 (VSEL_4SI, "vsel_4si", CONST, vector_select_v4si) 1147BU_ALTIVEC_3 (VSEL_8HI, "vsel_8hi", CONST, vector_select_v8hi) 1148BU_ALTIVEC_3 (VSEL_16QI, "vsel_16qi", CONST, vector_select_v16qi) 1149BU_ALTIVEC_3 (VSEL_2DF, "vsel_2df", CONST, vector_select_v2df) 1150BU_ALTIVEC_3 (VSEL_2DI, "vsel_2di", CONST, vector_select_v2di) 1151BU_ALTIVEC_3 (VSEL_1TI, "vsel_1ti", CONST, vector_select_v1ti) 1152BU_ALTIVEC_3 (VSEL_4SI_UNS, "vsel_4si_uns", CONST, vector_select_v4si_uns) 1153BU_ALTIVEC_3 (VSEL_8HI_UNS, "vsel_8hi_uns", CONST, vector_select_v8hi_uns) 1154BU_ALTIVEC_3 (VSEL_16QI_UNS, "vsel_16qi_uns", CONST, vector_select_v16qi_uns) 1155BU_ALTIVEC_3 (VSEL_2DI_UNS, "vsel_2di_uns", CONST, vector_select_v2di_uns) 1156BU_ALTIVEC_3 (VSEL_1TI_UNS, "vsel_1ti_uns", CONST, vector_select_v1ti_uns) 1157BU_ALTIVEC_3 (VSLDOI_16QI, "vsldoi_16qi", CONST, altivec_vsldoi_v16qi) 1158BU_ALTIVEC_3 (VSLDOI_8HI, "vsldoi_8hi", CONST, altivec_vsldoi_v8hi) 1159BU_ALTIVEC_3 (VSLDOI_4SI, "vsldoi_4si", CONST, altivec_vsldoi_v4si) 1160BU_ALTIVEC_3 (VSLDOI_2DI, "vsldoi_2di", CONST, altivec_vsldoi_v2di) 1161BU_ALTIVEC_3 (VSLDOI_4SF, "vsldoi_4sf", CONST, altivec_vsldoi_v4sf) 1162BU_ALTIVEC_3 (VSLDOI_2DF, "vsldoi_2df", CONST, altivec_vsldoi_v2df) 1163 1164/* Altivec DST builtins. */ 1165BU_ALTIVEC_D (DST, "dst", MISC, altivec_dst) 1166BU_ALTIVEC_D (DSTT, "dstt", MISC, altivec_dstt) 1167BU_ALTIVEC_D (DSTST, "dstst", MISC, altivec_dstst) 1168BU_ALTIVEC_D (DSTSTT, "dststt", MISC, altivec_dststt) 1169 1170/* Altivec 2 argument builtin functions. */ 1171BU_ALTIVEC_2 (VADDUBM, "vaddubm", CONST, addv16qi3) 1172BU_ALTIVEC_2 (VADDUHM, "vadduhm", CONST, addv8hi3) 1173BU_ALTIVEC_2 (VADDUWM, "vadduwm", CONST, addv4si3) 1174BU_ALTIVEC_2 (VADDFP, "vaddfp", CONST, addv4sf3) 1175BU_ALTIVEC_2 (VADDCUW, "vaddcuw", CONST, altivec_vaddcuw) 1176BU_ALTIVEC_2 (VADDUBS, "vaddubs", CONST, altivec_vaddubs) 1177BU_ALTIVEC_2 (VADDSBS, "vaddsbs", CONST, altivec_vaddsbs) 1178BU_ALTIVEC_2 (VADDUHS, "vadduhs", CONST, altivec_vadduhs) 1179BU_ALTIVEC_2 (VADDSHS, "vaddshs", CONST, altivec_vaddshs) 1180BU_ALTIVEC_2 (VADDUWS, "vadduws", CONST, altivec_vadduws) 1181BU_ALTIVEC_2 (VADDSWS, "vaddsws", CONST, altivec_vaddsws) 1182BU_ALTIVEC_2 (VAND_V16QI_UNS, "vand_v16qi_uns", CONST, andv16qi3) 1183BU_ALTIVEC_2 (VAND_V16QI, "vand_v16qi", CONST, andv16qi3) 1184BU_ALTIVEC_2 (VAND_V8HI_UNS, "vand_v8hi_uns", CONST, andv8hi3) 1185BU_ALTIVEC_2 (VAND_V8HI, "vand_v8hi", CONST, andv8hi3) 1186BU_ALTIVEC_2 (VAND_V4SI_UNS, "vand_v4si_uns", CONST, andv4si3) 1187BU_ALTIVEC_2 (VAND_V4SI, "vand_v4si", CONST, andv4si3) 1188BU_ALTIVEC_2 (VAND_V2DI_UNS, "vand_v2di_uns", CONST, andv2di3) 1189BU_ALTIVEC_2 (VAND_V2DI, "vand_v2di", CONST, andv2di3) 1190BU_ALTIVEC_2 (VAND_V4SF, "vand_v4sf", CONST, andv4sf3) 1191BU_ALTIVEC_2 (VAND_V2DF, "vand_v2df", CONST, andv2df3) 1192BU_ALTIVEC_2 (VANDC_V16QI_UNS,"vandc_v16qi_uns",CONST, andcv16qi3) 1193BU_ALTIVEC_2 (VANDC_V16QI, "vandc_v16qi", CONST, andcv16qi3) 1194BU_ALTIVEC_2 (VANDC_V8HI_UNS, "vandc_v8hi_uns", CONST, andcv8hi3) 1195BU_ALTIVEC_2 (VANDC_V8HI, "vandc_v8hi", CONST, andcv8hi3) 1196BU_ALTIVEC_2 (VANDC_V4SI_UNS, "vandc_v4si_uns", CONST, andcv4si3) 1197BU_ALTIVEC_2 (VANDC_V4SI, "vandc_v4si", CONST, andcv4si3) 1198BU_ALTIVEC_2 (VANDC_V2DI_UNS, "vandc_v2di_uns", CONST, andcv2di3) 1199BU_ALTIVEC_2 (VANDC_V2DI, "vandc_v2di", CONST, andcv2di3) 1200BU_ALTIVEC_2 (VANDC_V4SF, "vandc_v4sf", CONST, andcv4sf3) 1201BU_ALTIVEC_2 (VANDC_V2DF, "vandc_v2df", CONST, andcv2df3) 1202BU_ALTIVEC_2 (VAVGUB, "vavgub", CONST, uavgv16qi3_ceil) 1203BU_ALTIVEC_2 (VAVGSB, "vavgsb", CONST, avgv16qi3_ceil) 1204BU_ALTIVEC_2 (VAVGUH, "vavguh", CONST, uavgv8hi3_ceil) 1205BU_ALTIVEC_2 (VAVGSH, "vavgsh", CONST, avgv8hi3_ceil) 1206BU_ALTIVEC_2 (VAVGUW, "vavguw", CONST, uavgv4si3_ceil) 1207BU_ALTIVEC_2 (VAVGSW, "vavgsw", CONST, avgv4si3_ceil) 1208BU_ALTIVEC_2 (VCFUX, "vcfux", CONST, altivec_vcfux) 1209BU_ALTIVEC_2 (VCFSX, "vcfsx", CONST, altivec_vcfsx) 1210BU_ALTIVEC_2 (VCMPBFP, "vcmpbfp", CONST, altivec_vcmpbfp) 1211BU_ALTIVEC_2 (VCMPEQUB, "vcmpequb", CONST, vector_eqv16qi) 1212BU_ALTIVEC_2 (VCMPEQUH, "vcmpequh", CONST, vector_eqv8hi) 1213BU_ALTIVEC_2 (VCMPEQUW, "vcmpequw", CONST, vector_eqv4si) 1214BU_ALTIVEC_2 (VCMPEQFP, "vcmpeqfp", CONST, vector_eqv4sf) 1215BU_ALTIVEC_2 (VCMPGEFP, "vcmpgefp", CONST, vector_gev4sf) 1216BU_ALTIVEC_2 (VCMPGTUB, "vcmpgtub", CONST, vector_gtuv16qi) 1217BU_ALTIVEC_2 (VCMPGTSB, "vcmpgtsb", CONST, vector_gtv16qi) 1218BU_ALTIVEC_2 (VCMPGTUH, "vcmpgtuh", CONST, vector_gtuv8hi) 1219BU_ALTIVEC_2 (VCMPGTSH, "vcmpgtsh", CONST, vector_gtv8hi) 1220BU_ALTIVEC_2 (VCMPGTUW, "vcmpgtuw", CONST, vector_gtuv4si) 1221BU_ALTIVEC_2 (VCMPGTSW, "vcmpgtsw", CONST, vector_gtv4si) 1222BU_ALTIVEC_2 (VCMPGTFP, "vcmpgtfp", CONST, vector_gtv4sf) 1223BU_ALTIVEC_2 (VCTSXS, "vctsxs", CONST, altivec_vctsxs) 1224BU_ALTIVEC_2 (VCTUXS, "vctuxs", CONST, altivec_vctuxs) 1225BU_ALTIVEC_2 (VMAXUB, "vmaxub", CONST, umaxv16qi3) 1226BU_ALTIVEC_2 (VMAXSB, "vmaxsb", CONST, smaxv16qi3) 1227BU_ALTIVEC_2 (VMAXUH, "vmaxuh", CONST, umaxv8hi3) 1228BU_ALTIVEC_2 (VMAXSH, "vmaxsh", CONST, smaxv8hi3) 1229BU_ALTIVEC_2 (VMAXUW, "vmaxuw", CONST, umaxv4si3) 1230BU_ALTIVEC_2 (VMAXSW, "vmaxsw", CONST, smaxv4si3) 1231BU_ALTIVEC_2 (VMAXFP, "vmaxfp", CONST, smaxv4sf3) 1232BU_ALTIVEC_2 (VMRGHB, "vmrghb", CONST, altivec_vmrghb) 1233BU_ALTIVEC_2 (VMRGHH, "vmrghh", CONST, altivec_vmrghh) 1234BU_ALTIVEC_2 (VMRGHW, "vmrghw", CONST, altivec_vmrghw) 1235BU_ALTIVEC_2 (VMRGLB, "vmrglb", CONST, altivec_vmrglb) 1236BU_ALTIVEC_2 (VMRGLH, "vmrglh", CONST, altivec_vmrglh) 1237BU_ALTIVEC_2 (VMRGLW, "vmrglw", CONST, altivec_vmrglw) 1238BU_ALTIVEC_2 (VMINUB, "vminub", CONST, uminv16qi3) 1239BU_ALTIVEC_2 (VMINSB, "vminsb", CONST, sminv16qi3) 1240BU_ALTIVEC_2 (VMINUH, "vminuh", CONST, uminv8hi3) 1241BU_ALTIVEC_2 (VMINSH, "vminsh", CONST, sminv8hi3) 1242BU_ALTIVEC_2 (VMINUW, "vminuw", CONST, uminv4si3) 1243BU_ALTIVEC_2 (VMINSW, "vminsw", CONST, sminv4si3) 1244BU_ALTIVEC_2 (VMINFP, "vminfp", CONST, sminv4sf3) 1245BU_ALTIVEC_2 (VMULEUB, "vmuleub", CONST, vec_widen_umult_even_v16qi) 1246BU_ALTIVEC_2 (VMULESB, "vmulesb", CONST, vec_widen_smult_even_v16qi) 1247BU_ALTIVEC_2 (VMULEUH, "vmuleuh", CONST, vec_widen_umult_even_v8hi) 1248BU_ALTIVEC_2 (VMULESH, "vmulesh", CONST, vec_widen_smult_even_v8hi) 1249BU_P8V_AV_2 (VMULEUW, "vmuleuw", CONST, vec_widen_umult_even_v4si) 1250BU_P8V_AV_2 (VMULESW, "vmulesw", CONST, vec_widen_smult_even_v4si) 1251BU_ALTIVEC_2 (VMULOUB, "vmuloub", CONST, vec_widen_umult_odd_v16qi) 1252BU_ALTIVEC_2 (VMULOSB, "vmulosb", CONST, vec_widen_smult_odd_v16qi) 1253BU_ALTIVEC_2 (VMULOUH, "vmulouh", CONST, vec_widen_umult_odd_v8hi) 1254BU_ALTIVEC_2 (VMULOSH, "vmulosh", CONST, vec_widen_smult_odd_v8hi) 1255BU_P8V_AV_2 (VMULOUW, "vmulouw", CONST, vec_widen_umult_odd_v4si) 1256BU_P8V_AV_2 (VMULOSW, "vmulosw", CONST, vec_widen_smult_odd_v4si) 1257BU_ALTIVEC_2 (VNOR_V16QI_UNS, "vnor_v16qi_uns", CONST, norv16qi3) 1258BU_ALTIVEC_2 (VNOR_V16QI, "vnor_v16qi", CONST, norv16qi3) 1259BU_ALTIVEC_2 (VNOR_V8HI_UNS, "vnor_v8hi_uns", CONST, norv8hi3) 1260BU_ALTIVEC_2 (VNOR_V8HI, "vnor_v8hi", CONST, norv8hi3) 1261BU_ALTIVEC_2 (VNOR_V4SI_UNS, "vnor_v4si_uns", CONST, norv4si3) 1262BU_ALTIVEC_2 (VNOR_V4SI, "vnor_v4si", CONST, norv4si3) 1263BU_ALTIVEC_2 (VNOR_V2DI_UNS, "vnor_v2di_uns", CONST, norv2di3) 1264BU_ALTIVEC_2 (VNOR_V2DI, "vnor_v2di", CONST, norv2di3) 1265BU_ALTIVEC_2 (VNOR_V4SF, "vnor_v4sf", CONST, norv4sf3) 1266BU_ALTIVEC_2 (VNOR_V2DF, "vnor_v2df", CONST, norv2df3) 1267BU_ALTIVEC_2 (VOR_V16QI_UNS, "vor_v16qi_uns", CONST, iorv16qi3) 1268BU_ALTIVEC_2 (VOR_V16QI, "vor_v16qi", CONST, iorv16qi3) 1269BU_ALTIVEC_2 (VOR_V8HI_UNS, "vor_v8hi_uns", CONST, iorv8hi3) 1270BU_ALTIVEC_2 (VOR_V8HI, "vor_v8hi", CONST, iorv8hi3) 1271BU_ALTIVEC_2 (VOR_V4SI_UNS, "vor_v4si_uns", CONST, iorv4si3) 1272BU_ALTIVEC_2 (VOR_V4SI, "vor_v4si", CONST, iorv4si3) 1273BU_ALTIVEC_2 (VOR_V2DI_UNS, "vor_v2di_uns", CONST, iorv2di3) 1274BU_ALTIVEC_2 (VOR_V2DI, "vor_v2di", CONST, iorv2di3) 1275BU_ALTIVEC_2 (VOR_V4SF, "vor_v4sf", CONST, iorv4sf3) 1276BU_ALTIVEC_2 (VOR_V2DF, "vor_v2df", CONST, iorv2df3) 1277 1278BU_ALTIVEC_2 (VPKUHUM, "vpkuhum", CONST, altivec_vpkuhum) 1279BU_ALTIVEC_2 (VPKUWUM, "vpkuwum", CONST, altivec_vpkuwum) 1280BU_ALTIVEC_2 (VPKPX, "vpkpx", CONST, altivec_vpkpx) 1281BU_ALTIVEC_2 (VPKSHSS, "vpkshss", CONST, altivec_vpkshss) 1282BU_ALTIVEC_2 (VPKSWSS, "vpkswss", CONST, altivec_vpkswss) 1283BU_ALTIVEC_2 (VPKUHUS, "vpkuhus", CONST, altivec_vpkuhus) 1284BU_ALTIVEC_2 (VPKSHUS, "vpkshus", CONST, altivec_vpkshus) 1285BU_ALTIVEC_2 (VPKUWUS, "vpkuwus", CONST, altivec_vpkuwus) 1286BU_ALTIVEC_2 (VPKSWUS, "vpkswus", CONST, altivec_vpkswus) 1287BU_ALTIVEC_2 (VRECIPFP, "vrecipdivfp", CONST, recipv4sf3) 1288BU_ALTIVEC_2 (VRLB, "vrlb", CONST, vrotlv16qi3) 1289BU_ALTIVEC_2 (VRLH, "vrlh", CONST, vrotlv8hi3) 1290BU_ALTIVEC_2 (VRLW, "vrlw", CONST, vrotlv4si3) 1291BU_ALTIVEC_2 (VSLB, "vslb", CONST, vashlv16qi3) 1292BU_ALTIVEC_2 (VSLH, "vslh", CONST, vashlv8hi3) 1293BU_ALTIVEC_2 (VSLW, "vslw", CONST, vashlv4si3) 1294BU_ALTIVEC_2 (VSL, "vsl", CONST, altivec_vsl) 1295BU_ALTIVEC_2 (VSLO, "vslo", CONST, altivec_vslo) 1296BU_ALTIVEC_2 (VSPLTB, "vspltb", CONST, altivec_vspltb) 1297BU_ALTIVEC_2 (VSPLTH, "vsplth", CONST, altivec_vsplth) 1298BU_ALTIVEC_2 (VSPLTW, "vspltw", CONST, altivec_vspltw) 1299BU_ALTIVEC_2 (VSRB, "vsrb", CONST, vlshrv16qi3) 1300BU_ALTIVEC_2 (VSRH, "vsrh", CONST, vlshrv8hi3) 1301BU_ALTIVEC_2 (VSRW, "vsrw", CONST, vlshrv4si3) 1302BU_ALTIVEC_2 (VSRAB, "vsrab", CONST, vashrv16qi3) 1303BU_ALTIVEC_2 (VSRAH, "vsrah", CONST, vashrv8hi3) 1304BU_ALTIVEC_2 (VSRAW, "vsraw", CONST, vashrv4si3) 1305BU_ALTIVEC_2 (VSR, "vsr", CONST, altivec_vsr) 1306BU_ALTIVEC_2 (VSRO, "vsro", CONST, altivec_vsro) 1307BU_ALTIVEC_2 (VSUBUBM, "vsububm", CONST, subv16qi3) 1308BU_ALTIVEC_2 (VSUBUHM, "vsubuhm", CONST, subv8hi3) 1309BU_ALTIVEC_2 (VSUBUWM, "vsubuwm", CONST, subv4si3) 1310BU_ALTIVEC_2 (VSUBFP, "vsubfp", CONST, subv4sf3) 1311BU_ALTIVEC_2 (VSUBCUW, "vsubcuw", CONST, altivec_vsubcuw) 1312BU_ALTIVEC_2 (VSUBUBS, "vsububs", CONST, altivec_vsububs) 1313BU_ALTIVEC_2 (VSUBSBS, "vsubsbs", CONST, altivec_vsubsbs) 1314BU_ALTIVEC_2 (VSUBUHS, "vsubuhs", CONST, altivec_vsubuhs) 1315BU_ALTIVEC_2 (VSUBSHS, "vsubshs", CONST, altivec_vsubshs) 1316BU_ALTIVEC_2 (VSUBUWS, "vsubuws", CONST, altivec_vsubuws) 1317BU_ALTIVEC_2 (VSUBSWS, "vsubsws", CONST, altivec_vsubsws) 1318BU_ALTIVEC_2 (VSUM4UBS, "vsum4ubs", CONST, altivec_vsum4ubs) 1319BU_ALTIVEC_2 (VSUM4SBS, "vsum4sbs", CONST, altivec_vsum4sbs) 1320BU_ALTIVEC_2 (VSUM4SHS, "vsum4shs", CONST, altivec_vsum4shs) 1321BU_ALTIVEC_2 (VSUM2SWS, "vsum2sws", CONST, altivec_vsum2sws) 1322BU_ALTIVEC_2 (VSUMSWS, "vsumsws", CONST, altivec_vsumsws) 1323BU_ALTIVEC_2 (VSUMSWS_BE, "vsumsws_be", CONST, altivec_vsumsws_direct) 1324BU_ALTIVEC_2 (VXOR_V16QI_UNS, "vxor_v16qi_uns", CONST, xorv16qi3) 1325BU_ALTIVEC_2 (VXOR_V16QI, "vxor_v16qi", CONST, xorv16qi3) 1326BU_ALTIVEC_2 (VXOR_V8HI_UNS, "vxor_v8hi_uns", CONST, xorv8hi3) 1327BU_ALTIVEC_2 (VXOR_V8HI, "vxor_v8hi", CONST, xorv8hi3) 1328BU_ALTIVEC_2 (VXOR_V4SI_UNS, "vxor_v4si_uns", CONST, xorv4si3) 1329BU_ALTIVEC_2 (VXOR_V4SI, "vxor_v4si", CONST, xorv4si3) 1330BU_ALTIVEC_2 (VXOR_V2DI_UNS, "vxor_v2di_uns", CONST, xorv2di3) 1331BU_ALTIVEC_2 (VXOR_V2DI, "vxor_v2di", CONST, xorv2di3) 1332BU_ALTIVEC_2 (VXOR_V4SF, "vxor_v4sf", CONST, xorv4sf3) 1333BU_ALTIVEC_2 (VXOR_V2DF, "vxor_v2df", CONST, xorv2df3) 1334 1335BU_ALTIVEC_2 (COPYSIGN_V4SF, "copysignfp", CONST, vector_copysignv4sf3) 1336 1337/* Altivec ABS functions. */ 1338BU_ALTIVEC_A (ABS_V4SI, "abs_v4si", CONST, absv4si2) 1339BU_ALTIVEC_A (ABS_V8HI, "abs_v8hi", CONST, absv8hi2) 1340BU_ALTIVEC_A (ABS_V4SF, "abs_v4sf", CONST, absv4sf2) 1341BU_ALTIVEC_A (ABS_V16QI, "abs_v16qi", CONST, absv16qi2) 1342BU_ALTIVEC_A (ABSS_V4SI, "abss_v4si", SAT, altivec_abss_v4si) 1343BU_ALTIVEC_A (ABSS_V8HI, "abss_v8hi", SAT, altivec_abss_v8hi) 1344BU_ALTIVEC_A (ABSS_V16QI, "abss_v16qi", SAT, altivec_abss_v16qi) 1345 1346/* Altivec NABS functions. */ 1347BU_ALTIVEC_A (NABS_V2DI, "nabs_v2di", CONST, nabsv2di2) 1348BU_ALTIVEC_A (NABS_V4SI, "nabs_v4si", CONST, nabsv4si2) 1349BU_ALTIVEC_A (NABS_V8HI, "nabs_v8hi", CONST, nabsv8hi2) 1350BU_ALTIVEC_A (NABS_V16QI, "nabs_v16qi", CONST, nabsv16qi2) 1351BU_ALTIVEC_A (NABS_V4SF, "nabs_v4sf", CONST, vsx_nabsv4sf2) 1352BU_ALTIVEC_A (NABS_V2DF, "nabs_v2df", CONST, vsx_nabsv2df2) 1353 1354/* 1 argument Altivec builtin functions. */ 1355BU_ALTIVEC_1 (VEXPTEFP, "vexptefp", FP, altivec_vexptefp) 1356BU_ALTIVEC_1 (VLOGEFP, "vlogefp", FP, altivec_vlogefp) 1357BU_ALTIVEC_1 (VREFP, "vrefp", FP, rev4sf2) 1358BU_ALTIVEC_1 (VRFIM, "vrfim", FP, vector_floorv4sf2) 1359BU_ALTIVEC_1 (VRFIN, "vrfin", FP, altivec_vrfin) 1360BU_ALTIVEC_1 (VRFIP, "vrfip", FP, vector_ceilv4sf2) 1361BU_ALTIVEC_1 (VRFIZ, "vrfiz", FP, vector_btruncv4sf2) 1362BU_ALTIVEC_1 (VRSQRTFP, "vrsqrtfp", FP, rsqrtv4sf2) 1363BU_ALTIVEC_1 (VRSQRTEFP, "vrsqrtefp", FP, rsqrtev4sf2) 1364BU_ALTIVEC_1 (VSPLTISB, "vspltisb", CONST, altivec_vspltisb) 1365BU_ALTIVEC_1 (VSPLTISH, "vspltish", CONST, altivec_vspltish) 1366BU_ALTIVEC_1 (VSPLTISW, "vspltisw", CONST, altivec_vspltisw) 1367BU_ALTIVEC_1 (VUPKHSB, "vupkhsb", CONST, altivec_vupkhsb) 1368BU_ALTIVEC_1 (VUPKHPX, "vupkhpx", CONST, altivec_vupkhpx) 1369BU_ALTIVEC_1 (VUPKHSH, "vupkhsh", CONST, altivec_vupkhsh) 1370BU_ALTIVEC_1 (VUPKLSB, "vupklsb", CONST, altivec_vupklsb) 1371BU_ALTIVEC_1 (VUPKLPX, "vupklpx", CONST, altivec_vupklpx) 1372BU_ALTIVEC_1 (VUPKLSH, "vupklsh", CONST, altivec_vupklsh) 1373 1374BU_ALTIVEC_1 (VREVE_V2DI, "vreve_v2di", CONST, altivec_vrevev2di2) 1375BU_ALTIVEC_1 (VREVE_V4SI, "vreve_v4si", CONST, altivec_vrevev4si2) 1376BU_ALTIVEC_1 (VREVE_V8HI, "vreve_v8hi", CONST, altivec_vrevev8hi2) 1377BU_ALTIVEC_1 (VREVE_V16QI, "vreve_v16qi", CONST, altivec_vrevev16qi2) 1378BU_ALTIVEC_1 (VREVE_V2DF, "vreve_v2df", CONST, altivec_vrevev2df2) 1379BU_ALTIVEC_1 (VREVE_V4SF, "vreve_v4sf", CONST, altivec_vrevev4sf2) 1380 1381BU_ALTIVEC_1 (FLOAT_V4SI_V4SF, "float_sisf", FP, floatv4siv4sf2) 1382BU_ALTIVEC_1 (UNSFLOAT_V4SI_V4SF, "uns_float_sisf", FP, floatunsv4siv4sf2) 1383BU_ALTIVEC_1 (FIX_V4SF_V4SI, "fix_sfsi", FP, fix_truncv4sfv4si2) 1384BU_ALTIVEC_1 (FIXUNS_V4SF_V4SI, "fixuns_sfsi", FP, fixuns_truncv4sfv4si2) 1385 1386/* Altivec predicate functions. */ 1387BU_ALTIVEC_P (VCMPBFP_P, "vcmpbfp_p", CONST, altivec_vcmpbfp_p) 1388BU_ALTIVEC_P (VCMPEQFP_P, "vcmpeqfp_p", CONST, vector_eq_v4sf_p) 1389BU_ALTIVEC_P (VCMPGEFP_P, "vcmpgefp_p", CONST, vector_ge_v4sf_p) 1390BU_ALTIVEC_P (VCMPGTFP_P, "vcmpgtfp_p", CONST, vector_gt_v4sf_p) 1391BU_ALTIVEC_P (VCMPEQUW_P, "vcmpequw_p", CONST, vector_eq_v4si_p) 1392BU_ALTIVEC_P (VCMPGTSW_P, "vcmpgtsw_p", CONST, vector_gt_v4si_p) 1393BU_ALTIVEC_P (VCMPGTUW_P, "vcmpgtuw_p", CONST, vector_gtu_v4si_p) 1394BU_ALTIVEC_P (VCMPEQUH_P, "vcmpequh_p", CONST, vector_eq_v8hi_p) 1395BU_ALTIVEC_P (VCMPGTSH_P, "vcmpgtsh_p", CONST, vector_gt_v8hi_p) 1396BU_ALTIVEC_P (VCMPGTUH_P, "vcmpgtuh_p", CONST, vector_gtu_v8hi_p) 1397BU_ALTIVEC_P (VCMPEQUB_P, "vcmpequb_p", CONST, vector_eq_v16qi_p) 1398BU_ALTIVEC_P (VCMPGTSB_P, "vcmpgtsb_p", CONST, vector_gt_v16qi_p) 1399BU_ALTIVEC_P (VCMPGTUB_P, "vcmpgtub_p", CONST, vector_gtu_v16qi_p) 1400 1401/* AltiVec builtins that are handled as special cases. */ 1402BU_ALTIVEC_X (MTVSCR, "mtvscr", MISC) 1403BU_ALTIVEC_X (MFVSCR, "mfvscr", MISC) 1404BU_ALTIVEC_X (DSSALL, "dssall", MISC) 1405BU_ALTIVEC_X (DSS, "dss", MISC) 1406BU_ALTIVEC_X (LVSL, "lvsl", PURE) 1407BU_ALTIVEC_X (LVSR, "lvsr", PURE) 1408BU_ALTIVEC_X (LVEBX, "lvebx", PURE) 1409BU_ALTIVEC_X (LVEHX, "lvehx", PURE) 1410BU_ALTIVEC_X (LVEWX, "lvewx", PURE) 1411BU_ALTIVEC_X (LVXL, "lvxl", PURE) 1412BU_ALTIVEC_X (LVXL_V2DF, "lvxl_v2df", PURE) 1413BU_ALTIVEC_X (LVXL_V2DI, "lvxl_v2di", PURE) 1414BU_ALTIVEC_X (LVXL_V4SF, "lvxl_v4sf", PURE) 1415BU_ALTIVEC_X (LVXL_V4SI, "lvxl_v4si", PURE) 1416BU_ALTIVEC_X (LVXL_V8HI, "lvxl_v8hi", PURE) 1417BU_ALTIVEC_X (LVXL_V16QI, "lvxl_v16qi", PURE) 1418BU_ALTIVEC_X (LVX, "lvx", PURE) 1419BU_ALTIVEC_X (LVX_V1TI, "lvx_v1ti", PURE) 1420BU_ALTIVEC_X (LVX_V2DF, "lvx_v2df", PURE) 1421BU_ALTIVEC_X (LVX_V2DI, "lvx_v2di", PURE) 1422BU_ALTIVEC_X (LVX_V4SF, "lvx_v4sf", PURE) 1423BU_ALTIVEC_X (LVX_V4SI, "lvx_v4si", PURE) 1424BU_ALTIVEC_X (LVX_V8HI, "lvx_v8hi", PURE) 1425BU_ALTIVEC_X (LVX_V16QI, "lvx_v16qi", PURE) 1426BU_ALTIVEC_X (STVX, "stvx", MEM) 1427BU_ALTIVEC_X (STVX_V2DF, "stvx_v2df", MEM) 1428BU_ALTIVEC_X (STVX_V2DI, "stvx_v2di", MEM) 1429BU_ALTIVEC_X (STVX_V4SF, "stvx_v4sf", MEM) 1430BU_ALTIVEC_X (STVX_V4SI, "stvx_v4si", MEM) 1431BU_ALTIVEC_X (STVX_V8HI, "stvx_v8hi", MEM) 1432BU_ALTIVEC_X (STVX_V16QI, "stvx_v16qi", MEM) 1433BU_ALTIVEC_C (LVLX, "lvlx", PURE) 1434BU_ALTIVEC_C (LVLXL, "lvlxl", PURE) 1435BU_ALTIVEC_C (LVRX, "lvrx", PURE) 1436BU_ALTIVEC_C (LVRXL, "lvrxl", PURE) 1437BU_ALTIVEC_X (STVEBX, "stvebx", MEM) 1438BU_ALTIVEC_X (STVEHX, "stvehx", MEM) 1439BU_ALTIVEC_X (STVEWX, "stvewx", MEM) 1440BU_ALTIVEC_X (STVXL, "stvxl", MEM) 1441BU_ALTIVEC_X (STVXL_V2DF, "stvxl_v2df", MEM) 1442BU_ALTIVEC_X (STVXL_V2DI, "stvxl_v2di", MEM) 1443BU_ALTIVEC_X (STVXL_V4SF, "stvxl_v4sf", MEM) 1444BU_ALTIVEC_X (STVXL_V4SI, "stvxl_v4si", MEM) 1445BU_ALTIVEC_X (STVXL_V8HI, "stvxl_v8hi", MEM) 1446BU_ALTIVEC_X (STVXL_V16QI, "stvxl_v16qi", MEM) 1447BU_ALTIVEC_C (STVLX, "stvlx", MEM) 1448BU_ALTIVEC_C (STVLXL, "stvlxl", MEM) 1449BU_ALTIVEC_C (STVRX, "stvrx", MEM) 1450BU_ALTIVEC_C (STVRXL, "stvrxl", MEM) 1451BU_ALTIVEC_X (MASK_FOR_LOAD, "mask_for_load", MISC) 1452BU_ALTIVEC_X (MASK_FOR_STORE, "mask_for_store", MISC) 1453BU_ALTIVEC_X (VEC_INIT_V4SI, "vec_init_v4si", CONST) 1454BU_ALTIVEC_X (VEC_INIT_V8HI, "vec_init_v8hi", CONST) 1455BU_ALTIVEC_X (VEC_INIT_V16QI, "vec_init_v16qi", CONST) 1456BU_ALTIVEC_X (VEC_INIT_V4SF, "vec_init_v4sf", CONST) 1457BU_ALTIVEC_X (VEC_SET_V4SI, "vec_set_v4si", CONST) 1458BU_ALTIVEC_X (VEC_SET_V8HI, "vec_set_v8hi", CONST) 1459BU_ALTIVEC_X (VEC_SET_V16QI, "vec_set_v16qi", CONST) 1460BU_ALTIVEC_X (VEC_SET_V4SF, "vec_set_v4sf", CONST) 1461BU_ALTIVEC_X (VEC_EXT_V4SI, "vec_ext_v4si", CONST) 1462BU_ALTIVEC_X (VEC_EXT_V8HI, "vec_ext_v8hi", CONST) 1463BU_ALTIVEC_X (VEC_EXT_V16QI, "vec_ext_v16qi", CONST) 1464BU_ALTIVEC_X (VEC_EXT_V4SF, "vec_ext_v4sf", CONST) 1465 1466/* Altivec overloaded builtins. */ 1467/* For now, don't set the classification for overloaded functions. 1468 The function should be converted to the type specific instruction 1469 before we get to the point about classifying the builtin type. */ 1470 1471/* 3 argument Altivec overloaded builtins. */ 1472BU_ALTIVEC_OVERLOAD_3 (MADD, "madd") 1473BU_ALTIVEC_OVERLOAD_3 (MADDS, "madds") 1474BU_ALTIVEC_OVERLOAD_3 (MLADD, "mladd") 1475BU_ALTIVEC_OVERLOAD_3 (MRADDS, "mradds") 1476BU_ALTIVEC_OVERLOAD_3 (MSUM, "msum") 1477BU_ALTIVEC_OVERLOAD_3 (MSUMS, "msums") 1478BU_ALTIVEC_OVERLOAD_3 (NMSUB, "nmsub") 1479BU_ALTIVEC_OVERLOAD_3 (PERM, "perm") 1480BU_ALTIVEC_OVERLOAD_3 (SEL, "sel") 1481BU_ALTIVEC_OVERLOAD_3 (VMSUMMBM, "vmsummbm") 1482BU_ALTIVEC_OVERLOAD_3 (VMSUMSHM, "vmsumshm") 1483BU_ALTIVEC_OVERLOAD_3 (VMSUMSHS, "vmsumshs") 1484BU_ALTIVEC_OVERLOAD_3 (VMSUMUBM, "vmsumubm") 1485BU_ALTIVEC_OVERLOAD_3 (VMSUMUHM, "vmsumuhm") 1486BU_ALTIVEC_OVERLOAD_3 (VMSUMUDM, "vmsumudm") 1487BU_ALTIVEC_OVERLOAD_3 (VMSUMUHS, "vmsumuhs") 1488 1489/* Altivec DST overloaded builtins. */ 1490BU_ALTIVEC_OVERLOAD_D (DST, "dst") 1491BU_ALTIVEC_OVERLOAD_D (DSTT, "dstt") 1492BU_ALTIVEC_OVERLOAD_D (DSTST, "dstst") 1493BU_ALTIVEC_OVERLOAD_D (DSTSTT, "dststt") 1494 1495/* 2 argument Altivec overloaded builtins. */ 1496BU_ALTIVEC_OVERLOAD_2 (ADD, "add") 1497BU_ALTIVEC_OVERLOAD_2 (ADDC, "addc") 1498BU_ALTIVEC_OVERLOAD_2 (ADDS, "adds") 1499BU_ALTIVEC_OVERLOAD_2 (AND, "and") 1500BU_ALTIVEC_OVERLOAD_2 (ANDC, "andc") 1501BU_ALTIVEC_OVERLOAD_2 (AVG, "avg") 1502BU_ALTIVEC_OVERLOAD_2 (CMPB, "cmpb") 1503BU_ALTIVEC_OVERLOAD_2 (CMPEQ, "cmpeq") 1504BU_ALTIVEC_OVERLOAD_2 (CMPGE, "cmpge") 1505BU_ALTIVEC_OVERLOAD_2 (CMPGT, "cmpgt") 1506BU_ALTIVEC_OVERLOAD_2 (CMPLE, "cmple") 1507BU_ALTIVEC_OVERLOAD_2 (CMPLT, "cmplt") 1508BU_ALTIVEC_OVERLOAD_2 (COPYSIGN, "copysign") 1509BU_ALTIVEC_OVERLOAD_2 (MAX, "max") 1510BU_ALTIVEC_OVERLOAD_2 (MERGEH, "mergeh") 1511BU_ALTIVEC_OVERLOAD_2 (MERGEL, "mergel") 1512BU_ALTIVEC_OVERLOAD_2 (MIN, "min") 1513BU_ALTIVEC_OVERLOAD_2 (MULE, "mule") 1514BU_ALTIVEC_OVERLOAD_2 (MULO, "mulo") 1515BU_ALTIVEC_OVERLOAD_2 (NOR, "nor") 1516BU_ALTIVEC_OVERLOAD_2 (OR, "or") 1517BU_ALTIVEC_OVERLOAD_2 (PACK, "pack") 1518BU_ALTIVEC_OVERLOAD_2 (PACKPX, "packpx") 1519BU_ALTIVEC_OVERLOAD_2 (PACKS, "packs") 1520BU_ALTIVEC_OVERLOAD_2 (PACKSU, "packsu") 1521BU_ALTIVEC_OVERLOAD_2 (RECIP, "recipdiv") 1522BU_ALTIVEC_OVERLOAD_2 (RL, "rl") 1523BU_ALTIVEC_OVERLOAD_2 (SL, "sl") 1524BU_ALTIVEC_OVERLOAD_2 (SLL, "sll") 1525BU_ALTIVEC_OVERLOAD_2 (SLO, "slo") 1526BU_ALTIVEC_OVERLOAD_2 (SR, "sr") 1527BU_ALTIVEC_OVERLOAD_2 (SRA, "sra") 1528BU_ALTIVEC_OVERLOAD_2 (SRL, "srl") 1529BU_ALTIVEC_OVERLOAD_2 (SRO, "sro") 1530BU_ALTIVEC_OVERLOAD_2 (SUB, "sub") 1531BU_ALTIVEC_OVERLOAD_2 (SUBC, "subc") 1532BU_ALTIVEC_OVERLOAD_2 (SUBS, "subs") 1533BU_ALTIVEC_OVERLOAD_2 (SUM2S, "sum2s") 1534BU_ALTIVEC_OVERLOAD_2 (SUM4S, "sum4s") 1535BU_ALTIVEC_OVERLOAD_2 (SUMS, "sums") 1536BU_ALTIVEC_OVERLOAD_2 (VADDFP, "vaddfp") 1537BU_ALTIVEC_OVERLOAD_2 (VADDSBS, "vaddsbs") 1538BU_ALTIVEC_OVERLOAD_2 (VADDSHS, "vaddshs") 1539BU_ALTIVEC_OVERLOAD_2 (VADDSWS, "vaddsws") 1540BU_ALTIVEC_OVERLOAD_2 (VADDUBM, "vaddubm") 1541BU_ALTIVEC_OVERLOAD_2 (VADDUBS, "vaddubs") 1542BU_ALTIVEC_OVERLOAD_2 (VADDUHM, "vadduhm") 1543BU_ALTIVEC_OVERLOAD_2 (VADDUHS, "vadduhs") 1544BU_ALTIVEC_OVERLOAD_2 (VADDUWM, "vadduwm") 1545BU_ALTIVEC_OVERLOAD_2 (VADDUWS, "vadduws") 1546BU_ALTIVEC_OVERLOAD_2 (VAVGSB, "vavgsb") 1547BU_ALTIVEC_OVERLOAD_2 (VAVGSH, "vavgsh") 1548BU_ALTIVEC_OVERLOAD_2 (VAVGSW, "vavgsw") 1549BU_ALTIVEC_OVERLOAD_2 (VAVGUB, "vavgub") 1550BU_ALTIVEC_OVERLOAD_2 (VAVGUH, "vavguh") 1551BU_ALTIVEC_OVERLOAD_2 (VAVGUW, "vavguw") 1552BU_ALTIVEC_OVERLOAD_2 (VCMPEQFP, "vcmpeqfp") 1553BU_ALTIVEC_OVERLOAD_2 (VCMPEQUB, "vcmpequb") 1554BU_ALTIVEC_OVERLOAD_2 (VCMPEQUH, "vcmpequh") 1555BU_ALTIVEC_OVERLOAD_2 (VCMPEQUW, "vcmpequw") 1556BU_ALTIVEC_OVERLOAD_2 (VCMPGTFP, "vcmpgtfp") 1557BU_ALTIVEC_OVERLOAD_2 (VCMPGTSB, "vcmpgtsb") 1558BU_ALTIVEC_OVERLOAD_2 (VCMPGTSH, "vcmpgtsh") 1559BU_ALTIVEC_OVERLOAD_2 (VCMPGTSW, "vcmpgtsw") 1560BU_ALTIVEC_OVERLOAD_2 (VCMPGTUB, "vcmpgtub") 1561BU_ALTIVEC_OVERLOAD_2 (VCMPGTUH, "vcmpgtuh") 1562BU_ALTIVEC_OVERLOAD_2 (VCMPGTUW, "vcmpgtuw") 1563BU_ALTIVEC_OVERLOAD_2 (VMAXFP, "vmaxfp") 1564BU_ALTIVEC_OVERLOAD_2 (VMAXSB, "vmaxsb") 1565BU_ALTIVEC_OVERLOAD_2 (VMAXSH, "vmaxsh") 1566BU_ALTIVEC_OVERLOAD_2 (VMAXSW, "vmaxsw") 1567BU_ALTIVEC_OVERLOAD_2 (VMAXUB, "vmaxub") 1568BU_ALTIVEC_OVERLOAD_2 (VMAXUH, "vmaxuh") 1569BU_ALTIVEC_OVERLOAD_2 (VMAXUW, "vmaxuw") 1570BU_ALTIVEC_OVERLOAD_2 (VMINFP, "vminfp") 1571BU_ALTIVEC_OVERLOAD_2 (VMINSB, "vminsb") 1572BU_ALTIVEC_OVERLOAD_2 (VMINSH, "vminsh") 1573BU_ALTIVEC_OVERLOAD_2 (VMINSW, "vminsw") 1574BU_ALTIVEC_OVERLOAD_2 (VMINUB, "vminub") 1575BU_ALTIVEC_OVERLOAD_2 (VMINUH, "vminuh") 1576BU_ALTIVEC_OVERLOAD_2 (VMINUW, "vminuw") 1577BU_ALTIVEC_OVERLOAD_2 (VMRGHB, "vmrghb") 1578BU_ALTIVEC_OVERLOAD_2 (VMRGHH, "vmrghh") 1579BU_ALTIVEC_OVERLOAD_2 (VMRGHW, "vmrghw") 1580BU_ALTIVEC_OVERLOAD_2 (VMRGLB, "vmrglb") 1581BU_ALTIVEC_OVERLOAD_2 (VMRGLH, "vmrglh") 1582BU_ALTIVEC_OVERLOAD_2 (VMRGLW, "vmrglw") 1583BU_ALTIVEC_OVERLOAD_2 (VMULESB, "vmulesb") 1584BU_ALTIVEC_OVERLOAD_2 (VMULESH, "vmulesh") 1585BU_ALTIVEC_OVERLOAD_2 (VMULESW, "vmulesw") 1586BU_ALTIVEC_OVERLOAD_2 (VMULEUB, "vmuleub") 1587BU_ALTIVEC_OVERLOAD_2 (VMULEUH, "vmuleuh") 1588BU_ALTIVEC_OVERLOAD_2 (VMULEUW, "vmuleuw") 1589BU_ALTIVEC_OVERLOAD_2 (VMULOSB, "vmulosb") 1590BU_ALTIVEC_OVERLOAD_2 (VMULOSH, "vmulosh") 1591BU_ALTIVEC_OVERLOAD_2 (VMULOSW, "vmulosw") 1592BU_ALTIVEC_OVERLOAD_2 (VMULOUB, "vmuloub") 1593BU_ALTIVEC_OVERLOAD_2 (VMULOUH, "vmulouh") 1594BU_ALTIVEC_OVERLOAD_2 (VMULOUW, "vmulouw") 1595BU_ALTIVEC_OVERLOAD_2 (VPKSHSS, "vpkshss") 1596BU_ALTIVEC_OVERLOAD_2 (VPKSHUS, "vpkshus") 1597BU_ALTIVEC_OVERLOAD_2 (VPKSWSS, "vpkswss") 1598BU_ALTIVEC_OVERLOAD_2 (VPKSWUS, "vpkswus") 1599BU_ALTIVEC_OVERLOAD_2 (VPKUHUM, "vpkuhum") 1600BU_ALTIVEC_OVERLOAD_2 (VPKUHUS, "vpkuhus") 1601BU_ALTIVEC_OVERLOAD_2 (VPKUWUM, "vpkuwum") 1602BU_ALTIVEC_OVERLOAD_2 (VPKUWUS, "vpkuwus") 1603BU_ALTIVEC_OVERLOAD_2 (VRLB, "vrlb") 1604BU_ALTIVEC_OVERLOAD_2 (VRLH, "vrlh") 1605BU_ALTIVEC_OVERLOAD_2 (VRLW, "vrlw") 1606BU_ALTIVEC_OVERLOAD_2 (VSLB, "vslb") 1607BU_ALTIVEC_OVERLOAD_2 (VSLH, "vslh") 1608BU_ALTIVEC_OVERLOAD_2 (VSLW, "vslw") 1609BU_ALTIVEC_OVERLOAD_2 (VSRAB, "vsrab") 1610BU_ALTIVEC_OVERLOAD_2 (VSRAH, "vsrah") 1611BU_ALTIVEC_OVERLOAD_2 (VSRAW, "vsraw") 1612BU_ALTIVEC_OVERLOAD_2 (VSRB, "vsrb") 1613BU_ALTIVEC_OVERLOAD_2 (VSRH, "vsrh") 1614BU_ALTIVEC_OVERLOAD_2 (VSRW, "vsrw") 1615BU_ALTIVEC_OVERLOAD_2 (VSUBFP, "vsubfp") 1616BU_ALTIVEC_OVERLOAD_2 (VSUBSBS, "vsubsbs") 1617BU_ALTIVEC_OVERLOAD_2 (VSUBSHS, "vsubshs") 1618BU_ALTIVEC_OVERLOAD_2 (VSUBSWS, "vsubsws") 1619BU_ALTIVEC_OVERLOAD_2 (VSUBUBM, "vsububm") 1620BU_ALTIVEC_OVERLOAD_2 (VSUBUBS, "vsububs") 1621BU_ALTIVEC_OVERLOAD_2 (VSUBUHM, "vsubuhm") 1622BU_ALTIVEC_OVERLOAD_2 (VSUBUHS, "vsubuhs") 1623BU_ALTIVEC_OVERLOAD_2 (VSUBUWM, "vsubuwm") 1624BU_ALTIVEC_OVERLOAD_2 (VSUBUWS, "vsubuws") 1625BU_ALTIVEC_OVERLOAD_2 (VSUM4SBS, "vsum4sbs") 1626BU_ALTIVEC_OVERLOAD_2 (VSUM4SHS, "vsum4shs") 1627BU_ALTIVEC_OVERLOAD_2 (VSUM4UBS, "vsum4ubs") 1628BU_ALTIVEC_OVERLOAD_2 (XOR, "xor") 1629 1630/* 1 argument Altivec overloaded functions. */ 1631BU_ALTIVEC_OVERLOAD_1 (ABS, "abs") 1632BU_ALTIVEC_OVERLOAD_1 (NABS, "nabs") 1633BU_ALTIVEC_OVERLOAD_1 (ABSS, "abss") 1634BU_ALTIVEC_OVERLOAD_1 (CEIL, "ceil") 1635BU_ALTIVEC_OVERLOAD_1 (EXPTE, "expte") 1636BU_ALTIVEC_OVERLOAD_1 (FLOOR, "floor") 1637BU_ALTIVEC_OVERLOAD_1 (LOGE, "loge") 1638BU_ALTIVEC_OVERLOAD_1 (MTVSCR, "mtvscr") 1639BU_ALTIVEC_OVERLOAD_1 (NEARBYINT, "nearbyint") 1640BU_ALTIVEC_OVERLOAD_1 (RE, "re") 1641BU_ALTIVEC_OVERLOAD_1 (RINT, "rint") 1642BU_ALTIVEC_OVERLOAD_1 (ROUND, "round") 1643BU_ALTIVEC_OVERLOAD_1 (RSQRT, "rsqrt") 1644BU_ALTIVEC_OVERLOAD_1 (RSQRTE, "rsqrte") 1645BU_ALTIVEC_OVERLOAD_1 (SQRT, "sqrt") 1646BU_ALTIVEC_OVERLOAD_1 (TRUNC, "trunc") 1647BU_ALTIVEC_OVERLOAD_1 (UNPACKH, "unpackh") 1648BU_ALTIVEC_OVERLOAD_1 (UNPACKL, "unpackl") 1649BU_ALTIVEC_OVERLOAD_1 (VUPKHPX, "vupkhpx") 1650BU_ALTIVEC_OVERLOAD_1 (VUPKHSB, "vupkhsb") 1651BU_ALTIVEC_OVERLOAD_1 (VUPKHSH, "vupkhsh") 1652BU_ALTIVEC_OVERLOAD_1 (VUPKLPX, "vupklpx") 1653BU_ALTIVEC_OVERLOAD_1 (VUPKLSB, "vupklsb") 1654BU_ALTIVEC_OVERLOAD_1 (VUPKLSH, "vupklsh") 1655 1656BU_ALTIVEC_OVERLOAD_1 (VREVE, "vreve") 1657 1658/* Overloaded altivec predicates. */ 1659BU_ALTIVEC_OVERLOAD_P (VCMPEQ_P, "vcmpeq_p") 1660BU_ALTIVEC_OVERLOAD_P (VCMPGT_P, "vcmpgt_p") 1661BU_ALTIVEC_OVERLOAD_P (VCMPGE_P, "vcmpge_p") 1662 1663/* Overloaded Altivec builtins that are handled as special cases. */ 1664BU_ALTIVEC_OVERLOAD_X (ADDE, "adde") 1665BU_ALTIVEC_OVERLOAD_X (ADDEC, "addec") 1666BU_ALTIVEC_OVERLOAD_X (CMPNE, "cmpne") 1667BU_ALTIVEC_OVERLOAD_X (CTF, "ctf") 1668BU_ALTIVEC_OVERLOAD_X (CTS, "cts") 1669BU_ALTIVEC_OVERLOAD_X (CTU, "ctu") 1670BU_ALTIVEC_OVERLOAD_X (EXTRACT, "extract") 1671BU_ALTIVEC_OVERLOAD_X (INSERT, "insert") 1672BU_ALTIVEC_OVERLOAD_X (LD, "ld") 1673BU_ALTIVEC_OVERLOAD_X (LDE, "lde") 1674BU_ALTIVEC_OVERLOAD_X (LDL, "ldl") 1675BU_ALTIVEC_OVERLOAD_X (LVEBX, "lvebx") 1676BU_ALTIVEC_OVERLOAD_X (LVEHX, "lvehx") 1677BU_ALTIVEC_OVERLOAD_X (LVEWX, "lvewx") 1678BU_ALTIVEC_OVERLOAD_X (LVLX, "lvlx") 1679BU_ALTIVEC_OVERLOAD_X (LVLXL, "lvlxl") 1680BU_ALTIVEC_OVERLOAD_X (LVRX, "lvrx") 1681BU_ALTIVEC_OVERLOAD_X (LVRXL, "lvrxl") 1682BU_ALTIVEC_OVERLOAD_X (LVSL, "lvsl") 1683BU_ALTIVEC_OVERLOAD_X (LVSR, "lvsr") 1684BU_ALTIVEC_OVERLOAD_X (MUL, "mul") 1685BU_ALTIVEC_OVERLOAD_X (PROMOTE, "promote") 1686BU_ALTIVEC_OVERLOAD_X (SLD, "sld") 1687BU_ALTIVEC_OVERLOAD_X (SLDW, "sldw") 1688BU_ALTIVEC_OVERLOAD_X (SPLAT, "splat") 1689BU_ALTIVEC_OVERLOAD_X (SPLATS, "splats") 1690BU_ALTIVEC_OVERLOAD_X (ST, "st") 1691BU_ALTIVEC_OVERLOAD_X (STE, "ste") 1692BU_ALTIVEC_OVERLOAD_X (STEP, "step") 1693BU_ALTIVEC_OVERLOAD_X (STL, "stl") 1694BU_ALTIVEC_OVERLOAD_X (STVEBX, "stvebx") 1695BU_ALTIVEC_OVERLOAD_X (STVEHX, "stvehx") 1696BU_ALTIVEC_OVERLOAD_X (STVEWX, "stvewx") 1697BU_ALTIVEC_OVERLOAD_X (STVLX, "stvlx") 1698BU_ALTIVEC_OVERLOAD_X (STVLXL, "stvlxl") 1699BU_ALTIVEC_OVERLOAD_X (STVRX, "stvrx") 1700BU_ALTIVEC_OVERLOAD_X (STVRXL, "stvrxl") 1701BU_ALTIVEC_OVERLOAD_X (SUBE, "sube") 1702BU_ALTIVEC_OVERLOAD_X (SUBEC, "subec") 1703BU_ALTIVEC_OVERLOAD_X (VCFSX, "vcfsx") 1704BU_ALTIVEC_OVERLOAD_X (VCFUX, "vcfux") 1705BU_ALTIVEC_OVERLOAD_X (VSPLTB, "vspltb") 1706BU_ALTIVEC_OVERLOAD_X (VSPLTH, "vsplth") 1707BU_ALTIVEC_OVERLOAD_X (VSPLTW, "vspltw") 1708 1709/* 3 argument VSX builtins. */ 1710BU_VSX_3 (XVMADDSP, "xvmaddsp", CONST, fmav4sf4) 1711BU_VSX_3 (XVMSUBSP, "xvmsubsp", CONST, fmsv4sf4) 1712BU_VSX_3 (XVNMADDSP, "xvnmaddsp", CONST, nfmav4sf4) 1713BU_VSX_3 (XVNMSUBSP, "xvnmsubsp", CONST, nfmsv4sf4) 1714 1715BU_VSX_3 (XVMADDDP, "xvmadddp", CONST, fmav2df4) 1716BU_VSX_3 (XVMSUBDP, "xvmsubdp", CONST, fmsv2df4) 1717BU_VSX_3 (XVNMADDDP, "xvnmadddp", CONST, nfmav2df4) 1718BU_VSX_3 (XVNMSUBDP, "xvnmsubdp", CONST, nfmsv2df4) 1719 1720BU_VSX_3 (XXSEL_1TI, "xxsel_1ti", CONST, vector_select_v1ti) 1721BU_VSX_3 (XXSEL_2DI, "xxsel_2di", CONST, vector_select_v2di) 1722BU_VSX_3 (XXSEL_2DF, "xxsel_2df", CONST, vector_select_v2df) 1723BU_VSX_3 (XXSEL_4SF, "xxsel_4sf", CONST, vector_select_v4sf) 1724BU_VSX_3 (XXSEL_4SI, "xxsel_4si", CONST, vector_select_v4si) 1725BU_VSX_3 (XXSEL_8HI, "xxsel_8hi", CONST, vector_select_v8hi) 1726BU_VSX_3 (XXSEL_16QI, "xxsel_16qi", CONST, vector_select_v16qi) 1727BU_VSX_3 (XXSEL_1TI_UNS, "xxsel_1ti_uns", CONST, vector_select_v1ti_uns) 1728BU_VSX_3 (XXSEL_2DI_UNS, "xxsel_2di_uns", CONST, vector_select_v2di_uns) 1729BU_VSX_3 (XXSEL_4SI_UNS, "xxsel_4si_uns", CONST, vector_select_v4si_uns) 1730BU_VSX_3 (XXSEL_8HI_UNS, "xxsel_8hi_uns", CONST, vector_select_v8hi_uns) 1731BU_VSX_3 (XXSEL_16QI_UNS, "xxsel_16qi_uns", CONST, vector_select_v16qi_uns) 1732 1733BU_VSX_3 (VPERM_1TI, "vperm_1ti", CONST, altivec_vperm_v1ti) 1734BU_VSX_3 (VPERM_2DI, "vperm_2di", CONST, altivec_vperm_v2di) 1735BU_VSX_3 (VPERM_2DF, "vperm_2df", CONST, altivec_vperm_v2df) 1736BU_VSX_3 (VPERM_4SF, "vperm_4sf", CONST, altivec_vperm_v4sf) 1737BU_VSX_3 (VPERM_4SI, "vperm_4si", CONST, altivec_vperm_v4si) 1738BU_VSX_3 (VPERM_8HI, "vperm_8hi", CONST, altivec_vperm_v8hi) 1739BU_VSX_3 (VPERM_16QI, "vperm_16qi", CONST, altivec_vperm_v16qi) 1740BU_VSX_3 (VPERM_1TI_UNS, "vperm_1ti_uns", CONST, altivec_vperm_v1ti_uns) 1741BU_VSX_3 (VPERM_2DI_UNS, "vperm_2di_uns", CONST, altivec_vperm_v2di_uns) 1742BU_VSX_3 (VPERM_4SI_UNS, "vperm_4si_uns", CONST, altivec_vperm_v4si_uns) 1743BU_VSX_3 (VPERM_8HI_UNS, "vperm_8hi_uns", CONST, altivec_vperm_v8hi_uns) 1744BU_VSX_3 (VPERM_16QI_UNS, "vperm_16qi_uns", CONST, altivec_vperm_v16qi_uns) 1745 1746BU_VSX_3 (XXPERMDI_1TI, "xxpermdi_1ti", CONST, vsx_xxpermdi_v1ti) 1747BU_VSX_3 (XXPERMDI_2DF, "xxpermdi_2df", CONST, vsx_xxpermdi_v2df) 1748BU_VSX_3 (XXPERMDI_2DI, "xxpermdi_2di", CONST, vsx_xxpermdi_v2di) 1749BU_VSX_3 (XXPERMDI_4SF, "xxpermdi_4sf", CONST, vsx_xxpermdi_v4sf) 1750BU_VSX_3 (XXPERMDI_4SI, "xxpermdi_4si", CONST, vsx_xxpermdi_v4si) 1751BU_VSX_3 (XXPERMDI_8HI, "xxpermdi_8hi", CONST, vsx_xxpermdi_v8hi) 1752BU_VSX_3 (XXPERMDI_16QI, "xxpermdi_16qi", CONST, vsx_xxpermdi_v16qi) 1753BU_VSX_3 (SET_1TI, "set_1ti", CONST, vsx_set_v1ti) 1754BU_VSX_3 (SET_2DF, "set_2df", CONST, vsx_set_v2df) 1755BU_VSX_3 (SET_2DI, "set_2di", CONST, vsx_set_v2di) 1756BU_VSX_3 (XXSLDWI_2DI, "xxsldwi_2di", CONST, vsx_xxsldwi_v2di) 1757BU_VSX_3 (XXSLDWI_2DF, "xxsldwi_2df", CONST, vsx_xxsldwi_v2df) 1758BU_VSX_3 (XXSLDWI_4SF, "xxsldwi_4sf", CONST, vsx_xxsldwi_v4sf) 1759BU_VSX_3 (XXSLDWI_4SI, "xxsldwi_4si", CONST, vsx_xxsldwi_v4si) 1760BU_VSX_3 (XXSLDWI_8HI, "xxsldwi_8hi", CONST, vsx_xxsldwi_v8hi) 1761BU_VSX_3 (XXSLDWI_16QI, "xxsldwi_16qi", CONST, vsx_xxsldwi_v16qi) 1762 1763/* 2 argument VSX builtins. */ 1764BU_VSX_2 (XVADDDP, "xvadddp", FP, addv2df3) 1765BU_VSX_2 (XVSUBDP, "xvsubdp", FP, subv2df3) 1766BU_VSX_2 (XVMULDP, "xvmuldp", FP, mulv2df3) 1767BU_VSX_2 (XVDIVDP, "xvdivdp", FP, divv2df3) 1768BU_VSX_2 (RECIP_V2DF, "xvrecipdivdp", FP, recipv2df3) 1769BU_VSX_2 (XVMINDP, "xvmindp", CONST, sminv2df3) 1770BU_VSX_2 (XVMAXDP, "xvmaxdp", CONST, smaxv2df3) 1771BU_VSX_2 (XVTDIVDP_FE, "xvtdivdp_fe", CONST, vsx_tdivv2df3_fe) 1772BU_VSX_2 (XVTDIVDP_FG, "xvtdivdp_fg", CONST, vsx_tdivv2df3_fg) 1773BU_VSX_2 (XVCMPEQDP, "xvcmpeqdp", CONST, vector_eqv2df) 1774BU_VSX_2 (XVCMPGTDP, "xvcmpgtdp", CONST, vector_gtv2df) 1775BU_VSX_2 (XVCMPGEDP, "xvcmpgedp", CONST, vector_gev2df) 1776 1777BU_VSX_2 (XVADDSP, "xvaddsp", FP, addv4sf3) 1778BU_VSX_2 (XVSUBSP, "xvsubsp", FP, subv4sf3) 1779BU_VSX_2 (XVMULSP, "xvmulsp", FP, mulv4sf3) 1780BU_VSX_2 (XVDIVSP, "xvdivsp", FP, divv4sf3) 1781BU_VSX_2 (RECIP_V4SF, "xvrecipdivsp", FP, recipv4sf3) 1782BU_VSX_2 (XVMINSP, "xvminsp", CONST, sminv4sf3) 1783BU_VSX_2 (XVMAXSP, "xvmaxsp", CONST, smaxv4sf3) 1784BU_VSX_2 (XVTDIVSP_FE, "xvtdivsp_fe", CONST, vsx_tdivv4sf3_fe) 1785BU_VSX_2 (XVTDIVSP_FG, "xvtdivsp_fg", CONST, vsx_tdivv4sf3_fg) 1786BU_VSX_2 (XVCMPEQSP, "xvcmpeqsp", CONST, vector_eqv4sf) 1787BU_VSX_2 (XVCMPGTSP, "xvcmpgtsp", CONST, vector_gtv4sf) 1788BU_VSX_2 (XVCMPGESP, "xvcmpgesp", CONST, vector_gev4sf) 1789 1790BU_VSX_2 (XSMINDP, "xsmindp", CONST, smindf3) 1791BU_VSX_2 (XSMAXDP, "xsmaxdp", CONST, smaxdf3) 1792BU_VSX_2 (XSTDIVDP_FE, "xstdivdp_fe", CONST, vsx_tdivdf3_fe) 1793BU_VSX_2 (XSTDIVDP_FG, "xstdivdp_fg", CONST, vsx_tdivdf3_fg) 1794BU_VSX_2 (CPSGNDP, "cpsgndp", CONST, vector_copysignv2df3) 1795BU_VSX_2 (CPSGNSP, "cpsgnsp", CONST, vector_copysignv4sf3) 1796 1797BU_VSX_2 (CONCAT_2DF, "concat_2df", CONST, vsx_concat_v2df) 1798BU_VSX_2 (CONCAT_2DI, "concat_2di", CONST, vsx_concat_v2di) 1799BU_VSX_2 (SPLAT_2DF, "splat_2df", CONST, vsx_splat_v2df) 1800BU_VSX_2 (SPLAT_2DI, "splat_2di", CONST, vsx_splat_v2di) 1801BU_VSX_2 (XXMRGHW_4SF, "xxmrghw", CONST, vsx_xxmrghw_v4sf) 1802BU_VSX_2 (XXMRGHW_4SI, "xxmrghw_4si", CONST, vsx_xxmrghw_v4si) 1803BU_VSX_2 (XXMRGLW_4SF, "xxmrglw", CONST, vsx_xxmrglw_v4sf) 1804BU_VSX_2 (XXMRGLW_4SI, "xxmrglw_4si", CONST, vsx_xxmrglw_v4si) 1805BU_VSX_2 (VEC_MERGEL_V2DF, "mergel_2df", CONST, vsx_mergel_v2df) 1806BU_VSX_2 (VEC_MERGEL_V2DI, "mergel_2di", CONST, vsx_mergel_v2di) 1807BU_VSX_2 (VEC_MERGEH_V2DF, "mergeh_2df", CONST, vsx_mergeh_v2df) 1808BU_VSX_2 (VEC_MERGEH_V2DI, "mergeh_2di", CONST, vsx_mergeh_v2di) 1809BU_VSX_2 (XXSPLTD_V2DF, "xxspltd_2df", CONST, vsx_xxspltd_v2df) 1810BU_VSX_2 (XXSPLTD_V2DI, "xxspltd_2di", CONST, vsx_xxspltd_v2di) 1811BU_VSX_2 (DIV_V2DI, "div_2di", CONST, vsx_div_v2di) 1812BU_VSX_2 (UDIV_V2DI, "udiv_2di", CONST, vsx_udiv_v2di) 1813BU_VSX_2 (MUL_V2DI, "mul_2di", CONST, vsx_mul_v2di) 1814 1815BU_VSX_2 (XVCVSXDDP_SCALE, "xvcvsxddp_scale", CONST, vsx_xvcvsxddp_scale) 1816BU_VSX_2 (XVCVUXDDP_SCALE, "xvcvuxddp_scale", CONST, vsx_xvcvuxddp_scale) 1817BU_VSX_2 (XVCVDPSXDS_SCALE, "xvcvdpsxds_scale", CONST, vsx_xvcvdpsxds_scale) 1818BU_VSX_2 (XVCVDPUXDS_SCALE, "xvcvdpuxds_scale", CONST, vsx_xvcvdpuxds_scale) 1819 1820BU_VSX_2 (CMPGE_16QI, "cmpge_16qi", CONST, vector_nltv16qi) 1821BU_VSX_2 (CMPGE_8HI, "cmpge_8hi", CONST, vector_nltv8hi) 1822BU_VSX_2 (CMPGE_4SI, "cmpge_4si", CONST, vector_nltv4si) 1823BU_VSX_2 (CMPGE_2DI, "cmpge_2di", CONST, vector_nltv2di) 1824BU_VSX_2 (CMPGE_U16QI, "cmpge_u16qi", CONST, vector_nltuv16qi) 1825BU_VSX_2 (CMPGE_U8HI, "cmpge_u8hi", CONST, vector_nltuv8hi) 1826BU_VSX_2 (CMPGE_U4SI, "cmpge_u4si", CONST, vector_nltuv4si) 1827BU_VSX_2 (CMPGE_U2DI, "cmpge_u2di", CONST, vector_nltuv2di) 1828 1829BU_VSX_2 (CMPLE_16QI, "cmple_16qi", CONST, vector_ngtv16qi) 1830BU_VSX_2 (CMPLE_8HI, "cmple_8hi", CONST, vector_ngtv8hi) 1831BU_VSX_2 (CMPLE_4SI, "cmple_4si", CONST, vector_ngtv4si) 1832BU_VSX_2 (CMPLE_2DI, "cmple_2di", CONST, vector_ngtv2di) 1833BU_VSX_2 (CMPLE_U16QI, "cmple_u16qi", CONST, vector_ngtuv16qi) 1834BU_VSX_2 (CMPLE_U8HI, "cmple_u8hi", CONST, vector_ngtuv8hi) 1835BU_VSX_2 (CMPLE_U4SI, "cmple_u4si", CONST, vector_ngtuv4si) 1836BU_VSX_2 (CMPLE_U2DI, "cmple_u2di", CONST, vector_ngtuv2di) 1837 1838/* VSX abs builtin functions. */ 1839BU_VSX_A (XVABSDP, "xvabsdp", CONST, absv2df2) 1840BU_VSX_A (XVNABSDP, "xvnabsdp", CONST, vsx_nabsv2df2) 1841BU_VSX_A (XVABSSP, "xvabssp", CONST, absv4sf2) 1842BU_VSX_A (XVNABSSP, "xvnabssp", CONST, vsx_nabsv4sf2) 1843 1844/* 1 argument VSX builtin functions. */ 1845BU_VSX_1 (XVNEGDP, "xvnegdp", CONST, negv2df2) 1846BU_VSX_1 (XVSQRTDP, "xvsqrtdp", CONST, sqrtv2df2) 1847BU_VSX_1 (RSQRT_2DF, "xvrsqrtdp", CONST, rsqrtv2df2) 1848BU_VSX_1 (XVRSQRTEDP, "xvrsqrtedp", CONST, rsqrtev2df2) 1849BU_VSX_1 (XVTSQRTDP_FE, "xvtsqrtdp_fe", CONST, vsx_tsqrtv2df2_fe) 1850BU_VSX_1 (XVTSQRTDP_FG, "xvtsqrtdp_fg", CONST, vsx_tsqrtv2df2_fg) 1851BU_VSX_1 (XVREDP, "xvredp", CONST, vsx_frev2df2) 1852 1853BU_VSX_1 (XVNEGSP, "xvnegsp", CONST, negv4sf2) 1854BU_VSX_1 (XVSQRTSP, "xvsqrtsp", CONST, sqrtv4sf2) 1855BU_VSX_1 (RSQRT_4SF, "xvrsqrtsp", CONST, rsqrtv4sf2) 1856BU_VSX_1 (XVRSQRTESP, "xvrsqrtesp", CONST, rsqrtev4sf2) 1857BU_VSX_1 (XVTSQRTSP_FE, "xvtsqrtsp_fe", CONST, vsx_tsqrtv4sf2_fe) 1858BU_VSX_1 (XVTSQRTSP_FG, "xvtsqrtsp_fg", CONST, vsx_tsqrtv4sf2_fg) 1859BU_VSX_1 (XVRESP, "xvresp", CONST, vsx_frev4sf2) 1860 1861BU_VSX_1 (XSCVDPSP, "xscvdpsp", CONST, vsx_xscvdpsp) 1862BU_VSX_1 (XSCVSPDP, "xscvspdp", CONST, vsx_xscvspdp) 1863BU_VSX_1 (XVCVDPSP, "xvcvdpsp", CONST, vsx_xvcvdpsp) 1864BU_VSX_1 (XVCVSPDP, "xvcvspdp", CONST, vsx_xvcvspdp) 1865BU_VSX_1 (XSTSQRTDP_FE, "xstsqrtdp_fe", CONST, vsx_tsqrtdf2_fe) 1866BU_VSX_1 (XSTSQRTDP_FG, "xstsqrtdp_fg", CONST, vsx_tsqrtdf2_fg) 1867 1868BU_VSX_1 (XVCVDPSXDS, "xvcvdpsxds", CONST, vsx_fix_truncv2dfv2di2) 1869BU_VSX_1 (XVCVDPUXDS, "xvcvdpuxds", CONST, vsx_fixuns_truncv2dfv2di2) 1870BU_VSX_1 (XVCVDPUXDS_UNS, "xvcvdpuxds_uns", CONST, vsx_fixuns_truncv2dfv2di2) 1871BU_VSX_1 (XVCVSXDDP, "xvcvsxddp", CONST, vsx_floatv2div2df2) 1872BU_VSX_1 (XVCVUXDDP, "xvcvuxddp", CONST, vsx_floatunsv2div2df2) 1873BU_VSX_1 (XVCVUXDDP_UNS, "xvcvuxddp_uns", CONST, vsx_floatunsv2div2df2) 1874 1875BU_VSX_1 (XVCVSPSXWS, "xvcvspsxws", CONST, vsx_fix_truncv4sfv4si2) 1876BU_VSX_1 (XVCVSPUXWS, "xvcvspuxws", CONST, vsx_fixuns_truncv4sfv4si2) 1877BU_VSX_1 (XVCVSXWSP, "xvcvsxwsp", CONST, vsx_floatv4siv4sf2) 1878BU_VSX_1 (XVCVUXWSP, "xvcvuxwsp", CONST, vsx_floatunsv4siv4sf2) 1879 1880BU_VSX_1 (XVCVDPSXWS, "xvcvdpsxws", CONST, vsx_xvcvdpsxws) 1881BU_VSX_1 (XVCVDPUXWS, "xvcvdpuxws", CONST, vsx_xvcvdpuxws) 1882BU_VSX_1 (XVCVSXWDP, "xvcvsxwdp", CONST, vsx_xvcvsxwdp) 1883BU_VSX_1 (XVCVUXWDP, "xvcvuxwdp", CONST, vsx_xvcvuxwdp) 1884BU_VSX_1 (XVRDPI, "xvrdpi", CONST, vsx_xvrdpi) 1885BU_VSX_1 (XVRDPIC, "xvrdpic", CONST, vsx_xvrdpic) 1886BU_VSX_1 (XVRDPIM, "xvrdpim", CONST, vsx_floorv2df2) 1887BU_VSX_1 (XVRDPIP, "xvrdpip", CONST, vsx_ceilv2df2) 1888BU_VSX_1 (XVRDPIZ, "xvrdpiz", CONST, vsx_btruncv2df2) 1889 1890BU_VSX_1 (XVCVSPSXDS, "xvcvspsxds", CONST, vsx_xvcvspsxds) 1891BU_VSX_1 (XVCVSPUXDS, "xvcvspuxds", CONST, vsx_xvcvspuxds) 1892BU_VSX_1 (XVCVSXDSP, "xvcvsxdsp", CONST, vsx_xvcvsxdsp) 1893BU_VSX_1 (XVCVUXDSP, "xvcvuxdsp", CONST, vsx_xvcvuxdsp) 1894 1895BU_VSX_1 (XVCVSXWSP_V4SF, "vsx_xvcvsxwsp", CONST, vsx_xvcvsxwsp) 1896BU_VSX_1 (XVCVUXWSP_V4SF, "vsx_xvcvuxwsp", CONST, vsx_xvcvuxwsp) 1897BU_VSX_1 (FLOATE_V2DI, "floate_v2di", CONST, floatev2di) 1898BU_VSX_1 (FLOATE_V2DF, "floate_v2df", CONST, floatev2df) 1899BU_VSX_1 (FLOATO_V2DI, "floato_v2di", CONST, floatov2di) 1900BU_VSX_1 (FLOATO_V2DF, "floato_v2df", CONST, floatov2df) 1901BU_VSX_1 (UNS_FLOATO_V2DI, "uns_floato_v2di", CONST, unsfloatov2di) 1902BU_VSX_1 (UNS_FLOATE_V2DI, "uns_floate_v2di", CONST, unsfloatev2di) 1903 1904BU_VSX_1 (XVRSPI, "xvrspi", CONST, vsx_xvrspi) 1905BU_VSX_1 (XVRSPIC, "xvrspic", CONST, vsx_xvrspic) 1906BU_VSX_1 (XVRSPIM, "xvrspim", CONST, vsx_floorv4sf2) 1907BU_VSX_1 (XVRSPIP, "xvrspip", CONST, vsx_ceilv4sf2) 1908BU_VSX_1 (XVRSPIZ, "xvrspiz", CONST, vsx_btruncv4sf2) 1909 1910BU_VSX_1 (XSRDPI, "xsrdpi", CONST, vsx_xsrdpi) 1911BU_VSX_1 (XSRDPIC, "xsrdpic", CONST, vsx_xsrdpic) 1912BU_VSX_1 (XSRDPIM, "xsrdpim", CONST, floordf2) 1913BU_VSX_1 (XSRDPIP, "xsrdpip", CONST, ceildf2) 1914BU_VSX_1 (XSRDPIZ, "xsrdpiz", CONST, btruncdf2) 1915 1916BU_VSX_1 (DOUBLEE_V4SI, "doublee_v4si", CONST, doubleev4si2) 1917BU_VSX_1 (DOUBLEE_V4SF, "doublee_v4sf", CONST, doubleev4sf2) 1918BU_VSX_1 (UNS_DOUBLEE_V4SI, "uns_doublee_v4si", CONST, unsdoubleev4si2) 1919BU_VSX_1 (DOUBLEO_V4SI, "doubleo_v4si", CONST, doubleov4si2) 1920BU_VSX_1 (DOUBLEO_V4SF, "doubleo_v4sf", CONST, doubleov4sf2) 1921BU_VSX_1 (UNS_DOUBLEO_V4SI, "uns_doubleo_v4si", CONST, unsdoubleov4si2) 1922BU_VSX_1 (DOUBLEH_V4SI, "doubleh_v4si", CONST, doublehv4si2) 1923BU_VSX_1 (DOUBLEH_V4SF, "doubleh_v4sf", CONST, doublehv4sf2) 1924BU_VSX_1 (UNS_DOUBLEH_V4SI, "uns_doubleh_v4si", CONST, unsdoublehv4si2) 1925BU_VSX_1 (DOUBLEL_V4SI, "doublel_v4si", CONST, doublelv4si2) 1926BU_VSX_1 (DOUBLEL_V4SF, "doublel_v4sf", CONST, doublelv4sf2) 1927BU_VSX_1 (UNS_DOUBLEL_V4SI, "uns_doublel_v4si", CONST, unsdoublelv4si2) 1928 1929BU_VSX_1 (VEC_VSIGNED_V4SF, "vsigned_v4sf", CONST, vsx_xvcvspsxws) 1930BU_VSX_1 (VEC_VSIGNED_V2DF, "vsigned_v2df", CONST, vsx_xvcvdpsxds) 1931BU_VSX_1 (VEC_VSIGNEDE_V2DF, "vsignede_v2df", CONST, vsignede_v2df) 1932BU_VSX_1 (VEC_VSIGNEDO_V2DF, "vsignedo_v2df", CONST, vsignedo_v2df) 1933 1934BU_VSX_1 (VEC_VUNSIGNED_V4SF, "vunsigned_v4sf", CONST, vsx_xvcvspsxws) 1935BU_VSX_1 (VEC_VUNSIGNED_V2DF, "vunsigned_v2df", CONST, vsx_xvcvdpsxds) 1936BU_VSX_1 (VEC_VUNSIGNEDE_V2DF, "vunsignede_v2df", CONST, vunsignede_v2df) 1937BU_VSX_1 (VEC_VUNSIGNEDO_V2DF, "vunsignedo_v2df", CONST, vunsignedo_v2df) 1938 1939/* VSX predicate functions. */ 1940BU_VSX_P (XVCMPEQSP_P, "xvcmpeqsp_p", CONST, vector_eq_v4sf_p) 1941BU_VSX_P (XVCMPGESP_P, "xvcmpgesp_p", CONST, vector_ge_v4sf_p) 1942BU_VSX_P (XVCMPGTSP_P, "xvcmpgtsp_p", CONST, vector_gt_v4sf_p) 1943BU_VSX_P (XVCMPEQDP_P, "xvcmpeqdp_p", CONST, vector_eq_v2df_p) 1944BU_VSX_P (XVCMPGEDP_P, "xvcmpgedp_p", CONST, vector_ge_v2df_p) 1945BU_VSX_P (XVCMPGTDP_P, "xvcmpgtdp_p", CONST, vector_gt_v2df_p) 1946 1947/* VSX builtins that are handled as special cases. */ 1948BU_VSX_X (LXSDX, "lxsdx", PURE) 1949BU_VSX_X (LXVD2X_V1TI, "lxvd2x_v1ti", PURE) 1950BU_VSX_X (LXVD2X_V2DF, "lxvd2x_v2df", PURE) 1951BU_VSX_X (LXVD2X_V2DI, "lxvd2x_v2di", PURE) 1952BU_VSX_X (LXVDSX, "lxvdsx", PURE) 1953BU_VSX_X (LXVW4X_V4SF, "lxvw4x_v4sf", PURE) 1954BU_VSX_X (LXVW4X_V4SI, "lxvw4x_v4si", PURE) 1955BU_VSX_X (LXVW4X_V8HI, "lxvw4x_v8hi", PURE) 1956BU_VSX_X (LXVW4X_V16QI, "lxvw4x_v16qi", PURE) 1957BU_VSX_X (STXSDX, "stxsdx", MEM) 1958BU_VSX_X (STXVD2X_V1TI, "stxvd2x_v1ti", MEM) 1959BU_VSX_X (STXVD2X_V2DF, "stxvd2x_v2df", MEM) 1960BU_VSX_X (STXVD2X_V2DI, "stxvd2x_v2di", MEM) 1961BU_VSX_X (STXVW4X_V4SF, "stxvw4x_v4sf", MEM) 1962BU_VSX_X (STXVW4X_V4SI, "stxvw4x_v4si", MEM) 1963BU_VSX_X (STXVW4X_V8HI, "stxvw4x_v8hi", MEM) 1964BU_VSX_X (STXVW4X_V16QI, "stxvw4x_v16qi", MEM) 1965BU_VSX_X (LD_ELEMREV_V1TI, "ld_elemrev_v1ti", PURE) 1966BU_VSX_X (LD_ELEMREV_V2DF, "ld_elemrev_v2df", PURE) 1967BU_VSX_X (LD_ELEMREV_V2DI, "ld_elemrev_v2di", PURE) 1968BU_VSX_X (LD_ELEMREV_V4SF, "ld_elemrev_v4sf", PURE) 1969BU_VSX_X (LD_ELEMREV_V4SI, "ld_elemrev_v4si", PURE) 1970BU_VSX_X (LD_ELEMREV_V8HI, "ld_elemrev_v8hi", PURE) 1971BU_VSX_X (LD_ELEMREV_V16QI, "ld_elemrev_v16qi", PURE) 1972BU_VSX_X (ST_ELEMREV_V1TI, "st_elemrev_v1ti", MEM) 1973BU_VSX_X (ST_ELEMREV_V2DF, "st_elemrev_v2df", MEM) 1974BU_VSX_X (ST_ELEMREV_V2DI, "st_elemrev_v2di", MEM) 1975BU_VSX_X (ST_ELEMREV_V4SF, "st_elemrev_v4sf", MEM) 1976BU_VSX_X (ST_ELEMREV_V4SI, "st_elemrev_v4si", MEM) 1977BU_VSX_X (ST_ELEMREV_V8HI, "st_elemrev_v8hi", MEM) 1978BU_VSX_X (ST_ELEMREV_V16QI, "st_elemrev_v16qi", MEM) 1979BU_VSX_X (XSABSDP, "xsabsdp", CONST) 1980BU_VSX_X (XSADDDP, "xsadddp", FP) 1981BU_VSX_X (XSCMPODP, "xscmpodp", FP) 1982BU_VSX_X (XSCMPUDP, "xscmpudp", FP) 1983BU_VSX_X (XSCVDPSXDS, "xscvdpsxds", FP) 1984BU_VSX_X (XSCVDPSXWS, "xscvdpsxws", FP) 1985BU_VSX_X (XSCVDPUXDS, "xscvdpuxds", FP) 1986BU_VSX_X (XSCVDPUXWS, "xscvdpuxws", FP) 1987BU_VSX_X (XSCVSXDDP, "xscvsxddp", FP) 1988BU_VSX_X (XSCVUXDDP, "xscvuxddp", FP) 1989BU_VSX_X (XSDIVDP, "xsdivdp", FP) 1990BU_VSX_X (XSMADDADP, "xsmaddadp", FP) 1991BU_VSX_X (XSMADDMDP, "xsmaddmdp", FP) 1992BU_VSX_X (XSMOVDP, "xsmovdp", FP) 1993BU_VSX_X (XSMSUBADP, "xsmsubadp", FP) 1994BU_VSX_X (XSMSUBMDP, "xsmsubmdp", FP) 1995BU_VSX_X (XSMULDP, "xsmuldp", FP) 1996BU_VSX_X (XSNABSDP, "xsnabsdp", FP) 1997BU_VSX_X (XSNEGDP, "xsnegdp", FP) 1998BU_VSX_X (XSNMADDADP, "xsnmaddadp", FP) 1999BU_VSX_X (XSNMADDMDP, "xsnmaddmdp", FP) 2000BU_VSX_X (XSNMSUBADP, "xsnmsubadp", FP) 2001BU_VSX_X (XSNMSUBMDP, "xsnmsubmdp", FP) 2002BU_VSX_X (XSSUBDP, "xssubdp", FP) 2003BU_VSX_X (VEC_INIT_V1TI, "vec_init_v1ti", CONST) 2004BU_VSX_X (VEC_INIT_V2DF, "vec_init_v2df", CONST) 2005BU_VSX_X (VEC_INIT_V2DI, "vec_init_v2di", CONST) 2006BU_VSX_X (VEC_SET_V1TI, "vec_set_v1ti", CONST) 2007BU_VSX_X (VEC_SET_V2DF, "vec_set_v2df", CONST) 2008BU_VSX_X (VEC_SET_V2DI, "vec_set_v2di", CONST) 2009BU_VSX_X (VEC_EXT_V1TI, "vec_ext_v1ti", CONST) 2010BU_VSX_X (VEC_EXT_V2DF, "vec_ext_v2df", CONST) 2011BU_VSX_X (VEC_EXT_V2DI, "vec_ext_v2di", CONST) 2012 2013/* VSX overloaded builtins, add the overloaded functions not present in 2014 Altivec. */ 2015 2016/* 3 argument VSX overloaded builtins. */ 2017BU_VSX_OVERLOAD_3 (MSUB, "msub") 2018BU_VSX_OVERLOAD_3 (NMADD, "nmadd") 2019BU_VSX_OVERLOAD_3V (XXPERMDI, "xxpermdi") 2020BU_VSX_OVERLOAD_3V (XXSLDWI, "xxsldwi") 2021 2022/* 2 argument VSX overloaded builtin functions. */ 2023BU_VSX_OVERLOAD_2 (DIV, "div") 2024BU_VSX_OVERLOAD_2 (XXMRGHW, "xxmrghw") 2025BU_VSX_OVERLOAD_2 (XXMRGLW, "xxmrglw") 2026BU_VSX_OVERLOAD_2 (XXSPLTD, "xxspltd") 2027BU_VSX_OVERLOAD_2 (XXSPLTW, "xxspltw") 2028 2029/* 1 argument VSX overloaded builtin functions. */ 2030BU_VSX_OVERLOAD_1 (DOUBLE, "double") 2031BU_VSX_OVERLOAD_1 (DOUBLEE, "doublee") 2032BU_VSX_OVERLOAD_1 (UNS_DOUBLEE, "uns_doublee") 2033BU_VSX_OVERLOAD_1 (DOUBLEO, "doubleo") 2034BU_VSX_OVERLOAD_1 (UNS_DOUBLEO, "uns_doubleo") 2035BU_VSX_OVERLOAD_1 (DOUBLEH, "doubleh") 2036BU_VSX_OVERLOAD_1 (UNS_DOUBLEH, "uns_doubleh") 2037BU_VSX_OVERLOAD_1 (DOUBLEL, "doublel") 2038BU_VSX_OVERLOAD_1 (UNS_DOUBLEL, "uns_doublel") 2039BU_VSX_OVERLOAD_1 (FLOAT, "float") 2040BU_VSX_OVERLOAD_1 (FLOATE, "floate") 2041BU_VSX_OVERLOAD_1 (FLOATO, "floato") 2042 2043BU_VSX_OVERLOAD_1 (VSIGNED, "vsigned") 2044BU_VSX_OVERLOAD_1 (VSIGNEDE, "vsignede") 2045BU_VSX_OVERLOAD_1 (VSIGNEDO, "vsignedo") 2046 2047BU_VSX_OVERLOAD_1 (VUNSIGNED, "vunsigned") 2048BU_VSX_OVERLOAD_1 (VUNSIGNEDE, "vunsignede") 2049BU_VSX_OVERLOAD_1 (VUNSIGNEDO, "vunsignedo") 2050 2051/* VSX builtins that are handled as special cases. */ 2052 2053 2054/* NON-TRADITIONAL BEHAVIOR HERE: Besides introducing the 2055 __builtin_vec_ld and __builtin_vec_st built-in functions, 2056 the VSX_BUILTIN_VEC_LD and VSX_BUILTIN_VEC_ST symbolic constants 2057 introduced below are also affiliated with the __builtin_vec_vsx_ld 2058 and __builtin_vec_vsx_st functions respectively. This unnatural 2059 binding is formed with explicit calls to the def_builtin function 2060 found in rs6000.c. */ 2061BU_VSX_OVERLOAD_X (LD, "ld") 2062BU_VSX_OVERLOAD_X (ST, "st") 2063BU_VSX_OVERLOAD_X (XL, "xl") 2064BU_VSX_OVERLOAD_X (XL_BE, "xl_be") 2065BU_VSX_OVERLOAD_X (XST, "xst") 2066BU_VSX_OVERLOAD_X (XST_BE, "xst_be") 2067 2068 2069/* 2 argument CMPB instructions added in ISA 2.05. */ 2070BU_P6_2 (CMPB_32, "cmpb_32", CONST, cmpbsi3) 2071BU_P6_64BIT_2 (CMPB, "cmpb", CONST, cmpbdi3) 2072 2073/* 1 argument VSX instructions added in ISA 2.07. */ 2074BU_P8V_VSX_1 (XSCVSPDPN, "xscvspdpn", CONST, vsx_xscvspdpn) 2075BU_P8V_VSX_1 (XSCVDPSPN, "xscvdpspn", CONST, vsx_xscvdpspn) 2076BU_P8V_VSX_1 (REVB_V1TI, "revb_v1ti", CONST, revb_v1ti) 2077BU_P8V_VSX_1 (REVB_V2DI, "revb_v2di", CONST, revb_v2di) 2078BU_P8V_VSX_1 (REVB_V4SI, "revb_v4si", CONST, revb_v4si) 2079BU_P8V_VSX_1 (REVB_V8HI, "revb_v8hi", CONST, revb_v8hi) 2080BU_P8V_VSX_1 (REVB_V16QI, "revb_v16qi", CONST, revb_v16qi) 2081BU_P8V_VSX_1 (REVB_V2DF, "revb_v2df", CONST, revb_v2df) 2082BU_P8V_VSX_1 (REVB_V4SF, "revb_v4sf", CONST, revb_v4sf) 2083 2084/* Power 8 Altivec NEG functions. */ 2085BU_P8V_AV_1 (NEG_V2DI, "neg_v2di", CONST, negv2di2) 2086BU_P8V_AV_1 (NEG_V4SI, "neg_v4si", CONST, negv4si2) 2087BU_P8V_AV_1 (NEG_V8HI, "neg_v8hi", CONST, negv8hi2) 2088BU_P8V_AV_1 (NEG_V16QI, "neg_v16qi", CONST, negv16qi2) 2089BU_P8V_AV_1 (NEG_V4SF, "neg_v4sf", CONST, negv4sf2) 2090BU_P8V_AV_1 (NEG_V2DF, "neg_v2df", CONST, negv2df2) 2091 2092 2093/* 2 argument VSX instructions added in ISA 2.07. */ 2094BU_P8V_VSX_2 (FLOAT2_V2DF, "float2_v2df", CONST, float2_v2df) 2095BU_P8V_VSX_2 (FLOAT2_V2DI, "float2_v2di", CONST, float2_v2di) 2096BU_P8V_VSX_2 (UNS_FLOAT2_V2DI, "uns_float2_v2di", CONST, uns_float2_v2di) 2097BU_P8V_VSX_2 (VEC_VSIGNED2_V2DF, "vsigned2_v2df", CONST, vsigned2_v2df) 2098BU_P8V_VSX_2 (VEC_VUNSIGNED2_V2DF, "vunsigned2_v2df", CONST, vunsigned2_v2df) 2099 2100 2101/* 1 argument altivec instructions added in ISA 2.07. */ 2102BU_P8V_AV_1 (ABS_V2DI, "abs_v2di", CONST, absv2di2) 2103BU_P8V_AV_1 (VUPKHSW, "vupkhsw", CONST, altivec_vupkhsw) 2104BU_P8V_AV_1 (VUPKLSW, "vupklsw", CONST, altivec_vupklsw) 2105BU_P8V_AV_1 (VCLZB, "vclzb", CONST, clzv16qi2) 2106BU_P8V_AV_1 (VCLZH, "vclzh", CONST, clzv8hi2) 2107BU_P8V_AV_1 (VCLZW, "vclzw", CONST, clzv4si2) 2108BU_P8V_AV_1 (VCLZD, "vclzd", CONST, clzv2di2) 2109BU_P8V_AV_1 (VPOPCNTB, "vpopcntb", CONST, popcountv16qi2) 2110BU_P8V_AV_1 (VPOPCNTH, "vpopcnth", CONST, popcountv8hi2) 2111BU_P8V_AV_1 (VPOPCNTW, "vpopcntw", CONST, popcountv4si2) 2112BU_P8V_AV_1 (VPOPCNTD, "vpopcntd", CONST, popcountv2di2) 2113BU_P8V_AV_1 (VPOPCNTUB, "vpopcntub", CONST, popcountv16qi2) 2114BU_P8V_AV_1 (VPOPCNTUH, "vpopcntuh", CONST, popcountv8hi2) 2115BU_P8V_AV_1 (VPOPCNTUW, "vpopcntuw", CONST, popcountv4si2) 2116BU_P8V_AV_1 (VPOPCNTUD, "vpopcntud", CONST, popcountv2di2) 2117BU_P8V_AV_1 (VGBBD, "vgbbd", CONST, p8v_vgbbd) 2118 2119/* 2 argument altivec instructions added in ISA 2.07. */ 2120BU_P8V_AV_2 (VADDCUQ, "vaddcuq", CONST, altivec_vaddcuq) 2121BU_P8V_AV_2 (VADDUDM, "vaddudm", CONST, addv2di3) 2122BU_P8V_AV_2 (VADDUQM, "vadduqm", CONST, altivec_vadduqm) 2123BU_P8V_AV_2 (VMINSD, "vminsd", CONST, sminv2di3) 2124BU_P8V_AV_2 (VMAXSD, "vmaxsd", CONST, smaxv2di3) 2125BU_P8V_AV_2 (VMINUD, "vminud", CONST, uminv2di3) 2126BU_P8V_AV_2 (VMAXUD, "vmaxud", CONST, umaxv2di3) 2127BU_P8V_AV_2 (VMRGEW_V2DI, "vmrgew_v2di", CONST, p8_vmrgew_v2di) 2128BU_P8V_AV_2 (VMRGEW_V2DF, "vmrgew_v2df", CONST, p8_vmrgew_v2df) 2129BU_P8V_AV_2 (VMRGEW_V4SI, "vmrgew_v4si", CONST, p8_vmrgew_v4si) 2130BU_P8V_AV_2 (VMRGEW_V4SF, "vmrgew_v4sf", CONST, p8_vmrgew_v4sf) 2131BU_P8V_AV_2 (VMRGOW_V4SI, "vmrgow_v4si", CONST, p8_vmrgow_v4si) 2132BU_P8V_AV_2 (VMRGOW_V4SF, "vmrgow_v4sf", CONST, p8_vmrgow_v4sf) 2133BU_P8V_AV_2 (VMRGOW_V2DI, "vmrgow_v2di", CONST, p8_vmrgow_v2di) 2134BU_P8V_AV_2 (VMRGOW_V2DF, "vmrgow_v2df", CONST, p8_vmrgow_v2df) 2135BU_P8V_AV_2 (VBPERMQ, "vbpermq", CONST, altivec_vbpermq) 2136BU_P8V_AV_2 (VBPERMQ2, "vbpermq2", CONST, altivec_vbpermq2) 2137BU_P8V_AV_2 (VPKUDUM, "vpkudum", CONST, altivec_vpkudum) 2138BU_P8V_AV_2 (VPKSDSS, "vpksdss", CONST, altivec_vpksdss) 2139BU_P8V_AV_2 (VPKUDUS, "vpkudus", CONST, altivec_vpkudus) 2140BU_P8V_AV_2 (VPKSDUS, "vpksdus", CONST, altivec_vpksdus) 2141BU_P8V_AV_2 (VPMSUMB, "vpmsumb", CONST, crypto_vpmsumb) 2142BU_P8V_AV_2 (VPMSUMH, "vpmsumh", CONST, crypto_vpmsumh) 2143BU_P8V_AV_2 (VPMSUMW, "vpmsumw", CONST, crypto_vpmsumw) 2144BU_P8V_AV_2 (VPMSUMD, "vpmsumd", CONST, crypto_vpmsumd) 2145BU_P8V_AV_2 (VRLD, "vrld", CONST, vrotlv2di3) 2146BU_P8V_AV_2 (VSLD, "vsld", CONST, vashlv2di3) 2147BU_P8V_AV_2 (VSRD, "vsrd", CONST, vlshrv2di3) 2148BU_P8V_AV_2 (VSRAD, "vsrad", CONST, vashrv2di3) 2149BU_P8V_AV_2 (VSUBCUQ, "vsubcuq", CONST, altivec_vsubcuq) 2150BU_P8V_AV_2 (VSUBUDM, "vsubudm", CONST, subv2di3) 2151BU_P8V_AV_2 (VSUBUQM, "vsubuqm", CONST, altivec_vsubuqm) 2152 2153BU_P8V_AV_2 (EQV_V16QI_UNS, "eqv_v16qi_uns",CONST, eqvv16qi3) 2154BU_P8V_AV_2 (EQV_V16QI, "eqv_v16qi", CONST, eqvv16qi3) 2155BU_P8V_AV_2 (EQV_V8HI_UNS, "eqv_v8hi_uns", CONST, eqvv8hi3) 2156BU_P8V_AV_2 (EQV_V8HI, "eqv_v8hi", CONST, eqvv8hi3) 2157BU_P8V_AV_2 (EQV_V4SI_UNS, "eqv_v4si_uns", CONST, eqvv4si3) 2158BU_P8V_AV_2 (EQV_V4SI, "eqv_v4si", CONST, eqvv4si3) 2159BU_P8V_AV_2 (EQV_V2DI_UNS, "eqv_v2di_uns", CONST, eqvv2di3) 2160BU_P8V_AV_2 (EQV_V2DI, "eqv_v2di", CONST, eqvv2di3) 2161BU_P8V_AV_2 (EQV_V1TI_UNS, "eqv_v1ti_uns", CONST, eqvv1ti3) 2162BU_P8V_AV_2 (EQV_V1TI, "eqv_v1ti", CONST, eqvv1ti3) 2163BU_P8V_AV_2 (EQV_V4SF, "eqv_v4sf", CONST, eqvv4sf3) 2164BU_P8V_AV_2 (EQV_V2DF, "eqv_v2df", CONST, eqvv2df3) 2165 2166BU_P8V_AV_2 (NAND_V16QI_UNS, "nand_v16qi_uns", CONST, nandv16qi3) 2167BU_P8V_AV_2 (NAND_V16QI, "nand_v16qi", CONST, nandv16qi3) 2168BU_P8V_AV_2 (NAND_V8HI_UNS, "nand_v8hi_uns", CONST, nandv8hi3) 2169BU_P8V_AV_2 (NAND_V8HI, "nand_v8hi", CONST, nandv8hi3) 2170BU_P8V_AV_2 (NAND_V4SI_UNS, "nand_v4si_uns", CONST, nandv4si3) 2171BU_P8V_AV_2 (NAND_V4SI, "nand_v4si", CONST, nandv4si3) 2172BU_P8V_AV_2 (NAND_V2DI_UNS, "nand_v2di_uns", CONST, nandv2di3) 2173BU_P8V_AV_2 (NAND_V2DI, "nand_v2di", CONST, nandv2di3) 2174BU_P8V_AV_2 (NAND_V1TI_UNS, "nand_v1ti_uns", CONST, nandv1ti3) 2175BU_P8V_AV_2 (NAND_V1TI, "nand_v1ti", CONST, nandv1ti3) 2176BU_P8V_AV_2 (NAND_V4SF, "nand_v4sf", CONST, nandv4sf3) 2177BU_P8V_AV_2 (NAND_V2DF, "nand_v2df", CONST, nandv2df3) 2178 2179BU_P8V_AV_2 (ORC_V16QI_UNS, "orc_v16qi_uns",CONST, orcv16qi3) 2180BU_P8V_AV_2 (ORC_V16QI, "orc_v16qi", CONST, orcv16qi3) 2181BU_P8V_AV_2 (ORC_V8HI_UNS, "orc_v8hi_uns", CONST, orcv8hi3) 2182BU_P8V_AV_2 (ORC_V8HI, "orc_v8hi", CONST, orcv8hi3) 2183BU_P8V_AV_2 (ORC_V4SI_UNS, "orc_v4si_uns", CONST, orcv4si3) 2184BU_P8V_AV_2 (ORC_V4SI, "orc_v4si", CONST, orcv4si3) 2185BU_P8V_AV_2 (ORC_V2DI_UNS, "orc_v2di_uns", CONST, orcv2di3) 2186BU_P8V_AV_2 (ORC_V2DI, "orc_v2di", CONST, orcv2di3) 2187BU_P8V_AV_2 (ORC_V1TI_UNS, "orc_v1ti_uns", CONST, orcv1ti3) 2188BU_P8V_AV_2 (ORC_V1TI, "orc_v1ti", CONST, orcv1ti3) 2189BU_P8V_AV_2 (ORC_V4SF, "orc_v4sf", CONST, orcv4sf3) 2190BU_P8V_AV_2 (ORC_V2DF, "orc_v2df", CONST, orcv2df3) 2191 2192/* 3 argument altivec instructions added in ISA 2.07. */ 2193BU_P8V_AV_3 (VADDEUQM, "vaddeuqm", CONST, altivec_vaddeuqm) 2194BU_P8V_AV_3 (VADDECUQ, "vaddecuq", CONST, altivec_vaddecuq) 2195BU_P8V_AV_3 (VSUBEUQM, "vsubeuqm", CONST, altivec_vsubeuqm) 2196BU_P8V_AV_3 (VSUBECUQ, "vsubecuq", CONST, altivec_vsubecuq) 2197 2198/* Vector comparison instructions added in ISA 2.07. */ 2199BU_P8V_AV_2 (VCMPEQUD, "vcmpequd", CONST, vector_eqv2di) 2200BU_P8V_AV_2 (VCMPGTSD, "vcmpgtsd", CONST, vector_gtv2di) 2201BU_P8V_AV_2 (VCMPGTUD, "vcmpgtud", CONST, vector_gtuv2di) 2202 2203/* Vector comparison predicate instructions added in ISA 2.07. */ 2204BU_P8V_AV_P (VCMPEQUD_P, "vcmpequd_p", CONST, vector_eq_v2di_p) 2205BU_P8V_AV_P (VCMPGTSD_P, "vcmpgtsd_p", CONST, vector_gt_v2di_p) 2206BU_P8V_AV_P (VCMPGTUD_P, "vcmpgtud_p", CONST, vector_gtu_v2di_p) 2207 2208BU_P8V_AV_3 (VPERMXOR, "vpermxor", CONST, altivec_vpermxor) 2209 2210/* ISA 2.05 overloaded 2 argument functions. */ 2211BU_P6_OVERLOAD_2 (CMPB, "cmpb") 2212 2213/* ISA 2.07 vector overloaded 1 argument functions. */ 2214BU_P8V_OVERLOAD_1 (VUPKHSW, "vupkhsw") 2215BU_P8V_OVERLOAD_1 (VUPKLSW, "vupklsw") 2216BU_P8V_OVERLOAD_1 (VCLZ, "vclz") 2217BU_P8V_OVERLOAD_1 (VCLZB, "vclzb") 2218BU_P8V_OVERLOAD_1 (VCLZH, "vclzh") 2219BU_P8V_OVERLOAD_1 (VCLZW, "vclzw") 2220BU_P8V_OVERLOAD_1 (VCLZD, "vclzd") 2221BU_P8V_OVERLOAD_1 (VPOPCNT, "vpopcnt") 2222BU_P8V_OVERLOAD_1 (VPOPCNTB, "vpopcntb") 2223BU_P8V_OVERLOAD_1 (VPOPCNTH, "vpopcnth") 2224BU_P8V_OVERLOAD_1 (VPOPCNTW, "vpopcntw") 2225BU_P8V_OVERLOAD_1 (VPOPCNTD, "vpopcntd") 2226BU_P8V_OVERLOAD_1 (VPOPCNTU, "vpopcntu") 2227BU_P8V_OVERLOAD_1 (VPOPCNTUB, "vpopcntub") 2228BU_P8V_OVERLOAD_1 (VPOPCNTUH, "vpopcntuh") 2229BU_P8V_OVERLOAD_1 (VPOPCNTUW, "vpopcntuw") 2230BU_P8V_OVERLOAD_1 (VPOPCNTUD, "vpopcntud") 2231BU_P8V_OVERLOAD_1 (VGBBD, "vgbbd") 2232BU_P8V_OVERLOAD_1 (REVB, "revb") 2233BU_P8V_OVERLOAD_1 (NEG, "neg") 2234 2235/* ISA 2.07 vector overloaded 2 argument functions. */ 2236BU_P8V_OVERLOAD_2 (EQV, "eqv") 2237BU_P8V_OVERLOAD_2 (NAND, "nand") 2238BU_P8V_OVERLOAD_2 (ORC, "orc") 2239BU_P8V_OVERLOAD_2 (VADDCUQ, "vaddcuq") 2240BU_P8V_OVERLOAD_2 (VADDUDM, "vaddudm") 2241BU_P8V_OVERLOAD_2 (VADDUQM, "vadduqm") 2242BU_P8V_OVERLOAD_2 (VBPERMQ, "vbpermq") 2243BU_P8V_OVERLOAD_2 (VMAXSD, "vmaxsd") 2244BU_P8V_OVERLOAD_2 (VMAXUD, "vmaxud") 2245BU_P8V_OVERLOAD_2 (VMINSD, "vminsd") 2246BU_P8V_OVERLOAD_2 (VMINUD, "vminud") 2247BU_P8V_OVERLOAD_2 (VMRGEW, "vmrgew") 2248BU_P8V_OVERLOAD_2 (VMRGOW, "vmrgow") 2249BU_P8V_OVERLOAD_2 (VPKSDSS, "vpksdss") 2250BU_P8V_OVERLOAD_2 (VPKSDUS, "vpksdus") 2251BU_P8V_OVERLOAD_2 (VPKUDUM, "vpkudum") 2252BU_P8V_OVERLOAD_2 (VPKUDUS, "vpkudus") 2253BU_P8V_OVERLOAD_2 (VPMSUM, "vpmsum") 2254BU_P8V_OVERLOAD_2 (VRLD, "vrld") 2255BU_P8V_OVERLOAD_2 (VSLD, "vsld") 2256BU_P8V_OVERLOAD_2 (VSRAD, "vsrad") 2257BU_P8V_OVERLOAD_2 (VSRD, "vsrd") 2258BU_P8V_OVERLOAD_2 (VSUBCUQ, "vsubcuq") 2259BU_P8V_OVERLOAD_2 (VSUBUDM, "vsubudm") 2260BU_P8V_OVERLOAD_2 (VSUBUQM, "vsubuqm") 2261BU_P8V_OVERLOAD_2 (FLOAT2, "float2") 2262BU_P8V_OVERLOAD_2 (UNS_FLOAT2, "uns_float2") 2263BU_P8V_OVERLOAD_2 (VSIGNED2, "vsigned2") 2264BU_P8V_OVERLOAD_2 (VUNSIGNED2, "vunsigned2") 2265 2266/* ISA 2.07 vector overloaded 3 argument functions. */ 2267BU_P8V_OVERLOAD_3 (VADDECUQ, "vaddecuq") 2268BU_P8V_OVERLOAD_3 (VADDEUQM, "vaddeuqm") 2269BU_P8V_OVERLOAD_3 (VSUBECUQ, "vsubecuq") 2270BU_P8V_OVERLOAD_3 (VSUBEUQM, "vsubeuqm") 2271BU_P8V_OVERLOAD_3 (VPERMXOR, "vpermxor") 2272 2273/* ISA 3.0 vector overloaded 2-argument functions. */ 2274BU_P9V_AV_2 (VSLV, "vslv", CONST, vslv) 2275BU_P9V_AV_2 (VSRV, "vsrv", CONST, vsrv) 2276BU_P9V_AV_2 (CONVERT_4F32_8I16, "convert_4f32_8i16", CONST, convert_4f32_8i16) 2277BU_P9V_AV_2 (CONVERT_4F32_8F16, "convert_4f32_8f16", CONST, convert_4f32_8f16) 2278 2279BU_P9V_AV_2 (VFIRSTMATCHINDEX_V16QI, "first_match_index_v16qi", 2280 CONST, first_match_index_v16qi) 2281BU_P9V_AV_2 (VFIRSTMATCHINDEX_V8HI, "first_match_index_v8hi", 2282 CONST, first_match_index_v8hi) 2283BU_P9V_AV_2 (VFIRSTMATCHINDEX_V4SI, "first_match_index_v4si", 2284 CONST, first_match_index_v4si) 2285BU_P9V_AV_2 (VFIRSTMATCHOREOSINDEX_V16QI, "first_match_or_eos_index_v16qi", 2286 CONST, first_match_or_eos_index_v16qi) 2287BU_P9V_AV_2 (VFIRSTMATCHOREOSINDEX_V8HI, "first_match_or_eos_index_v8hi", 2288 CONST, first_match_or_eos_index_v8hi) 2289BU_P9V_AV_2 (VFIRSTMATCHOREOSINDEX_V4SI, "first_match_or_eos_index_v4si", 2290 CONST, first_match_or_eos_index_v4si) 2291BU_P9V_AV_2 (VFIRSTMISMATCHINDEX_V16QI, "first_mismatch_index_v16qi", 2292 CONST, first_mismatch_index_v16qi) 2293BU_P9V_AV_2 (VFIRSTMISMATCHINDEX_V8HI, "first_mismatch_index_v8hi", 2294 CONST, first_mismatch_index_v8hi) 2295BU_P9V_AV_2 (VFIRSTMISMATCHINDEX_V4SI, "first_mismatch_index_v4si", 2296 CONST, first_mismatch_index_v4si) 2297BU_P9V_AV_2 (VFIRSTMISMATCHOREOSINDEX_V16QI, "first_mismatch_or_eos_index_v16qi", 2298 CONST, first_mismatch_or_eos_index_v16qi) 2299BU_P9V_AV_2 (VFIRSTMISMATCHOREOSINDEX_V8HI, "first_mismatch_or_eos_index_v8hi", 2300 CONST, first_mismatch_or_eos_index_v8hi) 2301BU_P9V_AV_2 (VFIRSTMISMATCHOREOSINDEX_V4SI, "first_mismatch_or_eos_index_v4si", 2302 CONST, first_mismatch_or_eos_index_v4si) 2303 2304/* ISA 3.0 vector overloaded 2-argument functions. */ 2305BU_P9V_OVERLOAD_2 (VSLV, "vslv") 2306BU_P9V_OVERLOAD_2 (VSRV, "vsrv") 2307BU_P9V_OVERLOAD_2 (CONVERT_4F32_8I16, "convert_4f32_8i16") 2308BU_P9V_OVERLOAD_2 (CONVERT_4F32_8F16, "convert_4f32_8f16") 2309 2310/* 2 argument vector functions added in ISA 3.0 (power9). */ 2311BU_P9V_AV_2 (VADUB, "vadub", CONST, vaduv16qi3) 2312BU_P9V_AV_2 (VADUH, "vaduh", CONST, vaduv8hi3) 2313BU_P9V_AV_2 (VADUW, "vaduw", CONST, vaduv4si3) 2314BU_P9V_AV_2 (VRLWNM, "vrlwnm", CONST, altivec_vrlwnm) 2315BU_P9V_AV_2 (VRLDNM, "vrldnm", CONST, altivec_vrldnm) 2316BU_P9V_AV_2 (VBPERMD, "vbpermd", CONST, altivec_vbpermd) 2317 2318/* ISA 3.0 vector overloaded 2 argument functions. */ 2319BU_P9V_OVERLOAD_2 (VADU, "vadu") 2320BU_P9V_OVERLOAD_2 (VADUB, "vadub") 2321BU_P9V_OVERLOAD_2 (VADUH, "vaduh") 2322BU_P9V_OVERLOAD_2 (VADUW, "vaduw") 2323BU_P9V_OVERLOAD_2 (RLNM, "rlnm") 2324BU_P9V_OVERLOAD_2 (VBPERM, "vbperm_api") 2325 2326/* ISA 3.0 3-argument vector functions. */ 2327BU_P9V_AV_3 (VRLWMI, "vrlwmi", CONST, altivec_vrlwmi) 2328BU_P9V_AV_3 (VRLDMI, "vrldmi", CONST, altivec_vrldmi) 2329 2330/* ISA 3.0 vector overloaded 3-argument functions. */ 2331BU_P9V_OVERLOAD_3 (RLMI, "rlmi") 2332 2333/* 1 argument vsx scalar functions added in ISA 3.0 (power9). */ 2334BU_P9V_64BIT_VSX_1 (VSEEDP, "scalar_extract_exp", CONST, xsxexpdp) 2335BU_P9V_64BIT_VSX_1 (VSESDP, "scalar_extract_sig", CONST, xsxsigdp) 2336 2337BU_FLOAT128_HW_VSX_1 (VSEEQP, "scalar_extract_expq", CONST, xsxexpqp_kf) 2338BU_FLOAT128_HW_VSX_1 (VSESQP, "scalar_extract_sigq", CONST, xsxsigqp_kf) 2339 2340BU_FLOAT128_HW_VSX_1 (VSTDCNQP, "scalar_test_neg_qp", CONST, xststdcnegqp_kf) 2341BU_P9V_VSX_1 (VSTDCNDP, "scalar_test_neg_dp", CONST, xststdcnegdp) 2342BU_P9V_VSX_1 (VSTDCNSP, "scalar_test_neg_sp", CONST, xststdcnegsp) 2343 2344BU_P9V_VSX_1 (XXBRQ_V16QI, "xxbrq_v16qi", CONST, p9_xxbrq_v16qi) 2345BU_P9V_VSX_1 (XXBRQ_V1TI, "xxbrq_v1ti", CONST, p9_xxbrq_v1ti) 2346BU_P9V_VSX_1 (XXBRD_V2DI, "xxbrd_v2di", CONST, p9_xxbrd_v2di) 2347BU_P9V_VSX_1 (XXBRD_V2DF, "xxbrd_v2df", CONST, p9_xxbrd_v2df) 2348BU_P9V_VSX_1 (XXBRW_V4SI, "xxbrw_v4si", CONST, p9_xxbrw_v4si) 2349BU_P9V_VSX_1 (XXBRW_V4SF, "xxbrw_v4sf", CONST, p9_xxbrw_v4sf) 2350BU_P9V_VSX_1 (XXBRH_V8HI, "xxbrh_v8hi", CONST, p9_xxbrh_v8hi) 2351 2352/* 2 argument vsx scalar functions added in ISA 3.0 (power9). */ 2353BU_P9V_64BIT_VSX_2 (VSIEDP, "scalar_insert_exp", CONST, xsiexpdp) 2354BU_P9V_64BIT_VSX_2 (VSIEDPF, "scalar_insert_exp_dp", CONST, xsiexpdpf) 2355 2356BU_FLOAT128_HW_VSX_2 (VSIEQP, "scalar_insert_exp_q", CONST, xsiexpqp_kf) 2357BU_FLOAT128_HW_VSX_2 (VSIEQPF, "scalar_insert_exp_qp", CONST, xsiexpqpf_kf) 2358 2359BU_P9V_VSX_2 (VSCEDPGT, "scalar_cmp_exp_dp_gt", CONST, xscmpexpdp_gt) 2360BU_P9V_VSX_2 (VSCEDPLT, "scalar_cmp_exp_dp_lt", CONST, xscmpexpdp_lt) 2361BU_P9V_VSX_2 (VSCEDPEQ, "scalar_cmp_exp_dp_eq", CONST, xscmpexpdp_eq) 2362BU_P9V_VSX_2 (VSCEDPUO, "scalar_cmp_exp_dp_unordered", CONST, xscmpexpdp_unordered) 2363 2364BU_P9V_VSX_2 (VSCEQPGT, "scalar_cmp_exp_qp_gt", CONST, xscmpexpqp_gt_kf) 2365BU_P9V_VSX_2 (VSCEQPLT, "scalar_cmp_exp_qp_lt", CONST, xscmpexpqp_lt_kf) 2366BU_P9V_VSX_2 (VSCEQPEQ, "scalar_cmp_exp_qp_eq", CONST, xscmpexpqp_eq_kf) 2367BU_P9V_VSX_2 (VSCEQPUO, "scalar_cmp_exp_qp_unordered", CONST, xscmpexpqp_unordered_kf) 2368 2369BU_FLOAT128_HW_VSX_2 (VSTDCQP, "scalar_test_data_class_qp", CONST, xststdcqp_kf) 2370BU_P9V_VSX_2 (VSTDCDP, "scalar_test_data_class_dp", CONST, xststdcdp) 2371BU_P9V_VSX_2 (VSTDCSP, "scalar_test_data_class_sp", CONST, xststdcsp) 2372 2373/* ISA 3.0 vector scalar overloaded 1 argument functions. */ 2374BU_P9V_OVERLOAD_1 (VSEEDP, "scalar_extract_exp") 2375BU_P9V_OVERLOAD_1 (VSESDP, "scalar_extract_sig") 2376 2377BU_P9V_OVERLOAD_1 (VSTDCN, "scalar_test_neg") 2378BU_P9V_OVERLOAD_1 (VSTDCNQP, "scalar_test_neg_qp") 2379BU_P9V_OVERLOAD_1 (VSTDCNDP, "scalar_test_neg_dp") 2380BU_P9V_OVERLOAD_1 (VSTDCNSP, "scalar_test_neg_sp") 2381 2382BU_P9V_OVERLOAD_1 (VEXTRACT_FP_FROM_SHORTH, "vextract_fp_from_shorth") 2383BU_P9V_OVERLOAD_1 (VEXTRACT_FP_FROM_SHORTL, "vextract_fp_from_shortl") 2384 2385/* ISA 3.0 vector scalar overloaded 2 argument functions. */ 2386BU_P9V_OVERLOAD_2 (VFIRSTMATCHINDEX, "first_match_index") 2387BU_P9V_OVERLOAD_2 (VFIRSTMISMATCHINDEX, "first_mismatch_index") 2388BU_P9V_OVERLOAD_2 (VFIRSTMATCHOREOSINDEX, "first_match_or_eos_index") 2389BU_P9V_OVERLOAD_2 (VFIRSTMISMATCHOREOSINDEX, "first_mismatch_or_eos_index") 2390 2391BU_P9V_OVERLOAD_2 (VSIEDP, "scalar_insert_exp") 2392 2393BU_P9V_OVERLOAD_2 (VSTDC, "scalar_test_data_class") 2394BU_P9V_OVERLOAD_2 (VSTDCQP, "scalar_test_data_class_qp") 2395BU_P9V_OVERLOAD_2 (VSTDCDP, "scalar_test_data_class_dp") 2396BU_P9V_OVERLOAD_2 (VSTDCSP, "scalar_test_data_class_sp") 2397 2398BU_P9V_OVERLOAD_2 (VSCEGT, "scalar_cmp_exp_gt") 2399BU_P9V_OVERLOAD_2 (VSCEDPGT, "scalar_cmp_exp_dp_gt") 2400BU_P9V_OVERLOAD_2 (VSCEQPGT, "scalar_cmp_exp_qp_gt") 2401BU_P9V_OVERLOAD_2 (VSCELT, "scalar_cmp_exp_lt") 2402BU_P9V_OVERLOAD_2 (VSCEDPLT, "scalar_cmp_exp_dp_lt") 2403BU_P9V_OVERLOAD_2 (VSCEQPLT, "scalar_cmp_exp_qp_lt") 2404BU_P9V_OVERLOAD_2 (VSCEEQ, "scalar_cmp_exp_eq") 2405BU_P9V_OVERLOAD_2 (VSCEDPEQ, "scalar_cmp_exp_dp_eq") 2406BU_P9V_OVERLOAD_2 (VSCEQPEQ, "scalar_cmp_exp_qp_eq") 2407BU_P9V_OVERLOAD_2 (VSCEUO, "scalar_cmp_exp_unordered") 2408BU_P9V_OVERLOAD_2 (VSCEDPUO, "scalar_cmp_exp_dp_unordered") 2409BU_P9V_OVERLOAD_2 (VSCEQPUO, "scalar_cmp_exp_qp_unordered") 2410 2411/* 1 argument vsx vector functions added in ISA 3.0 (power9). */ 2412BU_P9V_VSX_1 (VEEDP, "extract_exp_dp", CONST, xvxexpdp) 2413BU_P9V_VSX_1 (VEESP, "extract_exp_sp", CONST, xvxexpsp) 2414BU_P9V_VSX_1 (VESDP, "extract_sig_dp", CONST, xvxsigdp) 2415BU_P9V_VSX_1 (VESSP, "extract_sig_sp", CONST, xvxsigsp) 2416BU_P9V_VSX_1 (VEXTRACT_FP_FROM_SHORTH, "vextract_fp_from_shorth", CONST, vextract_fp_from_shorth) 2417BU_P9V_VSX_1 (VEXTRACT_FP_FROM_SHORTL, "vextract_fp_from_shortl", CONST, vextract_fp_from_shortl) 2418 2419/* 2 argument vsx vector functions added in ISA 3.0 (power9). */ 2420BU_P9V_VSX_2 (VIEDP, "insert_exp_dp", CONST, xviexpdp) 2421BU_P9V_VSX_2 (VIESP, "insert_exp_sp", CONST, xviexpsp) 2422BU_P9V_VSX_2 (VTDCDP, "test_data_class_dp", CONST, xvtstdcdp) 2423BU_P9V_VSX_2 (VTDCSP, "test_data_class_sp", CONST, xvtstdcsp) 2424 2425/* ISA 3.0 vector overloaded 1 argument functions. */ 2426BU_P9V_OVERLOAD_1 (VES, "extract_sig") 2427BU_P9V_OVERLOAD_1 (VESDP, "extract_sig_dp") 2428BU_P9V_OVERLOAD_1 (VESSP, "extract_sig_sp") 2429 2430BU_P9V_OVERLOAD_1 (VEE, "extract_exp") 2431BU_P9V_OVERLOAD_1 (VEEDP, "extract_exp_dp") 2432BU_P9V_OVERLOAD_1 (VEESP, "extract_exp_sp") 2433 2434/* ISA 3.0 vector overloaded 2 argument functions. */ 2435BU_P9V_OVERLOAD_2 (VTDC, "test_data_class") 2436BU_P9V_OVERLOAD_2 (VTDCDP, "test_data_class_dp") 2437BU_P9V_OVERLOAD_2 (VTDCSP, "test_data_class_sp") 2438 2439BU_P9V_OVERLOAD_2 (VIE, "insert_exp") 2440BU_P9V_OVERLOAD_2 (VIEDP, "insert_exp_dp") 2441BU_P9V_OVERLOAD_2 (VIESP, "insert_exp_sp") 2442 2443/* 2 argument vector functions added in ISA 3.0 (power9). */ 2444BU_P9V_64BIT_VSX_2 (LXVL, "lxvl", PURE, lxvl) 2445BU_P9V_64BIT_VSX_2 (XL_LEN_R, "xl_len_r", PURE, xl_len_r) 2446 2447BU_P9V_AV_2 (VEXTUBLX, "vextublx", CONST, vextublx) 2448BU_P9V_AV_2 (VEXTUBRX, "vextubrx", CONST, vextubrx) 2449BU_P9V_AV_2 (VEXTUHLX, "vextuhlx", CONST, vextuhlx) 2450BU_P9V_AV_2 (VEXTUHRX, "vextuhrx", CONST, vextuhrx) 2451BU_P9V_AV_2 (VEXTUWLX, "vextuwlx", CONST, vextuwlx) 2452BU_P9V_AV_2 (VEXTUWRX, "vextuwrx", CONST, vextuwrx) 2453 2454/* Insert/extract 4 byte word into a vector. */ 2455BU_P9V_VSX_3 (INSERT4B, "insert4b", CONST, insert4b) 2456BU_P9V_VSX_2 (EXTRACT4B, "extract4b", CONST, extract4b) 2457 2458/* Hardware IEEE 128-bit floating point round to odd instrucitons added in ISA 2459 3.0 (power9). */ 2460BU_FLOAT128_HW_1 (SQRTF128_ODD, "sqrtf128_round_to_odd", FP, sqrtkf2_odd) 2461BU_FLOAT128_HW_1 (TRUNCF128_ODD, "truncf128_round_to_odd", FP, trunckfdf2_odd) 2462BU_FLOAT128_HW_2 (ADDF128_ODD, "addf128_round_to_odd", FP, addkf3_odd) 2463BU_FLOAT128_HW_2 (SUBF128_ODD, "subf128_round_to_odd", FP, subkf3_odd) 2464BU_FLOAT128_HW_2 (MULF128_ODD, "mulf128_round_to_odd", FP, mulkf3_odd) 2465BU_FLOAT128_HW_2 (DIVF128_ODD, "divf128_round_to_odd", FP, divkf3_odd) 2466BU_FLOAT128_HW_3 (FMAF128_ODD, "fmaf128_round_to_odd", FP, fmakf4_odd) 2467 2468/* 3 argument vector functions returning void, treated as SPECIAL, 2469 added in ISA 3.0 (power9). */ 2470BU_P9V_64BIT_AV_X (STXVL, "stxvl", MISC) 2471BU_P9V_64BIT_AV_X (XST_LEN_R, "xst_len_r", MISC) 2472 2473/* 1 argument vector functions added in ISA 3.0 (power9). */ 2474BU_P9V_AV_1 (VCLZLSBB_V16QI, "vclzlsbb_v16qi", CONST, vclzlsbb_v16qi) 2475BU_P9V_AV_1 (VCLZLSBB_V8HI, "vclzlsbb_v8hi", CONST, vclzlsbb_v8hi) 2476BU_P9V_AV_1 (VCLZLSBB_V4SI, "vclzlsbb_v4si", CONST, vclzlsbb_v4si) 2477BU_P9V_AV_1 (VCTZLSBB_V16QI, "vctzlsbb_v16qi", CONST, vctzlsbb_v16qi) 2478BU_P9V_AV_1 (VCTZLSBB_V8HI, "vctzlsbb_v8hi", CONST, vctzlsbb_v8hi) 2479BU_P9V_AV_1 (VCTZLSBB_V4SI, "vctzlsbb_v4si", CONST, vctzlsbb_v4si) 2480 2481/* Built-in support for Power9 "VSU option" string operations includes 2482 new awareness of the "vector compare not equal" (vcmpneb, vcmpneb., 2483 vcmpneh, vcmpneh., vcmpnew, vcmpnew.) and "vector compare 2484 not equal or zero" (vcmpnezb, vcmpnezb., vcmpnezh, vcmpnezh., 2485 vcmpnezw, vcmpnezw.) instructions. */ 2486 2487BU_P9V_AV_2 (CMPNEB, "vcmpneb", CONST, vcmpneb) 2488BU_P9V_AV_2 (CMPNEH, "vcmpneh", CONST, vcmpneh) 2489BU_P9V_AV_2 (CMPNEW, "vcmpnew", CONST, vcmpnew) 2490 2491BU_P9V_AV_2 (VCMPNEB_P, "vcmpneb_p", CONST, vector_ne_v16qi_p) 2492BU_P9V_AV_2 (VCMPNEH_P, "vcmpneh_p", CONST, vector_ne_v8hi_p) 2493BU_P9V_AV_2 (VCMPNEW_P, "vcmpnew_p", CONST, vector_ne_v4si_p) 2494BU_P9V_AV_2 (VCMPNED_P, "vcmpned_p", CONST, vector_ne_v2di_p) 2495 2496BU_P9V_AV_2 (VCMPNEFP_P, "vcmpnefp_p", CONST, vector_ne_v4sf_p) 2497BU_P9V_AV_2 (VCMPNEDP_P, "vcmpnedp_p", CONST, vector_ne_v2df_p) 2498 2499BU_P9V_AV_2 (VCMPAEB_P, "vcmpaeb_p", CONST, vector_ae_v16qi_p) 2500BU_P9V_AV_2 (VCMPAEH_P, "vcmpaeh_p", CONST, vector_ae_v8hi_p) 2501BU_P9V_AV_2 (VCMPAEW_P, "vcmpaew_p", CONST, vector_ae_v4si_p) 2502BU_P9V_AV_2 (VCMPAED_P, "vcmpaed_p", CONST, vector_ae_v2di_p) 2503 2504BU_P9V_AV_2 (VCMPAEFP_P, "vcmpaefp_p", CONST, vector_ae_v4sf_p) 2505BU_P9V_AV_2 (VCMPAEDP_P, "vcmpaedp_p", CONST, vector_ae_v2df_p) 2506 2507BU_P9V_AV_2 (CMPNEZB, "vcmpnezb", CONST, vcmpnezb) 2508BU_P9V_AV_2 (CMPNEZH, "vcmpnezh", CONST, vcmpnezh) 2509BU_P9V_AV_2 (CMPNEZW, "vcmpnezw", CONST, vcmpnezw) 2510 2511BU_P9V_AV_P (VCMPNEZB_P, "vcmpnezb_p", CONST, vector_nez_v16qi_p) 2512BU_P9V_AV_P (VCMPNEZH_P, "vcmpnezh_p", CONST, vector_nez_v8hi_p) 2513BU_P9V_AV_P (VCMPNEZW_P, "vcmpnezw_p", CONST, vector_nez_v4si_p) 2514 2515/* ISA 3.0 Vector scalar overloaded 2 argument functions */ 2516BU_P9V_OVERLOAD_2 (LXVL, "lxvl") 2517BU_P9V_OVERLOAD_2 (XL_LEN_R, "xl_len_r") 2518BU_P9V_OVERLOAD_2 (VEXTULX, "vextulx") 2519BU_P9V_OVERLOAD_2 (VEXTURX, "vexturx") 2520BU_P9V_OVERLOAD_2 (EXTRACT4B, "extract4b") 2521 2522/* ISA 3.0 Vector scalar overloaded 3 argument functions */ 2523BU_P9V_OVERLOAD_3 (STXVL, "stxvl") 2524BU_P9V_OVERLOAD_3 (XST_LEN_R, "xst_len_r") 2525BU_P9V_OVERLOAD_3 (INSERT4B, "insert4b") 2526 2527/* Overloaded CMPNE support was implemented prior to Power 9, 2528 so is not mentioned here. */ 2529BU_P9V_OVERLOAD_2 (CMPNEZ, "vcmpnez") 2530 2531BU_P9V_OVERLOAD_P (VCMPNEZ_P, "vcmpnez_p") 2532BU_P9V_OVERLOAD_2 (VCMPNE_P, "vcmpne_p") 2533BU_P9V_OVERLOAD_2 (VCMPAE_P, "vcmpae_p") 2534 2535/* ISA 3.0 Vector scalar overloaded 1 argument functions */ 2536BU_P9V_OVERLOAD_1 (VCLZLSBB, "vclzlsbb") 2537BU_P9V_OVERLOAD_1 (VCTZLSBB, "vctzlsbb") 2538 2539/* 2 argument extended divide functions added in ISA 2.06. */ 2540BU_P7_MISC_2 (DIVWE, "divwe", CONST, dive_si) 2541BU_P7_MISC_2 (DIVWEU, "divweu", CONST, diveu_si) 2542BU_P7_POWERPC64_MISC_2 (DIVDE, "divde", CONST, dive_di) 2543BU_P7_POWERPC64_MISC_2 (DIVDEU, "divdeu", CONST, diveu_di) 2544 2545/* 1 argument DFP (decimal floating point) functions added in ISA 2.05. */ 2546BU_DFP_MISC_1 (DXEX, "dxex", CONST, dfp_dxex_dd) 2547BU_DFP_MISC_1 (DXEXQ, "dxexq", CONST, dfp_dxex_td) 2548 2549/* 2 argument DFP (decimal floating point) functions added in ISA 2.05. */ 2550BU_DFP_MISC_2 (DDEDPD, "ddedpd", CONST, dfp_ddedpd_dd) 2551BU_DFP_MISC_2 (DDEDPDQ, "ddedpdq", CONST, dfp_ddedpd_td) 2552BU_DFP_MISC_2 (DENBCD, "denbcd", CONST, dfp_denbcd_dd) 2553BU_DFP_MISC_2 (DENBCDQ, "denbcdq", CONST, dfp_denbcd_td) 2554BU_DFP_MISC_2 (DIEX, "diex", CONST, dfp_diex_dd) 2555BU_DFP_MISC_2 (DIEXQ, "diexq", CONST, dfp_diex_td) 2556BU_DFP_MISC_2 (DSCLI, "dscli", CONST, dfp_dscli_dd) 2557BU_DFP_MISC_2 (DSCLIQ, "dscliq", CONST, dfp_dscli_td) 2558BU_DFP_MISC_2 (DSCRI, "dscri", CONST, dfp_dscri_dd) 2559BU_DFP_MISC_2 (DSCRIQ, "dscriq", CONST, dfp_dscri_td) 2560 2561/* 0 argument void function that we pretend was added in ISA 2.06. 2562 It's a special nop recognized by 2018+ firmware for P7 and up, 2563 with speculation barrier semantics. */ 2564BU_P7_MISC_X (SPEC_BARRIER, "ppc_speculation_barrier", MISC) 2565 2566/* 1 argument BCD functions added in ISA 2.06. */ 2567BU_P7_MISC_1 (CDTBCD, "cdtbcd", CONST, cdtbcd) 2568BU_P7_MISC_1 (CBCDTD, "cbcdtd", CONST, cbcdtd) 2569 2570/* 2 argument BCD functions added in ISA 2.06. */ 2571BU_P7_MISC_2 (ADDG6S, "addg6s", CONST, addg6s) 2572 2573/* 3 argument BCD functions added in ISA 2.07. */ 2574BU_P8V_MISC_3 (BCDADD, "bcdadd", CONST, bcdadd) 2575BU_P8V_MISC_3 (BCDADD_LT, "bcdadd_lt", CONST, bcdadd_lt) 2576BU_P8V_MISC_3 (BCDADD_EQ, "bcdadd_eq", CONST, bcdadd_eq) 2577BU_P8V_MISC_3 (BCDADD_GT, "bcdadd_gt", CONST, bcdadd_gt) 2578BU_P8V_MISC_3 (BCDADD_OV, "bcdadd_ov", CONST, bcdadd_unordered) 2579BU_P8V_MISC_3 (BCDSUB, "bcdsub", CONST, bcdsub) 2580BU_P8V_MISC_3 (BCDSUB_LT, "bcdsub_lt", CONST, bcdsub_lt) 2581BU_P8V_MISC_3 (BCDSUB_EQ, "bcdsub_eq", CONST, bcdsub_eq) 2582BU_P8V_MISC_3 (BCDSUB_GT, "bcdsub_gt", CONST, bcdsub_gt) 2583BU_P8V_MISC_3 (BCDSUB_OV, "bcdsub_ov", CONST, bcdsub_unordered) 2584 2585/* 2 argument pack/unpack 128-bit floating point types. */ 2586BU_DFP_MISC_2 (PACK_TD, "pack_dec128", CONST, packtd) 2587BU_DFP_MISC_2 (UNPACK_TD, "unpack_dec128", CONST, unpacktd) 2588 2589/* 0 argument general-purpose register functions added in ISA 3.0 (power9). */ 2590BU_P9_MISC_0 (DARN_32, "darn_32", MISC, darn_32) 2591BU_P9_64BIT_MISC_0 (DARN_RAW, "darn_raw", MISC, darn_raw) 2592BU_P9_64BIT_MISC_0 (DARN, "darn", MISC, darn) 2593 2594BU_LDBL128_2 (PACK_TF, "pack_longdouble", CONST, packtf) 2595BU_LDBL128_2 (UNPACK_TF, "unpack_longdouble", CONST, unpacktf) 2596 2597BU_IBM128_2 (PACK_IF, "pack_ibm128", CONST, packif) 2598BU_IBM128_2 (UNPACK_IF, "unpack_ibm128", CONST, unpackif) 2599 2600BU_VSX_MISC_2 (PACK_V1TI, "pack_vector_int128", CONST, packv1ti) 2601BU_VSX_MISC_2 (UNPACK_V1TI, "unpack_vector_int128", CONST, unpackv1ti) 2602 2603/* 2 argument DFP (Decimal Floating Point) functions added in ISA 3.0. */ 2604BU_P9_DFP_MISC_2 (TSTSFI_LT_DD, "dtstsfi_lt_dd", CONST, dfptstsfi_lt_dd) 2605BU_P9_DFP_MISC_2 (TSTSFI_LT_TD, "dtstsfi_lt_td", CONST, dfptstsfi_lt_td) 2606 2607BU_P9_DFP_MISC_2 (TSTSFI_EQ_DD, "dtstsfi_eq_dd", CONST, dfptstsfi_eq_dd) 2608BU_P9_DFP_MISC_2 (TSTSFI_EQ_TD, "dtstsfi_eq_td", CONST, dfptstsfi_eq_td) 2609 2610BU_P9_DFP_MISC_2 (TSTSFI_GT_DD, "dtstsfi_gt_dd", CONST, dfptstsfi_gt_dd) 2611BU_P9_DFP_MISC_2 (TSTSFI_GT_TD, "dtstsfi_gt_td", CONST, dfptstsfi_gt_td) 2612 2613BU_P9_DFP_MISC_2 (TSTSFI_OV_DD, "dtstsfi_ov_dd", CONST, dfptstsfi_unordered_dd) 2614BU_P9_DFP_MISC_2 (TSTSFI_OV_TD, "dtstsfi_ov_td", CONST, dfptstsfi_unordered_td) 2615 2616/* 2 argument overloaded DFP functions added in ISA 3.0. */ 2617BU_P9_DFP_OVERLOAD_2 (TSTSFI_LT, "dtstsfi_lt") 2618BU_P9_DFP_OVERLOAD_2 (TSTSFI_LT_DD, "dtstsfi_lt_dd") 2619BU_P9_DFP_OVERLOAD_2 (TSTSFI_LT_TD, "dtstsfi_lt_td") 2620 2621BU_P9_DFP_OVERLOAD_2 (TSTSFI_EQ, "dtstsfi_eq") 2622BU_P9_DFP_OVERLOAD_2 (TSTSFI_EQ_DD, "dtstsfi_eq_dd") 2623BU_P9_DFP_OVERLOAD_2 (TSTSFI_EQ_TD, "dtstsfi_eq_td") 2624 2625BU_P9_DFP_OVERLOAD_2 (TSTSFI_GT, "dtstsfi_gt") 2626BU_P9_DFP_OVERLOAD_2 (TSTSFI_GT_DD, "dtstsfi_gt_dd") 2627BU_P9_DFP_OVERLOAD_2 (TSTSFI_GT_TD, "dtstsfi_gt_td") 2628 2629BU_P9_DFP_OVERLOAD_2 (TSTSFI_OV, "dtstsfi_ov") 2630BU_P9_DFP_OVERLOAD_2 (TSTSFI_OV_DD, "dtstsfi_ov_dd") 2631BU_P9_DFP_OVERLOAD_2 (TSTSFI_OV_TD, "dtstsfi_ov_td") 2632 2633/* 1 argument vector functions added in ISA 3.0 (power9). */ 2634BU_P9V_AV_1 (VCTZB, "vctzb", CONST, ctzv16qi2) 2635BU_P9V_AV_1 (VCTZH, "vctzh", CONST, ctzv8hi2) 2636BU_P9V_AV_1 (VCTZW, "vctzw", CONST, ctzv4si2) 2637BU_P9V_AV_1 (VCTZD, "vctzd", CONST, ctzv2di2) 2638BU_P9V_AV_1 (VPRTYBD, "vprtybd", CONST, rs6000_vprtybv2di2) 2639BU_P9V_AV_1 (VPRTYBQ, "vprtybq", CONST, rs6000_vprtybv1ti2) 2640BU_P9V_AV_1 (VPRTYBW, "vprtybw", CONST, rs6000_vprtybv4si2) 2641 2642/* ISA 3.0 vector overloaded 1 argument functions. */ 2643BU_P9V_OVERLOAD_1 (VCTZ, "vctz") 2644BU_P9V_OVERLOAD_1 (VCTZB, "vctzb") 2645BU_P9V_OVERLOAD_1 (VCTZH, "vctzh") 2646BU_P9V_OVERLOAD_1 (VCTZW, "vctzw") 2647BU_P9V_OVERLOAD_1 (VCTZD, "vctzd") 2648BU_P9V_OVERLOAD_1 (VPRTYB, "vprtyb") 2649BU_P9V_OVERLOAD_1 (VPRTYBD, "vprtybd") 2650BU_P9V_OVERLOAD_1 (VPRTYBQ, "vprtybq") 2651BU_P9V_OVERLOAD_1 (VPRTYBW, "vprtybw") 2652BU_P9V_OVERLOAD_1 (VPARITY_LSBB, "vparity_lsbb") 2653 2654/* 2 argument functions added in ISA 3.0 (power9). */ 2655BU_P9_2 (CMPRB, "byte_in_range", CONST, cmprb) 2656BU_P9_2 (CMPRB2, "byte_in_either_range", CONST, cmprb2) 2657BU_P9_64BIT_2 (CMPEQB, "byte_in_set", CONST, cmpeqb) 2658 2659/* 2 argument overloaded functions added in ISA 3.0 (power9). */ 2660BU_P9_OVERLOAD_2 (CMPRB, "byte_in_range") 2661BU_P9_OVERLOAD_2 (CMPRB2, "byte_in_either_range") 2662BU_P9_OVERLOAD_2 (CMPEQB, "byte_in_set") 2663 2664/* 1 argument crypto functions. */ 2665BU_CRYPTO_1 (VSBOX, "vsbox", CONST, crypto_vsbox_v2di) 2666BU_CRYPTO_1 (VSBOX_BE, "vsbox_be", CONST, crypto_vsbox_v16qi) 2667 2668/* 2 argument crypto functions. */ 2669BU_CRYPTO_2 (VCIPHER, "vcipher", CONST, crypto_vcipher_v2di) 2670BU_CRYPTO_2 (VCIPHER_BE, "vcipher_be", CONST, crypto_vcipher_v16qi) 2671BU_CRYPTO_2 (VCIPHERLAST, "vcipherlast", 2672 CONST, crypto_vcipherlast_v2di) 2673BU_CRYPTO_2 (VCIPHERLAST_BE, "vcipherlast_be", 2674 CONST, crypto_vcipherlast_v16qi) 2675BU_CRYPTO_2 (VNCIPHER, "vncipher", CONST, crypto_vncipher_v2di) 2676BU_CRYPTO_2 (VNCIPHER_BE, "vncipher_be", CONST, crypto_vncipher_v16qi) 2677BU_CRYPTO_2 (VNCIPHERLAST, "vncipherlast", 2678 CONST, crypto_vncipherlast_v2di) 2679BU_CRYPTO_2 (VNCIPHERLAST_BE, "vncipherlast_be", 2680 CONST, crypto_vncipherlast_v16qi) 2681BU_CRYPTO_2A (VPMSUMB, "vpmsumb", CONST, crypto_vpmsumb) 2682BU_CRYPTO_2A (VPMSUMH, "vpmsumh", CONST, crypto_vpmsumh) 2683BU_CRYPTO_2A (VPMSUMW, "vpmsumw", CONST, crypto_vpmsumw) 2684BU_CRYPTO_2A (VPMSUMD, "vpmsumd", CONST, crypto_vpmsumd) 2685 2686/* 3 argument crypto functions. */ 2687BU_CRYPTO_3A (VPERMXOR_V2DI, "vpermxor_v2di", CONST, crypto_vpermxor_v2di) 2688BU_CRYPTO_3A (VPERMXOR_V4SI, "vpermxor_v4si", CONST, crypto_vpermxor_v4si) 2689BU_CRYPTO_3A (VPERMXOR_V8HI, "vpermxor_v8hi", CONST, crypto_vpermxor_v8hi) 2690BU_CRYPTO_3A (VPERMXOR_V16QI, "vpermxor_v16qi", CONST, crypto_vpermxor_v16qi) 2691BU_CRYPTO_3 (VSHASIGMAW, "vshasigmaw", CONST, crypto_vshasigmaw) 2692BU_CRYPTO_3 (VSHASIGMAD, "vshasigmad", CONST, crypto_vshasigmad) 2693 2694/* 2 argument crypto overloaded functions. */ 2695BU_CRYPTO_OVERLOAD_2A (VPMSUM, "vpmsum") 2696 2697/* 3 argument crypto overloaded functions. */ 2698BU_CRYPTO_OVERLOAD_3A (VPERMXOR, "vpermxor") 2699BU_CRYPTO_OVERLOAD_3 (VSHASIGMA, "vshasigma") 2700 2701 2702/* HTM functions. */ 2703BU_HTM_1 (TABORT, "tabort", CR, tabort) 2704BU_HTM_3 (TABORTDC, "tabortdc", CR, tabortdc) 2705BU_HTM_3 (TABORTDCI, "tabortdci", CR, tabortdci) 2706BU_HTM_3 (TABORTWC, "tabortwc", CR, tabortwc) 2707BU_HTM_3 (TABORTWCI, "tabortwci", CR, tabortwci) 2708BU_HTM_1 (TBEGIN, "tbegin", CR, tbegin) 2709BU_HTM_0 (TCHECK, "tcheck", CR, tcheck) 2710BU_HTM_1 (TEND, "tend", CR, tend) 2711BU_HTM_0 (TENDALL, "tendall", CR, tend) 2712BU_HTM_0 (TRECHKPT, "trechkpt", CR, trechkpt) 2713BU_HTM_1 (TRECLAIM, "treclaim", CR, treclaim) 2714BU_HTM_0 (TRESUME, "tresume", CR, tsr) 2715BU_HTM_0 (TSUSPEND, "tsuspend", CR, tsr) 2716BU_HTM_1 (TSR, "tsr", CR, tsr) 2717BU_HTM_0 (TTEST, "ttest", CR, ttest) 2718 2719BU_HTM_0 (GET_TFHAR, "get_tfhar", SPR, nothing) 2720BU_HTM_V1 (SET_TFHAR, "set_tfhar", SPR, nothing) 2721BU_HTM_0 (GET_TFIAR, "get_tfiar", SPR, nothing) 2722BU_HTM_V1 (SET_TFIAR, "set_tfiar", SPR, nothing) 2723BU_HTM_0 (GET_TEXASR, "get_texasr", SPR, nothing) 2724BU_HTM_V1 (SET_TEXASR, "set_texasr", SPR, nothing) 2725BU_HTM_0 (GET_TEXASRU, "get_texasru", SPR, nothing) 2726BU_HTM_V1 (SET_TEXASRU, "set_texasru", SPR, nothing) 2727 2728 2729/* Power7 builtins, that aren't VSX instructions. */ 2730BU_SPECIAL_X (POWER7_BUILTIN_BPERMD, "__builtin_bpermd", RS6000_BTM_POPCNTD, 2731 RS6000_BTC_CONST) 2732 2733/* Miscellaneous builtins. */ 2734BU_SPECIAL_X (RS6000_BUILTIN_RECIP, "__builtin_recipdiv", RS6000_BTM_FRE, 2735 RS6000_BTC_FP) 2736 2737BU_SPECIAL_X (RS6000_BUILTIN_RECIPF, "__builtin_recipdivf", RS6000_BTM_FRES, 2738 RS6000_BTC_FP) 2739 2740BU_SPECIAL_X (RS6000_BUILTIN_RSQRT, "__builtin_rsqrt", RS6000_BTM_FRSQRTE, 2741 RS6000_BTC_FP) 2742 2743BU_SPECIAL_X (RS6000_BUILTIN_RSQRTF, "__builtin_rsqrtf", RS6000_BTM_FRSQRTES, 2744 RS6000_BTC_FP) 2745 2746BU_SPECIAL_X (RS6000_BUILTIN_GET_TB, "__builtin_ppc_get_timebase", 2747 RS6000_BTM_ALWAYS, RS6000_BTC_MISC) 2748 2749BU_SPECIAL_X (RS6000_BUILTIN_MFTB, "__builtin_ppc_mftb", 2750 RS6000_BTM_ALWAYS, RS6000_BTC_MISC) 2751 2752BU_SPECIAL_X (RS6000_BUILTIN_MFFS, "__builtin_mffs", 2753 RS6000_BTM_ALWAYS, RS6000_BTC_MISC) 2754 2755BU_SPECIAL_X (RS6000_BUILTIN_MFFSL, "__builtin_mffsl", 2756 RS6000_BTM_ALWAYS, RS6000_BTC_MISC) 2757 2758RS6000_BUILTIN_X (RS6000_BUILTIN_MTFSF, "__builtin_mtfsf", 2759 RS6000_BTM_ALWAYS, 2760 RS6000_BTC_MISC | RS6000_BTC_UNARY | RS6000_BTC_VOID, 2761 CODE_FOR_rs6000_mtfsf) 2762 2763RS6000_BUILTIN_X (RS6000_BUILTIN_MTFSB0, "__builtin_mtfsb0", 2764 RS6000_BTM_ALWAYS, 2765 RS6000_BTC_MISC | RS6000_BTC_UNARY | RS6000_BTC_VOID, 2766 CODE_FOR_rs6000_mtfsb0) 2767 2768RS6000_BUILTIN_X (RS6000_BUILTIN_MTFSB1, "__builtin_mtfsb1", 2769 RS6000_BTM_ALWAYS, 2770 RS6000_BTC_MISC | RS6000_BTC_UNARY | RS6000_BTC_VOID, 2771 CODE_FOR_rs6000_mtfsb1) 2772 2773RS6000_BUILTIN_X (RS6000_BUILTIN_SET_FPSCR_RN, "__builtin_set_fpscr_rn", 2774 RS6000_BTM_ALWAYS, 2775 RS6000_BTC_MISC | RS6000_BTC_UNARY| RS6000_BTC_VOID, 2776 CODE_FOR_rs6000_set_fpscr_rn) 2777 2778RS6000_BUILTIN_X (RS6000_BUILTIN_SET_FPSCR_DRN, "__builtin_set_fpscr_drn", 2779 RS6000_BTM_DFP, 2780 RS6000_BTC_MISC | RS6000_BTM_64BIT | RS6000_BTC_UNARY 2781 | RS6000_BTC_VOID, 2782 CODE_FOR_rs6000_set_fpscr_drn) 2783 2784BU_SPECIAL_X (RS6000_BUILTIN_CPU_INIT, "__builtin_cpu_init", 2785 RS6000_BTM_ALWAYS, RS6000_BTC_MISC) 2786 2787BU_SPECIAL_X (RS6000_BUILTIN_CPU_IS, "__builtin_cpu_is", 2788 RS6000_BTM_ALWAYS, RS6000_BTC_MISC) 2789 2790BU_SPECIAL_X (RS6000_BUILTIN_CPU_SUPPORTS, "__builtin_cpu_supports", 2791 RS6000_BTM_ALWAYS, RS6000_BTC_MISC) 2792 2793/* Darwin CfString builtin. */ 2794BU_SPECIAL_X (RS6000_BUILTIN_CFSTRING, "__builtin_cfstring", RS6000_BTM_ALWAYS, 2795 RS6000_BTC_MISC) 2796 2797/* POWER10 MMA builtins. */ 2798BU_P10V_VSX_1 (XVCVBF16SPN, "xvcvbf16spn", MISC, vsx_xvcvbf16spn) 2799BU_P10V_VSX_1 (XVCVSPBF16, "xvcvspbf16", MISC, vsx_xvcvspbf16) 2800 2801BU_MMA_PAIR_LD (LXVP, "lxvp", MISC) 2802BU_MMA_PAIR_ST (STXVP, "stxvp", PAIR) 2803 2804BU_MMA_1 (XXMFACC, "xxmfacc", QUAD, mma_xxmfacc) 2805BU_MMA_1 (XXMTACC, "xxmtacc", QUAD, mma_xxmtacc) 2806BU_MMA_1 (XXSETACCZ, "xxsetaccz", MISC, mma_xxsetaccz) 2807 2808BU_MMA_M2 (DISASSEMBLE_ACC, "disassemble_acc", QUAD, nothing) 2809BU_MMA_V2 (DISASSEMBLE_PAIR,"disassemble_pair", PAIR, nothing) 2810BU_COMPAT (VSX_BUILTIN_DISASSEMBLE_PAIR, "mma_disassemble_pair") 2811 2812BU_MMA_V3 (BUILD_PAIR, "build_pair", MISC, vsx_assemble_pair) 2813BU_MMA_V3 (ASSEMBLE_PAIR, "assemble_pair", MISC, vsx_assemble_pair) 2814BU_COMPAT (VSX_BUILTIN_ASSEMBLE_PAIR, "mma_assemble_pair") 2815BU_MMA_3 (XVBF16GER2, "xvbf16ger2", MISC, mma_xvbf16ger2) 2816BU_MMA_3 (XVF16GER2, "xvf16ger2", MISC, mma_xvf16ger2) 2817BU_MMA_3 (XVF32GER, "xvf32ger", MISC, mma_xvf32ger) 2818BU_MMA_3 (XVF64GER, "xvf64ger", PAIR, mma_xvf64ger) 2819BU_MMA_3 (XVI4GER8, "xvi4ger8", MISC, mma_xvi4ger8) 2820BU_MMA_3 (XVI8GER4, "xvi8ger4", MISC, mma_xvi8ger4) 2821BU_MMA_3 (XVI16GER2, "xvi16ger2", MISC, mma_xvi16ger2) 2822BU_MMA_3 (XVI16GER2S, "xvi16ger2s", MISC, mma_xvi16ger2s) 2823BU_MMA_3 (XVBF16GER2NN, "xvbf16ger2nn", QUAD, mma_xvbf16ger2nn) 2824BU_MMA_3 (XVBF16GER2NP, "xvbf16ger2np", QUAD, mma_xvbf16ger2np) 2825BU_MMA_3 (XVBF16GER2PN, "xvbf16ger2pn", QUAD, mma_xvbf16ger2pn) 2826BU_MMA_3 (XVBF16GER2PP, "xvbf16ger2pp", QUAD, mma_xvbf16ger2pp) 2827BU_MMA_3 (XVF16GER2NN, "xvf16ger2nn", QUAD, mma_xvf16ger2nn) 2828BU_MMA_3 (XVF16GER2NP, "xvf16ger2np", QUAD, mma_xvf16ger2np) 2829BU_MMA_3 (XVF16GER2PN, "xvf16ger2pn", QUAD, mma_xvf16ger2pn) 2830BU_MMA_3 (XVF16GER2PP, "xvf16ger2pp", QUAD, mma_xvf16ger2pp) 2831BU_MMA_3 (XVF32GERNN, "xvf32gernn", QUAD, mma_xvf32gernn) 2832BU_MMA_3 (XVF32GERNP, "xvf32gernp", QUAD, mma_xvf32gernp) 2833BU_MMA_3 (XVF32GERPN, "xvf32gerpn", QUAD, mma_xvf32gerpn) 2834BU_MMA_3 (XVF32GERPP, "xvf32gerpp", QUAD, mma_xvf32gerpp) 2835BU_MMA_3 (XVF64GERNN, "xvf64gernn", QUADPAIR, mma_xvf64gernn) 2836BU_MMA_3 (XVF64GERNP, "xvf64gernp", QUADPAIR, mma_xvf64gernp) 2837BU_MMA_3 (XVF64GERPN, "xvf64gerpn", QUADPAIR, mma_xvf64gerpn) 2838BU_MMA_3 (XVF64GERPP, "xvf64gerpp", QUADPAIR, mma_xvf64gerpp) 2839BU_MMA_3 (XVI4GER8PP, "xvi4ger8pp", QUAD, mma_xvi4ger8pp) 2840BU_MMA_3 (XVI8GER4PP, "xvi8ger4pp", QUAD, mma_xvi8ger4pp) 2841BU_MMA_3 (XVI8GER4SPP, "xvi8ger4spp", QUAD, mma_xvi8ger4spp) 2842BU_MMA_3 (XVI16GER2PP, "xvi16ger2pp", QUAD, mma_xvi16ger2pp) 2843BU_MMA_3 (XVI16GER2SPP, "xvi16ger2spp", QUAD, mma_xvi16ger2spp) 2844 2845BU_MMA_5 (BUILD_ACC, "build_acc", MISC, mma_assemble_acc) 2846BU_MMA_5 (ASSEMBLE_ACC, "assemble_acc", MISC, mma_assemble_acc) 2847BU_MMA_5 (PMXVF32GER, "pmxvf32ger", MISC, mma_pmxvf32ger) 2848BU_MMA_5 (PMXVF64GER, "pmxvf64ger", PAIR, mma_pmxvf64ger) 2849BU_MMA_5 (PMXVF32GERNN, "pmxvf32gernn", QUAD, mma_pmxvf32gernn) 2850BU_MMA_5 (PMXVF32GERNP, "pmxvf32gernp", QUAD, mma_pmxvf32gernp) 2851BU_MMA_5 (PMXVF32GERPN, "pmxvf32gerpn", QUAD, mma_pmxvf32gerpn) 2852BU_MMA_5 (PMXVF32GERPP, "pmxvf32gerpp", QUAD, mma_pmxvf32gerpp) 2853BU_MMA_5 (PMXVF64GERNN, "pmxvf64gernn", QUADPAIR, mma_pmxvf64gernn) 2854BU_MMA_5 (PMXVF64GERNP, "pmxvf64gernp", QUADPAIR, mma_pmxvf64gernp) 2855BU_MMA_5 (PMXVF64GERPN, "pmxvf64gerpn", QUADPAIR, mma_pmxvf64gerpn) 2856BU_MMA_5 (PMXVF64GERPP, "pmxvf64gerpp", QUADPAIR, mma_pmxvf64gerpp) 2857 2858BU_MMA_6 (PMXVBF16GER2, "pmxvbf16ger2", MISC, mma_pmxvbf16ger2) 2859BU_MMA_6 (PMXVF16GER2, "pmxvf16ger2", MISC, mma_pmxvf16ger2) 2860BU_MMA_6 (PMXVI4GER8, "pmxvi4ger8", MISC, mma_pmxvi4ger8) 2861BU_MMA_6 (PMXVI8GER4, "pmxvi8ger4", MISC, mma_pmxvi8ger4) 2862BU_MMA_6 (PMXVI16GER2, "pmxvi16ger2", MISC, mma_pmxvi16ger2) 2863BU_MMA_6 (PMXVI16GER2S, "pmxvi16ger2s", MISC, mma_pmxvi16ger2s) 2864BU_MMA_6 (PMXVBF16GER2NN, "pmxvbf16ger2nn", QUAD, mma_pmxvbf16ger2nn) 2865BU_MMA_6 (PMXVBF16GER2NP, "pmxvbf16ger2np", QUAD, mma_pmxvbf16ger2np) 2866BU_MMA_6 (PMXVBF16GER2PN, "pmxvbf16ger2pn", QUAD, mma_pmxvbf16ger2pn) 2867BU_MMA_6 (PMXVBF16GER2PP, "pmxvbf16ger2pp", QUAD, mma_pmxvbf16ger2pp) 2868BU_MMA_6 (PMXVF16GER2NN, "pmxvf16ger2nn", QUAD, mma_pmxvf16ger2nn) 2869BU_MMA_6 (PMXVF16GER2NP, "pmxvf16ger2np", QUAD, mma_pmxvf16ger2np) 2870BU_MMA_6 (PMXVF16GER2PN, "pmxvf16ger2pn", QUAD, mma_pmxvf16ger2pn) 2871BU_MMA_6 (PMXVF16GER2PP, "pmxvf16ger2pp", QUAD, mma_pmxvf16ger2pp) 2872BU_MMA_6 (PMXVI4GER8PP, "pmxvi4ger8pp", QUAD, mma_pmxvi4ger8pp) 2873BU_MMA_6 (PMXVI8GER4PP, "pmxvi8ger4pp", QUAD, mma_pmxvi8ger4pp) 2874BU_MMA_6 (PMXVI8GER4SPP, "pmxvi8ger4spp", QUAD, mma_pmxvi8ger4spp) 2875BU_MMA_6 (PMXVI16GER2PP, "pmxvi16ger2pp", QUAD, mma_pmxvi16ger2pp) 2876BU_MMA_6 (PMXVI16GER2SPP, "pmxvi16ger2spp", QUAD, mma_pmxvi16ger2spp) 2877