Documentos de Académico
Documentos de Profesional
Documentos de Cultura
User 2021
User 2021
IBM
SC28-3312-00
Nota
Antes de utilizar esta información y el producto al que da soporte, lea la información del apartado
“Avisos” en la página 419.
Edición de Primero
Esta edición se aplica a IBM® Open XL C/C++ para AIX 17.1.0 (Programa 5765-J18; 5725-C72) y a todos los releases y
modificaciones posteriores hasta que se indique lo contrario en nuevas ediciones. Asegúrese de que está utilizando la
edición correcta para el nivel del producto.
© Copyright International Business Machines Corporation 2021.
Contenido
iii
Niveles de idioma soportados................................................................................................................... 25
IBM............................................................................................................................................................. 25
Extensiones para soporte de proceso vectorial.................................................................................. 25
Sentencias de ensamblaje en línea..................................................................................................... 35
Los atributos de visibilidad.................................................................................................................. 42
Capítulo 5. opciones de compilador...................................................................... 43
-b................................................................................................................................................................ 43
-B................................................................................................................................................................ 44
-bmaxdata.................................................................................................................................................. 45
-bplugin...................................................................................................................................................... 45
-bplugin_opt...............................................................................................................................................46
-brtl.............................................................................................................................................................46
-c................................................................................................................................................................ 47
-C................................................................................................................................................................ 47
-D................................................................................................................................................................ 48
-e................................................................................................................................................................ 49
-E................................................................................................................................................................ 50
-frestrict-args............................................................................................................................................. 51
-g................................................................................................................................................................ 52
-I................................................................................................................................................................. 53
-l................................................................................................................................................................. 54
-L.................................................................................................................................................................55
-M............................................................................................................................................................... 56
-mcpu......................................................................................................................................................... 57
-MF............................................................................................................................................................. 60
-mllvm........................................................................................................................................................ 60
-o................................................................................................................................................................ 63
-r................................................................................................................................................................. 64
-S................................................................................................................................................................ 64
-U................................................................................................................................................................ 65
-w................................................................................................................................................................66
-W (-X)........................................................................................................................................................ 67
Opciones de GCC soportadas.................................................................................................................... 69
Capítulo 6. Pragmas de compilador...................................................................... 71
Alineación de #pragma..............................................................................................................................71
#pragma Push de visibilidad de GCC, #pragma pop de visibilidad de GCC............................................ 72
#pragma nosimd........................................................................................................................................73
Paquete de #pragma................................................................................................................................. 74
#pragma unroll, #pragma nounroll...........................................................................................................77
#pragma.....................................................................................................................................................78
Pragmas GCC soportados.......................................................................................................................... 80
iv
Funciones incorporadas de punto fijo....................................................................................................... 91
Funciones de valor absoluto................................................................................................................ 91
Funciones de permutación de bits.......................................................................................................92
Funciones de comparación.................................................................................................................. 92
Contar cero funciones.......................................................................................................................... 94
Funciones de división........................................................................................................................... 95
Funciones de carga...............................................................................................................................97
Multiplicar funciones............................................................................................................................ 98
Funciones de adición múltiple............................................................................................................. 99
Funciones de recuento de población.................................................................................................101
Funciones de número aleatorio......................................................................................................... 102
Rotar funciones.................................................................................................................................. 103
Funciones de tienda........................................................................................................................... 105
Funciones de condición de excepción...............................................................................................106
Funciones incorporadas de coma flotante binaria................................................................................. 108
Funciones de conversión................................................................................................................... 108
Extraer funciones de exponente........................................................................................................112
Extraer y funciones significativas...................................................................................................... 112
Funciones FPSCR............................................................................................................................... 113
Insertar funciones de exponente...................................................................................................... 116
Funciones de multiplicar/restar.........................................................................................................116
Funciones de estimación recíproca................................................................................................... 118
Funciones de redondeo......................................................................................................................118
Seleccionar funciones........................................................................................................................ 121
Funciones de raíz cuadrada............................................................................................................... 121
Funciones de división de software.................................................................................................... 122
Funciones de tienda........................................................................................................................... 123
Funciones incorporadas decimales codificadas en binario....................................................................123
Añadir y restar BCD............................................................................................................................ 123
Añadir y restar prueba BCD para desbordamiento........................................................................... 125
Comparación BCD.............................................................................................................................. 126
Carga y almacenamiento de BCD.......................................................................................................127
Funciones incorporadas atómicas y de sincronización.......................................................................... 128
Funciones de comparación e intercambio........................................................................................ 128
Funciones de captación..................................................................................................................... 129
Funciones de carga............................................................................................................................ 132
Funciones de tienda........................................................................................................................... 133
Funciones de sincronización..............................................................................................................134
Funciones incorporadas relacionadas con la memoria caché............................................................... 136
Funciones de memoria caché de datos............................................................................................. 136
Funciones incorporadas de captación previa....................................................................................139
Funciones incorporadas de criptografía..................................................................................................140
Funciones estándar de cifrado avanzado.......................................................................................... 140
Funciones diversas.............................................................................................................................142
Funciones incorporadas relacionadas con bloques............................................................................... 145
__bcopiar............................................................................................................................................145
bzero................................................................................................................................................... 146
Módulo intrínseco Matrix Multiply Accelerate........................................................................................ 146
Acceso a memoria..............................................................................................................................146
Montaje y desmontaje de grandes tipos............................................................................................147
Operaciones de movimiento del acumulador................................................................................... 149
Operación de borrado de acumulador...............................................................................................151
Operaciones de conversión................................................................................................................151
Operaciones de productos externos................................................................................................. 152
Funciones incorporadas de vector.......................................................................................................... 183
vec_abs...............................................................................................................................................184
vec_absd.............................................................................................................................................184
vec_abss............................................................................................................................................. 185
v
vec_add.............................................................................................................................................. 185
vec_addc............................................................................................................................................ 186
vec_add.............................................................................................................................................. 187
vec_add_u128....................................................................................................................................188
vec_addc_u128..................................................................................................................................188
vec_adde_u128..................................................................................................................................189
vec_addec_u128................................................................................................................................189
vec_todos_eq..................................................................................................................................... 189
vec_todo_ge....................................................................................................................................... 192
vec_all_gt........................................................................................................................................... 194
vec_all_in........................................................................................................................................... 196
vec_all_le........................................................................................................................................... 196
vec_todos_lt....................................................................................................................................... 198
vec_all_nan........................................................................................................................................ 200
vec_todo_ne....................................................................................................................................... 200
vec_all_nge........................................................................................................................................ 202
vec_all_ngt......................................................................................................................................... 202
vec_all_nle......................................................................................................................................... 203
vec_all_nlt.......................................................................................................................................... 203
número_todo...................................................................................................................................... 204
vec_and.............................................................................................................................................. 204
vec_andc.............................................................................................................................................205
vec_any_eq......................................................................................................................................... 207
vec_any_ge......................................................................................................................................... 209
vec_any_gt..........................................................................................................................................211
vec_any_le.......................................................................................................................................... 213
vec_any_lt...........................................................................................................................................215
vec_any_nan.......................................................................................................................................217
vec_any_ne.........................................................................................................................................217
vec_any_nge....................................................................................................................................... 219
vec_any_ngt........................................................................................................................................219
vec_any_nle........................................................................................................................................220
vec_any_nlt.........................................................................................................................................220
número_vec_any_numérico............................................................................................................... 221
vec_any_out........................................................................................................................................221
vec_avg............................................................................................................................................... 222
vec_blendv......................................................................................................................................... 222
vec_bperm..........................................................................................................................................223
vec_ceil............................................................................................................................................... 224
vec_cfuge............................................................................................................................................224
vec_clr_first........................................................................................................................................ 225
vec_clr_last.........................................................................................................................................225
vec_cmpb........................................................................................................................................... 226
vec_cmpeq......................................................................................................................................... 227
vec_cmpge..........................................................................................................................................228
vec_cmpgt.......................................................................................................................................... 228
vec_cmple.......................................................................................................................................... 229
vec_cmplt........................................................................................................................................... 230
vec_cmpne......................................................................................................................................... 231
vec_cmpnez........................................................................................................................................232
vec_cntlz.............................................................................................................................................233
vec_cntlz_lsbb....................................................................................................................................234
vec_cntlzm..........................................................................................................................................234
vec_cntm............................................................................................................................................ 235
vec_cnttz............................................................................................................................................ 236
vec_cnttz_lsbb................................................................................................................................... 236
vec_cnttzm......................................................................................................................................... 237
vec_cpsgn........................................................................................................................................... 238
vi
vec_ctd............................................................................................................................................... 238
vec_ctf................................................................................................................................................ 239
cts....................................................................................................................................................... 239
vec_ctsl...............................................................................................................................................240
ctu....................................................................................................................................................... 240
vec_ctul.............................................................................................................................................. 241
vec_cvbf16spn................................................................................................................................... 242
vec_cvf................................................................................................................................................242
vec_cvspbf16..................................................................................................................................... 243
di_vecv................................................................................................................................................243
vec_dive..............................................................................................................................................244
vec_dss............................................................................................................................................... 245
vec_dssall........................................................................................................................................... 245
vec_dst............................................................................................................................................... 245
vec_dstst............................................................................................................................................ 246
vec_dststt........................................................................................................................................... 247
vec_dstt.............................................................................................................................................. 247
vec_eqv...............................................................................................................................................248
vec_expandm..................................................................................................................................... 249
vec_expte........................................................................................................................................... 249
vec_extract......................................................................................................................................... 250
ex_extracción_vecp............................................................................................................................250
vec_extract_sig.................................................................................................................................. 251
vec_extracth....................................................................................................................................... 252
vec_extractl........................................................................................................................................ 252
vec_extractm...................................................................................................................................... 253
vec_floor.............................................................................................................................................254
vec_first_match_index...................................................................................................................... 254
vec_first_match_or_eos_index..........................................................................................................254
vec_first_mismatch_index.................................................................................................................255
vec_first_mismatch_or_eos_index.................................................................................................... 256
vec_gbb.............................................................................................................................................. 257
vec_genbm......................................................................................................................................... 257
vec_gendm......................................................................................................................................... 258
vec_genhm......................................................................................................................................... 258
vec_genpcvm..................................................................................................................................... 259
vec_genwm........................................................................................................................................ 260
inserción_vector................................................................................................................................. 261
vec_insert_exp................................................................................................................................... 262
vec_inserth......................................................................................................................................... 262
vec_insertl.......................................................................................................................................... 263
vec_ld................................................................................................................................................. 264
vec_lde............................................................................................................................................... 266
vec_ldl................................................................................................................................................ 267
vec_load_splats................................................................................................................................. 268
vec_loge............................................................................................................................................. 269
vec_lvsl............................................................................................................................................... 269
vec_lvsr...............................................................................................................................................270
vec_madd........................................................................................................................................... 271
vec_madds......................................................................................................................................... 272
máx_vectora....................................................................................................................................... 272
vec_mergee........................................................................................................................................ 273
vec_mergeh........................................................................................................................................ 274
vec_mergel......................................................................................................................................... 275
vec_mergeo........................................................................................................................................ 276
vec_mfvscr......................................................................................................................................... 277
vec_mín.............................................................................................................................................. 277
vec_mladd.......................................................................................................................................... 279
vii
vec_mod............................................................................................................................................. 279
vec_mradds........................................................................................................................................280
vec_msub........................................................................................................................................... 280
vec_msum.......................................................................................................................................... 281
vec_mSumas...................................................................................................................................... 282
vec_mtvscr......................................................................................................................................... 282
vec_mul.............................................................................................................................................. 283
vec_mule............................................................................................................................................ 284
vec_mulh............................................................................................................................................ 284
vec_mulo............................................................................................................................................ 285
vec_nabs............................................................................................................................................ 286
vec_nand ........................................................................................................................................... 286
vec_neg.............................................................................................................................................. 287
vec_nmadd......................................................................................................................................... 288
vec_nmsub......................................................................................................................................... 288
vec_nor............................................................................................................................................... 289
vec_or................................................................................................................................................. 290
vec_orc............................................................................................................................................... 291
v_paquete...........................................................................................................................................293
vec_packpx.........................................................................................................................................293
paquetes de vec_packs..................................................................................................................... 294
paquete_vector...................................................................................................................................295
vec_parity_lsbb.................................................................................................................................. 295
vec_pdep............................................................................................................................................ 296
vec_perm............................................................................................................................................297
vec_permi...........................................................................................................................................298
vec_permx..........................................................................................................................................299
vec_pext............................................................................................................................................. 300
vec_popcnt.........................................................................................................................................301
vec_promocionar............................................................................................................................... 302
vec_re................................................................................................................................................. 302
vec_replace_elt................................................................................................................................. 303
vec_replace_unaligned...................................................................................................................... 303
vec_revb............................................................................................................................................. 304
vec_reve............................................................................................................................................. 305
vec_rl.................................................................................................................................................. 306
vec_rlmi.............................................................................................................................................. 307
vec_rlnm.............................................................................................................................................308
vec_round...........................................................................................................................................308
rodo_vecc........................................................................................................................................... 309
rota_vecm...........................................................................................................................................309
redondeo_vecp...................................................................................................................................310
rodo_vecz............................................................................................................................................310
vec_rsqrte...........................................................................................................................................311
vec_sel................................................................................................................................................311
vec_signexti........................................................................................................................................313
vec_signextll.......................................................................................................................................313
vec_sl..................................................................................................................................................314
vec_sld................................................................................................................................................314
vec_sldb..............................................................................................................................................315
vec_sldw.............................................................................................................................................316
vec_sll.................................................................................................................................................317
vec_slo................................................................................................................................................318
vec_slv................................................................................................................................................ 319
vec_splat............................................................................................................................................ 319
vec_splati........................................................................................................................................... 320
vec_splati_ins.....................................................................................................................................321
vec_splatid......................................................................................................................................... 321
viii
vec_splats...........................................................................................................................................322
vec_splat_s8...................................................................................................................................... 323
vec_splat_s16.................................................................................................................................... 323
vec_splat_s32.................................................................................................................................... 324
vec_splat_u8...................................................................................................................................... 324
vec_splat_u16.................................................................................................................................... 325
vec_splat_u32.................................................................................................................................... 325
vec_sqrt.............................................................................................................................................. 326
vec_sr................................................................................................................................................. 326
vec_sra............................................................................................................................................... 327
vec_srdb............................................................................................................................................. 328
vec_srl................................................................................................................................................ 328
vec_sro............................................................................................................................................... 329
vec_srv................................................................................................................................................330
vec_st..................................................................................................................................................330
vec_ste............................................................................................................................................... 332
vec_stl.................................................................................................................................................333
vec_stril.............................................................................................................................................. 334
vec_stril_p.......................................................................................................................................... 335
vec_strir.............................................................................................................................................. 336
vec_strir_p.......................................................................................................................................... 336
vec_sub...............................................................................................................................................337
vec_sub_u128.................................................................................................................................... 338
vec_subc.............................................................................................................................................338
vec_subc_u128.................................................................................................................................. 339
vec_sube_u128.................................................................................................................................. 339
vec_subec_u128................................................................................................................................ 340
vec_subs.............................................................................................................................................340
vec_sum2s......................................................................................................................................... 341
vec_sum4s......................................................................................................................................... 341
vec_Sumas......................................................................................................................................... 342
vec_ternarylogic.................................................................................................................................342
vec_test_data_class...........................................................................................................................343
vec_test_lsbb_all_ones..................................................................................................................... 344
vec_test_lsbb_all_zeros.................................................................................................................... 344
vec_trunc............................................................................................................................................345
vec_unpackh...................................................................................................................................... 345
vec_unpackl....................................................................................................................................... 346
vec_xl................................................................................................................................................. 346
vec_xl_be........................................................................................................................................... 347
vec_xl_len.......................................................................................................................................... 349
vec_xl_len_r.......................................................................................................................................349
vec_xld2............................................................................................................................................. 350
vec_xlds..............................................................................................................................................351
vec_xlw4............................................................................................................................................ 352
vec_xor............................................................................................................................................... 352
vec_xst............................................................................................................................................... 354
vec_xst_be......................................................................................................................................... 355
vec_xst_len........................................................................................................................................ 357
vec_xst_len_r.....................................................................................................................................357
vec_xstd2........................................................................................................................................... 358
vec_xstw4.......................................................................................................................................... 359
Funciones incorporadas de acceso a memoria atómica GCC (extensiónIBM )..................................... 360
Funciones de bloqueo atómico, liberación y sincronización............................................................ 361
Funciones de operación y captación atómica................................................................................... 362
Funciones de operación atómica y captación................................................................................... 365
Funciones de comparación e intercambio atómico.......................................................................... 368
Funciones incorporadas de comprobación de tamaño de objeto GCC.................................................. 369
ix
__builtin_object_size......................................................................................................................... 369
__builtin___ * _chk............................................................................................................................ 370
Funciones incorporadas varias................................................................................................................372
Funciones de manipulación de bits................................................................................................... 372
Funciones relacionadas con la optimización.....................................................................................376
Mover a/desde funciones de registro................................................................................................ 377
Funciones relacionadas con la memoria........................................................................................... 380
Funciones incorporadas de vector GCC soportadas...............................................................................381
Funciones incorporadas no vectoriales de GCC soportadas.................................................................. 385
Avisos............................................................................................................... 419
Índice............................................................................................................... 423
x
Acerca de este documento
Este documento es una referencia para el compilador IBM Open XL C/C++ para AIX 17.1.0 . Aunque
proporciona información sobre cómo compilar y enlazar aplicaciones escritas en C y C++, está pensada
principalmente como referencia para macros predefinidas, funciones incorporadas, variables de entorno y
bibliotecas.
Convenios
Convenios tipográficos
La tabla siguiente muestra los convenios tipográficos utilizados en la información de IBM Open XL C/C++
para AIX 17.1.0 .
Diagramas de sintaxis
A lo largo de esta información, los diagramas ilustran la sintaxis de IBM Open XL C/C++ . Esta sección le
ayuda a interpretar y utilizar estos diagramas.
• Lea los diagramas de sintaxis de izquierda a derecha, de arriba abajo, siguiendo la ruta de la línea.
El símbolo ▶▶─ ─ ─ indica el principio de un mandato, directiva o sentencia.
El símbolo ─ ─ ─▶ indica que la sintaxis del mandato, directiva o sentencia continúa en
la línea siguiente.
El símbolo ▶─ ─ ─ indica que un mandato, directiva o sentencia continúa desde la línea
anterior.
El símbolo ─ ─ ─▶◀ indica el final de un mandato, directiva o sentencia.
Los fragmentos, que son diagramas de unidades sintácticas que no son mandatos completos, directivas
o sentencias, empiezan con el símbolo │ ─ ─ ─ ─ y terminan con el símbolo
─ ─ ─ ─ │ .
• Si puede elegir entre dos o más elementos, se muestran verticalmente, en una pila.
Si debe elegir uno de los elementos, se muestra un elemento de la pila en la vía de acceso principal.
required_argument2
Si elegir uno de los elementos es opcional, toda la pila se muestra debajo de la ruta principal.
palabra clave
optional_argument1
optional_argument2
• Una flecha que vuelve a la izquierda sobre la línea principal (una flecha de repetición) indica que puede
elegir más de una opción entre los elementos apilados o repetir un elemento. El carácter separador, si
es distinto de un espacio en blanco, también se indica:
,
• Las palabras clave se muestran en letras no cursivas y deben introducirse exactamente como se
muestra.
• Las variables se muestran en minúsculas en cursiva. Representan nombres o valores proporcionados
por el usuario.
• Si se muestran signos de puntuación, paréntesis, operadores aritméticos u otros símbolos de este tipo,
debe especificarlos como parte de la sintaxis.
Información relacionada
Las secciones siguientes proporcionan información relacionada para IBM Open XL C/C++:
Para leer un archivo PDF, utilice Adobe Reader. Si no tiene Adobe Reader, puede descargarlo (sujeto a
los términos de la licencia) desde el sitio web de Adobe en http://www.adobe.com.
Para obtener más información sobre el compilador, consulte el compilador IBM Open XL en la comunidad
Power en http://ibm.biz/openxl-power-compilers.
Otras informaciones
• Utilización de GNU Compiler Collection disponible en http://gcc.gnu.org/onlinedocs.
Normas y especificaciones
IBM Open XL C/C++ está diseñado para dar soporte a los siguientes estándares y especificaciones.
Puede consultar estos estándares y especificaciones para obtener definiciones precisas de algunas de las
características que se encuentran en esta información.
• Tecnología de la información-Lenguajes de programación-C, ISO/IEC 9899:1990, también conocido
como C89.
• Tecnología de la información-Lenguajes de programación-C, ISO/IEC 9899:1999, también conocido
como C99.
• Tecnología de la información-Lenguajes de programación-C, ISO/IEC 9899:2017, también conocido
como C17.
• Tecnología de la información-Lenguajes de programación-C, ISO/IEC 9899:2011, también conocido
como C11.
• Tecnología de la información-Lenguajes de programación-C++, ISO/IEC 14882:1998, también conocido
como C++98.
Soporte técnico
El soporte técnico adicional está disponible en la página de soporte de IBM Open XL C/C++ en https://
www.ibm.com/mysupport/s/topic/0TO0z0000006v6TGAQ/xl-cc?productId=01t0z000007g72LAAQ. Esta
página proporciona un portal con funciones de búsqueda para una gran selección de notas técnicas y otra
información de soporte.
Si tiene alguna pregunta sobre el producto, acúyalo en los compiladores IBM C/C++ y Fortran en la
comunidad Power o abra un caso en https://www.ibm.com/mysupport/s/topic/0TO0z0000006v6TGAQ/
xl-cc?productId=01t0z000007g72LAAQ.
Para obtener la información más reciente sobre IBM Open XL C/C++ y IBM XL C/C++, visite el sitio de
información del producto en https://www.ibm.com/products/openxl-cpp-aix-compiler-power.
Lenguaje inclusivo
Aunque IBM valora el uso del lenguaje inclusivo, los términos que están fuera de la influencia directa
de IBMa veces son necesarios para mantener la comprensión del usuario. A medida que otros líderes
del sector se unen a IBM para adoptar el uso del lenguaje inclusivo, IBM continuará actualizando la
documentación, el código de producto y las interfaces de usuario para reflejar estos cambios.
Para obtener más información sobre esta iniciativa, lea el blog de Words matter en ibm.com
opciones de compilador
Puede elegir entre una gran selección de opciones de compiladorpara controlar el comportamiento del
compilador. Puede beneficiarse de la utilización de distintas opciones para las tareas siguientes:
• Depuración de las aplicaciones
• Optimización y ajuste del rendimiento de las aplicaciones
Bibliotecas
IBM Open XL C/C++ incluye un entorno de ejecución que contiene varias bibliotecas.
Otras bibliotecas
La biblioteca siguiente también se suministra con IBM Open XL C/C++:
• IBM Open XL C/C++ Runtime Library contiene rutinas de soporte que necesita el compilador.
Para obtener más información sobre el soporte para bibliotecas, busque en la página de soporte del
compilador IBM Open XL C/C++ en https://www.ibm.com/mysupport/s/topic/0TO0z0000006v6TGAQ/xl-
cc?productId=01t0z000007g72LAAQ.
Servicios públicos
Lista de CreateExport
El programa de utilidad CreateExportList crea un archivo que contiene una lista de todos los
símbolos exportables encontrados en un conjunto determinado de archivos de objeto.
ibm-bugpoint
El programa de utilidad ibm-bugpoint le permite crear un caso de prueba mínimo que se escribe
en lenguaje intermedio LLVM para que pueda reproducir los problemas que encuentra al utilizar el
compilador. Para obtener detalles sobre cómo utilizar ibm-bugpoint, ejecute este programa de
utilidad con la opción --help . Para obtener detalles del programa de utilidad bugpoint de código
abierto LLVM, consulte https://ibm.biz/llvm-v13-bugpoint.
ibm-clang-cpp
El programa de utilidad ibm-clang-cpp es un preprocesador C/C++ autónomo.
ibm-gen-list
Este programa de utilidad le permite ejecutar perfiles anotados con la herramienta tprof . ibm-gen-
list genera archivos de listado directamente a partir de binarios o archivos de objeto y depende
de la herramienta objdump para desensamblar los binarios o archivos de objeto. Además, para
añadir números de línea en los archivos de listado, utilice ibm-gen-list junto con la herramienta
llvm-dwarfdump . Para obtener más información sobre este programa de utilidad, consulte tprof
listado annotation con IBM Open XL compilers for AIX.
Nota: Para la herramienta objdump , puede utilizar llvm-objdump o instalar la herramienta GNU
objdump desde Toolbox for GNU Open Source Software.
ibm-llvm-cxxfilt
El programa de utilidad ibm-llvm-cxxfilt es un descodificador de símbolos que descodifica
los nombres mangled generados por IBM Open XL C/C++. Sustituye al programa de utilidad c +
+ filt name demangling que se enviaba en IBM XL C/C++ para AIX 16.1.0 y releases anteriores.
El programa de utilidad no demanda nombres de símbolo generados por xlC o sus mandatos de
invocación equivalentes en IBM XL C/C++. Para obtener detalles sobre cómo utilizar ibm-llvm-
cxxfilt, ejecute este programa de utilidad con la opción --help . Para obtener detalles del
programa de utilidad llvm-cxxfilt de código abierto LLVM, consulte https://ibm.biz/llvm-v13-llvm-
cxxfilt.
ibm-llvm-profdata
El programa de utilidad ibm-llvm-profdata le permite ver y fusionar información de comentarios
guiados por perfil (PGO) en archivos de datos de perfil. Para obtener detalles sobre cómo utilizar ibm-
llvm-profdata, ejecute este programa de utilidad con la opción --help . Para obtener detalles
del programa de utilidad llvm-profdata de código abierto LLVM, consulte https://ibm.biz/llvm-v13-
llvm-profdata.
Notas:
• Los programas de utilidad ibm-bugpoint, ibm-gen-listy ibm-llvm-cxxfilt están disponibles a
partir de IBM Open XL C/C++ para AIX 17.1.0.1.
• Estos programas de utilidad de compilador se suministran en el directorio /opt/IBM/openxlC/
17.1.0/bin/ excepto ibm-bugpoint, ibm-gen-listy ibm-llvm-cxxfilt, que son suministran en
el directorio /opt/IBM/openxlC/17.1.0/tools/ .
Optimización de programa
IBM Open XL C/C++ incorpora la infraestructura de compilador LLVM, por lo que el compilador da soporte
completo a las características de optimización de LLVM. El compilador proporciona varias opciones de
compilador que pueden ayudarle a controlar la optimización y el rendimiento de los programas.
Con estas opciones, puede realizar las tareas siguientes:
• Seleccionar diferentes niveles de optimizaciones de compilador
• Controlar optimizaciones para bucles, coma flotante y otros tipos de operaciones
• Optimizar un programa para una clase determinada de máquinas o para una configuración de máquina
específica, en función de dónde se ejecute el programa
La optimización de las transformaciones puede proporcionar a la aplicación un mejor rendimiento de
ejecución global. IBM Open XL C/C++ proporciona una cartera de transformaciones de optimización
adaptadas a diversos tipos de hardware soportados. Estas transformaciones ofrecen las siguientes
ventajas:
• Reducción del número de instrucciones ejecutadas para operaciones críticas
• Reestructuración del código de objeto generado para hacer un uso óptimo de los procesadores Power
Architecture
• Mejora del uso del subsistema de memoria
Para obtener más detalles, consulte Manual del usuario del compilador Clang.
Información relacionada
Funciones incorporadas del compilador
Informes de optimización
IBM Open XL C/C++ proporciona acceso a informes de optimización a través de la infraestructura de
comentarios LLVM.
La infraestructura de comentarios LLVM y las opciones se documentan en https://ibm.biz/llvm-v13-
remarks. Cada opción se debe pasar a uno de ibm-opt, ibm-llco LTOmediante las opciones -X o
-W .
Tenga en cuenta lo siguiente cuando utilice las opciones de infraestructura de comentarios LLVM:
• Si utiliza la opción --pass-remarks-output=< nombre_archivo> para guardar las observaciones de
optimización en un archivo, asegúrese de que sólo solicita observaciones de uno de ibm-opt, ibm-
llco LTO, o para guardar las observaciones de cada componente en un archivo distinto. Por ejemplo, el
mandato siguiente guarda las observaciones de ibm-opt en file.opt.yaml y las observaciones de
ibm-llc en file.llc.yaml:
• Debe habilitar la generación de números de línea de depuración (-g1 o -g) para obtener números de
línea en las observaciones de optimización, o para utilizar herramientas de visualización externas como
opt-viewer.py.
• Muchas optimizaciones LLVM producen comentarios. Puede utilizar las opciones de filtrado para
controlar la cantidad de información presentada.
variable=value
export variable
donde variable es el nombre de la variable de entorno y valor es el valor que asigna a la variable.
Para establecer variables de entorno en el shell C, utilice el mandato siguiente:
donde variable es el nombre de la variable de entorno y valor es el valor que asigna a la variable.
Para establecer las variables para que todos los usuarios tengan acceso a ellas, en los shells Bourne,
Korn y BASH, añada los mandatos al archivo /etc/profile. Para establecerlos sólo para un usuario
específico, añada los mandatos al archivo .profile en el directorio de inicio del usuario. En el shell
C, añada los mandatos al archivo /etc/csh.cshrc. Para establecerlos sólo para un usuario específico,
añada los mandatos al archivo .cshrc en el directorio de inicio del usuario. Las variables de entorno se
establecen cada vez que el usuario inicia la sesión.
En las secciones siguientes se describen las variables de entorno que puede establecer para IBM Open XL
C/C++ y las aplicaciones que ha compilado con él:
• “Variables de entorno de tiempo de compilación y de tiempo de enlace” en la página 7
• “Variables de entorno de ejecución” en la página 8
MODALIDAD_OBJETO
Opcionalmente especifica la modalidad de bits para la compilación en 32 o 64 bits. Esto es
equivalente a las opciones de compilador -m32 y -m64 . Establezca la variable de entorno
OBJECT_MODE en un valor de 32 para la modalidad de compilación de 32 bits, o 64 para la modalidad
de compilación de 64 bits. Si no se especifica, la modalidad de compilación predeterminada es de 32
bits.
PATH
Especifica la vía de acceso de búsqueda de directorio para los archivos ejecutables del compilador.
Los ejecutables están en /opt/IBM/openxlc/17.1.0/bin/ y /opt/IBM/openxlC/17.1.0/bin/ si están
instalados en el valor predeterminado ubicación.
TMPDIR
Opcionalmente especifica el directorio en el que se crean los archivos temporales durante la
compilación. La ubicación predeterminada, /tmp/, puede ser inadecuada en niveles altos de
optimización, donde la paginación y los archivos temporales pueden requerir cantidades significativas
de espacio de disco, por lo que puede utilizar esta variable de entorno para especificar un directorio
alternativo .
ibm-clang/ibm-clang_r archivo_entrada
opción_compilador
Para compilar un programa fuente C++, utilice la siguiente sintaxis de invocación básica:
ibm-clang + + _r archivo_entrada
opción_compilador
Puede utilizar ibm-clang + + _r, con las opciones adecuadas, para compilar el código fuente del programa
C o C++. Sin embargo, la compilación de archivos C++ con ibm-clang o ibm-clang_r puede dar como
resultado errores de enlace o de tiempo de ejecución porque las bibliotecas necesarias para el código
C++ no se especifican cuando el compilador C llama al enlazador.
Los mandatos de invocación ibm-clang_r y ibm-clang + + _r producen código de hebra segura.
invocación archivos_entrada
opciones_línea_mandato
invocación
Cualquier mandato de invocación de IBM Open XL C/C++ válido listado en “Invocación del
compilador” en la página 10.
Información relacionada
• “Tipos de archivos de entrada” en la página 11
• “Enlace de las aplicaciones compiladas con IBM Open XL C/C++” en la página 16
La lista siguiente describe los posibles conflictos de opciones y la resolución del compilador de estos
conflictos:
• El valor de -m32 o -m64 es incompatible con la opción -mcpu seleccionada por el usuario.
Resolución: El valor -m32 o -m64 altera temporalmente la opción -mcpu ; el compilador emite un
mensaje de aviso, establece -mcpu en su valor predeterminado y establece la opción -mtune en
consecuencia en su valor predeterminado.
• Seleccionado -mcpuEl compilador no conoce las opciones de .
Resolución: El compilador emite un mensaje de aviso, establece -mcpu a sus valores predeterminados.
La modalidad de compilador (de 32 bits o de 64 bits) viene determinada por la variable de entorno
OBJECT_MODE o -m32 o -m64 compilador valores.
Preproceso
El preproceso manipula el texto de un archivo fuente, normalmente como una primera fase de conversión
iniciada por una invocación de compilador.
Las tareas comunes que realiza el preproceso son la sustitución de macros, la prueba de directivas de
compilación condicionales y la inclusión de archivos.
Puede invocar el preprocesador por separado para procesar texto sin compilar. La salida es un archivo
intermedio, que se puede especificar para su posterior conversión. El preproceso sin compilación puede
ser útil como una ayuda de depuración porque proporciona una forma de ver el resultado de directivas de
inclusión, directivas de compilación condicionales y expansiones de macro complejas.
En la tabla siguiente se listan las opciones que dirigen la operación del preprocesador.
Si utiliza la opción -shared para crear una biblioteca compartida, el nombre predeterminado del
objeto compartido creado es shr.o. Puede utilizar la opción -o para renombrar el archivo y darle un
sufijo .so .
Orden de enlace
En esta sección se describe el orden en el que el compilador enlaza las bibliotecas.
El compilador enlaza bibliotecas en el orden siguiente:
1. Bibliotecas de arranque del sistema
2. Archivos y bibliotecas .o de usuario
3. IBM Open XL C/C++ Bibliotecas
4. Bibliotecas estándar libc + + C++
5. Bibliotecas estándar C
Información relacionada
• “Bibliotecas redistribuibles” en la página 18
Bibliotecas redistribuibles
Si crea la aplicación utilizando IBM Open XL C/C++, puede utilizar una o más de las siguientes bibliotecas
redistribuibles.
Si envía la aplicación, asegúrese de que los usuarios de la aplicación tienen los catálogos de archivos que
contienen las bibliotecas. Para asegurarse de que las bibliotecas necesarias están disponibles para los
usuarios de la aplicación, realice una de las acciones siguientes:
• Envíe los conjuntos de archivos que contienen las bibliotecas redistribuibles con la aplicación. Los
conjuntos de archivos se almacenan en el directorio runtime/en el CD de instalación.
• Dirigir a los usuarios de la aplicación a descargar las bibliotecas de tiempo de ejecución adecuadas de la
página Últimas actualizaciones para compiladores C y C++ de IBM soportados .
Para obtener información sobre los requisitos de licencia relacionados con la distribución de estos
paquetes de filesets, consulte el archivo LicenseAgreement.pdf en el paquete de compilador instalado.
Limitar el número de archivos para compilar y enlazar la segunda vez reduce el tiempo de compilación, la
actividad de disco y el uso de memoria.
Símbolos no resueltos
Cuando no se puede resolver un símbolo externo, se emite un error de enlazador. Los mensajes de
ejemplo son los siguientes:
La razón más común de los errores de símbolo no resueltos son los archivos de entrada que faltan. Puede
realizar una de las acciones siguientes para localizar los símbolos e incluir los archivos de entrada de
destino en los que se definen los símbolos durante el enlace:
• Incluya todas las bibliotecas suministradas durante el enlace para que el enlazador pueda encontrar
dónde están los símbolos.
Símbolos duplicados
Cuando dos o más funciones de los archivos de objeto enlazados tienen el mismo nombre, se emite un
mensaje de aviso. Los mensajes de ejemplo son los siguientes:
De forma predeterminada, el enlazador utiliza la primera definición que encuentra, lo que puede no
producir los resultados esperados. Para solucionar este problema, puede cambiar el nombre de la función
o crear la función static.
El uso de funciones de plantilla en C++ puede generar símbolos duplicados en el momento del
enlace cuando la plantilla se instancie implícitamente en varios archivos de origen.
Para buscar los símbolos definidos en varios archivos, puede utilizar el mandato nm .
Símbolos incompatibles
Si se define un símbolo con enlace C++ en un archivo de objeto generado por IBM Open XL C/C++ para
AIX 17.1.0 y al que se hace referencia en un archivo de objeto generado por el frontal clásico de IBM XL
C/C++ para AIX 16.1.0 o releases anteriores, o viceversa, se emite un error de enlazador. Los mensajes de
ejemplo son los siguientes:
Los nombres mangled por IBM Open XL C/C++ para AIX 17.1.0 son los definidos en Itanium C++ ABI.
Los archivos de objeto generados por el componente frontal clásico de IBM XL C/C++ para AIX 16.1.0 o
releases anteriores y IBM Open XL C/C++ para AIX 17.1.0 no son interoperables.
Información relacionada
Desarrollo y portación de aplicaciones C y C++ en AIX
Cancelación de la ejecución
Para suspender un programa en ejecución, pulse Ctrl + Z mientras el programa está en primer plano.
Utilice el mandato fg para reanudar la ejecución.
Para cancelar un programa en ejecución, pulse Ctrl + C mientras el programa está en primer plano.
También puede utilizar la opción de compilador -std para especificar un nivel de lenguaje. Si los
elementos de lenguaje o extensión de lenguaje del origen del programa no se ajustan al nivel de lenguaje
especificado, el compilador emite mensajes de diagnóstico.
IBM
En este capítulo se describen las características que son extensiones de IBM para las especificaciones de
lenguaje estándar.
Tabla 6. Extensiones de IBM Open XL C/C++ para dar soporte a la especificación de la interfaz de
programación de aplicaciones de AltiVec
Característica de idioma Se analiza en:
Extensiones de lenguaje de programación vectorial “Tipos de vector” en la página 33, “Literales
vectoriales” en la página 29
Inicialización de vectores
Un tipo de vector se inicializa mediante un literal de vector o cualquier expresión que tenga el mismo tipo
de vector.
Por ejemplo:
La especificación AltiVec permite que una lista de inicializadores inicialice un tipo de vector. Esta
característica es una extensión para la compatibilidad con GNU C.
A diferencia de los literales de vector, los valores de la lista de inicializadores no tienen que ser
expresiones constantes excepto en contextos en los que es necesario un valor constante; la
inicialización de una variable de vector global es un contexto de este tipo. Por lo tanto, se permite
lo siguiente código :
int i=1;
int function() { return 2; }
int main()
{
vector unsigned int v1 = {i, function()};
return 0;
}
Dado:
El operador vec_step
El operador vec_step toma un operando de tipo vector y devuelve un valor entero que representa la
cantidad en la que un puntero a un elemento vector debe incrementarse para moverse en 16 bytes (el
tamaño de un vector).
La tabla siguiente proporciona un resumen de valores por tipo de datos.
vec_step(vector pixel) 8
vec_step(vector float) 4
vec_step(vector double) 2
Para obtener información completa sobre el operador de vec_step , consulte el Manual de la interfaz
de programación de tecnología AltiVec, disponible en https://www.nxp.com/docs/en/reference-manual/
ALTIVECPIM.pdf
Nota:
1. Aunque la alineación preferida para los tipos de datos de vector está en un múltiplo de 16 bytes, los
punteros pueden apuntar a objetos de vector en cualquier alineación.
Operadores binarios
Para operadores binarios, cada elemento tiene la operación aplicada a él con el mismo elemento de
posición en el segundo operando. Los operadores binarios también incluyen operadores relacionales.
Para los operadores relacionales, cada elemento tiene la operación aplicada a él con el mismo elemento
de posición en el segundo operando y los resultados tienen el operador AND aplicado a ellos para obtener
un resultado final de un único valor.
Nota:
1. El operador [] devuelve el elemento vector en la posición especificada. Si la posición especificada está
fuera del rango válido, el comportamiento no está definido.
Para el código siguiente:
c tendría el valor (3,6,9,12), d tendría el valor (2,3,4,5), e tendría un valor distinto de cero y f
tendría el valor 3.
Literales vectoriales
Un literal de vector es una expresión constante para la que el valor se interpreta como un tipo de vector.
El tipo de datos de un literal de vector se representa mediante un tipo de vector entre paréntesis, y su
valor es un conjunto de expresiones constantes que representan los elementos de vector y están entre
paréntesis o llaves. Cuando todos los elementos de vector tienen el mismo valor, el valor del literal se
puede representar mediante una sola expresión constante. Puede inicializar tipos de vector con literales
de vector.
Sintaxis literal de vector
( tipo_vector ) ( lista_literales )
{ literal_list }
lista_literales
,
expresión_constante
vector_type es un tipo de vector soportado. Consulte “Tipos de vector” en la página 33 para obtener una
lista de estos.
La lista_literales puede ser una de las expresionessiguientes:
• Una sola expresión.
Si la expresión única está entre paréntesis, todos los elementos del vector se inicializan en el valor
especificado. Si la expresión única está entre llaves, el primer elemento del vector se inicializa en el
valor especificado y los elementos restantes del vector se inicializan en 0.
• Una lista separada por comas de expresiones. Cada elemento del vector se inicializa con el valor
especificado respectivamente.
El número de expresiones constantes viene determinado por el tipo del vector y por si está entre llaves
o paréntesis.
(vector unsigned char) (int sin signo) Un conjunto de 16 cantidades de 8 bits sin
firmar que tienen el valor del entero único.
(vector unsigned char){unsigned int}
(vector unsigned char) (int sin signo, ...) Un conjunto de 16 cantidades de 8 bits sin signo
con el valor especificado por cada uno de los 16
(vector unsigned char){unsigned int, ...} enteros.
(vector bool char) (int sin signo, ...) Un conjunto de 16 cantidades de 8 bits sin signo
con un valor especificado por cada uno de 16
(vector bool char){unsigned int, ...} enteros.
(vector sin signo corto) (unsigned int) Un conjunto de 8 cantidades de 16 bits sin
firmar que tienen el valor del entero único.
(vector sin signo corto){unsigned int}
(vector unsigned short) (int sin signo, ...) Un conjunto de 8 cantidades de 16 bits sin signo
con un valor especificado por cada uno de los 8
(vector sin signo corto){unsigned int, ...} enteros.
(vector bool short) (int sin signo) Un conjunto de 8 cantidades de 16 bits sin
firmar que tienen el valor del entero único.
(vector bool short){unsigned int}
(vector bool short) (int sin signo, ...) Un conjunto de 8 cantidades de 16 bits sin signo
con un valor especificado por cada uno de los 8
(vector bool short){unsigned int, ...} enteros.
(vector unsigned int) (int unsigned) Un conjunto de 4 cantidades de 32 bits sin signo
que tienen el valor del entero único.
(vector int sin signo){unsigned int}
(vector unsigned int) (int sin signo, ...) Un conjunto de 4 cantidades de 32 bits sin signo
con un valor especificado por cada uno de los 4
(vector int sin signo){unsigned int, ...} enteros.
(int con signo de vector) (int, ...) Un conjunto de 4 cantidades de 32 bits firmadas
con un valor especificado por cada uno de los 4
(int con signo de vector){Int, ...} enteros.
(vector bool int) (int sin signo) Un conjunto de 4 cantidades de 32 bits sin signo
que tienen el valor del entero único.
(vector bool int){unsigned int}
(vector bool int) (int sin signo, ...) Un conjunto de 4 cantidades de 32 bits sin signo
con un valor especificado por cada uno de los 4
(vector bool int){unsigned int, ...} enteros.
(vector unsigned long long) (long long unsigned) Un conjunto de 2 cantidades de 64 bits sin
firmar que tienen el valor de la longitud larga
(vector largo sin signo){larga no firmada} única.
(vector unsigned long long) (long long unsigned, ...) Un conjunto de 2 cantidades de 64 bits sin signo
especificadas con un valor por cada uno de los 2
(vector largo sin signo){larga no firmada, ...} largos sin signo.
(longitud larga firmada por vector) (longitud larga Un conjunto de 2 cantidades de 64 bits firmadas
firmada) que tienen el valor de la longitud larga única.
(vector signed long long) (long signed long long, ...) Un conjunto de 2 cantidades de 64 bits firmadas
con un valor especificado por cada uno de los 2
(largo largo con signo de vector){larga firmada, ...} largos.
(longitud larga de vector bool) (longitud larga sin Un conjunto de 2 cantidades booleanas de 64
signo) bits con un valor especificado por la única
longitud larga sin signo.
(vector bool long long){larga no firmada}
(vector bool long long) (long long sin signo, ...) Un conjunto de 2 cantidades booleanas de 64
bits con un valor especificado por cada uno de
(vector bool long long){larga no firmada, ...} los 2 largos sin signo.
(píxel vector) (unsigned int, ...) Un conjunto de 8 cantidades de 16 bits sin signo
con un valor especificado por cada uno de los 8
(píxel vector){unsigned int, ...} enteros.
Nota: El valor de un elemento en un vector bool es FALSE si cada bit del elemento se establece en 0 y
TRUE si cada bit del elemento se establece en 1.
Por ejemplo, para un tipo de vector entero sin signo, el literal podría ser uno de los siguientes:
Puede convertir literales de vector con el operador de conversión (). Encerrar el literal de vector que se va
a convertir entre paréntesis puede mejorar la legibilidad del código. Por ejemplo, puede utilizar el código
siguiente para convertir un literal vector signed int en un literal vector unsigned char :
Nota: También puede acceder y manipular elementos individuales de vectores con las siguientes
funciones intrínsecas:
Tipos de vector
IBM Open XL C/C++ da soporte a las tecnologías de procesamiento vectorial a través de extensiones de
lenguaje.
IBM Open XL C/C++ implementa y amplía la especificación de la interfaz de programación AltiVec. En
la sintaxis ampliada, los calificadores de tipo y los especificadores de clase de almacenamiento pueden
preceder a la palabra clave vector (o su ortografía alternativa , __vector) en una declaración.
La mayoría de las formas legales de la sintaxis se capturan en el diagrama siguiente. Algunas variaciones
se han omitido del diagrama en aras de la claridad: los calificadores de tipo como const y los
especificadores de clase de almacenamiento como static pueden aparecer en cualquier orden dentro
de la declaración, siempre que ninguno de los dos siga inmediatamente la palabra clave vector (o
__vector).
Sintaxis de declaración de vector
calificador_tipo
especificador_clase_almacenamiento
unsigned int
int
long long
pixel
__pixel
1
_pair
2
_cuádruple
float
doble
Notas:
1 Este tipo es válido cuando -mcpu se establece en procesadores Power10 de destino.
2 Este tipo es válido cuando -mcpu se establece en procesadores Power10 de destino.
Nota: Los tipos __vector_pair y __vector_quad sólo son válidos cuando -mcpu está establecido en
procesadores Power10 de destino.
serie_formato_código
:
Salida :
INPUT :
clobbers
INPUT
,
restricción ( expresión_C )
modificador
Salida
,
volátil
El calificador volatile indica al compilador que realice sólo optimizaciones mínimas en el bloque de
ensamblaje. El compilador no puede mover ninguna instrucción a través de las vallas implícitas que
rodean el bloque de ensamblaje. Consulte el Ejemplo 1 para obtener información de uso detallada.
serie_formato_código
code_format_string es el texto de origen de las instrucciones de asm y es un literal de serie similar a
un especificador de formato printf .
Se hace referencia a los operandos en el formato %integer , donde entero hace referencia al
número secuencial del operando de entrada o salida. Consulte el Ejemplo 1 para obtener información
detallada sobre el uso.
Para aumentar la legibilidad, a cada operando se le puede asignar un nombre simbólico entre
corchetes. En la sección de código de ensamblador, puede hacer referencia a cada operando en el
Construcciones soportadas
Las sentencias de ensamblaje en línea dan soporte a las construcciones siguientes:
• Todas las sentencias de instrucción listadas en la publicación Assembler Language Reference
• Todos los nemotécnicos de instrucción ampliada
• Definiciones de etiqueta
• Ramificaciones a etiquetas
Construcciones no soportadas
Las sentencias de ensamblaje en línea no dan soporte a las construcciones siguientes:
• Sentencias de pseudooperación, que son sentencias de ensamblaje que empiezan por un punto (.),
como por ejemplo .function
• Ramificaciones entre distintos bloques de asm
#include <stdio.h>
" ori %1,%1,1 \n" // Sets the return value for the
// function acquireLock to true.
return returnvalue;
}
int main()
{
int myLock;
if(acquireLock(&myLock)){
printf("got it!\n");
}else{
printf("someone else got it\n");
}
return 0;
}
En este ejemplo, %0 hace referencia al primer operando "+r"(lockval), %1 hace referencia al segundo
operando "+r"(returnvalue)y %2 hace referencia al tercer operando "r"(lock).
La sentencia de ensamblaje utiliza un bloqueo para controlar el acceso al almacenamiento compartido;
ninguna instrucción puede acceder al almacenamiento compartido antes de adquirir el bloqueo.
La palabra clave volatile implica vallas alrededor del grupo de instrucciones de ensamblaje, por lo que
no se puede mover ninguna instrucción de ensamblaje fuera o alrededor del bloque de ensamblaje.
Sin la palabra clave volatile , el compilador puede mover las instrucciones para la optimización. Esto
puede hacer que algunas instrucciones accedan al almacenamiento compartido sin adquirir el bloqueo.
No es necesario utilizar el clobber memory en esta sentencia de ensamblaje, porque las instrucciones no
modifican la memoria de una forma inesperada. Si utiliza el clobber de memory , el programa sigue siendo
funcionalmente correcto. Sin embargo, el clobber memory da lugar a muchas recargas innecesarias, lo
que impone una penalización del rendimiento.
Ejemplo 2: el ejemplo siguiente ilustra el uso de los nombres simbólicos para los operandos de entrada y
salida.
int a ;
int b = 1, c = 2, d = 3 ;
__asm(" addc %[result], %[first], %[second]"
: [result] "=r" (a)
: [first] "r" (b),
[second] "r" (d)
);
En este ejemplo, %[result] hace referencia a la variable de operando de salida a, %[first] hace
referencia a la variable de operando de entrada by %[second] hace referencia a la variable de operando
de entrada d.
Ejemplo 3: El ejemplo siguiente muestra un uso típico de registros de condición en los clobbers.
En este ejemplo, aparte de los registros listados en la entrada y salida de la sentencia de ensamblaje,
la instrucción add. también afecta al campo de registro de condición 0. Por lo tanto, debe informar al
compilador sobre esto añadiendo cr0 a los clobbers.
Ejemplo 4: El ejemplo siguiente muestra el uso del clobber de memory .
En este ejemplo, la instrucción dcbz borra un bloque de memoria caché y puede haber cambiado las
variables en la ubicación de memoria. No hay forma de que el compilador sepa qué variables se han
modificado. Por lo tanto, el compilador presupone que todos los datos pueden tener alias con la memoria
cambiada por esa instrucción.
Como resultado, todo lo que se necesita debe volver a cargarse desde la memoria después de la
finalización de la sentencia de ensamblaje. El clobber de memory garantiza la corrección del programa a
expensas del rendimiento del programa, porque el compilador puede volver a cargar datos que no tienen
nada que ver con la sentencia de ensamblaje.
Ejemplo 5: el ejemplo siguiente muestra el uso del modificador = y la restricción r .
int a ;
int b = 100 ;
int c = 200 ;
asm(" add %0, %1, %2"
: "=r" (a)
: "r" (b),
"r" (c)
);
La instrucción add añade el contenido de dos registros de finalidad general. Los operandos %0, %1y %2 se
sustituyen por las expresiones C en los campos de operando de salida/entrada.
El operando de salida utiliza el modificador = para indicar que es necesario un operando modificable;
utiliza la restricción r para indicar que es necesario un registro de finalidad general. Del mismo modo,
la restricción r en los operandos de entrada indica que los registros de finalidad general son necesarios.
Dentro de estas restricciones, el compilador puede elegir cualquier registro para sustituir %0, %1y %2.
Nota: Si el compilador elige r0 para el segundo operando, la instrucción add utiliza el valor literal 0 y
produce un resultado inesperado. Por lo tanto, para evitar que el compilador elija r0 para el segundo
operando, puede utilizar la restricción b para indicar el segundo operando.
Ejemplo 6: El ejemplo siguiente muestra el uso del modificador + y la restricción K .
char res[8]={'a','b','c','d','e','f','g','h'};
char a='y';
int index=7;
En este ejemplo, la restricción b indica al compilador que elija un registro general que no sea r0 para el
operando de entrada %1. La serie de resultado de este programa es abcdefgy. Sin embargo, si utiliza la
restricción r y el compilador elige r0 para %1, esta instrucción genera una serie de resultado incorrecta
ybcdefgh. Para las instrucciones que tratan especialmente la designación de r0 , por lo tanto, es
importante indicar los operandos de entrada con la restricción b .
Ejemplo 9: el ejemplo siguiente muestra el uso de la restricción m .
-b
Pragma equivalente
Ninguna.
objetivo
Establece opciones de proceso de enlazador especiales. Esta opción se puede repetir.
Sintaxis
dinámico
-b compartido
estático
Valores predeterminados
-bdinámico
parámetros
dynamic | compartido
Hace que el enlazador procese los objetos compartidos subsiguientes en modo dinámico. En la
modalidad dinámica, los objetos compartidos no se incluyen estáticamente en el archivo de salida. En
su lugar, los objetos compartidos se listan en la sección de cargador del archivo de salida.
estático
Hace que el enlazador procese los objetos compartidos subsiguientes en modalidad estática. En
modalidad estática, los objetos compartidos se enlazan estáticamente en el archivo de salida.
Uso
La opción predeterminada, -bdynamic, garantiza que la biblioteca C (libc) se enlace dinámicamente.
Para evitar posibles problemas con errores de enlazador no resueltos al enlazar la biblioteca C, debe
añadir la opción -bdynamic al final de cualquier sección de compilación que utilice la opción -bstatic .
Macros predefinidas
No procede.
-B
Pragma equivalente
Ninguna.
objetivo
Especifica nombres de vía de acceso de sustitución de para componentes de IBM Open XL C/C++ como,
por ejemplo, el ensamblador, el preprocesador C y el enlazador.
Puede utilizar esta opción si desea mantener varios niveles de algunos o todos los ejecutables de IBM
Open XL C/C++ y tiene la opción de especificar cuál desea utilizar.
Sintaxis
-B
Prefijo
Valores predeterminados
Las vías de acceso predeterminadas para los ejecutables del compilador se definen en el archivo de
configuración del compilador.
parámetros
Prefijo
Debe añadir una barra inclinada (/). Si especifica la opción -B sin prefijo, el prefijo predeterminado
es /lib/o.
Uso
Cuando se utiliza la opción -B , el prefijo que especifique se aplica a todos los ejecutables del compilador.
Macros predefinidas
Ninguna.
Ejemplos
En este ejemplo, se instala un nivel anterior de los componentes del compilador en el directorio de
instalación predeterminado. Para probar el producto actualizado antes de ponerlo a disposición de todo
el mundo, el administrador del sistema restaura la imagen de instalación más reciente bajo el directorio /
home/jim y, a continuación, lo prueba con mandatos similares a:
Una vez que la actualización cumple los criterios de aceptación, el administrador del sistema la instala en
el directorio de instalación predeterminado.
Información relacionada
• La opción -B que proporciona GCC. Para obtener detalles, consulte la documentación en línea de GCC
en http://gcc.gnu.org/onlinedocs/.
objetivo
Establece el tamaño máximo del área compartida por los datos estáticos (tanto inicializados como no
inicializados) y el almacenamiento dinámico.
Sintaxis
-bmaxdata : número
Valores predeterminados
-bmaxdata:0
parámetros
número
Número de bytes utilizados que representan el ulimit flexible establecido por el cargador del sistema.
• Para programas de 32 bits, el valor máximo permitido por el sistema es 0x80000000 para
programas que se ejecutan con soporte de programa grande y 0xD0000000 para programas que
se ejecutan con soporte de programa muy grande. Para obtener detalles, consulte Soporte de
programa grande en la documentación de AIX .
• Para programas de 64 bits, la opción -bmaxdata proporciona un tamaño máximo garantizado para
el almacenamiento dinámico de datos de programas. Puede especificar cualquier valor, pero el área
de datos no puede extenderse más allá de 0x06FFFFFFFFFFFFF8 independientemente del valor
que haya especificado.
Macros predefinidas
Ninguna.
-bplugin
objetivo
Especifica la vía de acceso completa al plug-in de optimización de tiempo de enlace (LTO). Por ejemplo,
libLTO.so.
Sintaxis
-bplugin:/path/to/plugin/libLTO.so
Uso
Esta opción la genera un compilador al enlazar con la opción -flto .
Sintaxis
-bplugin_opt:<llvm-option>
Nota: El parámetro <llvm-option> puede ser cualquiera de los parámetros soportados por “-mllvm” en
la página 60.
-brtl
Pragma equivalente
Ninguna.
objetivo
Habilita el enlace en tiempo de ejecución para el archivo de salida. Cuando se utiliza -brtl con la opción
-l , el enlazador busca una biblioteca con el sufijo .so, así como de .a. Se da preferencia a .so sobre .a
cuando las bibliotecas con el mismo nombre están presentes en el mismo directorio.
El enlace en tiempo de ejecución es la capacidad de resolver símbolos no definidos y no aplazados
en módulos compartidos después de que la ejecución del programa ya haya comenzado. Es un
mecanismo para proporcionar definiciones de tiempo de ejecución (estas definiciones de función no
están disponibles en el momento del enlace) y prestaciones de reenlace de símbolos. La compilación con
-brtl añade una referencia al enlazador de tiempo de ejecución al programa, al que llamará el código
de inicio del programa (/lib/crt0.o) cuando empiece la ejecución del programa. Los archivos de entrada de
objetos compartidos se listan como dependientes en la sección de cargador de programas en el mismo
orden en que se especifican en la línea de mandatos. Cuando se inicia la ejecución del programa, el
cargador del sistema carga estos objetos compartidos para que sus definiciones estén disponibles para el
enlazador de tiempo de ejecución.
Sintaxis
-brtl
Uso
La aplicación principal se debe crear para habilitar el enlace de tiempo de ejecución. El cargador del
sistema debe ser capaz de cargar y resolver todos los símbolos referenciados en el programa principal y
los módulos llamados, o el programa no se ejecutará.
Macros predefinidas
Ninguna.
Información relacionada
• “-b” en la página 43
objetivo
Indica al compilador que compile o ensamble sólo los archivos de origen, pero no enlace. Con esta
opción, la salida es un archivo .o para cada archivo fuente.
Sintaxis
-c
Valores predeterminados
De forma predeterminada, el compilador invoca el enlazador para enlazar archivos de objeto en un
ejecutable final.
Uso
Cuando esta opción está en vigor, el compilador crea un archivo de objeto de salida, nombre_archivo.o,
para cada archivo de origen válido, como por ejemplo nombre_archivo.c, nombre_archivo.i,
nombre_archivo.C, nombre_archivo.cppo nombre_archivo.s. Puede utilizar la opción -o para proporcionar
un nombre explícito para el archivo de objeto.
La opción -c se altera temporalmente si -E o -fsyntax-sólo .
Macros predefinidas
Ninguna.
Ejemplos
Para compilar myprogram.c para producir un archivo de objeto myprogram.o, pero ningún archivo
ejecutable, especifique el mandato:
ibm-clang myprogram.c -c
Para compilar myprogram.c para producir el archivo de objeto new.o y ningún archivo ejecutable,
especifique el mandato:
Información relacionada
• “-E” en la página 50
• “-o” en la página 63
-C
Pragma equivalente
Ninguna.
Sintaxis
-c
Valores predeterminados
-C no está en vigor
Uso
La opción -C no tiene ningún efecto sin -E . Si se especifica -E , las secuencias de continuación se
conservan en la salida.
Macros predefinidas
Ninguna.
Ejemplos
Para compilar myprogram.c para producir un archivo myprogram.i que contenga el texto del programa
preprocesado, incluidos los comentarios, entre:
ibm-clang myprogram.c -P -C
Información relacionada
• “-E” en la página 50
-D
Pragma equivalente
Ninguna.
objetivo
Define una macro como en una directiva de preprocesador #define .
Sintaxis
-D nombre
= definición
Valores predeterminados
No procede.
Uso
Si se utiliza la directiva #define para definir un nombre de macro ya definido por la opción -D , se
producirá una condición de error.
Para ayudar en la portabilidad del programa y la conformidad con los estándares, el sistema operativo
proporciona varios archivos de cabecera que hacen referencia a nombres de macro que puede establecer
con la opción -D . Puede encontrar la mayoría de estos archivos de cabecera en el directorio /usr/
include o en el directorio /usr/include/sys . Para asegurarse de que se han definido las macros correctas
para el archivo de origen, utilice la opción -D con el nombre de macro adecuado. Por ejemplo, si el
archivo de origen incluye el archivo de cabecera /usr/include/sys/stat.h , debe compilar con la opción
-D_POSIX_SOURCE para recoger las definiciones correctas para ese archivo.
La opción -Unombre , que se utiliza para desdefinir macros definidas por la opción -D , tiene una prioridad
más alta que la opción -Dnombre .
Macros predefinidas
El archivo de configuración del compilador utiliza la opción -D para predefinir varios nombres de macro
para mandatos de invocación específicos. Para obtener detalles, consulte el archivo de configuración del
sistema.
Información relacionada
• -U
• Capítulo 8, “Macros predefinidas del compilador”, en la página 83
• "Archivos de cabecera" en la publicación AIX Referencia de archivos
-e
Pragma equivalente
Ninguna.
objetivo
Cuando se utiliza junto con la opción -shared o la opción -G, especifica un punto de entrada para un
objeto compartido.
Sintaxis
-e nombre_entrada
Valores predeterminados
No procede.
Uso
Especifique la opción -e sólo con la opción -shared o -G .
Nota: Cuando enlace archivos de objeto, no utilice la opción -e . El punto de entrada predeterminado de
la salida ejecutable es __start. El cambio de esta etiqueta con el distintivo -e puede producir errores.
Macros predefinidas
Ninguna.
Información relacionada
-E
Pragma equivalente
Ninguna.
objetivo
Preprocesa los archivos fuente nombrados en la invocación del compilador, sin compilar.
Sintaxis
-e
Valores predeterminados
De forma predeterminada, los archivos fuente se preprocesan, compilan y enlazan para producir un
archivo ejecutable.
Uso
Los archivos de origen con sufijos de nombre de archivo no reconocidos se tratan y se preprocesan como
archivos C.
A menos que se especifique -C , los comentarios se sustituyen en la salida preprocesada por un único
carácter de espacio. Se emiten nuevas líneas y directivas #line para los comentarios que abarcan varias
líneas de origen.
La opción -E altera temporalmente -fsyntax-sólo . La combinación de -E -o almacena el resultado
preprocesado en el archivo especificado por -o.
Macros predefinidas
Ninguna.
Ejemplos
Si myprogram.c tiene un fragmento de código como:
#define SUM(x,y) (x + y)
int a ;
ibm-clang myprogram.c -E
La salida es:
int a ;
int b ;
int c ;
c = a + b ;
Información relacionada
• “-C” en la página 47
-frestrict-args
objetivo
La especificación de esta opción es equivalente a añadir la palabra clave restrict a los parámetros de
puntero dentro de todas las funciones, excepto que no es necesario modificar el archivo fuente.
Sintaxis
norestrict-args
-f restric-args
Valor predeterminado
-fnorestrict-args. Esto significa que no hay parámetros de puntero de función restringidos, a menos
que especifique el atributo restrict en el archivo de origen.
Uso
El uso de esta opción puede mejorar el rendimiento de la aplicación, pero la afirmación incorrecta de esta
restricción de puntero puede hacer que el compilador genere un código incorrecto basado en el supuesto
falso. Si la aplicación funciona correctamente cuando se vuelve a compilar sin -frestrict-args, la
aserción puede ser falsa. En este caso, no utilice esta opción.
Macro predefinida
Ninguna.
-g
Pragma equivalente
Ninguna.
objetivo
Genera información de depuración para que la utilice un depurador simbólico y pone el estado del
programa a disposición de la sesión de depuración en las ubicaciones de origen seleccionadas.
El estado de programa hace referencia a los valores de las variables de usuario en determinados puntos
durante la ejecución de un programa.
Sintaxis
-g0
-g
0
Valores predeterminados
Si no se especifica -g , entra en vigor -g0 , lo que significa que el compilador no genera ninguna
información de depuración ni conserva el estado del programa.
Si se especifica -g , el valor predeterminado es -g2.
parámetros
-g0
No genera información de depuración. No se conserva ningún estado de programa.
-g1
Genera información de depuración de sólo lectura mínima sobre números de línea y nombres
de archivo de origen. No se conserva ningún estado de programa. Esta opción es equivalente a
-qlinedebug.
-g2
Genera información de depuración de sólo lectura sobre números de línea, nombres de archivo de
origen y variables.
Uso
Cuando no hay ninguna optimización habilitada, la información de depuración siempre está disponible si
especifica -g2.
Nota: El release actual de DBX no da soporte a la información de depuración generada por IBM Open XL
C/C++ para AIX 17.1.0. Está previsto un futuro release de DBX para añadir este soporte.
El mandato siguiente utiliza un nivel -g específico con -O2 para compilar myprogram.c y generar
información de depuración:
-I
Pragma equivalente
Ninguna.
objetivo
Añade un directorio a la vía de acceso de búsqueda para los archivos de inclusión.
Sintaxis
-I vía_acceso_directorio
Valores predeterminados
Consulte “Secuencia de búsqueda de directorio para archivos incluidos” en la página 15 para obtener una
descripción de las vías de acceso de búsqueda predeterminadas.
parámetros
vía_acceso_directorio
La vía de acceso del directorio en el que el compilador debe buscar los archivos de cabecera.
Uso
Si -nostdinc o -nostdinc + + está en vigor, el compilador busca sólo las vías de acceso especificadas
por la opción -I para los archivos de cabecera, y no también las vías de acceso de búsqueda estándar.
Si se especifica la opción de directorio -I tanto en el archivo de configuración como en la línea de
mandatos, primero se busca en las vías de acceso especificadas en el archivo de configuración. La opción
de directorio -I se puede especificar más de una vez en la línea de mandatos. Si especifica más de una
opción -I , se busca en los directorios en el orden en que aparecen en la línea de mandatos.
La opción -I no tiene ningún efecto en los archivos que se incluyen utilizando un nombre de vía de acceso
absoluta.
Macros predefinidas
Ninguna.
Ejemplos
Para compilar myprogram.c y buscar /usr/tmp y, a continuación, /oldstuff/history los archivos
incluidos, especifique:
objetivo
Busca para el archivo de biblioteca especificado. Para enlaces estáticos y dinámicos, el enlazador busca
libkey.a. Para el enlace en tiempo de ejecución con la opción -brtl , el enlazador busca libkey.soy, a
continuación, libkey.a si no se encuentra libkey.so .
Sintaxis
-l clave
Valores predeterminados
El valor predeterminado del compilador es buscar sólo algunas de las bibliotecas de tiempo de ejecución
del compilador. El archivo de configuración predeterminado especifica los nombres de biblioteca
predeterminados que se deben buscar con la opción de compilador -l y la vía de acceso de búsqueda
predeterminada para las bibliotecas con la opción de compilador -L .
Las bibliotecas de tiempo de ejecución C y C++ se añaden automáticamente.
parámetros
clave
El nombre de la biblioteca menos los caracteres lib y .a o .so .
Uso
También debe proporcionar información de vía de acceso de búsqueda adicional para las bibliotecas no
ubicadas en la vía de acceso de búsqueda predeterminada. La vía de acceso de búsqueda se puede
modificar con la opción -L o -Wl, -Z . Consulte “-B” en la página 44, “-brtl” en la página 46y “-b” en la
página 43 para obtener información sobre cómo especificar los tipos de bibliotecas que se buscan (para
enlaces estáticos o dinámicos).
La opción -l es acumulativa. Los aspectos posteriores de la opción -l en la línea de mandatos no
sustituyen, sino que añaden a, la lista de bibliotecas especificadas por apariciones anteriores de -l. Las
bibliotecas se buscan en el orden en el que aparecen en la línea de mandatos, por lo que el orden en el
que especifique las bibliotecas puede afectar a la resolución de símbolos en la aplicación.
Para obtener más información, consulte la documentación de ld correspondiente a su sistema operativo.
Macros predefinidas
Ninguna.
Ejemplos
Para compilar myprogram.c y enlazarlo con la biblioteca libmylibrary.a que se encuentra en el
directorio /usr/mylibdir , especifique el mandato siguiente:
Información relacionada
• “-L” en la página 55
• “-b” en la página 43
• “-brtl” en la página 46
-L
Pragma equivalente
Ninguna.
objetivo
Búsquedas la vía de acceso del directorio los archivos de biblioteca especificados por la opción -l .
Sintaxis
-L vía_acceso_directorio
Valores predeterminados
El valor predeterminado es buscar sólo en los directorios estándar. Consulte el archivo de configuración
del compilador para los directorios que se establecen de forma predeterminada.
parámetros
vía_acceso_directorio
La vía de acceso del directorio en el que se deben buscar los archivos de biblioteca.
Uso
Cuando enlaza bibliotecas compartidas en un ejecutable, la especificación de las vías de acceso a las
bibliotecas con la opción -L durante el enlace también incorpora la información de vía de acceso en
el ejecutable, por lo que las bibliotecas compartidas se pueden ubicar correctamente en tiempo de
ejecución. Si no especifica ninguna vía de acceso con -L durante este enlace y además impide que el
compilador pase automáticamente los argumentos -L al enlazador utilizando la opción de enlazador
-bnolibpath , sólo se incorporarán en el archivo ejecutable las vías de acceso especificadas por la
variable de entorno LIBPATH.
Si se especifica la opción -Ldirectorio tanto en el archivo de configuración como en la línea de mandatos,
las vías de acceso de búsqueda especificadas en el archivo de configuración son las primeras en buscar.
La opción de compilador -L es acumulativa. Las apariciones posteriores de -L en la línea de mandatos no
sustituyen, sino que añaden, las vías de acceso de directorio especificadas por apariciones anteriores de
-L.
Para obtener más información, consulte la documentación de ld correspondiente a su sistema operativo.
Ejemplos
Para compilar myprogram.c para que se busque en el directorio /usr/tmp/old la biblioteca
libspfiles.a, entre:
Información relacionada
• “-l” en la página 54
-M
Pragma equivalente
Ninguna.
objetivo
Genera los archivos de dependencia que utiliza la herramienta make para cada archivo de origen.
El archivo de salida de dependencia se denomina con un sufijo .u .
Sintaxis
-m
Valores predeterminados
No procede.
Uso
Para cada archivo de origen con un sufijo .c, .C, .cpp, o .i denominado en la línea de mandatos, se genera
un archivo de salida de dependencia con el mismo nombre que el archivo de objeto pero con un sufijo .u .
Los archivos de salida de dependencia no se crean para ningún otro tipo de archivos de entrada. Si utiliza
la opción -o para renombrar el archivo de objeto, el nombre del archivo de salida de dependencia se basa
en el nombre especificado en la opción -o . Para obtener más información, consulte la sección Ejemplos.
El archivo de salida de dependencia especifica una regla separada para cada una de las dependencias del
archivo de origen principal . Los archivos de salida de dependencia generados por estas opciones no son
archivos de descripción make ; se deben enlazar antes de que se puedan utilizar con el mandato make .
Para obtener más información sobre este mandato, consulte la documentación del sistema operativo.
El archivo de salida contiene una línea para el archivo de entrada y una entrada para cada archivo de
inclusión. Tiene la forma general:
file_name.o:include_file_name
file_name.o:file_name.suffix
Macros predefinidas
Ninguna.
Ejemplos
Ejemplo 1: Para compilar mysource.c y crear un archivo de salida de dependencia denominado
mysource.u, entre:
ibm-clang -c -M mysource.c
Ejemplo 4: Para compilar foo_src.c y crear un archivo de objeto denominado foo_obj.o y un archivo
de salida de dependencia denominado foo_obj.u, entre:
Ejemplo 5: Para compilar foo_src.c y crear un archivo de objeto denominado foo_obj.o y un archivo
de salida de dependencia denominado mysource.u, entre:
Ejemplo 6: Para compilar foo_src1.c y foo_src2.c para crear dos archivos de salida de dependencia,
denominados foo_src1.u y foo_src2.u respectivamente, en el directorio /tmp/, entre:
Información relacionada
• “-MF” en la página 60
• “-o” en la página 63
• “Secuencia de búsqueda de directorio para archivos incluidos” en la página 15
• Para obtener detalles sobre las opciones -M, -MD, -MF, -MG, -MM, -MMD, -MP, -MQy -MT , consulte la
documentación en línea de GCC en http://gcc.gnu.org/onlinedocs/.
-mcpu
Pragma equivalente
Ninguna.
Sintaxis
power7
pwr7
-m cpu = native
powerpc
powerpc64
ppc
ppc64
ppc64gr
ppc64grsq
ppcgr
pwr8
power8
pwr9
power9
pwr10
power10
Valores predeterminados
• -mcpu=pwr7 o -mcpu=power7
parámetros
nativo
Detecta automáticamente la arquitectura específica de la máquina de compilación. Presupone que el
entorno de ejecución será el mismo o más reciente que el entorno de compilación.
powerpc|ppc
En modalidad de 32 bits, genera código de objeto que contiene instrucciones que se ejecutan en
cualquiera de las plataformas de hardware PowerPC de 32 bits. La subopción powerpc hace que
el compilador genere instrucciones de precisión única que se utilizarán con datos de precisión
única. Especificación de -mcpu=powerpc junto con -m64 actualiza de forma silenciosa el valor de
arquitectura a -mcpu=powerpc64.
La subopción ppc es funcionalmente equivalente a la subopción powerpc . powerpc es la subopción
preferida.
powerpc64|ppc64
Genera código de objeto que se ejecuta en cualquiera de las plataformas de hardware PowerPC de
64 bits. La subopción powerpc64 se puede seleccionar cuando se compila en modalidad de 32 bits,
pero el código de objeto resultante puede incluir instrucciones que no se reconocen o se comportan
de forma diferente cuando se ejecuta en plataformas PowerPC de 32 bits.
La subopción ppc64 es funcionalmente equivalente a la subopción powerpc . powerpc64 es la
subopción preferida.
Uso
Especifique el nivel -mcpu para la arquitectura más baja en la que el programa necesita ejecutarse. Si se
pasa a los valores más recientes de -mcpu puede mejorar el rendimiento.
Para un programa de aplicación determinado, asegúrese de especificar el mismo valor -mcpu al compilar
cada uno de sus archivos de origen. Aunque el enlazador y el cargador pueden detectar archivos de objeto
compilados con valores -mcpu incompatibles, no debe basarse en ellos.
Macros predefinidas
Consulte “Macros relacionadas con los valores de arquitectura” en la página 87 para obtener una lista
de macros predefinidas por las subopciones -mcpu .
Ejemplos
Para especificar que el programa ejecutable testing compilado desde myprogram.c se ejecute en un
sistema con soporte de instrucción VSX de , por ejemplo, power8, entre:
Información relacionada
• “Especificación de opciones de compilador para la compilación específica de la arquitectura” en la
página 13
-MF
Pragma equivalente
Ninguna.
objetivo
Especifica el nombre o la ubicación de los archivos de salida de dependencia generados por la opción -M .
Para obtener más información sobre las opciones -M, consulte “-M” en la página 56.
Sintaxis
-MF vía_acceso_archivo
Valores predeterminados
Si no se especifica -MF , el archivo de salida de dependencia se genera con el mismo nombre que el
archivo de objeto pero con un sufijo .u en el directorio de trabajo actual.
parámetros
vía_acceso_archivo
La vía de acceso de salida de destino. vía_acceso_archivo puede ser una vía de acceso de directorio
completa o un nombre de archivo. Si vía_acceso_archivo es el nombre de un directorio, el archivo de
dependencia generado por el compilador se coloca en el directorio especificado. Si no especifica un
directorio, el archivo de dependencia se almacena en el directorio de trabajo actual.
Uso
Si el archivo especificado por la opción -MF ya existe, se sobrescribirá.
Si especifica un único nombre de archivo para la opción -MF al compilar varios archivos de origen, sólo
se generará un único archivo de dependencia. El archivo de dependencias contiene la regla make para el
último archivo especificado en la línea de mandatos.
Macros predefinidas
Ninguna.
Información relacionada
• “-o” en la página 63
• “Secuencia de búsqueda de directorio para archivos incluidos” en la página 15
-mllvm
objetivo
Pasar opciones a componentes LLVM.
true
-array-compress = false
-data-layout-opt = 0
off
-dynamic-cast-opt = on
aggr
true
-enable-agresivo-vectorization = false
true
-enable-lvi-memoryssa = false
true
-habilitar-incorporación-parcial = false
true
-enable-ppc-gen-scalar-mass = false
true
-enable-vec-find = false
true
-fold-complex-pointer-compare = false
true
-inline-hot-callsites-agresivamente = false
true
-ppc-enable-redxnintr = false
1
-ppc-set-dscr =< n >
-vector-biblioteca = none
MASSV
Notas:
1 n es de tipo uint64_t
-o
Pragma equivalente
Ninguna.
objetivo
Especifica un nombre para el objeto de salida, ensamblador, ejecutable o archivo preprocesado.
Sintaxis
-o vía_acceso
Valores predeterminados
Consulte “Tipos de archivos de salida” en la página 12 para ver los nombres de archivo y sufijos
predeterminados producidos por distintas fases de compilación.
parámetros
PATH
Cuando se utiliza la opción para compilar desde archivos de origen, vía_acceso puede ser el nombre
de un archivo un nombre de vía de acceso relativo o absoluto. Cuando se utiliza la opción para enlazar
desde archivos de objeto, vía de acceso debe ser un nombre de archivo.
No puede especificar un nombre de archivo con un sufijo de archivo de origen C o C++ (.C, .c o .cpp),
como por ejemplo myprog.c; esto da como resultado un error y no se invoca ni el compilador ni el
enlazador.
Uso
Si utiliza la opción -c con -o , sólo puede compilar un archivo de origen a la vez. En este caso, si se
especifica más de un nombre de archivo de origen, el compilador emite un mensaje de aviso e ignora -o.
-E, y -fsyntax-sólo alteran temporalmente la opción O .
Macros predefinidas
Ninguna.
Ejemplos
Para compilar myprogram.c para que el ejecutable resultante se llame myaccount , especifique:
Para compilar test.c sólo en un archivo de objeto y asignar el nombre new.oal archivo de objeto, entre:
Información relacionada
• “-c” en la página 47
• “-E” en la página 50
objetivo
Produce un archivo de salida no ejecutable para utilizarlo como archivo de entrada en otra llamada de
mandato ld. Este archivo también puede contener símbolos no resueltos.
Sintaxis
-r
Valores predeterminados
No procede.
Uso
Se espera que un archivo producido con este distintivo se utilice como archivo de entrada en otra
invocación de compilador o llamada de mandato ld.
Macros predefinidas
Ninguna.
Ejemplos
Para compilar myprogram.c y myprog2.c en un único archivo de objeto mytest.o, entre:
-S
Pragma equivalente
Ninguna.
objetivo
Genera un archivo de lenguaje ensamblador para cada archivo de origen.
El archivo resultante tiene un sufijo .s y se puede ensamblar para producir archivos .o de objeto o un
archivo ejecutable (a.out).
Sintaxis
-s
Valores predeterminados
No procede.
ibm-clang myprogram.s
Macros predefinidas
Ninguna.
Ejemplos
Para compilar myprogram.c para producir un archivo de lenguaje ensamblador myprogram.s, entre:
ibm-clang myprogram.c -S
Para ensamblar este programa para producir un archivo de objeto myprogram.o, entre:
ibm-clang myprogram.s -c
Para compilar myprogram.c para producir un archivo de lenguaje ensamblador asmprogram.s, entre:
Información relacionada
• “-E” en la página 50
-U
Pragma equivalente
Ninguna.
objetivo
No define una macro de definida por el compilador o por la opción de compilador -D .
Sintaxis
-U nombre
Valores predeterminados
El compilador predefine muchas macros; consulte Capítulo 8, “Macros predefinidas del compilador”, en la
página 83 para ver las que pueden no estar definidas (es decir, que no están protegidas). El archivo de
configuración del compilador también utiliza la opción -D para predefinir varios nombres de macro para
mandatos de invocación específicos; consulte el archivo de configuración del sistema para obtener más
información.
Uso
La opción -U no es equivalente a la directiva de preprocesador #undef . No puede desdefinir nombres
definidos en el origen por la directiva de preprocesador #define . Sólo puede desdefinir nombres
definidos por el compilador o por la opción -D .
La opción -Unombre tiene una prioridad más alta que la opción -Dnombre .
Macros predefinidas
palabra clave
Ninguna.
Ejemplos
Supongamos que el sistema operativo define el nombre __unix, pero no desea que la compilación entre
segmentos de código condicionados a que se defina ese nombre, compile myprogram.c para que la
definición del nombre __unix se anule especificando:
Información relacionada
• “-D” en la página 48
-w
Pragma equivalente
Ninguna.
objetivo
Suprime mensajes de aviso.
Sintaxis
-w
Valores predeterminados
Se notifican todos los mensajes informativos y de aviso.
Uso
Esta opción no inhabilita los mensajes informativos y de aviso que proporcionan información adicional a
un error grave.
Macros predefinidas
Ninguna.
#include <stdio.h>
int main()
{ char* greeting = "hello world";
printf("%d \n", greeting);
return 0;
}
ibm-clang++_r myprogram.c
Salida:
"5:18: warning: format specifies type 'int' but the argument has type 'char *' [-Wformat]
printf("%d \n", greeting);
~~ ^~~~~
%s
1 warning generated."
ibm-clang++_r myprogram.c -w
-W (-X)
Pragma equivalente
Ninguna.
objetivo
Pasa una o más opciones a un componente que se ejecuta durante la compilación.
Sintaxis
1
-X ensamblador Opción
preprocesador
enlazador
Notas:
1 Debe insertar al menos un espacio antes de la opción.
b
c
f
g
l
m
o
p
parámetros
Opción
Cualquier opción que sea válida para el componente al que se está pasando.
Para -X, para obtener detalles sobre las opciones para enlazar y ensamblar, consulte la documentación
en línea de GNU Compiler Collection en http://gcc.gnu.org/onlinedocs/ .
La tabla siguiente muestra la correspondencia entre los parámetros -X y -W y los nombres de
componente:
Nombre de
Parámetro de -W Parámetro de -X Descripción componente
a ensamblador El ensamblador de como
b Llc El optimizador de bajo xlCcode
nivel de
c El componente frontal xlcentry, xlCentry
del compilador
Uso
En la serie que sigue a la opción -W , utilice una coma como separador para cada opción y no incluya
ningún espacio. Para la opción -X , se necesita un espacio antes de la opción . Si necesita incluir un
carácter que sea especial para el shell en la serie de opciones, preceda el carácter con una barra inclinada
invertida. Por ejemplo, si utiliza la opción -W en el archivo de configuración, puede utilizar la coma de
barra inclinada invertida de secuencia de escape (\,) para representar una coma en la serie de parámetro.
No necesita la opción -W para pasar la mayoría de las opciones al enlazador ld; no reconocido
las opciones de línea de mandatos, excepto las opciones -q , se pasan automáticamente. Sólo las
opciones de enlazador con las mismas letras que las opciones de compilador, como -v o -S, requieren
estrictamente -O.
Macros predefinidas
Ninguna.
Ejemplos
Para compilar el archivo file.c y pasar la opción de enlazador -berok al enlazador, especifique el
mandato siguiente:
Información relacionada
• “Invocación del compilador” en la página 10
Clang pragmas
Los pragmas de Clang de comunidad para LLVM Clang en AIX están soportados en IBM Open XL C/C++
para AIX 17.1.0.
Alineación de #pragma
objetivo
Especifica la alineación de los objetos de datos en el almacenamiento, lo que evita problemas de
rendimiento con datos no alineados.
Sintaxis
power
empaquetado
reset
parámetros
empaquetado
Los datos de campo de bits se empaquetan a nivel de bit sin tener en cuenta los límites de bytes.
alimentación
Utiliza las reglas de alineación de RISC System/6000 . Este es el valor predeterminado.
Uso
La subopción power es el valor predeterminado para garantizar la compatibilidad con los objetos
existentes. Si la compatibilidad con versiones anteriores no es necesaria, debe considerar la posibilidad
de utilizar la alineación natural para mejorar el rendimiento potencial de la aplicación.
Los pragmas afectan a todas las definiciones de agregados que aparecen después de una directiva
pragma determinada; si un pragma se coloca dentro de un agregado anidado, sólo se aplica a
las definiciones que le siguen, no a ninguna definición que contenga. Las variables agregadas
declaradas utilizan la regla de alineación que se aplicó en el punto en el que se definióel agregado,
independientemente de los pragmas que preceden a la declaración de las variables. Consulte a
continuación los ejemplos.
Ejemplos
El ejemplo siguiente muestra cómo la directiva pragma sólo afecta a una definiciónde agregado, no a
declaraciones posteriores de variables de ese tipo de agregado.
struct A A1; /* A1 and A3 are aligned using the power alignment rule since */
A2 A3; /* this rule applied when struct A was defined */
El ejemplo siguiente muestra cómo una directiva pragma incorporada en una definición de agregado
anidada sólo afecta a las definiciones que le siguen.
struct A {
int a;
#pragma align(packed) /* Applies to B; A is unaffected */
struct B {
char c;
double d;
} BB; /* BB uses the packed alignment rule */
} AA; /* AA uses the power alignment rule /*
Sintaxis
# pragma GCC visibility push ( Valor predeterminado )
parámetros
Valor predeterminado
Indica que las entidades de enlace externo afectadas tienen el atributo de visibilidad predeterminado.
Estas entidades se exportan en bibliotecas compartidas y se pueden anticipar.
Uso
Puede establecer de forma selectiva atributos de visibilidad para entidades utilizando pares de las
directivas de compilador #pragma GCC visibility push y #pragma GCC visibility pop en
todo el programa fuente. Si especifica la directiva #pragma GCC visibility pop sin la directiva
#pragma GCC visibility push correspondiente, el compilador emite un mensaje de aviso. Los
atributos de visibilidad de entidad describen si una entidad definida en un módulo puede referenciarse
o utilizarse en otros módulos y cómo. Los atributos de visibilidad sólo afectan a entidades con enlaces
externos y no pueden aumentar la visibilidad de otras entidades. La preferencia de entidad se produce
cuando una definición de entidad se resuelve en tiempo de enlace, pero se sustituye por otra definición
de entidad en tiempo de ejecución.
Información relacionada
• “Extensiones para soporte de proceso vectorial” en la página 25
#pragma nosimd
objetivo
Inhabilita la generación automática de instrucciones de vector. Esta directiva pragma debe especificarse
por bucle.
Nota: IBM Open XL C/C++ para AIX 17.1.0 acepta #pragma nosimd y lo correlaciona con el pragma
#pragma clang loop vectorize (disable) Clang. Si ha utilizado #pragma nosimd en el
programa, se recomienda sustituirlo por #pragma clang loop vectorize (disable) al migrar
el programa a IBM Open XL C/C++ para AIX 17.1.0.
Sintaxis
# pragma nosimd
ejemplo
En el ejemplo siguiente, #pragma nosimd se utiliza para inhabilitar -fvectorize para un bucle for
específico.
...
#pragma nosimd
for (i=1; i<1000; i++)
{
/* program code */
}
Información relacionada
• #pragma nosimd
Sintaxis
# pragma pack ( )
nopack
número
pop
Valores predeterminados
Los miembros de agregados (estructuras, uniones y clases) se alinean en sus límites naturales y una
estructura termina en su límite natural. La alineación de un agregado es la de su miembro más estricto (el
miembro con el mayor requisito de alineación).
parámetros
nopack
Inhabilita el embalaje. Se emite un mensaje de aviso y se ignora la directiva pragma.
número
es uno de los siguientes:
1
Alinea los miembros de estructura en límites de 1 byte, o en su límite de alineación natural, el que
sea menor.
2
Alinea los miembros de estructura en límites de 2 bytes, o en su límite de alineación natural, lo
que sea menor.
4
Alinea los miembros de la estructura en límites de 4 bytes, o en su límite de alineación natural, lo
que sea menor.
8
Alinea los miembros de la estructura en límites de 8 bytes, o en su límite de alineación natural, el
que sea menor.
16
Alinea los miembros de la estructura en límites de 16 bytes, o en su límite de alineación natural, el
que sea menor.
pop
Elimina el valor añadido anterior con #pragma pack. Especificar #pragma pack () sin parámetros es
equivalente a #pragma pack (pop).
Uso
La directiva #pragma pack se aplica a la definición de un tipo agregado, en lugar de a la declaración de
una instancia de ese tipo; por lo tanto, se aplica automáticamente a todas las variables declaradas del
tipo especificado.
#pragma pack(2)
struct A{
int a:31;
int b:2;
}x;
int main(){
printf("size of struct A = %lu\n", sizeof(x));
}
size of struct A = 6
size of struct A = 8
La directiva #pragma pack sólo se aplica a las declaraciones completas de estructuras o uniones; esto
excluye las declaraciones de reenvío, en las que no se especifican listas de miembros. Por ejemplo, en el
fragmento de código siguiente, la alineación para struct S es 4, ya que esta es la regla en vigor cuando
se declara la lista de miembros:
#pragma pack(1)
struct S;
#pragma pack(4)
struct S { int i, j, k; };
Una estructura anidada tiene la alineación que precede a su declaración, no la alineación de la estructura
en la que está contenida, como se muestra en el ejemplo siguiente:
Si aparece más de una directiva #pragma pack en una estructura definida en una función en línea, la
directiva #pragma pack en vigor al principio de la estructura tiene prioridad.
#pragma pack(1)
#include "file.h"
Este ejemplo muestra cómo una directiva #pragma pack puede afectar al tamaño y la correlación de una
estructura:
struct s_t {
char a;
int b;
short c;
int d;
}S;
El ejemplo siguiente define una unión uu que contiene una estructura como uno de sus miembros y
declara una matriz de 2 uniones de tipo uu:
union uu {
short a;
struct {
char x;
char y;
char z;
} b;
};
union uu nonpacked[2];
Puesto que el requisito de alineación más grande entre los miembros de la unión es el de short a, es
decir, 2 bytes, se añade un byte de relleno al final de cada unión en la matriz para aplicar este requisito:
#pragma pack(1)
union uu {
short a;
struct {
char x;
char y;
char z;
} b;
};
union uu pack_array[2];
Ahora, cada unión de la matriz packed tiene una longitud de sólo 3 bytes, en contraposición a los 4 bytes
del caso anterior:
Sintaxis
# pragma nounroll
deshacer
( n )
parámetros
n
Indica al compilador que desenrolle los bucles por un factor de n. En otras palabras, el cuerpo de un
bucle se replica para crear n copias (incluido el original) y el número de iteraciones se reduce por un
factor de 1/n. El valor de n debe ser un entero positivo.
La especificación de #pragma unroll (1) inhabilita el bucle unrolling y es equivalente a especificar
#pragma nounroll.
Uso
Sólo se puede especificar una directiva pragma en un bucle. La directiva pragma sólo afecta al bucle que
le sigue. Un bucle anidado interno requiere una directiva #pragma unroll para precederlo si la estrategia
de desenrollamiento de bucle deseado es diferente de la de la opción -funroll-loops .
Las directivas #pragma unroll y #pragma nounroll sólo se pueden utilizar en bucles for . No se pueden
aplicar a los bucles do while y while .
Ejemplos
En el ejemplo siguiente, la directiva #pragma unroll (3) en el primer bucle for requiere que el
compilador replique el cuerpo del bucle tres veces. El #pragma unroll en el segundo bucle for permite al
compilador decidir si desea realizar el despliegue.
#pragma unroll(3)
for( i=0;i < n; i++)
{
a[i] = b[i] * c[i];
}
#pragma unroll
for( j=0;j < n; j++)
{
a[j] = b[j] * c[j];
i=0;
if (i>n-2) goto remainder;
for (; i<n-2; i+=3) {
a[i]=b[i] * c[i];
a[i+1]=b[i+1] * c[i+1];
a[i+2]=b[i+2] * c[i+2];
}
if (i<n) {
remainder:
for (; i<n; i++) {
a[i]=b[i] * c[i];
}
}
#pragma
objetivo
Indica al compilador que intente una operación de deshacer y fusionar en bucles for anidados.
Nota: IBM Open XL C/C++ para AIX 17.1.0 sigue aceptando #pragma unrollandse pero lo
correlaciona con el pragma de Clang #pragma unroll_and_jam . Si ha utilizado #pragma
unrollandse en el programa, se recomienda sustituirlo por #pragma unroll_and_jam al migrar el
programa a IBM Open XL C/C++ para AIX 17.1.0.
Sintaxis
# pragma nounrollandfusible
desenrollante
( número )
Uso
La directiva #pragma unrollandse sólo se aplica a los bucles externos de los bucles for anidados que
cumplen las condiciones siguientes:
• Sólo debe haber una variable de contador de bucle, un punto de incremento para esa variable y una
variable de terminación. Estos no se pueden modificar en ningún punto del nido de bucle.
• Los bucles no pueden tener varios puntos de entrada y salida. La terminación del bucle debe ser el
único medio para salir del bucle.
• Las dependencias en el bucle no deben ser "backwards-buscando". Por ejemplo, una sentencia como
A[i][j] = A[i -1][j + 1] + 4) no debe aparecer dentro del bucle.
Para que se produzca el desrollo del bucle, la directiva #pragma unrollandse debe preceder a un bucle
for . No debe especificar #pragma unrollandse para el bucle for más interno.
No debe especificar #pragma unrollandfusionar más de una vez, o combinar la directiva con #pragma
nounrollandfusionar, #pragma sin rolloo #pragma desrollar para el mismo bucle for .
Macros predefinidas
Ninguna.
Ejemplos
En el ejemplo siguiente, una directiva #pragma unrollandfusionar replica y fusiona el cuerpo del bucle.
Esto reduce el número de desaciertos de memoria caché para la matriz b.
int i, j;
int a[1000][1000];
int b[1000][1000];
int c[1000][1000];
....
#pragma unrollandfuse(2)
for (i=1; i<1000; i++) {
for (j=1; j<1000; j++) {
a[j][i] = b[i][j] * c[j][i];
}
}
El bucle for siguiente muestra un posible resultado de aplicar la directiva #pragma unrollandsible (2) al
bucle mostrado anteriormente:
int i, j, k;
int a[1000][1000];
int b[1000][1000];
int c[1000][1000];
int d[1000][1000];
int e[1000][1000];
....
#pragma unrollandfuse(4)
for (i=1; i<1000; i++) {
#pragma unrollandfuse(2)
for (j=1; j<1000; j++) {
for (k=1; k<1000; k++) {
a[j][i] = b[i][j] * c[j][i] + d[j][k] * e[i][k];
}
}
}
Información relacionada
• #migrate_pragma_unrollandfuse
xlCndi
objetivo
El script xlCndi instala IBM Open XL C/C++ en una ubicación de directorio no predeterminada.
Uso
Para obtener más información, consulte Actualización de una instalación no predeterminada utilizando
xlCndi en la publicación IBM Open XL C/C++ Guía de instalación.
Macros generales
Estas macros predefinidas siempre están predefinidas por el compilador. A menos que se indique lo
contrario, todas estas macros están protegidas, lo que significa que el compilador emitirá un mensaje de
aviso si intenta desdefinirlas o redefinirlas.
__open_xl_version__ Indica el número de versión del Un entero que representa el número de versión
compilador IBM Open XL C/C++ .
__open_xl_vrm__ Indica el nivel de VRM del Un entero hexadecimal cuyo valor es el siguiente:
compilador Open XL C/C++
utilizando un único entero para la (((__open_xl_version__) << "24") | \
ordenación. ((__open_xl_release__) << "16") | \
((__open_xl_modification__) << "8")
\
)
__VERSION__ La versión del compilador Open "IBM Open XL C/C++ para AIX 17.1.0 (5725-C72,
XL C/C++ representada como una 5765-J18), Clang 13.0.0 "
serie.
Información relacionada
• “-mcpu” en la página 57
objetivo
Valor absoluto largo, Valor absoluto largo largo
Devuelve el valor absoluto del argumento.
objetivo
Palabra doble permuta de bytes
Devuelve el resultado de una operación de permutación de bits.
Nota: Esta función incorporada sólo es válida cuando el compilador está en modalidad de compilación de
64 bits.
Prototipo
long long __builtin_bpermd (long long bit_selector, long long source);
long long __bpermd (long long bit_selector, long long source);
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Esta función incorporada podría estar en desuso en el futuro.
Uso
Se devuelven ocho bits, cada uno correspondiente a un bit dentro del origen, y se han seleccionado
mediante un byte de bit_selector. Si el byte i de bit_selector es menor que 64, el bit permutado i se
establece en el bit de origen especificado por el byte i de bit_selector; de lo contrario, el bit permutado i
se establece en 0. Los bits permutados se colocan en el byte menos significativo del valor de resultado y
los bits restantes se rellenan con 0s.
Funciones de comparación
__cmpeqb, __builtin_ppc_cmpeqb
objetivo
Compara los bytes correspondientes de los parámetros especificados y devuelve el resultado.
Nota: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu está establecida en procesadores POWER9 de destino o superior.
• La modalidad de compilador es de 64 bits.
Uso
Si el byte más a la derecha de a es igual a cualquier byte de b, el resultado se establece en 1 ; de lo
contrario, el resultado se establece en 0.
__cmprb, __builtin_ppc_cmprb
objetivo
Compara el byte de rango.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Prototipo
int __builtin_ppc_cmprb(const int a, int b, int c)
int __cmprb (const int a, int b, int c)
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
Uso
• Si a es 0, el resultado se establece mediante las reglas siguientes:
– Si el byte más a la derecha de b está en el rango desde el byte más a la derecha de c hasta el
segundo byte más a la derecha de c, el resultado es 1.
– De lo contrario, el resultado es 0.
• Si a es 1, el resultado se establece mediante las reglas siguientes:
– Si el byte más a la derecha de b está en el rango desde el byte más a la derecha hasta el segundo
byte más a la derecha de cualquiera de las medias palabras de c, el resultado es 1.
– De lo contrario, el resultado es 0.
Notas:
• a sólo puede ser 0 o 1.
• El byte más a la derecha es el límite inferior del rango y el segundo byte más a la derecha es el límite
superior del rango.
objetivo
Establece la extensión booleana.
Nota: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu está establecida en procesadores POWER9 de destino o superior.
• La modalidad de compilador es de 64 bits.
Prototipo
long long __builtin_ppc_setb (firmado long long a, signed long long long b);
largo __setb (firmado largo largo largo a, firmado largo largo b);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
Uso
La función compara los dos parámetros y devuelve el resultado:
• Si a es menor que b, el resultado es -1.
• Si a es mayor que b, el resultado es 1.
• Si a es igual a b, el resultado es 0.
__cmpb, __builtin_ppc_cmpb
objetivo
Comparar bytes
Compara cada uno de los ocho bytes de source1 con el byte correspondiente de source2. Si el byte i de
source1 y el byte i de source2 son iguales, 0xFF se coloca en el byte correspondiente del resultado; de lo
contrario, 0x00 se coloca en el byte correspondiente del resultado.
Prototipo
long long __builtin_ppc_cmpb (long long long source1, long long source2);
long long __cmpb (long long long source1, long long source2);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Contar ceros iniciales, entero de 4/8 bytes
Prototipo
int __builtin_clz (int sin signo);
int __builtin_clzll (longitud no firmada);
int __cntlz4 (int sin firmar);
int __cntlz8 (unsigned long long);
Nota:
• La función incorporada __cntlz4 es un sinónimo de __builtin_clz y la función incorporada
__cntlz8 es un sinónimo de __builtin_clzll.
• Las funciones incorporadas __cntlz4 y __cntlz8 se proporcionan para la compatibilidad con IBM
XL C/C++ para AIX 16.1 o releases anteriores. Esta función incorporada podría estar en desuso en el
futuro.
objetivo
Recuento de ceros finales, entero de 4/8 bytes
Prototipo
int __builtin_ctz (unsigned int);
int __builtin_ctzll (longitud larga sin signo);
int __cnttz4 (int sin signo);
int __cnttz8 (longitud larga sin signo);
Nota:
• La función incorporada __cnttz4 es un sinónimo de __builtin_ctz y la función incorporada
__cnttz8 es un sinónimo de __builtin_ctzll.
• Las funciones incorporadas __cnttz4 y __cnttz8 se proporcionan para la compatibilidad con IBM
XL C/C++ para AIX 16.1 o releases anteriores. Esta función incorporada podría estar en desuso en el
futuro.
Funciones de división
__divde, __builtin_divde
objetivo
Dividir palabra doble ampliada
Devuelve el resultado de una división ampliada de doble palabra. El resultado tiene un valor igual a
dividendo/divisor.
Nota: Esta función incorporada sólo es válida cuando el compilador está en modalidad de compilación de
64 bits.
Uso
Si el resultado de la división es mayor que 32 bits o si el divisor es 0, el valor de retorno de la función no
está definido.
__divdeu, __builtin_divdeu
objetivo
Dividir palabra doble ampliada sin signo
Devuelve el resultado de una división sin signo ampliada de palabra doble. El resultado tiene un valor
igual a dividendo/divisor.
Nota: Esta función incorporada sólo es válida cuando el compilador está en modalidad de compilación de
64 bits.
Prototipo
sin firmar largo largo __builtin_divdeu (dividendo largo largo sin firmar, divisor largo largo sin
firmar);
largo sin firmar largo __divdeu (dividendo largo largo largo sin firmar, divisor largo largo sin
firmar);
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Esta función incorporada podría estar en desuso en el futuro.
Uso
Si el resultado de la división es mayor que 32 bits o si el divisor es 0, el valor de retorno de la función no
está definido.
__divwe, __builtin_divwe
objetivo
Dividir palabra ampliada
Devuelve el resultado de una división ampliada de palabra. El resultado tiene un valor igual a dividendo/
divisor.
Prototipo
int __builtin_divwe (int dividend, int divisor);
int __divwe (dividendo int, divisor int);
Uso
Si el divisor es 0, el valor de retorno de la función no está definido.
__divweu, __builtin_divweu
objetivo
Dividir palabra ampliada sin signo
Devuelve el resultado de una división sin signo ampliada de palabra. El resultado tiene un valor igual a
dividendo/divisor.
Prototipo
unsigned int __builtin_divweu (dividendo int sin firmar, divisor int sin firmar);
unsigned int __divweu (dividendo unsigned int, unsigned int divisor);
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Esta función incorporada podría estar en desuso en el futuro.
Uso
Si el divisor es 0, el valor de retorno de la función no está definido.
Funciones de carga
__load2r, __builtin_ppc_load2r
objetivo
Cargar byte de media palabra invertido
Realiza una carga invertida en bytes de dos bytes desde la dirección indicada.
Prototipo
unsigned short __builtin_ppc_load2r (unsigned short *);
unsigned short __load2r (unsigned short *);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Cargar byte de palabra invertido
Realiza una carga invertida de bytes de cuatro bytes desde la dirección indicada.
Prototipo
unsigned int __builtin_ppc_load4r (int sin signo *);
unsigned int __load4r (unsigned int *);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
__load8r, __builtin_ppc_load8r
objetivo
Carga con inversión de bytes (entero de 8 bytes)
Realiza una carga invertida en bytes de ocho bytes desde la dirección indicada.
Prototipo
unsigned long long __builtin_ppc_load8r (unsigned long long * address);
unsigned long long __load8r (unsigned long long * address);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
Uso
Sólo es válido cuando el compilador está en modalidad de 64 bits.
Multiplicar funciones
__mulhd, __builtin_ppc_mulhd, __mulhdu, __builtin_ppc_mulhdu
objetivo
Multiplicar palabra doble alta con signo, Multiplicar palabra doble alta sin signo
Devuelve los 64 bits de orden superior del producto 128bit de los dos parámetros.
Nota: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu está establecida en procesadores POWER9 de destino o superior.
Prototipo
long int __builtin_ppc_mulhd (long int, long int);
unsigned long long int __builtin_ppc_mulhdu (unsigned long int, unsigned long int);
long long int __mulhd (long int, long int);
unsigned long long int __mulhdu (unsigned long int, unsigned long int);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
Uso
Sólo es válido en modalidad de 64 bits.
objetivo
Multiplicar palabra alta con signo, Multiplicar palabra alta sin signo
Devuelve los 32 bits de orden superior del producto 64bit de los dos parámetros.
Prototipo
int __builtin_ppc_mulhw (int, int);
unsigned int __builtin_ppc_mulhwu (int sin firmar, int sin firmar);
int __mulhw (int, int);
unsigned int __mulhwu (unsigned int, unsigned int);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Punto fijo Multiplicar-Añadir palabra doble alta firmada.
Multiplica los dos primeros argumentos, añade el tercer argumento y devuelve la palabra doble alta del
resultado.
Nota: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
Prototipo
firmado long long __builtin_ppc_maddhd (firmado long long, firmado long long, firmado long
long long);
firmado largo __maddhd (firmado largo largo, firmado largo largo, firmado largo largo largo);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
__maddhdu, __builtin_ppc_maddhdu
objetivo
Punto fijo Multiplicar-Añadir palabra doble alta sin firmar.
Multiplica los dos primeros argumentos, añade el tercer argumento y devuelve la palabra doble alta del
resultado.
Nota: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu está establecida en procesadores POWER9 de destino o superior.
• La modalidad de compilador es de 64 bits.
Prototipo
unsigned long long __builtin_ppc_maddhdu (unsigned long long, unsigned long long long,
unsigned long long);
unsigned long long __maddhdu (unsigned long long, unsigned long long, unsigned long long);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
__maddld, __builtin_ppc_maddld
objetivo
Punto fijo Multiplicar-Añadir palabra doble baja.
Multiplica los dos primeros argumentos, añade el tercer argumento y devuelve la palabra doble baja del
resultado.
Nota: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu está establecida en procesadores POWER9 de destino o superior.
• La modalidad de compilador es de 64 bits.
objetivo
Recuento de población, entero de 4 bytes u 8 bytes
Devuelve el número de bits establecido para un entero de 32 bits o 64 bits .
Prototipo
int __builtin_popcount (int sin signo);
int __builtin_popcountll (largo largo sin firmar);
int __popcnt4 (int sin signo);
int __popcnt8 (unsigned long long);
Nota:
• La función incorporada __popcnt4 es un sinónimo de __builtin_popcount y la función incorporada
__popcnt8 es un sinónimo de __builtin_popcountll.
• Las funciones incorporadas __popcnt4 y __popcnt8 se proporcionan para la compatibilidad con IBM
XL C/C++ para AIX 16.1 o releases anteriores. Esta función incorporada podría estar en desuso en el
futuro.
__popcntb, __builtin_ppc_popcntb
objetivo
Byte de recuento de población
Cuenta los 1 bits en cada byte del parámetro y los lugares que cuentan en el byte correspondiente del
resultado.
Prototipo
unsigned long __builtin_ppc_popcntb (unsigned long);
unsigned long __popcntb (unsigned long);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
objetivo
Paridad de población, entero de 4/8 bytes
Comprueba si el número de bits establecido en un entero de 32 /64 bits es un número par o impar.
Prototipo
int __builtin_ppc_poppar4(unsigned int);
int __builtin_ppc_poppar8(unsigned long long);
int __poppar4(unsigned int);
int __poppar8(unsigned long long);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
Valor de retorno
Devuelve 1 si el número de bits establecido en el parámetro de entrada es impar. De lo contrario,
devuelve 0.
objetivo
Entrega un número aleatorio.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Prototipo
long long __builtin_darn (void)1;
int __builtin_darn_32 (void);
long long __builtin_darn_raw (void)1;
long long __darn (void)1;
int __darn_32 (void);
long long __darn_raw (void)1;
Nota:
Uso
• __builtin_darn devuelve un número aleatorio en el rango de 0 a 0xFFFFFFFF_FFFFFFFE.
0xFFFFFFFF_FFFFFFFF indica una condición de error. El hardware ha procesado el resultado para
reducir el sesgo.
• __builtin_darn_32 devuelve un número aleatorio en el rango de 0 a 0xFFFFFFFF. El hardware ha
procesado el resultado para reducir el sesgo.
• __builtin_darn_raw devuelve un número aleatorio en el rango de 0 a 0xFFFFFFFF_FFFFFFFE.
0xFFFFFFFF_FFFFFFFF indica una condición de error.
Rotar funciones
__rdlam, __builtin_ppc_rdlam
objetivo
Girar doble izquierda y AND con máscara
Rota el contenido de los bits rs left shift y los datos rotados con la máscara.
Prototipo
unsigned long long __builtin_ppc_rdlam (unsigned long long long rs, unsigned int shift,
unsigned long long máscara);
unsigned long long __rdlam (unsigned long long rs, unsigned int mayús, unsigned long long long
máscara);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
parámetros
máscara
Debe ser una constante que represente un campo de bits contiguo.
objetivo
Rotar palabra doble izquierda inmediata y, a continuación, máscara insertar, rotar palabra izquierda
inmediata y, a continuación, máscara insertar
Rota rs left shift bits then inserta rs en is under bit mask máscara.
parámetros
mayús
Un valor constante de 0 a 63 (__rldimi) o 31 (__rlwimi).
máscara
Debe ser una constante que represente un campo de bits contiguo.
__rlwnm, __builtin_ppc_rlwnm
objetivo
Girar la palabra izquierda y luego AND con máscara
Gira los bits rs left shift y, a continuación, los AND rs con máscara de bits mask.
Prototipo
unsigned int __builtin_ppc_rlwnm (unsigned int rs, unsigned int mayús, unsigned int máscara);
unsigned int __rlwnm (unsigned int rs, unsigned int mayús, unsigned int máscara);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
parámetros
máscara
Debe ser una constante que represente un campo de bits contiguo.
objetivo
Girar la palabra izquierda, girar la palabra doble izquierda
Gira rs a la izquierda mayús bits.
ejemplo
#include <stdio.h>
#include <builtins.h>
int main() {
unsigned int a, b, c;
a = 0xabcdef01;
for (int i=0; i < 8; ++i) {
b = __rotatel4(a, 4 * i);
printf("0x%08x\n", b);
}
return 0;
}
Funciones de tienda
__store2r, __builtin_ppc_store2r
objetivo
Almacenar con inversión de bytes (entero de dos bytes).
Toma el valor entero de dos bytes cargado y realiza una operación de almacenamiento invertida en bytes.
Prototipo
void __builtin_ppc_store2r (unsigned short, unsigned short *);
void __store2r (unsigned short, unsigned short *);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Almacenar con inversión de bytes (entero de cuatro bytes).
Toma el valor entero de cuatro bytes cargado y realiza una operación de almacenamiento invertida en
bytes.
Prototipo
void __builtin_ppc_store4r (unsigned int, unsigned int *);
void __store4r (unsigned int, unsigned int *);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
__store8r, __builtin_ppc_store8r
objetivo
Almacenar con inversión de bytes (entero de ocho bytes).
Toma el valor entero de ocho bytes cargado y realiza una operación de almacenamiento invertida de
bytes.
Nota: Esta función incorporada sólo es válida cuando el compilador está en modalidad de compilación de
64 bits.
Prototipo
void __builtin_ppc_store8r (unsigned long long source, unsigned long long * address);
void __store8r (unsigned long long source, unsigned long long * address);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Palabra doble de condición de excepción, Palabra de condición de excepción
Compara el parámetro a con el parámetro b. Esta comparación da como resultado cinco condiciones con
AND con una constante de 5 bits TO. Si el resultado no es 0, se invoca el manejador de condiciones de
excepción del sistema.
parámetros
A
Un valor de 1 a 31 inclusive. Cada posición de bit, si se establece, indica una o más de las condiciones
posibles siguientes:
0 (bit de orden superior)
a es menor que b, utilizando la comparación con signo.
1
a es mayor que b, utilizando la comparación con signo.
2
a es igual a b
3
a es menor que b, utilizando una comparación sin signo.
4 (bit de orden inferior)
a es mayor que b, utilizando una comparación sin signo.
Uso
__tdw sólo es válido en modalidad de 64 bits.
objetivo
Condición de excepción si el parámetro no es cero, Condición de excepción si el parámetro no es cero
palabra doble
Prototipo
void __builtin_ppc_trap (int);
void __builtin_ppc_trapd (long);
void __trap (int);
void __trapd (long);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
Uso
__trapd sólo es válido en modalidad de 64 bits.
Funciones de conversión
__cmplx, __cmplxf, __builtin_complex
objetivo
Convierte dos parámetros reales en un único valor complejo.
Prototipo
double _Complex __builtin_complex (doble, doble);
float _Complex __builtin_complex (float, float);
double _Complex __cmplx (doble, doble);
float _Complex __cmplxf (float, float);
Nota:
• Las funciones incorporadas __cmplx, __cmplxf son sinónimos de __builtin_complex.
• Las funciones incorporadas __cmplx, __cmplxf se proporcionan para la compatibilidad con IBM
XL C/C++ para AIX 16.1 o releases anteriores. Esta función incorporada podría estar en desuso en el
futuro.
__fcfid, __builtin_ppc_fcfid
objetivo
Conversión flotante a partir de palabra doble entera
Convierte un entero con signo de 64 bits almacenado en un doble en un valor de coma flotante de
precisión doble.
__fcfud, __builtin_ppc_fcfud
objetivo
Conversión de coma flotante a partir de entero sin signo Palabra doble
Convierte un entero sin signo de 64 bits almacenado en un doble en un valor de coma flotante de
precisión doble.
Prototipo
double __builtin_ppc_fcfud (doble);
doble __fcfud (doble);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
__fctid, __builtin_ppc_fctid
objetivo
Conversión flotante a palabra doble entera
Convierte un argumento de precisión doble en un entero con signo de 64 bits, utilizando la modalidad de
redondeo actual, y devuelve el resultado en un doble.
Prototipo
double __builtin_ppc_fctid (doble);
doble __fctid (doble);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Conversión flotante a palabra doble entera con redondeo hacia cero
Convierte un argumento de precisión doble en un entero con signo de 64 bits, utilizando la modalidad de
redondeo redondeado hacia cero, y devuelve el resultado en un doble.
Prototipo
double __builtin_ppc_fctidz (doble);
doble __fctidz (doble);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
__fctiw, __builtin_ppc_fctiw
objetivo
Palabra de conversión flotante a entero
Convierte un argumento de precisión doble en un entero con signo de 32 bits, utilizando la modalidad de
redondeo actual, y devuelve el resultado en un doble.
Prototipo
double __builtin_ppc_fctiw (doble);
doble __fctiw (doble);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
__fctiwz, __builtin_ppc_fctiwz
objetivo
Conversión flotante a palabra entera con redondeo hacia cero
Convierte un argumento de precisión doble en un entero con signo de 32 bits, utilizando la modalidad de
redondeo redondeado hacia cero, y devuelve el resultado en un doble.
Prototipo
double __builtin_ppc_fctiwz (doble);
doble __fctiwz (doble);
Nota:
__fctudz, __builtin_ppc_fctudz
objetivo
Conversión de coma flotante a entero sin signo Palabra doble con redondeo hacia cero
Convierte un valor de coma flotante en un entero sin signo de doble palabra y redondea a cero.
Prototipo
double __builtin_ppc_fctudz (doble);
doble __fctudz (doble);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
Valor de resultado
El resultado es un número doble, que se redondea a cero.
__fctuwz, __builtin_ppc_fctuwz
objetivo
Conversión de coma flotante a palabra entera sin signo con redondeo a cero
Convierte un número de coma flotante en un entero sin signo de 32 bits y se redondea a cero. El resultado
de la conversión se almacena en un valor de retorno doble. Esta función está pensada para su uso con la
función incorporada __stfiw.
Prototipo
double __builtin_ppc_fctuwz (doble);
doble __fctuwz (doble);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
ejemplo
El ejemplo siguiente muestra el uso de esta función.
#include <stdio.h>
int main(){
double result;
int y;
result = __fctuwz(-1.5);
__stfiw(&y, result);
printf("%d\n", y); /* prints 0 */
result = __fctuwz(1.5);
__stfiw(&y, result);
printf("%d\n", y); /* prints 1 */
return 0;
}
objetivo
Devuelve el exponente del parámetro dado.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Prototipo
unsigned int __builtin_ppc_extract_exp (doble);
unsigned int __extract_exp (doble);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Devuelve el significado del parámetro dado.
Nota: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu está establecida en procesadores POWER9 de destino o superior.
Prototipo
unsigned long long __builtin_ppc_extract_sig (doble);
unsigned long long __extract_sig (doble);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
Funciones FPSCR
__mtfsb0, __builtin_ppc_mtfsb0
objetivo
Mover a registro de estado/control de coma flotante (FPSCR) Bit 0
Establece el bit bt del FPSCR en 0.
Prototipo
void __builtin_ppc_mtfsb0 (unsigned int bt);
void __mtfsb0 (unsigned int bt);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
parámetros
Bt
Debe ser una constante con un valor de 0 a 31.
__mtfsb1, __builtin_ppc_mtfsb1
objetivo
Mover a Bit 1 de FPSCR
Establece el bit bt del FPSCR en 1.
Prototipo
void __builtin_ppc_mtfsb1 (unsigned int bt);
void __mtfsb1 (unsigned int bt);
Nota:
parámetros
Bt
Debe ser una constante con un valor de 0 a 31.
__mtfsf, __builtin_ppc_mtfsf
objetivo
Mover a campos FPSCR
Coloca el contenido de frb en el FPSCR bajo el control de la máscara de campo especificada por flm. La
máscara de campo flm identifica los campos de 4bit de la FPSCR afectada.
Prototipo
void __builtin_ppc_mtfsf (unsigned int flm, unsigned int frb);
void __mtfsf (unsigned int flm, unsigned int frb);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
parámetros
flm
Debe ser una máscara de 8 bits constante.
__mtfsfi, __builtin_ppc_mtfsfi
objetivo
Mover a campo de FPSCR inmediato
Coloca el valor de u en el campo FPSCR especificado por bf.
Prototipo
void __builtin_ppc_mtfsfi (unsigned int bf, unsigned int u);
void __mtfsfi (unsigned int bf, unsigned int u);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
__readflm, __builtin_readflm
objetivo
Devuelve una coma flotante de precisión doble de 64 bits, cuyos bits 32-63 contienen el contenido de la
FPSCR.
Prototipo
double __builtin_readflm (vacío);
doble __readflm (void);
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Esta función incorporada podría estar en desuso en el futuro.
__setflm, __builtin_setflm
objetivo
Toma un número de coma flotante de precisión doble y coloca el valor de los bits 32-63 en la FPSCR.
Devuelve el contenido anterior de FPSCR.
Prototipo
double __builtin_setflm (doble);
doble __setflm (doble);
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Esta función incorporada podría estar en desuso en el futuro.
__setrnd, __builtin_setrnd
objetivo
Establece la modalidad de redondeo.
Prototipo
double __builtin_setrnd (int modalidad);
double __setrnd (int modalidad);
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_name.
parámetros
Los valores permitidos para mode son:
• 0-redondear al más cercano
• 1-redondeo a cero
• 2-redondeo a + infinito
• 3-redondeo a -infinito
objetivo
Sustituye el exponente del primer parámetro por el segundo parámetro y devuelve el resultado.
Nota: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu está establecida en procesadores POWER9 de destino o superior.
• La opción -q64 está habilitada.
Prototipo
double __builtin_ppc_insert_exp (doble, largo largo sin signo);
double __insert_exp (doble, longitud larga sin signo);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
Uso
La palabra doble más a la derecha del resultado no está definida.
Funciones de multiplicar/restar
__fmadd, __builtin_fma, __fmadds, __builtin_fmaf
objetivo
Multiplicar flotante-Añadir, Multiplicar flotante-Añadir único
Multiplica los dos primeros argumentos, añade el tercer argumento y devuelve el resultado.
Prototipo
double __builtin_fma (doble, doble, doble);
float __builtin_fmaf (float, float, float);
objetivo
Multiplicación flotante-Restar, Multiplicación flotante-Restar único
Multiplica los dos primeros argumentos, resta el tercer argumento y devuelve el resultado.
Prototipo
double __builtin_ppc_fmsub (doble, doble, doble);
float __builtin_ppc_fmsubs (float, float, float);
doble __fmsub (doble, doble, doble);
float __fmsubs (float, float, float);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Multiplicar negativo flotante-Añadir, Multiplicar negativo flotante-Añadir único
Multiplica los dos primeros argumentos, añade el tercer argumento y niega el resultado.
Prototipo
double __builtin_ppc_fnmadd (doble, doble, doble);
float __builtin_ppc_fnmadds (float, float, float);
doble __fnmadd (doble, doble, doble);
float __fnmadds (float, float, float);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Multiplicación-resta negativa flotante
Multiplica los dos primeros argumentos, resta el tercer argumento y niega el resultado.
Prototipo
double __builtin_ppc_fnmsub (doble, doble, doble);
float __builtin_ppc_fnmsubs (float, float, float);
doble __fnmsub (doble, doble, doble);
float __fnmsubs (float, float, float);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Estimación recíproca flotante, Estimación recíproca flotante única
Prototipo
double __builtin_ppc_fre (doble);
float __builtin_ppc_fres (float);
doble __fre (doble);
float __fres (float);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
Funciones de redondeo
__fric, __builtin_ppc_fric
objetivo
Redondeo de coma flotante a entero con modalidad de redondeo actual
Prototipo
double __builtin_ppc_fric (doble);
doble __fric (doble);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Redondeo flotante a entero menos
Redondea el argumento de coma flotante a un entero utilizando la modalidad de redondeo a menos
infinito y devuelve el valor como un valor de coma flotante.
Prototipo
double __builtin_ppc_frim (doble);
float __builtin_ppc_frims (float);
doble __frim (doble);
float __frims (float);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Redondeo flotante a entero más cercano
Redondea el argumento de coma flotante a un entero utilizando la modalidad de redondeo a más cercano
y devuelve el valor como un valor de coma flotante.
Prototipo
double __builtin_ppc_frin (doble);
float __builtin_ppc_frins (float);
doble __frin (doble);
float __frins (float);
Nota:
objetivo
Redondeo flotante a entero más
Redondea el argumento de coma flotante a un entero utilizando la modalidad de redondeo a más infinito y
devuelve el valor como un valor de coma flotante.
Prototipo
double __builtin_ppc_frip (doble);
float __builtin_ppc_frips (float);
doble __frip (doble);
float __frips (float);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Redondeo flotante a entero cero
Redondea el argumento de coma flotante a un entero utilizando la modalidad de redondeo a cero y
devuelve el valor como un valor de coma flotante.
Prototipo
double __builtin_ppc_friz (doble);
float __builtin_ppc_frizs (float);
doble __friz (doble);
float __frizs (float);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Selección flotante, Selección flotante única
Devuelve el segundo argumento si el primer argumento es mayor o igual que cero; de lo contrario,
devuelve el tercer argumento.
Prototipo
double __builtin_ppc_fsel (doble, doble, doble);
float __builtin_ppc_fsels (float, float, float);
doble __fsel (doble, doble, doble);
float __fsels (float, float, float);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Estimación de raíz cuadrada recíproca flotante, estimación de raíz cuadrada recíproca flotante única
Prototipo
double __builtin_ppc_frsqrte (doble);
float __builtin_ppc_frsqrtes (float);
doble __frsqrte (doble);
float __frsqrtes (float);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Raíz cuadrada flotante, Raíz cuadrada flotante única
objetivo
División de software sin comprobación, División de software sin comprobación única
Divide el primer argumento por el segundo argumento, sin realizar la comprobación de rango, y devuelve
el resultado.
Prototipo
double __builtin_ppc_swdiv_nochk (doble a, doble b);
float __builtin_ppc_swdivs_nochk (float a, float b);
double __swdiv_nochk (doble a, doble b);
float __swdivs_nochk (float a, float b);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
parámetros
a
No debe ser igual a infinito. Cuando -qstrict está en vigor, a debe tener un valor absoluto mayor
que 2-970 y menor que infinito.
b
No debe ser igual a valores infinitos, cero o desormalizados. Cuando -qstrict está en vigor, b debe
tener un valor absoluto mayor que 2-1022 y menor que 21021.
Valor de retorno
El resultado no debe ser igual a infinito positivo o negativo. Cuando -qstrict está en vigor, el resultado
de debe tener un valor absoluto mayor que 2-1021 y menor que 21023.
Funciones de tienda
__stfiw, __builtin_ppc_stfiw
objetivo
Almacenar coma flotante como palabra entera
Almacena el contenido del loworder de 32 bits de valor, sin conversión, en la palabra en almacenamiento
dirigida por addr.
Prototipo
void __builtin_ppc_stfiw (const int * addr, valor doble);
void __stfiw (const int * addr, double valor);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Devuelve el resultado de la adición en los valores de BCD a y b.
El signo del resultado se determina de la siguiente manera:
• Si el resultado es un valor no negativo y ps es 0, el signo se establece en 0b1100 (0xC).
• Si el resultado es un valor no negativo y ps es 1, el signo se establece en 0b1111 (0xF).
• Si el resultado es un valor negativo, el signo se establece en 0b1101 (0xD).
Nota: Esta función incorporada sólo es válida cuando se cumplen las condiciones siguientes:
• La opción -mcpu se establece en POWER8 de destino o en procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Nota: Esta función incorporada está disponible a partir de IBM Open XL C/C++ para AIX 17.1.0.1.
Prototipo
vector unsigned char __bcdadd (vector unsigned char a, vector unsigned char b, long ps);
parámetros
PS
Constante conocida en tiempo de compilación.
__bcdsub
objetivo
Devuelve el resultado de la resta en los valores BCD a y b.
El signo del resultado se determina de la siguiente manera:
• Si el resultado es un valor no negativo y ps es 0, el signo se establece en 0b1100 (0xC).
• Si el resultado es un valor no negativo y ps es 1, el signo se establece en 0b1111 (0xF).
• Si el resultado es un valor negativo, el signo se establece en 0b1101 (0xD).
Nota: Esta función incorporada sólo es válida cuando se cumplen las condiciones siguientes:
• La opción -mcpu se establece en POWER8 de destino o en procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Nota: Esta función incorporada está disponible a partir de IBM Open XL C/C++ para AIX 17.1.0.1.
Prototipo
vector unsigned char __bcdsub (vector unsigned char a, vector unsigned char b, long ps);
parámetros
PS
Constante conocida en tiempo de compilación.
__bcdadd_ofl
objetivo
Devuelve 1 si la operación de adición de BCD correspondiente da como resultado un desbordamiento, o 0
en caso contrario.
Nota: Esta función incorporada sólo es válida cuando se cumplen las condiciones siguientes:
• La opción -mcpu se establece en POWER8 de destino o en procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Nota: Esta función incorporada está disponible a partir de IBM Open XL C/C++ para AIX 17.1.0.1.
Prototipo
long __bcdadd_ofl (vector unsigned char a, vector unsigned char b);
__bcdsub_ofl
objetivo
Devuelve 1 si la operación de resta BCD correspondiente da como resultado un desbordamiento, o 0 de lo
contrario.
Nota: Esta función incorporada sólo es válida cuando se cumplen las condiciones siguientes:
• La opción -mcpu se establece en POWER8 de destino o en procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Nota: Esta función incorporada está disponible a partir de IBM Open XL C/C++ para AIX 17.1.0.1.
Prototipo
long __bcdsub_ofl (vector unsigned char a, vector unsigned char b);
__bcd_invalid
objetivo
Devuelve 1 si a es una codificación no válida de un valor BCD, o 0 en caso contrario.
Nota: Esta función incorporada sólo es válida cuando se cumplen las condiciones siguientes:
• La opción -mcpu se establece en POWER8 de destino o en procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Prototipo
long __bcd_invalid (vector unsigned char a);
Comparación BCD
Nota: Estas funciones incorporadas sólo son válidos cuando se cumplen las condiciones siguientes:
• La opción -mcpu se establece en POWER8 de destino o en procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Nota: Estas funciones incorporadas están disponibles a partir de IBM Open XL C/C++ para AIX 17.1.0.1.
__bcdcmpeq
objetivo
Devuelve 1 si el valor de BCD a es igual a b, o 0 en caso contrario.
Nota: Esta función incorporada sólo es válida cuando se cumplen las condiciones siguientes:
• La opción -mcpu se establece en POWER8 de destino o en procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Nota: Esta función incorporada está disponible a partir de IBM Open XL C/C++ para AIX 17.1.0.1.
Prototipo
long __bcdcmpeq (vector unsigned char a, vector unsigned char b);
__bcdcmpge
objetivo
Devuelve 1 si el valor de BCD a es mayor o igual que b, o 0 de lo contrario.
Nota: Esta función incorporada sólo es válida cuando se cumplen las condiciones siguientes:
• La opción -mcpu se establece en POWER8 de destino o en procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Nota: Esta función incorporada está disponible a partir de IBM Open XL C/C++ para AIX 17.1.0.1.
Prototipo
long __bcdcmpge (vector unsigned char a, vector unsigned char b);
__bcdcmpgt
objetivo
Devuelve 1 si el valor de BCD a es mayor que b, o 0 en caso contrario.
Nota: Esta función incorporada sólo es válida cuando se cumplen las condiciones siguientes:
Prototipo
long __bcdcmpgt (vector unsigned char a, vector unsigned char b);
__bcdcmple
objetivo
Devuelve 1 si el valor de BCD a es menor o igual que b, o 0 de lo contrario.
Nota: Esta función incorporada sólo es válida cuando se cumplen las condiciones siguientes:
• La opción -mcpu se establece en POWER8 de destino o en procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Nota: Esta función incorporada está disponible a partir de IBM Open XL C/C++ para AIX 17.1.0.1.
Prototipo
long __bcdcmple (vector unsigned char a, vector unsigned char b);
__bcdcmplt
objetivo
Devuelve 1 si el valor de BCD a es menor que b, o 0 en caso contrario.
Nota: Esta función incorporada sólo es válida cuando se cumplen las condiciones siguientes:
• La opción -mcpu se establece en POWER8 de destino o en procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Nota: Esta función incorporada está disponible a partir de IBM Open XL C/C++ para AIX 17.1.0.1.
Prototipo
long __bcdcmplt (vector unsigned char a, vector unsigned char b);
__vec_ldrmb
objetivo
Carga una serie de bytes en el registro de vector, justificado a la derecha. Establece los elementos
situados más a la izquierda (16-cnt) en 0.
Prototipo
vector unsigned char __vec_ldrmb (char *ptr, size_t cnt);
parámetros
ptr
Apunta a una dirección base.
cnt
El número de bytes a cargar. El valor de cnt debe estar en el rango de 1 a 16.
__vec_strmb
objetivo
Almacena una serie de bytes justificada por la derecha.
Nota: Esta función incorporada sólo es válida cuando se cumplen las condiciones siguientes:
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Prototipo
void __vec_strmb (char *ptr, size_t cnt, vector unsigned char datos);
parámetros
ptr
Apunta a una dirección base.
cnt
El número de bytes que se van a almacenar. El valor de cnt debe estar en el rango de 1 a 16 y debe ser
una constante conocida en tiempo de compilación.
objetivo
Actualiza condicionalmente una sola palabra o una variable de doble palabra de forma atómica.
Prototipo
int __builtin_ppc_compare_and_swap (volátil int * addr, int * dir_valor_antiguo, int new_val);
int __builtin_ppc_compare_and_swaplp (volatile long * addr, long * dirección_valor_antigua,
long nuevo_val);
int __compare_and_swap (volátil int * addr, int * dirección_valor_anterior, int new_val);
int __compare_and_swaplp (long volátil * addr, long * dir_valor_antiguo, long new_val);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
parámetros
direc
La dirección de la variable que se va a copiar. Debe estar alineado en un límite de 4 bytes para una
sola palabra y en un límite de 8 bytes para una palabra doble.
dirección_val_anterior
La ubicación de memoria en la que se va a copiar el valor de addr .
valor_nuevo
El valor que se debe asignar condicionalmente a la variable en addr,
Valor de retorno
Devuelve true (1) si el valor de addr era igual a valor_antiguo y se ha establecido en el nuevo valor.
Devuelve false (0) si el valor de addr no era igual a valor_antiguo y se ha dejado sin modificar. En cualquier
caso, el contenido de la ubicación de memoria especificada por addr se copia en la ubicación de memoria
especificada por dirección_valor_antigua.
Uso
La función __compare_and_swap es útil cuando un solo valor de palabra debe actualizarse sólo si no
se ha modificado desde la última lectura. Si utiliza __compare_and_swap como primitiva de bloqueo,
inserte una llamada a la función incorporada __isync al principio de cualquier sección crítica.
__compare_and_swaplp sólo es válido en modalidad de 64 bits.
Funciones de captación
objetivo
Borra y establece bits en la palabra o palabra doble especificada por addr mediante ADD-ing con el valor
especificado por val, en una sola operación atómica, y devuelve el valor original de addr.
Prototipo
int __builtin_ppc_fetch_and_add (volátil int * addr, int val);
long __builtin_ppc_fetch_and_addlp (volátil long * addr, long val);
int __fetch_and_add (volátil int * addr, int val);
long __fetch_and_addlp (volátil long * addr, long val);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
parámetros
direc
La dirección de la variable que se va a añadir. Debe estar alineado en un límite de 4 bytes para una
sola palabra y en un límite de 8 bytes para una palabra doble.
VALOR
El valor por el que se va a añadir el valor de addr .
Uso
Esta operación es útil cuando una variable que contiene distintivos de bits se comparte entre varias
hebras o procesos.
__fetch_and_addlp sólo es válido en modalidad de 64 bits.
objetivo
Borra los bits de la palabra o palabra doble especificada por addr mediante AND-ese valor con el valor
especificado por val, en una sola operación atómica, y devuelve el valor original de addr.
Prototipo
unsigned int __builtin_ppc_fetch_and_and (volatile unsigned int * addr, unsigned int val);
unsigned long __builtin_ppc_fetch_and_andlp (volatile unsigned long * addr, unsigned long
val);
unsigned int __fetch_and_and (volatile unsigned int * addr, unsigned int val);
unsigned long __fetch_and_andlp (volatile unsigned long * addr, unsigned long val);
Nota:
parámetros
direc
La dirección de la variable que se va a utilizar como AND. Debe estar alineado en un límite de 4 bytes
para una sola palabra y en un límite de 8 bytes para una palabra doble.
VALOR
El valor por el que el valor de addr debe ser ANDed.
Uso
Esta operación es útil cuando una variable que contiene distintivos de bits se comparte entre varias
hebras o procesos.
__fetch_and_andlp sólo es válido en modalidad de 64 bits.
objetivo
Establece bits en la palabra o palabra doble especificada por addr mediante OR-ing de ese valor con el
valor especificado val, en una sola operación atómica, y devuelve el valor original de addr.
Prototipo
unsigned int __builtin_ppc_fetch_and_or (volatile unsigned int * addr, unsigned int val);
unsigned long __builtin_ppc_fetch_and_orlp (volatile unsigned long * addr, unsigned long val);
unsigned int __fetch_and_or (volatile unsigned int * addr, unsigned int val);
unsigned long __fetch_and_orlp (volatile unsigned long * addr, unsigned long val);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
parámetros
direc
La dirección de la variable que se va a ORar. Debe estar alineado en un límite de 4 bytes para una sola
palabra y en un límite de 8 bytes para una palabra doble.
VALOR
El valor por el que el valor de addr debe ser ORed.
Uso
Esta operación es útil cuando una variable que contiene distintivos de bits se comparte entre varias
hebras o procesos.
objetivo
Establece la palabra o palabra doble especificada por addr en el valor de val y devuelve el valor original
de addr, en una sola operación atómica.
Prototipo
unsigned int __builtin_ppc_fetch_and_swap (volatile unsigned int * addr, unsigned int val);
unsigned long __builtin_ppc_fetch_and_swaplp (volatile unsigned long * addr, unsigned long
val);
unsigned int __fetch_and_swap (volatile unsigned int * addr, unsigned int val);
unsigned long __fetch_and_swaplp (volatile unsigned long * addr, unsigned long val);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
parámetros
direc
La dirección de la variable que se va a actualizar. Debe estar alineado en un límite de 4 bytes para una
sola palabra y en un límite de 8 bytes para una palabra doble.
VALOR
El valor que se va a asignar a addr.
Uso
Esta operación es útil cuando una variable se comparte entre varias hebras o procesos, y una hebra
necesita actualizar el valor de la variable sin perder el valor que se almacenó originalmente en la
ubicación.
__fetch_and_swaplp sólo es válido en modalidad de 64 bits.
Funciones de carga
objetivo
Load Quadword and Reserve Indexed, Load Doubleword and Reserve Indexed, Load Word and Reserve
Indexed, Load Halfword and Reserve Indexed, Load Byte and Reserve Indexed
Carga el valor de la ubicación de memoria especificada por addr y devuelve el resultado. Para __lwarx,
en modalidad de 64 bits, el compilador devuelve el resultado de extensión de signo.
parámetros
direc
La dirección del valor que se va a cargar. Debe alinearse en un límite de 4 bytes para una sola palabra,
en un límite de 8 bytes para una palabra dobley en un límite de 16 bytes para un cuádruple.
dst
La dirección en la que se carga el valor.
Uso
Esta función se puede utilizar con un __stdcx posterior (__stwcx, __sthcxo __stbcx) incorporado
para implementar una lectura-modificación-escritura en una ubicación de memoria especificada. Las
dos funciones incorporadas funcionan conjuntamente para asegurarse de que si la tienda se realiza
correctamente, ningún otro procesador o mecanismo ha modificado la memoria de destino entre el
momento en que se ejecuta la función load y el momento en que se completa la función store .
__ldarx sólo son válidos en modalidad de 64 bits. __lharx y __lbarx sólo son válidos cuando -mcpu
está establecido en el destino POWER8 o procesadores superiores.
Funciones de tienda
objetivo
Store Quadword Condicional Indexed, Store Doubleword Condicional Indexed, Store Word Condicional
Indexed, Store Halfword Condicional Indexed, Store Byte Condicional Indexed
Almacena el valor especificado por val en la ubicación de memoria especificada por addr.
Prototipo
int __builtin_ppc_stdcx (long volátil * addr, long val);
int __builtin_ppc_stwcx (volátil int * addr, int val);
parámetros
direc
La dirección de la variable que se va a actualizar. Debe estar alineado en un límite de 4 bytes para una
sola palabra y en un límite de 8 bytes para una palabra doble.
val
El valor que se va a asignar a addr.
Valor de retorno
Devuelve 1 si la actualización de addr es satisfactoria y 0 si no lo es.
Uso
Esta función se puede utilizar con un __ldarx anterior (__lwarx, __lharxo __lbarx) incorporado
para implementar una lectura-modificación-escritura en una ubicación de memoria especificada. Las dos
funciones incorporadas trabajan juntas para asegurarse de que si la tienda se realiza correctamente,
ningún otro procesador o mecanismo puede modificar la palabra doble de destino entre el momento en
que se ejecuta la función __ldarx y el momento en que se completa la función __stdcx .
__stdcx sólo es válido en modalidad de 64 bits. __sthcx y __stbcx sólo son válidos cuando -mcpu
está establecido en el destino POWER8 o procesadores superiores.
Funciones de sincronización
objetivo
Imponer ejecución en orden de entrada/salida
Garantiza que todas las instrucciones de acceso de almacenamiento de E/S que preceden a la llamada
a __eieio se completen en la memoria principal antes de que se puedan ejecutar las instrucciones de
acceso de almacenamiento de E/S que siguen a la llamada de función.
Prototipo
void __builtin_ppc_eieio (void);
void __builtin_ppc_iospace_eieio (void);
void __eieio (void);
Uso
Esta función es útil para gestionar instrucciones de datos compartidos donde el orden de ejecución
del acceso de carga/tienda es significativo. La función puede proporcionar la funcionalidad necesaria
para controlar los almacenes de E/S sin el coste para el rendimiento que puede producirse con otras
instrucciones de sincronización.
__isync, __builtin_ppc_isync
objetivo
Sincronizar instrucción
Espera a que se completen todas las instrucciones anteriores y, a continuación, descarta las instrucciones
captadas previamente, lo que hace que las instrucciones posteriores se capten (o se recapten) y se
ejecuten en el contexto establecido por las instrucciones anteriores.
Prototipo
void __builtin_ppc_isync (void);
void __isync (void);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Sincronización ligera
Garantiza que todas las instrucciones que preceden a la llamada a __lwsync se completen antes de
que se puedan ejecutar las instrucciones de almacén posteriores en el procesador que ha ejecutado la
función. Además, garantiza que todas las instrucciones de carga que preceden a la llamada a __lwsync
se completen antes de que se puedan ejecutar las instrucciones de carga posteriores en el procesador
que ha ejecutado la función. Esto le permite sincronizar entre varios procesadores con un impacto mínimo
en el rendimiento, ya que __lwsync no espera la confirmación de cada procesador.
Prototipo
void __builtin_ppc_lwsync (void);
void __builtin_ppc_iospace_lwsync (void);
objetivo
Sincronizar
Garantiza que todas las instrucciones que preceden a la función completen la llamada a __sync antes de
que se puedan ejecutar las instrucciones que siguen a la llamada a función.
Prototipo
void __builtin_ppc_sync (void);
void __builtin_ppc_iospace_sync (void);
void __sync (void);
void __iospace_sync (void);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Vaciado de bloque de Data Cache
Copia el contenido de un bloque modificado de la memoria caché de datos en la memoria principal y vacía
la copia de la memoria caché de datos.
Prototipo
void __builtin_dcbf (const void * addr);
void __dcbf (const void * addr);
__dcbfl, __builtin_ppc_dcbfl
objetivo
Data Cache Línea de vaciado de bloques
Vacía la línea de memoria caché en la dirección especificada de la memoria caché de datos L1 .
Prototipo
void __builtin_ppc_dcbfl (const void * dirección );
void __dcbfl (const void * addr );
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
Uso
El bloque de almacenamiento de destino se conserva en la memoria caché L2 .
__dcbflp, __builtin_ppc_dcbflp
objetivo
Data Cache Línea primaria de vaciado de bloques
Vacía la línea de memoria caché en la dirección de la memoria caché de datos primaria de un único
procesador.
Prototipo
void __builtin_ppc_dcbflp (const void * address);
void __dcbflp (const void * dirección);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
__dcbst, __builtin_ppc_dcbst
objetivo
Almacén de bloques de Data Cache
Prototipo
void __builtin_ppc_dcbst (const void * addr);
void __dcbst (const void * addr);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
__dcbt, __builtin_ppc_dcbt
objetivo
Toque de bloque de Data Cache
Carga el bloque de memoria que contiene la dirección especificada en la memoria caché de datos L1 .
Prototipo
void __builtin_ppc_dcbt (void * addr);
void __dcbt (void * dirección);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
__dcbtst, __builtin_ppc_dcbtst
objetivo
Data Cache Bloque táctil para almacén
Capta el bloque de memoria que contiene la dirección especificada en la memoria caché de datos.
Prototipo
void __builtin_ppc_dcbtst (void * addr);
void __dcbtst (void * dirección);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Bloque de Data Cache establecido en cero
Establece una línea de memoria caché que contiene la dirección especificada en la memoria caché de
datos en cero (0).
Prototipo
void __builtin_ppc_dcbz (void * addr);
void __dcbz (void * addr);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
__icbt, __builtin_ppc_icbt
objetivo
Toque de bloque de memoria caché de instrucciones
Indica que el programa pronto ejecutará código en el bloque de memoria caché de instrucciones que
contiene la dirección y que el bloque que contiene la dirección debe cargarse en la memoria caché de
instrucciones.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Prototipo
void __builtin_ppc_icbt (void *addr);
void __icbt (void *dirección);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Store Transient Touch proporciona una sugerencia que describe un bloque al que el programa puede
realizar un acceso de tienda. Es probable que el bloque sea transitorio, es decir, es probable que el
intervalo de tiempo durante el cual el programa accede a la unidad sea corto.
__dcbtt, __builtin_ppc_dcbtt
objetivo
Data Cache Bloque táctil transitorio
Load Transient Touch proporciona una sugerencia que describe un bloque al que el programa podría
realizar un acceso de carga. Es probable que el bloque sea transitorio, es decir, es probable que el
intervalo de tiempo durante el cual el programa accede a la unidad sea corto.
Prototipo
void __builtin_ppc_dcbtt (void * address);
void __dcbtt (void * address);
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
__vcipher, __builtin_altivec_crypto_vcipher
objetivo
Realiza una ronda de la operación de cifrado AES en el estado intermedio state_array utilizando una
round_keydeterminada.
Prototipo
vector unsigned char __builtin_altivec_crypto_vcipher (vector unsigned char state_array, vector
unsigned char clave_redonda);
parámetros
matriz_estado
El fragmento de datos de entrada que se va a cifrar o el resultado de una operación vcipher anterior.
clave_redonda
El valor de clave redonda AES de 128 bits que se utiliza para cifrar.
Resultado
Devuelve el estado intermedio resultante.
__vcipherlast, __builtin_altivec_crypto_vcipherlast
objetivo
Realiza la ronda final de la operación de cifrado AES en el estado intermedio state_array utilizando una
clave_redondadeterminada.
Prototipo
vector unsigned char __builtin_altivec_crypto_vcipherlast (vector unsigned char state_array,
vector unsigned char clave_redonda);
vector unsigned char __vcipherlast (vector unsigned char matriz_estado, vector unsigned char
clave_redonda);
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_altivec_crypto_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Esta función incorporada podría estar en desuso en el futuro.
parámetros
matriz_estado
El resultado de una operación vcipher anterior.
clave_redonda
El valor de clave redonda AES de 128 bits que se utiliza para cifrar.
Resultado
Devuelve el estado final resultante.
__vncipher, __builtin_altivec_crypto_vncipher
objetivo
Realiza una ronda de la operación de cifrado inverso AES en el estado intermedio state_array utilizando
una round_keydeterminada.
parámetros
matriz_estado
El fragmento de datos de entrada que se va a descifrar o el resultado de una operación vncipher
anterior.
clave_redonda
El valor de clave redonda AES de 128 bits que se utiliza para descifrar.
Resultado
Devuelve el estado intermedio resultante.
__vncipherlast, __builtin_altivec_crypto_vncipherlast
objetivo
Realiza la ronda final de la operación de cifrado inverso AES en el estado intermedio state_array utilizando
una round_keydeterminada.
Prototipo
vector unsigned char __builtin_altivec_crypto_vncipherlast (vector unsigned char state_array,
vector unsigned char clave_redonda);
vector unsigned char __vncipherlast (vector unsigned char matriz_estado, vector unsigned char
clave_redonda);
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_altivec_crypto_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Esta función incorporada podría estar en desuso en el futuro.
parámetros
matriz_estado
El resultado de una operación vncipher anterior.
clave_redonda
El valor de clave redonda AES de 128 bits que se utiliza para descifrar.
Resultado
Devuelve el estado final resultante.
Funciones diversas
objetivo
Aplica una operación permute y exclusive-OR en dos vectores de bytes.
Prototipo
vector unsigned char __builtin_altivec_crypto_vpermxor (vector unsigned char a, vector
unsigned char b, vector unsigned char mask);
vector unsigned char __vpermxor (vector unsigned char a, vector unsigned char b, vector
unsigned char máscara);
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_altivec_crypto_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Esta función incorporada podría estar en desuso en el futuro.
Resultado
Para cada i (0 < = i < 16), deje que indexA sean los bits 0-3 y indexB sean los bits 4-7 del elemento de
byte i de mask.
El elemento de byte i del resultado se establece en el OR exclusivo de elementos de byte indexA de a y
indexB de b.
__vpmsumb, __builtin_altivec_crypto_vpmsumb
objetivo
Realiza la operación exclusiva-OR en cada par par par-impar del resultado de multiplicación polinómica
de los elementos correspondientes.
Prototipo
vector unsigned char __builtin_altivec_crypto_vpmsumb (vector unsigned char a, vector
unsigned char b)
vector unsigned char __vpmsumb (vector unsigned char a, vector unsigned char b)
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_altivec_crypto_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Esta función incorporada podría estar en desuso en el futuro.
Resultado
Para cada i (0 < = i < 16), deje que prod[i] sea el resultado de la multiplicación polinómica de
elementos de bytes i de a y b.
Para cada i (0 < = i < 8), cada elemento de media palabra i del resultado se establece de la forma
siguiente:
• El bit 0 está establecido en 0.
• Los bits 1-15 se establecen en prod[2*i] (xor) prod[2*i+1].
objetivo
Realiza la operación exclusiva-OR en cada par par par-impar del resultado de multiplicación polinómica
de los elementos correspondientes.
Prototipo
vector unsigned long __builtin_altivec_crypto_vpmsumd (vector unsigned long long long a,
vector unsigned long long b);
vector unsigned long long long __vpmsumd (vector unsigned long long long a, vector unsigned
long long long b);
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_altivec_crypto_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Esta función incorporada podría estar en desuso en el futuro.
Resultado
Para cada i (0 < = i < 2), deje que prod[i] sea el resultado de la multiplicación polinómica de
elementos de palabra doble i de a y b.
El bit 0 del resultado se establece en 0.
Los bits 1-127 del resultado se establecen en prod[0] (xor) prod[1].
__vpmsumh, __builtin_altivec_crypto_vpmsumh
objetivo
Realiza la operación exclusiva-OR en cada par par par-impar del resultado de multiplicación polinómica
de los elementos correspondientes.
Prototipo
vector unsigned short __builtin_altivec_crypto_vpmsumh (vector unsigned short a, vector
unsigned short b);
vector unsigned short __vpmsumh (vector unsigned short a, vector unsigned short b);
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_altivec_crypto_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Esta función incorporada podría estar en desuso en el futuro.
Resultado
Para cada i (0 < = i < 8), deje que prod[i] sea el resultado de la multiplicación polinómica de
elementos de media palabra i de a y b.
Para cada i (0 < = i < 4), cada elemento de palabra i del resultado se establece de la siguiente manera:
• El bit 0 está establecido en 0.
• Los bits 1-31 se establecen en prod[2*i] (xor) prod[2*i+1].
objetivo
Realiza la operación exclusiva-OR en cada par par par-impar del resultado de multiplicación polinómica
de los elementos correspondientes.
Prototipo
vector unsigned int __builtin_altivec_crypto_vpmsumw (vector unsigned int a, vector unsigned
int b);
vector unsigned int __vpmsumw (vector unsigned int a, vector unsigned int b);
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_altivec_crypto_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Esta función incorporada podría estar en desuso en el futuro.
Resultado
Para cada i (0 < = i < 4), deje que prod[i] sea el resultado de la multiplicación polinómica de
elementos de palabra i de a y b.
Para cada i (0 < = i < 2), cada elemento de palabra doble i del resultado se establece de la forma
siguiente:
• El bit 0 está establecido en 0.
• Los bits 1-63 se establecen en prod[2*i] (xor) prod[2*i+1].
objetivo
Copia n bytes de src a dest. El resultado es correcto incluso cuando ambas áreas se solapan.
Nota: Esta función incorporada sólo es válida cuando se incluye el archivo strings.h .
Prototipo
void __bcopy(const void * src, void * dest, size_t n);
parámetros
origen
La dirección de origen de los datos que se van a copiar.
dest
La dirección de destino de los datos de que se van a copiar
n
El tamaño de los datos.
objetivo
Establece los primeros n bytes del área de bytes a partir de s en cero.
Prototipo
void bzero(void * s, size_t n);
parámetros
n
El tamaño de los datos.
s
La dirección inicial en el área de bytes.
Tipos intrínsecos
IBM Open XL C/C++ para AIX 17.1.0 da soporte a los siguientes tipos intrínsecos:
__vector_pair
Tipo de vector opaco de 32 bytes
__vector_quad
Tipo de vector opaco de 64 bytes
Acceso a memoria
Las siguientes funciones de MMA cargan y almacenan pares de vectores.
__builtin_vsx_lxvp
Purpose
Paired vector load.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
d = __builtin_vsx_lxvp(a,b)
Result value
__builtin_vsx_lxvp adds the displacement that is provided by a to the address provided by b to
obtain the effective address for the load operation. It does not truncate the effective address to a multiple
of 16 bytes.
This function loads 32 bytes from the effective address into the result vector.
__builtin_vsx_stxvp
Purpose
Paired vector store.
Stores the 32 bytes of a to the effective address obtained by adding the displacement provided by b with
the address provided by c. The effective address is not truncated to a multiple of 16 bytes.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_vsx_stxvp(a,b,c)
Argument types
The following table describes the types of the function arguments.
Purpose
Constructs an MMA accumulator using the values of given vectors.
ACC is an MMA 512-bit accumulator. It is constructed by the values of b, c, d, and e with b being array
element 0 in natural element order, c being array element 1, and so forth.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_build_acc(a,b,c,d,e)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_disassemble_acc
Purpose
Copies the value of an MMA accumulator to memory.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_disassemble_acc(a,b)
Argument types
The following table describes the types of the function arguments.
__builtin_vsx_build_pair
Purpose
Produces a vector pair from two vectors.
Syntax
__builtin_vsx_build_pair(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_vsx_disassemble_pair
Purpose
Produces a structure that contains two vectors from a vector pair.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_vsx_disassemble_pair(a,b)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xxmfacc
Purpose
Moves to accumulator.
The contents of the accumulator represented by a are copied into the four vector registers represented by
a.
Syntax
__builtin_mma_xxmfacc(a)
Argument types
The following table describes the types of the function arguments.
Related information
• “__builtin_mma_disassemble_acc” on page 148
__builtin_mma_xxmtacc
Purpose
Moves to accumulator.
The contents of the four vector registers represented by a are copied into the ACC accumulator.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Note: This built-in function is provided to insert accumulator prime operation as needed. It should be
avoided as the compiler inserts the minimal necessary operations in all known cases. Using it results in
redundant operations.
Syntax
__builtin_mma_xxmtacc(a)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xxsetaccz
Purpose
Sets accumulator to zero.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xxsetaccz(a)
Argument types
The following table describes the types of the function arguments.
Operaciones de conversión
Estas funciones incorporadas se convierten entre vectores de precisión única y tipos bfloat16 .
__builtin_vsx_xvcvbf16spn
Purpose
Converts a vector of bfloat16 values to a vector of single-precision values.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
d = __builtin_vsx_xvcvbf16spn(a)
__builtin_vsx_xvcvspbf16
Purpose
Converts a vector of single-precision floating point values to a vector of bfloat16 values.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
d = __builtin_vsx_xvcvspbf16(a)
Result value
Each element of d is the corresponding element of a with the value converted from single-precision
floating point to bfloat16.
__builtin_mma_pmxvbf16ger2
Purpose
Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update).
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvbf16ger2(a,b,c,d,e,f)
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 3, inclusive.
__builtin_mma_pmxvbf16ger2nn
Purpose
Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) with Negative multiply and Negative
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvbf16ger2nn (a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 3, inclusive.
Purpose
Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) with Negative multiply and Positive
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvbf16ger2np (a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 3, inclusive.
__builtin_mma_pmxvbf16ger2pn
Purpose
Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) with Positive multiply and Negative
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvbf16ger2pn(a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 3, inclusive.
__builtin_mma_pmxvbf16ger2pp
Purpose
Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) with Positive multiply and Positive
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvbf16ger2pp (a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 3, inclusive.
__builtin_mma_pmxvf16ger2
Purpose
Prefixed Masked VSX Vector 16-bit Floating-Point GER (rank-2 update).
Syntax
__builtin_mma_pmxvf16ger2(a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 3, inclusive.
__builtin_mma_pmxvf16ger2nn
Purpose
Prefixed Masked VSX Vector 16-bit Floating-Point GER (rank-2 update) with Negative multiply and
Negative accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvf16ger2nn(a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
__builtin_mma_pmxvf16ger2np
Purpose
Prefixed Masked VSX Vector 16-bit Floating-Point GER (rank-2 update) with Negative multiply and
Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvf16ger2np(a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 3, inclusive.
__builtin_mma_pmxvf16ger2pn
Purpose
Prefixed Masked VSX Vector 16-bit Floating-Point GER (rank-2 update) with Positive multiply and
Negative accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 3, inclusive.
__builtin_mma_pmxvf16ger2pp
Purpose
Prefixed Masked VSX Vector 16-bit Floating-Point GER (rank-2 update) with Positive multiply and Positive
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvf16ger2pp(a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
__builtin_mma_pmxvf32ger
Purpose
Prefixed Masked VSX Vector 32-bit Floating-Point GER (rank-1 update).
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvf32ger(a,b,c,d,e)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
__builtin_mma_pmxvf32gernn
Purpose
Prefixed Masked VSX Vector 32-bit Floating-Point GER (rank-1 update) with Negative multiply and
Negative accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvf32gernn(a,b,c,d,e)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
__builtin_mma_pmxvf32gernp
Purpose
Prefixed Masked VSX Vector 32-bit Floating-Point GER (rank-1 update) with Negative multiply and
Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvf32gernp(a,b,c,d,e)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
__builtin_mma_pmxvf32gerpn
Purpose
Prefixed Masked VSX Vector 32-bit Floating-Point GER (rank-1 update) with Positive multiply and
Negative accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
__builtin_mma_pmxvf32gerpp
Purpose
Prefixed Masked VSX Vector 32-bit Floating-Point GER (rank-1 update) with Positive multiply and Positive
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvf32gerpp(a,b,c,d,e)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
Purpose
Prefixed Masked VSX Vector 64-bit Floating-Point GER (rank-1 update).
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvf64ger(a,b,c,d,e)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 3, inclusive.
__builtin_mma_pmxvf64gernn
Purpose
Prefixed Masked VSX Vector 64-bit Floating-Point GER (rank-1 update) Negative multiply and Negative
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvf64gernn(a,b,c,d,e)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_pmxvf64gernp
Purpose
Prefixed Masked VSX Vector 64-bit Floating-Point GER (rank-1 update) Negative multiply and Positive
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvf64gernp(a,b,c,d,e)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 3, inclusive.
__builtin_mma_pmxvf64gerpn
Purpose
Prefixed Masked VSX Vector 64-bit Floating-Point GER (rank-1 update) Positive multiply and Negative
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvf64gerpn(a,b,c,d,e)
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 3, inclusive.
__builtin_mma_pmxvf64gerpp
Purpose
Prefixed Masked VSX Vector 64-bit Floating-Point GER (rank-1 update) with Positive multiply and Positive
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvf64gerpp(a,b,c,d,e)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 3, inclusive.
__builtin_mma_pmxvi16ger2
Purpose
Prefixed Masked VSX Vector 16-bit Signed Integer GER (rank-2 update) with Positive multiply and Positive
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
Syntax
__builtin_mma_pmxvi16ger2(a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 3, inclusive.
__builtin_mma_pmxvi16ger2pp
Purpose
Prefixed Masked VSX Vector 16-bit Signed Integer GER (rank-2 update) with Positive multiply and Positive
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvi16ger2pp(a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
__builtin_mma_pmxvi16ger2s
Purpose
Prefixed Masked VSX Vector 16-bit Signed Integer GER (rank-2 update) with Saturation.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvi16ger2s(a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 3, inclusive.
__builtin_mma_pmxvi16ger2spp
Purpose
Prefixed Masked VSX Vector 16-bit Signed Integer GER (rank-2 update) with Saturation, Positive multiply,
and Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvi16ger2spp(a,b,c,d,e,f)
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 3, inclusive.
__builtin_mma_pmxvi4ger8
Purpose
Prefixed Masked VSX Vector 4-bit Signed Integer GER (rank-8 update).
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvi4ger8(a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 3, inclusive.
Purpose
Prefixed Masked VSX Vector 4-bit Signed Integer GER (rank-8 update) with Positive multiply and Positive
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvi4ger8pp(a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 255, inclusive.
__builtin_mma_pmxvi8ger4
Purpose
Prefixed Masked VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update).
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvi8ger4(a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 15, inclusive.
__builtin_mma_pmxvi8ger4pp
Purpose
Prefixed Masked VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update) with Positive multiply
and Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_pmxvi8ger4pp(a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 15, inclusive.
__builtin_mma_pmxvi8ger4spp
Purpose
Prefixed Masked VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update) with Saturation, Positive
multiply, and Positive accumulate.
Syntax
__builtin_mma_pmxvi8ger4spp(a,b,c,d,e,f)
Argument types
The following table describes the types of the function arguments.
Note:
d
The value is in the range 0 through 15, inclusive.
e
The value is in the range 0 through 15, inclusive.
f
The value is in the range 0 through 15, inclusive.
__builtin_mma_xvbf16ger2
Purpose
VSX Vector bfloat16 GER (Rank-2 Update).
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvbf16ger2 (a,b,c)
Argument types
The following table describes the types of the function arguments.
Purpose
VSX Vector bfloat16 GER (Rank-2 Update) Negative multiply and Negative accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvbf16ger2nn(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvbf16ger2np
Purpose
VSX Vector bfloat16 GER (Rank-2 Update) Negative multiply and Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvbf16ger2np(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvbf16ger2pn
Purpose
VSX Vector bfloat16 GER (Rank-2 Update) Positive multiply and Negative accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
Syntax
__builtin_mma_xvbf16ger2pn(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvbf16ger2pp
Purpose
VSX Vector bfloat16 GER (Rank-2 Update) Positive multiply and Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvbf16ger2pp(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvf16ger2
Purpose
Vector 16-bit Floating-Point GER (rank-2).
The sum of the two outer products of the 16-bit floating-point values in b and c and are placed into the a
accumulator.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvf16ger2(a,b,c)
__builtin_mma_xvf16ger2nn
Purpose
VSX Vector 16-bit Floating-Point GER (rank-2 update) with Negative multiply and Negative accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvf16ger2nn(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvf16ger2np
Purpose
VSX Vector 16-bit Floating-Point GER (rank-2 update) with Negative multiply and Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvf16ger2np(a,b,c)
Argument types
The following table describes the types of the function arguments.
Purpose
VSX Vector 16-bit Floating-Point GER (rank-2 update) with Positive multiply and Negative accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvf16ger2pn(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvf16ger2pp
Purpose
VSX Vector 16-bit Floating-Point GER (rank-2 update) with Positive multiply and Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvf16ger2pp(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvf32ger
Purpose
Vector 32-bit Floating-Point GER (rank-1).
The outer product of the 32-bit floating-point values in b and c is placed into the a accumulator.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
Syntax
__builtin_mma_xvf32ger(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvf32gernn
Purpose
Prefixed Masked VSX Vector 32-bit Floating-Point GER (rank-1 update) with Negative multiply and
Negative accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvf32gernn(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvf32gernp
Purpose
Prefixed Masked VSX Vector 32-bit Floating-Point GER (rank-1 update) with Negative multiply and
Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvf32gernp(a,b,c)
__builtin_mma_xvf32gerpn
Purpose
Prefixed Masked VSX Vector 32-bit Floating-Point GER (rank-1 update) with Positive multiply and
Negative accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvf32gerpn(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvf32gerpp
Purpose
Prefixed Masked VSX Vector 32-bit Floating-Point GER (rank-1 update) with Positive multiply and Positive
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvf32gerpp(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvf64ger
Purpose
Vector 64-bit Floating-Point GER (rank-1).
The outer product of the 64-bit floating-point values in b and c is placed into the a accumulator.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvf64ger(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvf64gernn
Purpose
VSX Vector 64-bit Floating-Point GER (rank-1 update) with Negative multiply and Negative accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvf64gernn(a,b,c)
Argument types
The following table describes the types of the function arguments.
Purpose
VSX Vector 64-bit Floating-Point GER (rank-1 update) with Negative multiply and Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvf64gernp(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvf64gerpn
Purpose
VSX Vector 64-bit Floating-Point GER (rank-1 update) with Positive multiply and Negative accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvf64gerpn(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvf64gerpp
Purpose
VSX Vector 64-bit Floating-Point GER (rank-1 update) with Positive multiply and Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
Syntax
__builtin_mma_xvf64gerpp(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvi16ger2
Purpose
VSX Vector 16-bit Signed Integer GER (rank-2 update) with Positive multiply and Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvi16ger2 (a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvi16ger2pp
Purpose
VSX Vector 16-bit Signed Integer GER (rank-2 update) with Positive multiply and Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvi16ger2pp(a,b,c)
__builtin_mma_xvi16ger2s
Purpose
Vector 16-bit Signed Integer GER (rank-2).
The sum of the two outer products of the 16-bit signed integer values in b and c is placed into the a
accumulator.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvi16ger2s(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvi16ger2spp
Purpose
VSX Vector 16-bit Signed Integer GER (rank-2 update) with Saturation, Positive multiply, and Positive
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvi16ger2spp(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvi4ger8
Purpose
Vector 4-bit Signed Integer GER (rank-8).
The sum of the eight outer products of the 4-bit signed integer values in b and c and is placed into the a
accumulator.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvi4ger8(a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvi4ger8pp
Purpose
Prefixed Masked VSX Vector 4-bit Signed Integer GER (rank-8 update) with Positive multiply and Positive
accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvi4ger8pp(a,b,c)
Argument types
The following table describes the types of the function arguments.
Purpose
Vector 8-bit Signed/Unsigned Integer GER (rank-4).
The sum of the four outer products of the 8-bit signed and unsigned integer values in b and c is placed
into the a accumulator.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvi8ger4 (a,b,c)
Argument types
The following table describes the types of the function arguments.
__builtin_mma_xvi8ger4pp
Purpose
Prefixed Masked VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update) with Positive multiply
and Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvi8ger4pp(a,b,c)
Argument types
The following table describes the types of the function arguments.
Purpose
VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update) with Saturate, Positive multiply, and
Positive accumulate.
Note: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Syntax
__builtin_mma_xvi8ger4spp (a,b,c)
Argument types
The following table describes the types of the function arguments.
Sintaxis de la función
Esta sección utiliza la descripción de pseudocódigo para representar la sintaxis de la función, tal como se
muestra a continuación:
d=func_name(a, b, c)
En la descripción,
• d representa el valor de retorno de la función.
• a, by c representan los argumentos de la función.
• func_name es el nombre de la función.
Por ejemplo, la sintaxis de la función vector double vec_xld2(int, double*); se representa
mediante d=vec_xld2(a, b).
Nota:
• En esta sección sólo se describen las funciones incorporadas de vector específicas de IBM y las
funciones incorporadas de AltiVec con extensiones de IBM . Para obtener información sobre las
vec_abs
objetivo
Devuelve un vector que contiene los valores absolutos del contenido del vector dado.
Sintaxis
d=vec_abs(a)
Valor de resultado
El valor de cada elemento del resultado es el valor absoluto del elemento correspondiente de a.
vec_absd
objetivo
Devuelve un vector que contiene la diferencia absoluta de los elementos correspondientes de los
vectores dados.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_absd(a, b)
Valor de resultado
El valor de cada elemento del resultado es la diferencia absoluta de los elementos correspondientes de a
y b utilizando la aritmética de módulo.
vec_abss
objetivo
Devuelve un vector que contiene los valores absolutos saturados de los elementos de un vector
determinado.
Sintaxis
d=vec_abss(a)
Valor de resultado
El valor de cada elemento del resultado es el valor absoluto saturado del elemento correspondiente de a.
vec_add
objetivo
Devuelve un vector que contiene las sumas de cada conjunto de elementos correspondientes de los
vectores dados.
Esta función emula la operación en vectores largos.
Sintaxis
d=vec_add(a, b)
Valor de resultado
El valor de cada elemento del resultado es la suma de los elementos correspondientes de a y b. Para
vectores enteros y vectores sin signo, la aritmética es modular.
vec_addc
objetivo
Devuelve un vector que contiene las transportaciones producidas añadiendo cada conjunto de elementos
correspondientes de dos vectores determinados.
Valor de resultado
Si se produce un transporte añadiendo los elementos correspondientes de a y b, el elemento
correspondiente del resultado es 1; de lo contrario, es 0.
vec_add
objetivo
Devuelve un vector que contiene las sumas saturadas de cada conjunto de elementos correspondientes
de dos vectores determinados.
Sintaxis
d=vec_adds(a, b)
Valor de resultado
El valor de cada elemento del resultado es la suma saturada de los elementos correspondientes de a y b.
vec_add_u128
objetivo
Añade valores de cuádruple sin signo.
La función opera en vectores como enteros sin signo de 128 bits.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_add_u128(a, b)
Valor de resultado
Devuelve 128 bits bajos de a + b.
vec_addc_u128
objetivo
Obtiene el bit de transporte de la adición de 128 bits de dos valores de cuádruple.
La función opera en vectores como enteros sin signo de 128 bits.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_addc_u128(a, b)
vec_adde_u128
objetivo
Añade valores de cuádruple sin signo con un bit de transporte de la operación anterior.
La función opera en vectores como enteros sin signo de 128 bits.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_adde_u128(a, b, c)
Valor de resultado
Devuelve 128 bits bajos de a + b + (c & 1).
vec_addec_u128
objetivo
Obtiene el bit de transporte de la adición de 128 bits de dos valores de cuádruple palabra con el bit de
transporte de la operación anterior.
La función opera en vectores como enteros sin signo de 128 bits.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_addec_u128(a, b, c)
Valor de resultado
Devuelve la ejecución de a + b + (c & 1).
vec_todos_eq
objetivo
Prueba si todos los conjuntos de elementos correspondientes de los vectores dados son iguales.
Valor de resultado
El resultado es 1 si cada elemento de a es igual al elemento correspondiente de b. De lo contrario, el
resultado es 0.
objetivo
Comprueba si todos los elementos del primer argumento son mayores o iguales que los elementos
correspondientes del segundo argumento.
Sintaxis
d=vec_all_ge(a, b)
Valor de resultado
El resultado es 1 si todos los elementos de a son mayores o iguales que los elementos correspondientes
de b. De lo contrario, el resultado es 0.
objetivo
Prueba si todos los elementos del primer argumento son mayores que los elementos correspondientes
del segundo argumento.
Sintaxis
d=vec_all_gt(a, b)
Valor de resultado
El resultado es 1 si todos los elementos de a son mayores que los elementos correspondientes de b. De
lo contrario, el resultado es 0.
objetivo
Prueba si cada elemento de un vector determinado está dentro de un rango determinado.
Sintaxis
d=vec_all_in(a, b)
Valor de resultado
El resultado es 1 si se cumplen las dos condiciones siguientes; de lo contrario, el resultado es 0.
• Todos los elementos de b tienen un valor mayor o igual que 0.
• Todos los elementos de a tienen un valor menor o igual que el valor del elemento correspondiente de b,
y mayor o igual que el negativo del valor del elemento correspondiente de b.
vec_all_le
objetivo
Comprueba si todos los elementos del primer argumento son menores o iguales que los elementos
correspondientes del segundo argumento.
Sintaxis
d=vec_all_le(a, b)
Valor de resultado
El resultado es 1 si todos los elementos de a son menores o iguales que los elementos correspondientes
de b. De lo contrario, el resultado es 0.
objetivo
Comprueba si todos los elementos del primer argumento son menores que los elementos
correspondientes del segundo argumento.
Sintaxis
d=vec_all_lt(a, b)
Valor de resultado
El resultado es 1 si todos los elementos de a son menores que los elementos correspondientes de b. De
lo contrario, el resultado es 0.
objetivo
Comprueba si cada elemento del vector dado es un NaN.
Sintaxis
d=vec_all_nan(a)
Valor de resultado
El resultado es 1 si cada elemento de a es un NaN. De lo contrario, el resultado es 0.
vec_todo_ne
objetivo
Comprueba si todos los conjuntos de elementos correspondientes de los vectores proporcionados no son
iguales.
Sintaxis
d=vec_all_ne(a, b)
Valor de resultado
El resultado es 1 si cada elemento de a no es igual al elemento correspondiente de b. De lo contrario, el
resultado es 0.
objetivo
Comprueba si cada elemento del primer argumento no es mayor o igual que el elemento correspondiente
del segundo argumento.
Sintaxis
d=vec_all_nge(a, b)
Valor de resultado
El resultado es 1 si cada elemento de a no es mayor o igual que el elemento correspondiente de b. De lo
contrario, el resultado es 0.
vec_all_ngt
objetivo
Comprueba si cada elemento del primer argumento no es mayor que el elemento correspondiente del
segundo argumento.
Sintaxis
d=vec_all_ngt(a, b)
Valor de resultado
El resultado es 1 si cada elemento de a no es mayor que el elemento correspondiente de b. De lo
contrario, el resultado es 0.
objetivo
Comprueba si cada elemento del primer argumento no es menor o igual que el elemento correspondiente
del segundo argumento.
Sintaxis
d=vec_all_nle(a, b)
Valor de resultado
El resultado es 1 si cada elemento de a no es menor o igual que el elemento correspondiente de b. De lo
contrario, el resultado es 0.
vec_all_nlt
objetivo
Prueba si cada elemento del primer argumento no es menor que el elemento correspondiente del
segundo argumento.
Sintaxis
d=vec_all_nlt(a, b)
Valor de resultado
El resultado es 1 si cada elemento de a no es menor que el elemento correspondiente de b. De lo
contrario, el resultado es 0.
objetivo
Comprueba si cada elemento del vector especificado es numérico (no un NaN).
Sintaxis
d=vec_all_numeric(a)
Valor de resultado
El resultado es 1 si cada elemento de a es numérico (no un NaN). De lo contrario, el resultado es 0.
vec_and
objetivo
Realiza un AND a nivel de bit de los vectores dados.
Sintaxis
d=vec_and(a, b)
vec_andc
objetivo
Realiza un AND a nivel de bit del primer argumento y el complemento a nivel de bit del segundo
argumento.
Sintaxis
d=vec_andc(a, b)
Valor de resultado
El resultado es el AND a nivel de bit de a con el complemento a nivel de bit de b.
vec_any_eq
objetivo
Prueba si cualquier conjunto de elementos correspondientes de los vectores dados son iguales.
Sintaxis
d=vec_any_eq(a, b)
Valor de resultado
El resultado es 1 si algún elemento de a es igual al elemento correspondiente de b. De lo contrario, el
resultado es 0.
objetivo
Comprueba si algún elemento del primer argumento es mayor o igual que el elemento correspondiente
del segundo argumento.
Sintaxis
d=vec_any_ge(a, b)
Valor de resultado
El resultado es 1 si cualquier elemento de a es mayor o igual que el elemento correspondiente de b. De lo
contrario, el resultado es 0.
objetivo
Comprueba si algún elemento del primer argumento es mayor que el elemento correspondiente del
segundo argumento.
Sintaxis
d=vec_any_gt(a, b)
Valor de resultado
El resultado es 1 si algún elemento de a es mayor que el elemento correspondiente de b. De lo contrario,
el resultado es 0.
objetivo
Comprueba si algún elemento del primer argumento es menor o igual que el elemento correspondiente
del segundo argumento.
Sintaxis
d=vec_any_le(a, b)
Valor de resultado
El resultado es 1 si algún elemento de a es menor o igual que el elemento correspondiente de b. De lo
contrario, el resultado es 0.
objetivo
Comprueba si algún elemento del primer argumento es menor que el elemento correspondiente del
segundo argumento.
Sintaxis
d=vec_any_lt(a, b)
Valor de resultado
El resultado es 1 si algún elemento de a es menor que el elemento correspondiente de b. De lo contrario,
el resultado es 0.
objetivo
Comprueba si algún elemento del vector dado es un NaN.
Sintaxis
d=vec_any_nan(a)
Valor de resultado
El resultado es 1 si algún elemento de a es un NaN. De lo contrario, el resultado es 0.
vec_any_ne
objetivo
Prueba si algún conjunto de elementos correspondientes de los vectores proporcionados no son iguales.
Sintaxis
d=vec_any_ne(a, b)
Valor de resultado
El resultado es 1 si algún elemento de a no es igual al elemento correspondiente de b. De lo contrario, el
resultado es 0.
objetivo
Comprueba si algún elemento del primer argumento no es mayor o igual que el elemento correspondiente
del segundo argumento.
Sintaxis
d=vec_any_nge(a, b)
Valor de resultado
El resultado es 1 si algún elemento de a no es mayor o igual que el elemento correspondiente de b. De lo
contrario, el resultado es 0.
vec_any_ngt
objetivo
Comprueba si algún elemento del primer argumento no es mayor que el elemento correspondiente del
segundo argumento.
Sintaxis
d=vec_any_ngt(a, b)
Valor de resultado
El resultado es 1 si algún elemento de a no es mayor que el elemento correspondiente de b. De lo
contrario, el resultado es 0.
objetivo
Comprueba si algún elemento del primer argumento no es menor o igual que el elemento
correspondiente del segundo argumento.
Sintaxis
d=vec_any_nle(a, b)
Valor de resultado
El resultado es 1 si cualquier elemento de a no es menor o igual que el elemento correspondiente de b.
De lo contrario, el resultado es 0.
vec_any_nlt
objetivo
Comprueba si algún elemento del primer argumento no es menor que el elemento correspondiente del
segundo argumento.
Sintaxis
d=vec_any_nlt(a, b)
Valor de resultado
El resultado es 1 si algún elemento de a no es menor que el elemento correspondiente de b. De lo
contrario, el resultado es 0.
objetivo
Comprueba si algún elemento del vector dado es numérico (no un NaN).
Sintaxis
d=vec_any_numeric(a)
Valor de resultado
El resultado es 1 si cualquier elemento de a es numérico (no un NaN). De lo contrario, el resultado es 0.
vec_any_out
objetivo
Comprueba si el valor de cualquier elemento de un vector determinado está fuera de un rango
determinado.
Sintaxis
d=vec_any_out(a, b)
Valor de resultado
El resultado es 1 si se cumplen las dos condiciones siguientes; de lo contrario, el resultado es 0.
• Todos los elementos de b tienen un valor mayor o igual que 0.
• El valor absoluto de cualquier elemento de a es mayor que el valor del elemento correspondiente de b o
menor que el negativo del valor del elemento correspondiente de b.
objetivo
Devuelve un vector que contiene el promedio redondeado de cada conjunto de elementos
correspondientes de dos vectores determinados.
Sintaxis
d=vec_avg(a, b)
Valor de resultado
El valor de cada elemento del resultado es el promedio redondeado de los valores de los elementos
correspondientes de a y b.
vec_blendv
Purpose
Blends two source vectors according to the sign bits of the corresponding elements of the third source
vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_blendv(a,b,c)
Result value
For each element of c, if bit 0 of that element is equal to 0, the corresponding element of d is set to
the corresponding element of a; otherwise, the corresponding element of d is set to the corresponding
element of b.
vec_bperm
objetivo
Reúne hasta 16 valores de 1 bit de un cuádruple o de cada elemento de doble palabra en el orden
especificado, y los coloca en el orden especificado en los 16 bits más a la derecha de la doble palabra
más a la izquierda del registro de vector de resultados o en los 8 bits más a la derecha de cada doble
palabra del registro de vector de resultados de acuerdo con los tipos de elemento, con el resto del
resultado establecido en 0.
Sintaxis
d=vec_bperm(a, b)
Nota:
1. Esta combinación de tipos de datos de los argumentos de la función incorporada sólo es válida cuando
-mcpu se establece en el destino POWER8 o procesadores superiores.
Valor de resultado
• Cuando el tipo de datos de a es vector unsigned char, que sólo es válido cuando -mcpu se establece en
el destino POWER8 o procesadores superiores:
Supongamos i(0 < =i< 16) y j. Deje que i denote el índice de elemento de by que j denote el valor de
byte del elemento i de b:
– Si j> =128, el bit 48+i de la palabra doble 0 se establece en 0.
– Si e< 128, bit 48+i del resultado se establece en el valor de bit j de a.
– Todos los demás bits se establecen en 0.
• Cuando el tipo de datos de a es vector largo sin signo largo, que sólo es válido cuando -mcpu está
establecido en el destino POWER9 o procesadores superiores:
Supongamos i(0 < =i< 2), j(0 < =j < 8) y k. Let i denota el índice de elemento de palabra doble de a; let j
denota el índice de elemento de b; y let k denota el valor de byte de elemento j de b:
– Si k> =64, el bit 56+j del elemento i se establece en 0.
– Si e< 64, bit 56+j del elemento i se establece en el valor de bit k del elemento i de a.
– Todos los demás bits se establecen en 0.
vec_ceil
objetivo
Devuelve un vector que contiene los valores integrales de coma flotante representables más pequeños
iguales o mayores que los valores de los elementos correspondientes del vector dado.
Nota: vec_ceil es otro nombre para vec_roundp. Para obtener más información, consulte
“redondeo_vecp” en la página 310.
vec_cfuge
Purpose
Separates the bits of each element in an input vector to the right and left within a target vector element,
according to the mask in the corresponding element of the second input vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_cfuge(a,b)
vec_clr_first
Purpose
Clears the first N elements of a given vector to zero.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_clr_first(a,b)
Result value
Let N be the value of b. b must have a value between 1 and the number of elements of a, inclusive, but
need not be a literal constant. The result is a with the leftmost N elements cleared to zero.
vec_clr_last
Purpose
Clears the last N elements of a vector to zero.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_clr_last(a,b)
Result value
Let N be the value of b. The last N elements of d are set to zero. The remaining elements of d are copied
from the corresponding elements of a. b must have a value between 1 and the number of elements of a,
inclusive, but need not be a literal constant.
vec_cmpb
objetivo
Realiza una comparación de límites de cada conjunto de elementos correspondientes de los vectores
proporcionados.
Sintaxis
d=vec_cmpb(a, b)
Valor de resultado
Cada elemento del resultado tiene el valor 0 si se cumplen las dos condiciones siguientes:
• Todos los elementos de b tienen un valor mayor o igual que 0.
• Todos los elementos de a tienen un valor menor o igual que el valor del elemento correspondiente de b
y mayor o igual que el negativo del valor del elemento correspondiente de b.
De lo contrario, el resultado se determina de la siguiente manera:
• Si un elemento de b es mayor o igual que cero, se cumplen las reglas siguientes:
– Si el valor absoluto del elemento correspondiente de a es igual al valor del elemento correspondiente
de b, el valor del elemento correspondiente del resultado es 0.
– Si el valor absoluto del elemento correspondiente de a es mayor que el valor del elemento
correspondiente de b, el valor del elemento correspondiente del resultado es negativo.
– Si el valor absoluto del elemento correspondiente de a es menor que el valor del elemento
correspondiente de b, el valor del elemento correspondiente del resultado es positivo.
• Si un elemento de b es menor que cero, el valor del elemento del resultado es positivo si el valor del
elemento correspondiente de a es menor o igual que el valor del elemento de b, y negativo en caso
contrario.
objetivo
Devuelve un vector que contiene los resultados de la comparación de cada conjunto de elementos
correspondientes de los vectores dados para la igualdad.
Esta función emula la operación en vectores largos.
Sintaxis
d=vec_cmpeq(a, b)
Nota: Los tipos siguientes son válidos cuando -mcpu está establecido en procesadores POWER7 de
destino o superior. Sin embargo, la compilación con procesadores POWER8 o superior proporciona una
generación de código más eficiente utilizando las instrucciones POWER8 disponibles.
Valor de resultado
Para cada elemento del resultado, el valor de cada bit es 1 si los elementos correspondientes de a y b son
iguales. De lo contrario, el valor de cada bit es 0.
objetivo
Devuelve un vector que contiene los resultados de una comparación mayor que o igual a entre cada
conjunto de elementos correspondientes de los vectores dados.
Sintaxis
d=vec_cmpge(a, b)
Nota: Los tipos siguientes son válidos cuando -mcpu está establecido en procesadores POWER7 de
destino o superior. Sin embargo, la compilación con procesadores POWER8 o superior proporciona una
generación de código más eficiente utilizando las instrucciones POWER8 disponibles.
Valor de resultado
Para cada elemento del resultado, el valor de cada bit es 1 si el valor del elemento correspondiente de a
es mayor o igual que el valor del elemento correspondiente de b. De lo contrario, el valor de cada bit es 0.
vec_cmpgt
objetivo
Devuelve un vector que contiene los resultados de una comparación mayor que entre cada conjunto de
elementos correspondientes de los vectores dados.
Esta función emula la operación en vectores largos.
Nota: Los tipos siguientes son válidos cuando -mcpu está establecido en procesadores POWER7 de
destino o superior. Sin embargo, la compilación con procesadores POWER8 o superior proporciona una
generación de código más eficiente utilizando las instrucciones POWER8 disponibles.
Valor de resultado
Para cada elemento del resultado, el valor de cada bit es 1 si el valor del elemento correspondiente de a
es mayor que el valor del elemento correspondiente de b. De lo contrario, el valor de cada bit es 0.
vec_cmple
objetivo
Devuelve un vector que contiene los resultados de una comparación menor que o igual a entre cada
conjunto de elementos correspondientes de los vectores dados.
Sintaxis
d=vec_cmple(a, b)
Nota: Los tipos siguientes son válidos cuando -mcpu está establecido en procesadores POWER7 de
destino o superior. Sin embargo, la compilación con procesadores POWER8 o superior proporciona una
generación de código más eficiente utilizando las instrucciones POWER8 disponibles.
Valor de resultado
Para cada elemento del resultado, el valor de cada bit es 1 si el valor del elemento correspondiente de a
es menor o igual que el valor del elemento correspondiente de b. De lo contrario, el valor de cada bit es 0.
vec_cmplt
objetivo
Devuelve un vector que contiene los resultados de una comparación menor que entre cada conjunto de
elementos correspondientes de los vectores dados.
Esta operación emula la operación en vectores largos.
Sintaxis
d=vec_cmplt(a, b)
Nota: Los tipos siguientes son válidos cuando -mcpu está establecido en procesadores POWER7 de
destino o superior. Sin embargo, la compilación con procesadores POWER8 o superior proporciona una
generación de código más eficiente utilizando las instrucciones POWER8 disponibles.
Valor de resultado
Para cada elemento del resultado, el valor de cada bit es 1 si el valor del elemento correspondiente de a
es menor que el valor del elemento correspondiente de b. De lo contrario, el valor de cada bit es 0.
vec_cmpne
objetivo
Devuelve un vector que contiene los resultados de la comparación de cada conjunto de los elementos
correspondientes de los vectores dados para la desigualdad.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_cmpne(a, b)
Valor de resultado
Para cada elemento del resultado, el valor de cada bit es 1 si los elementos correspondientes de a y b no
son iguales; de lo contrario, el valor es 0.
vec_cmpnez
objetivo
Devuelve un vector que contiene los resultados de comparar cada conjunto de los elementos
correspondientes de los vectores dados para la desigualdad, o los resultados de probar el elemento
correspondiente de los vectores dados para el valor de cero.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_cmpnez(a, b)
Valor de resultado
Para cada elemento del resultado, el valor de cada bit es 1 en uno de los casos siguientes; de lo contrario,
el valor de cada bit es 0.
• Los elementos correspondientes de a y b no son iguales.
• El elemento correspondiente de a o b es 0.
vec_cntlz
objetivo
Cuenta los bits cero más significativos de cada elemento del vector dado.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_cntlz(a)
vec_cntlz_lsbb
objetivo
Cuenta los elementos de byte inicial del vector dado que tienen un bit menos significativo de 0.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_cntlz_lsbb(a)
Valor de resultado
El resultado se establece en el número de elementos de bytes iniciales de a que tienen un bit menos
significativo de 0.
vec_cntlzm
Purpose
Returns the number of leading consecutive 0-bits in the result returned when the first argument
corresponds to 1-bits in the second argument.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_cntlzm(a,b)
Consider element 0 in the above table. The first sixteen bits of a are 0000 0001 0010 0011. The first
sixteen bits of b are 1010 1010 1010 1010. Applying the mask of b to a means that the compiler only
considers the even-numbered bits of a, which are 0 0 0 0 0 1 0 1. The number of leading zeros in this
result is 5.
vec_cntm
Purpose
Counts the number of elements with their high-order bit equal to a specific value.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_cntm(a, b)
Result value
Let N be 7 when a is a vector unsigned char, 6 when a is a vector unsigned short, 5 when a is a vector
unsigned int, and 4 when a is a vector unsigned long long.
Then bits 0:N of d are set to the number of elements in a with their high-order bit equal to b, which must
be either 0 or 1.
Bits N+1:53 of d are set to 0.
objetivo
Cuenta los bits cero menos significativos de cada elemento del vector dado.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_cnttz(a)
Valor de resultado
El valor de cada elemento del resultado se establece en el número de ceros finales del elemento
correspondiente de a.
vec_cnttz_lsbb
objetivo
Cuenta los elementos de byte de cola del vector dado que tienen un bit menos significativo de 0.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_cnttz_lsbb(a)
Valor de resultado
El resultado se establece en el número de elementos de bytes finales de a que tienen un bit menos
significativo de 0.
vec_cnttzm
Purpose
Returns the number of trailing consecutive 0-bits in the result returned when the first argument
correspond to 1-bits in the second argument.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_cnttzm(a,b)
Result value
Each element of d is set to the number of consecutive 0-bits, starting on the right, in the corresponding
element of a that corresponds to 1-bits in the corresponding element of b.
Here is an example for doubleword inputs:
Consider element 0 in the above table. The last sixteen bits of a are 0011 0010 0001 0000. The last
sixteen bits of b are 1010 1010 1010 1010. Applying the mask of b to a means that the compiler only
considers the even-numbered bits of a, which are 0 1 0 1 0 0 0 0. The number of trailing zeros in this
result is 4.
objetivo
Devuelve un vector copiando el signo de los elementos del vector a en el signo de los elementos
correspondientes del vector b.
Sintaxis
d=vec_cpsgn(a, b)
vec_ctd
objetivo
Convierte cada elemento en a de un número entero a un número de coma flotante con una sola precisión,
y divide el resultado por 2 a la potencia de b.
Sintaxis
d=vec_ctd(a, b)
Nota: Si se pasa un valor fuera de rango a b, el compilador no emite mensajes, pero el comportamiento
no está definido.
Información relacionada
• Compatibilidad de Altivec
objetivo
Convierte un vector de números de punto fijo en un vector de números de coma flotante.
Sintaxis
d=vec_ctf(a, b)
Nota: Si se pasa un valor fuera de rango a b, el compilador no emite mensajes, pero el comportamiento
no está definido.
Valor de resultado
El valor de cada elemento del resultado es la estimación de coma flotante más cercana del valor del
elemento correspondiente de a dividido por 2 a la potencia de b.
Nota: El segundo y cuarto elementos del vector de resultados no están definidos cuando a es un vector
largo con signo o un vector largo sin signo.
Información relacionada
• Compatibilidad de Altivec
cts
objetivo
Convierte un vector de números de coma flotante en un vector de números de punto fijo firmados.
Sintaxis
d=vec_cts(a, b)
Nota: Si se pasa un valor fuera de rango a b, el compilador no emite mensajes, pero el comportamiento
no está definido.
Valor de resultado
El valor de cada elemento del resultado es el valor saturado obtenido multiplicando el elemento
correspondiente de a por 2 a la potencia de b.
Información relacionada
• Compatibilidad de Altivec
vec_ctsl
objetivo
Multiplica cada elemento en a por 2 a la potencia de b y convierte el resultado en un entero.
Nota: Esta función no utiliza los elementos 1 y 3 de a cuando a es un vector flotante.
Sintaxis
d=vec_ctsl(a, b)
Nota: Si se pasa un valor fuera de rango a b, el compilador no emite mensajes, pero el comportamiento
no está definido.
Información relacionada
• Compatibilidad de Altivec
ctu
objetivo
Convierte un vector de números de coma flotante en un vector de números de punto fijo sin signo.
Nota: Los elementos 1 y 3 del vector de resultado no están definidos cuando a es un vector doble.
Nota: Si se pasa un valor fuera de rango a b, el compilador no emite mensajes, pero el comportamiento
no está definido.
Valor de resultado
El valor de cada elemento del resultado es el valor saturado obtenido multiplicando el elemento
correspondiente de a por 2 a la potencia de b.
Información relacionada
• Compatibilidad de Altivec
vec_ctul
objetivo
Multiplica cada elemento en a por 2 a la potencia de b y convierte el resultado en un tipo sin signo.
Sintaxis
d=vec_ctul(a, b)
Nota: Si se pasa un valor fuera de rango a b, el compilador no emite mensajes, pero el comportamiento
no está definido.
Valor de resultado
Esta función no utiliza los elementos 1 y 3 de a cuando a es un vector flotante.
vec_cvbf16spn
objetivo
Convierte la media precisión en precisión simple.
Sintaxis
d = vec_cvbf16spn(a)
Valor de resultado
El valor del elemento del resultado es el formato de precisión simple de a.
vec_cvf
objetivo
Convierte un vector de coma flotante de precisión simple en un vector de coma flotante de precisión
doble o convierte un vector de coma flotante de precisión doble en un vector de coma flotante de
precisión simple.
Sintaxis
d=vec_cvf(a)
Valor de resultado
Cuando esta función convierte de vector flotante a vector doble, convierte los tipos de elementos 0 y 2 en
el vector.
Cuando esta función convierte de vector double a vector float, los tipos de elemento 1 y 3 en el vector de
resultado no están definidos.
objetivo
Convierte la precisión simple en media precisión.
Sintaxis
d = vec_cvspbf16(a)
Valor de resultado
El valor del elemento del resultado es el formato de media precisión de a.
di_vecv
objetivo
Divide los elementos en un vector (a) por los elementos correspondientes en otro vector (b) y coloca los
cocientes en el vector de resultados.
Esta función emula la operación en vectores enteros.
Sintaxis
d=vec_div(a, b)
Valor de resultado
Cada elemento de d es el cociente de dividir el elemento correspondiente a por el elemento
correspondiente de b.
Notas:
• Para la división de enteros, cuando cualquier elemento de b es cero, el elemento correspondiente de d
no está definido.
• Para la división de enteros con signo, cuando un elemento de a es un número negativo con cardinalidad
máxima (por ejemplo, 0x8000,0000 para enteros con signo de 32 bits) y el elemento correspondiente
de b es uno negativo, el elemento correspondiente de d no está definido.
vec_dive
Purpose
Divides the left-shifted elements of one vector by the corresponding elements of another vector and
places the quotients in the target vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_dive(a, b)
Result value
The value of each element of d is obtained by shifting the corresponding element of a left by the element
size in bits, and then dividing that value by the corresponding element of b. The shift amount is as follows:
• 32 bits if a is of the vector signed int or vector unsigned int type.
• 64 bits if a is of the vector signed long long or vector unsigned long long type.
Notes:
• When any element of b is zero, the corresponding element of d is undefined.
• If any quotient cannot be represented in the element type of d , the corresponding element of d is
undefined.
vec_dss
objetivo
Detiene la secuencia de datos leída especificada por a.
Sintaxis
vec_dss(a)
vec_dssall
objetivo
Detiene todas las lecturas de corriente de datos.
Sintaxis
vec_dssall()
vec_dst
objetivo
Inicia la lectura de datos de una línea en la memoria caché en un estado más eficiente para la lectura.
La secuencia de datos especificada por c se lee empezando por la dirección especificada por a utilizando
la palabra de control especificada por b. Después de utilizar esta función incorporada, la corriente de
datos especificada es relativamente persistente.
Tipos de argumento
Esta función no devuelve ningún valor. La tabla siguiente describe los tipos de los argumentos de función.
Nota:
1. c debe ser un literal sin signo con un valor comprendido entre 0 y 3 inclusive.
vec_dstst
objetivo
Inicia la lectura de datos de una línea en la memoria caché en un estado más eficaz para la escritura.
La secuencia de datos especificada por c se lee empezando por la dirección especificada por a utilizando
la palabra de control especificada por b. El uso de esta función incorporada indica que la corriente de
datos especificada es relativamente persistente por naturaleza.
Sintaxis
vec_dstst(a, b, c)
Tipos de argumento
Esta función no devuelve ningún valor. La tabla siguiente describe los tipos de los argumentos de función.
Nota:
1. c debe ser un literal sin signo con un valor comprendido entre 0 y 3 inclusive.
objetivo
Inicia la lectura de datos de una línea en la memoria caché en un estado más eficaz para la escritura.
La secuencia de datos especificada por c se lee empezando por la dirección especificada por a utilizando
la palabra de control especificada por b. El uso de esta función incorporada indica que la corriente de
datos especificada es de naturaleza relativamente transitoria.
Sintaxis
vec_dststt(a, b, c)
Tipos de argumento
Esta función no devuelve un valor. La tabla siguiente describe los tipos de los argumentos de función.
Nota:
1. c debe ser un literal sin signo con un valor comprendido entre 0 y 3 inclusive.
vec_dstt
objetivo
Inicia la lectura de datos de una línea en la memoria caché en un estado más eficiente para la lectura.
La secuencia de datos especificada por c se lee empezando por la dirección especificada por a utilizando
la palabra de control especificada por b. El uso de esta función incorporada indica que la corriente de
datos especificada es de naturaleza relativamente transitoria.
Sintaxis
vec_dstt(a, b, c)
Tipos de argumento
Esta función no devuelve un valor. La tabla siguiente describe los tipos de los argumentos de función.
Nota:
1. c debe ser un literal sin signo con un valor comprendido entre 0 y 3 inclusive.
vec_eqv
objetivo
Realiza una operación de equivalencia bit a bit en los vectores de entrada.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_eqv(a, b)
vec_expandm
Purpose
Creates an element mask based on high-order bits in the element of the given vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_expandm (a)
Result value
All bits of each element of d are set to 0 if the high-order bit of the corresponding element of a is equal to
0; otherwise, all the bits are set to 1.
vec_expte
objetivo
Devuelve un vector que contiene estimaciones de 2 elevadas a los valores de los elementos
correspondientes de un vector determinado.
Sintaxis
d=vec_expte(a)
Valor de resultado
Cada elemento del resultado contiene el valor estimado de 2 elevado al valor del elemento
correspondiente de a.
objetivo
Devuelve el valor del elemento b del vector a.
Sintaxis
d=vec_extract(a, b)
Valor de resultado
Esta función utiliza la aritmética de módulo en b para determinar el número de elemento. Por ejemplo,
si b está fuera de rango, el compilador utiliza b módulo el número de elementos en a para determinar la
posición del elemento.
ex_extracción_vecp
objetivo
Devuelve un vector que contiene el exponente del vector dado.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Valor de resultado
Cada elemento del resultado se extrae del campo exponente del elemento correspondiente de a.
Nota: El exponente extraído de a se trata como un exponente sesgado de acuerdo con el formato
especificado por IEEE Standard for Binary Flotante-Point Arithmetic, IEEE Std. 754, sin ningún proceso
adicional.
vec_extract_sig
objetivo
Devuelve un vector que contiene la significación del vector dado.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_extract_sig(a)
Valor de resultado
Cada elemento del resultado se extrae del campo significativo del elemento correspondiente de a.
Nota:
• La significación extraída de a se ajusta al formato especificado por IEEE Standard for Binary Flotante-
Point Arithmetic, IEEE Std. 754, sin ningún proceso adicional.
• El valor del dígito inicial implícito que se incluye en el resultado no se codifica en IEEE Standard for
Binary Flotante-Point Arithmetic, IEEE Std. 754, pero implícito por el exponente.
Purpose
Extracts an element from a pair of vectors using an index in reverse natural order.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_extracth(a,b,c)
Result value
Let v be a wide vector that consists of a concatenated with b. Let e be the element of v starting at byte
position c in the reverse natural byte order. Then doubleword element 1 of d is set to e, and doubleword
element 0 of d is set to zero.
Note: The byte index c must be in the range 0 to 31, inclusive. The result is undefined if the byte index
does not address an element boundary.
vec_extractl
Purpose
Extracts an element from a pair of vectors using an index in natural order.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_extractl(a,b,c)
Result value
Let v be a wide vector that consists of a concatenated with b. Let e be the element of v starting at byte
position c in natural byte order. Then doubleword element 1 of d is set to e, and doubleword element 0 of
d is set to zero.
Note: The byte index c must be in the range 0 to 31, inclusive. The result is undefined if the byte index
does not address an element boundary.
vec_extractm
Purpose
Collects the high-order bits of each element of the given vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_extractm(a)
Result value
The contents of the high-order bit of each element of a are concatenated and placed in the rightmost bits
of d , with other bits of d set to 0.
objetivo
Devuelve un vector que contiene los mayores valores integrales de coma flotante representables
menores o iguales que los valores de los elementos correspondientes del vector dado.
Nota: vec_floor es otro nombre para vec_roundm. Para obtener más información, consulte
“rota_vecm” en la página 309.
vec_first_match_index
objetivo
Compara cada conjunto de los elementos correspondientes de los vectores dados y devuelve la primera
posición de igualdad.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_first_match_index(a, b)
Valor de resultado
Devuelve el índice de bytes de la posición del primer elemento igual entre a y b. Si todos los elementos
correspondientes son desiguales entre a y b, devuelve el número de elementos de a o b.
vec_first_match_or_eos_index
objetivo
Compara cada conjunto de los elementos correspondientes de los vectores dados y devuelve la primera
posición de igualdad o la posición del terminador de fin de serie \0.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Valor de resultado
Devuelve el índice de bytes de la posición del primer elemento igual entre a y b o la posición de un
terminador de fin de serie, \0.
Si se cumplen las dos condiciones siguientes,
• No hay igualdad entre los elementos correspondientes de a y b;
• No hay terminador de fin de serie;
devuelve el número de elementos de a o b.
vec_first_mismatch_index
objetivo
Compara cada conjunto de los elementos correspondientes de los vectores dados y devuelve la primera
posición de desigualdad.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_first_mismatch_index(a, b)
Valor de resultado
Devuelve el índice de bytes de la posición del primer elemento desigual entre a y b. Si todos los
elementos correspondientes son iguales entre a y b, devuelve el número de los elementos de a o b.
vec_first_mismatch_or_eos_index
objetivo
Compara cada conjunto de los elementos correspondientes de los vectores proporcionados y devuelve la
primera posición de desigualdad o la posición del terminador de fin de serie \0.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_first_mismatch_or_eos_index(a, b)
Valor de resultado
Devuelve el índice de bytes de la primera posición del elemento desigual entre a y b o la posición de un
terminador de fin de serie, \0.
Si se cumplen las dos condiciones siguientes,
• No hay ninguna desigualdad entre los elementos correspondientes de a y b;
• No hay terminador de fin de serie;
devuelve el número de elementos de a o b.
objetivo
Realiza una operación de recopilación de bits por bytes en la entrada.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_gbb(a)
Valor de resultado
Cada elemento de palabra doble del resultado se establece de la forma siguiente: Let x(i) (0 < = i < 8)
denota los elementos de byte del elemento de palabra doble de entrada correspondiente, con x(7) como
el byte más significativo. Para cada par de i y j (0 < = i < 8, 0 < = j < 8), el bit número jdel elemento de
byte número idel resultado se establece en el valor del bit número idel elemento de byte número jde la
entrada.
vec_genbm
Purpose
Creates an element mask for byte elements from a bit mask.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d = vec_genbm (a)
Note: When a is a constant, compilers might generate the mtvsrbmi instruction as an optimization.
Argument Example
a 1010 1010 1010 1010
d 0x ff00 ff00 ff00 ff00 ff00 ff00 ff00 ff00
vec_gendm
Purpose
Creates an element mask for doubleword elements from a bit mask.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d = vec_gendm (a)
Result value
The bits in a are numbered from left to right.
For each integer i from 0 to 1, the leftmost element of d is counted as the 0th element, and the rightmost
element is counted as the 1st element.
All bits of the ith element of d are set to 0 if the ith bit of the 2-bit value in a is equal to 0.
All bits of the ith element of d are set to 1 if the ith bit of the 2-bit value in a is equal to 1.
For example:
Argument Example
a 01
d 0x 0000 0000 0000 0000 ffff ffff ffff ffff
vec_genhm
Syntax
d = vec_genhm (a)
Result value
The bits in a are numbered from left to right.
For each integer i from 0 to 7, the leftmost element of d is counted as the 0th element, and the rightmost
element is counted as the 7th element.
All bits of the ith element of d are set to 0 if the ith bit of the 8-bit value in a is equal to 0.
All bits of the ith element of d are set to 1 if the ith bit of the 8-bit value in a is equal to 1.
For example:
Argument Example
a 10 10 01 01
d 0x ffff 0000 ffff 0000 0000 ffff 0000 ffff
vec_genpcvm
Purpose
Generates a permute control vector for expanding or compressing a source vector according to a specified
mask.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d = vec_genpcvm(a, b)
Result value
a contains a bit mask where the high-order bit in each element is set if the permute mask specifies
expansion or compression of that element:
• If b = 0, d is assigned the value of the permute control vector required to enable a left-indexed permute
to implement an expansion of the leftmost elements of a source vector into the elements of a result
vector specified by the element mask in a.
• If b = 1, d is assigned the value of the permute control vector required to enable a left-indexed permute
to implement a compression of the sparse elements in a source vector specified by the element mask in
a into the leftmost elements of a result vector.
• If b = 2, d is assigned the value of the permute control vector required to enable a right-indexed
permute to implement an expansion of the rightmost elements of a source vector into the elements of a
result vector specified by the element mask in a.
• If b = 3, d is assigned the value of the permute control vector required to enable a right-indexed
permute to implement a compression of the sparse elements in a source vector specified by the
element mask in a into the rightmost elements of a result vector.
vec_genwm
Purpose
Creates an element mask for word elements from a bit mask.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d = vec_genwm (a)
Result value
The bits in a are numbered from left to right.
Argument Example
a 10 01
d 0x ffff ffff 0000 0000 0000 0000 ffff ffff
inserción_vector
objetivo
Devuelve una copia del vector b con el valor de su elemento c sustituido por a.
Sintaxis
d=vec_insert(a, b, c)
vec_insert_exp
objetivo
Devuelve un vector que combina los exponentes de elementos de un vector con los signos y los
significados de los elementos de otro vector.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_insert_exp(a, b)
Valor de resultado
Cada elemento del resultado se genera combinando el exponente del elemento correspondiente de b con
el signo y la significación del elemento correspondiente de a.
Nota: El exponente insertado de b se trata como un exponente sesgado de acuerdo con el formato
especificado por IEEE Standard for Binary Flotante-Point Arithmetic, IEEE Std. 754, sin ningún proceso
adicional.
vec_inserth
Purpose
Inserts a source element into a source vector at a specified byte position in reverse natural byte order.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_inserth(a,b,c)
Result value
When a is a scalar, let e be equal to a. Otherwise, when a is a vector, let e be the rightmost element of the
leftmost doubleword of a in register order. Then d is set to the value of b with e inserted at byte position
c, counting in reverse natural byte order. Other than the bytes modified by the insert operation, bytes of d
are identical to the corresponding bytes of b.
Note: The byte index c must be in the range 0 to 15, inclusive. The result is undefined if the byte index
does not address an element boundary.
vec_insertl
Purpose
Inserts a source element into a source vector at a specified byte position in natural byte order.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_insertl(a,b,c)
Result value
When a is a scalar, let e be equal to a. Otherwise, when a is a vector, let e be the rightmost element of the
leftmost doubleword of a in register order. Then d is set to the value of b with e inserted at byte position c
in natural byte order. Other than the bytes modified by the insert operation, bytes of d are identical to the
corresponding bytes of b.
Note: The byte index c must be in the range 0 to 15, inclusive. The result is undefined if the byte index
does not address an element boundary.
vec_ld
objetivo
Carga un vector de la dirección de memoria proporcionada.
Sintaxis
d=vec_ld(a, b)
Valor de resultado
El valor de a se añade a la dirección especificada por b, y la suma se trunca en un múltiplo de 16 bytes. El
resultado es el contenido de los 16 bytes de memoria que empiezan en esta dirección.
vec_lde
objetivo
Carga un elemento de una dirección de memoria determinada en un vector.
Sintaxis
d=vec_lde(a, b)
Valor de resultado
La dirección efectiva es la suma de a y la dirección especificada por b, truncada en un múltiplo del
tamaño en bytes de un elemento del vector de resultados. El contenido de la memoria en la direccion
efectiva se carga en el vector de resultado en el desplazamiento de byte correspondiente a los cuatro bits
menos significativos de la direccion efectiva. Los elementos restantes del vector de resultado no están
definidos.
vec_ldl
objetivo
Carga un vector desde una dirección de memoria determinada y marca la línea de memoria caché que
contiene los datos como utilizados menos recientemente.
Sintaxis
d=vec_ldl(a, b)
Valor de resultado
a se añade a la dirección especificada por b, y la suma se trunca en un múltiplo de 16 bytes. El resultado
es el contenido de los 16 bytes de memoria que empiezan en esta dirección. Estos datos se marcan como
utilizados menos recientemente.
vec_load_splats
objetivo
Carga un elemento de 4 bytes de la dirección de memoria especificada por el desplazamiento a y la
dirección puntero b y, a continuación, lo divide en un vector.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_load_splats(a, b)
Valor de resultado
El resultado es un vector con cada elemento establecido en el elemento de 4 bytes de la dirección
efectiva calculada añadiendo el desplazamiento proporcionado por a y la dirección puntero b. La
dirección efectiva no se trunca en un múltiplo de 16 bytes.
vec_loge
objetivo
Devuelve un vector que contiene estimaciones de los logaritmos base-2 de los elementos
correspondientes del vector dado.
Sintaxis
d=vec_loge(a)
Valor de resultado
Cada elemento del resultado contiene el valor estimado del logaritmo base-2 del elemento
correspondiente de a.
vec_lvsl
objetivo
Devuelve un vector útil para alinear datos no alineados.
Sintaxis
d=vec_lvsl(a, b)
Tabla 192. Tipo de datos de valor y argumentos devueltos por la función (en modalidad de 64 bits)
d a b
vector unsigned char largo unsigned char *
carácter firmado *
corto sin signo *
corto *
unsigned int *
int *
float *
Valor de resultado
El primer elemento del vector de resultado es la suma de el valor de a y la dirección especificada por b,
módulo 16. El valor de cada elemento sucesivo es el valor del elemento anterior más 1.
vec_lvsr
objetivo
Devuelve un vector útil para alinear datos no alineados.
Sintaxis
d=vec_lvsr(a, b)
Tabla 194. Tipo de datos de valor y argumentos devueltos por la función (en modalidad de 64 bits)
d a b
vector unsigned char largo unsigned char *
carácter firmado *
corto sin signo *
corto *
unsigned int *
int *
float *
Valor de resultado
La dirección efectiva es la suma de el valor de a y la dirección especificada por b, módulo 16. El primer
elemento del vector de resultado contiene el valor 16 menos la dirección efectiva. El valor de cada
elemento sucesivo es el valor del elemento anterior más 1.
vec_madd
objetivo
Devuelve un vector que contiene los resultados de realizar una operación de multiplicación/adición
fusionada en cada conjunto correspondiente de elementos de tres vectores determinados.
Sintaxis
d=vec_madd(a, b, c)
Valor de resultado
El valor de cada elemento del resultado es el producto de los valores de los elementos correspondientes
de a y b, añadidos al valor del elemento correspondiente de c.
vec_madds
objetivo
Devuelve un vector que contiene los resultados de realizar una operación de multiplicación-alta-y-adición
saturada en cada conjunto correspondiente de elementos de tres vectores determinados.
Sintaxis
d=vec_madds(a, b, c)
Valor de resultado
Para cada elemento del resultado, el valor se genera de la siguiente manera: los valores de los
elementos correspondientes de a y b se multiplican. A continuación, se añade el valor de los 17 bits
más significativos de este producto, utilizando la adición saturada de 16 bits, al valor del elemento
correspondiente de c.
máx_vectora
objetivo
Devuelve un vector que contiene el valor máximo de cada conjunto de elementos correspondientes de los
vectores proporcionados.
Sintaxis
d=vec_max(a, b)
Nota: Los tipos siguientes son válidos cuando la opción -mcpu está establecida en procesadores
POWER8 de destino o superior.
Valor de resultado
El valor de cada elemento del resultado es el máximo de los valores de los elementos correspondientes
de a y b.
vec_mergee
objetivo
Fusiona los valores de elementos pares de dos vectores.
Sintaxis
d=vec_mergee(a,b)
Valor de resultado
Supongamos que los elementos de cada vector están numerados empezando por cero. Los elementos de
número par del resultado se obtienen, en orden, de los elementos de número par de a. Los elementos con
numeración impar del resultado se obtienen, en orden, de los elementos con numeración par de b.
Información relacionada
“vec_mergeo” en la página 276
vec_mergeh
objetivo
Fusiona las mitades más significativas de dos vectores.
Sintaxis
d=vec_mergeh(a, b)
Valor de resultado
Supongamos que los elementos de cada vector están numerados empezando por 0. Los elementos pares
del resultado se toman, en orden, de los elementos altos de a. Los elementos con numeración impares
del resultado se toman, en orden, de los elementos altos de b.
Referencia relacionada
“vec_mergel” en la página 275
vec_mergel
objetivo
Fusiona las mitades menos significativas de dos vectores.
Sintaxis
d=vec_mergel(a, b)
Valor de resultado
Supongamos que los elementos de cada vector están numerados empezando por 0. Los elementos
pares numerados del resultado se toman, en orden, de los elementos bajos de a. Los elementos con
numeración impar del resultado se toman, en orden, de los elementos bajos de b.
Referencia relacionada
“vec_mergeh” en la página 274
vec_mergeo
objetivo
Fusiona los valores de los elementos numerados de dos vectores.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_mergeo(a,b)
Valor de resultado
Supongamos que los elementos de cada vector están numerados empezando por cero. Los elementos
con número par del resultado se obtienen, en orden, de los elementos con número impar de a. Los
elementos con número impar del resultado se obtienen, en orden, de los elementos con número impar de
b.
Información relacionada
“vec_mergee” en la página 273
vec_mfvscr
objetivo
Copia el contenido del registro de estado y control de vectores en el vector de resultados.
Sintaxis
d=vec_mfvscr()
Valor de resultado
Los 16 bits de orden superior del VSCR se copian en el séptimo elemento del resultado. Los 16 bits de
orden inferior del VSCR se copian en el octavo elemento del resultado. Todos los demás elementos se
establecen en cero.
vec_mín
objetivo
Devuelve un vector que contiene el valor mínimo de cada conjunto de elementos correspondientes de los
vectores proporcionados.
Sintaxis
d=vec_min(a, b)
Nota: Los tipos siguientes son válidos cuando la opción -mcpu está establecida en procesadores
POWER8 de destino o superior.
vec_mladd
objetivo
Devuelve un vector que contiene los resultados de realizar una operación de multiplicación baja y adición
saturada en cada conjunto correspondiente de elementos de tres vectores determinados.
Sintaxis
d=vec_mladd(a, b, c)
Valor de resultado
El valor de cada elemento del resultado es el valor de los 16 bits menos significativos del producto de los
valores de los elementos correspondientes de a y b, añadidos al valor del elemento correspondiente de c.
La adición se realiza utilizando aritmética modular.
vec_mod
Purpose
Produces the remainders from dividing the elements of one vector by the corresponding elements of
another vector, and places them in the result vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_mod(a, b)
Result value
Each element of d is the remainder from dividing the corresponding element of a by the corresponding
element of b.
Notes:
• When any element of b is zero, the corresponding element of d is undefined.
• For signed arithmetic, when any element of a is the negative number with maximum cardinality (for
example, 0x8000,0000 for 32-bit signed integers), and the corresponding element of b is negative one,
the corresponding element of d is undefined.
vec_mradds
objetivo
Devuelve un vector que contiene los resultados de realizar una operación de multiplicación-alta-ronda-y-
adición saturada para cada conjunto correspondiente de elementos de los vectores dados.
Sintaxis
d=vec_mradds(a, b, c)
Valor de resultado
Para cada elemento del resultado, el valor se genera de la siguiente manera: los valores de los elementos
correspondientes de a y b se multiplican y redondean de forma que los 15 bits menos significativos
son 0. A continuación, se añade el valor de los 17 bits más significativos de este producto redondeado,
utilizando una adición saturada de 16 bits, al valor del elemento correspondiente de c.
vec_msub
objetivo
Devuelve un vector que contiene los resultados de realizar una operación multiply-subtract utilizando los
vectores proporcionados.
Sintaxis
d=vec_msub(a, b, c)
Valor de resultado
Esta función multiplica cada elemento en a por el elemento correspondiente en b y, a continuación, resta
el elemento correspondiente en c del resultado.
vec_msum
objetivo
Devuelve un vector que contiene los resultados de realizar una operación de suma múltiple utilizando
vectores determinados.
Sintaxis
d=vec_msum(a, b, c)
Valor de resultado
Para cada elemento n del vector de resultado, el valor se obtiene de la forma siguiente:
• Si a es de tipo vector signed char o vector unsigned char, multiplique el elemento p de a por
el elemento p de b donde p es de 4n a 4n+ 3 y, a continuación, añada la suma de estos productos y
elemento n de c.
vec_mSumas
objetivo
Devuelve un vector que contiene los resultados de realizar una operación de suma múltiple saturada
utilizando los vectores proporcionados.
Sintaxis
d=vec_msums(a, b, c)
Valor de resultado
Para cada elemento n del vector de resultado, el valor se obtiene de la forma siguiente: multiplicar el
elemento p de a por el elemento p de b, donde p es de 2n a 2n+ 1; y, a continuación, añadir la suma de
estos productos al elemento n de c. Todas las adiciones se realizan utilizando aritmética saturada de 32
bits.
vec_mtvscr
objetivo
Copia el valor dado en el registro de estado y control del vector.
Los 32 bits de orden inferior de a se copian en el VSCR.
Sintaxis
vec_mtvscr(a)
vec_mul
objetivo
Multiplica los elementos de los vectores dados y coloca los productos en el vector objetivo.
Nota: Para los vectores enteros y sin signo, esta función emula la operación.
Sintaxis
d=vec_mul(a, b)
Valor de resultado
Cada elemento de d es el producto de los elementos correspondientes de a y b.
objetivo
Devuelve un vector que contiene los resultados de multiplicar cada segundo conjunto de elementos
correspondientes de los vectores dados, empezando por el primer elemento.
Sintaxis
d=vec_mule(a, b)
Nota: Los tipos siguientes son válidos cuando la opción -mcpu está establecida en procesadores
POWER8 de destino o superior.
Valor de resultado
Supongamos que los elementos de cada vector están numerados empezando por 0. Para cada elemento
n del vector de resultado, el valor es el producto del valor del elemento 2n de a y el valor del elemento 2n
de b.
vec_mulh
Purpose
Multiplies the elements of the given vectors and places the high half of each product in the target vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_mulh(a, b)
Result value
Each element of d is the high half of the product of the corresponding elements of a and b.
vec_mulo
objetivo
Devuelve un vector que contiene los resultados de multiplicar cada segundo conjunto de elementos
correspondientes de los vectores dados, empezando por el segundo elemento.
Sintaxis
d=vec_mulo(a, b)
Nota: Los tipos siguientes son válidos cuando la opción -mcpu está establecida en procesadores
POWER8 de destino o superior.
Valor de resultado
Supongamos que los elementos de cada vector están numerados empezando por 0. Para cada elemento
n del vector de resultado, el valor es el producto del valor del elemento 2n+ 1 de a y el valor del elemento
2n+ 1 de b.
objetivo
Devuelve un vector que contiene los resultados de realizar una operación negativa-absoluta utilizando el
vector dado.
Sintaxis
d=vec_nabs(a)
Nota: Los tipos siguientes son válidos cuando la opción -mcpu está establecida en procesadores
POWER8 de destino o superior.
Valor de resultado
Esta función calcula el valor absoluto de cada elemento en el vector dado y, a continuación, asigna el
valor negado del resultado a los elementos correspondientes en el vector de resultado.
vec_nand
objetivo
Realiza una operación negada y de bit a bit en los vectores de entrada.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_nand(a, b)
Valor de resultado
Cada bit del resultado se establece en el resultado de la operación bit a bit !(a & b) de los bits
correspondientes de a y b. Para 0 < = i < 128, el bit i del resultado se establece en 0 sólo si los bits ith
de ambos a y b son 1.
vec_neg
objetivo
Devuelve un vector que contiene el valor negado de los elementos correspondientes en el vector dado.
Nota: Para vector signed long long, esta función emula la operación.
Sintaxis
d=vec_neg(a)
Valor de resultado
Esta función multiplica el valor de cada elemento en el vector dado por -1.0 y luego asigna el resultado a
los elementos correspondientes en el vector de resultado.
vec_nmadd
objetivo
Devuelve un vector que contiene los resultados de realizar una operación multiply-add negativa en los
vectores proporcionados.
Sintaxis
d=vec_nmadd(a, b, c)
Valor de resultado
El valor de cada elemento del resultado es el producto de los elementos correspondientes de a y b,
añadidos a los elementos correspondientes de cy, a continuación, multiplicados por -1.0.
vec_nmsub
objetivo
Devuelve un vector que contiene los resultados de realizar una operación de resta de multiplicación
negativa en los vectores dados.
Sintaxis
d=vec_nmsub(a, b, c)
Valor de resultado
El valor de cada elemento del resultado es el producto de los elementos correspondientes de a y b,
restados del elemento correspondiente de c.
vec_nor
objetivo
Realiza un NOR bit a bit de los vectores dados.
Sintaxis
d=vec_nor(a, b)
vec_or
objetivo
Realiza un OR a nivel de bit de los vectores dados.
Sintaxis
d=vec_or(a, b)
Valor de resultado
El resultado es el OR a nivel de bit de a y b.
vec_orc
objetivo
Realiza una operación OR a nivel de bit con complemento de los vectores de entrada.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_orc(a, b)
Valor de resultado
Cada bit del resultado se establece en el resultado de la operación bit a bit (a | ~b) de los bits
correspondientes de a y b. Para 0 < = i < 128, el bit i del resultado se establece en 1 sólo si el ith bit de
a es 1 o el ith bit de b es 0.
objetivo
Empaqueta la información de cada elemento de dos vectores en el vector de resultados.
Sintaxis
d=vec_pack(a, b)
Nota: Los tipos siguientes son válidos cuando la opción -mcpu está establecida en procesadores
POWER8 de destino o superior.
Valor de resultado
El valor de cada elemento del vector de resultados se obtiene de la mitad de orden inferior del elemento
correspondiente del resultado de la concatenación de a y b.
vec_packpx
objetivo
Empaqueta la información de cada elemento de dos vectores en el vector de resultados.
Sintaxis
d=vec_packpx(a, b)
Valor de resultado
El valor de cada elemento del vector de resultado se obtiene del elemento correspondiente del resultado
de concatenar a y b de la forma siguiente: el bit menos significativo del byte de orden superior se
almacena en el primer bit del elemento de resultado; los 5 bits más significativos de cada uno de los
bytes restantes se almacenan en la parte restante del elemento de resultado.
donde i es 0, 1, 2 y 3.
paquetes de vec_packs
objetivo
Empaqueta la información de cada elemento de dos vectores en el vector de resultados, utilizando
valores saturados.
Sintaxis
d=vec_packs(a, b)
Nota: Los tipos siguientes son válidos cuando la opción -mcpu está establecida en procesadores
POWER8 de destino o superior.
paquete_vector
objetivo
Empaqueta la información de cada elemento de dos vectores en el vector de resultados utilizando valores
saturados.
Sintaxis
d=vec_packsu(a, b)
Nota: Los tipos siguientes son válidos cuando la opción -mcpu está establecida en procesadores
POWER8 de destino o superior.
Valor de resultado
El valor de cada elemento del vector de resultados es el valor saturado del elemento correspondiente del
resultado de la concatenación de a y b.
vec_parity_lsbb
objetivo
Devuelve un vector que calcula la paridad en el bit menos significativo de cada byte de cada elemento del
vector dado.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Valor de resultado
El valor de cada elemento del resultado es la paridad del bit menos significativo de cada byte del
elemento correspondiente de a.
vec_pdep
Purpose
Copies some bits from each element of one vector into positions of the target vector specified by a mask
in another vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_pdep(a,b)
Result value
The rightmost bit of each element of a is copied into the bit position of the corresponding element of d
in which the rightmost 1-bit appears in the corresponding element of b. The next rightmost bit of each
element of a is copied into the bit position of the corresponding element of d in which the next-rightmost
1-bit appears in the corresponding element of b, and so forth until the element of b contains no more
1-bits. All bits of the element of d that correspond to 0-bits in the corresponding element of b are set to
zero.
Here is an example for doubleword inputs:
Consider element 0 in the previous table. Since b contains 16 bits that are set to 1, only the rightmost
16 bits of a are pertinent to the result. These bits are 0011 0010 0001 0000. These bits are distributed
into d at the bit positions that are set in b, providing the result shown in the previous table. You can get
element 1 of d using the same method.
vec_perm
objetivo
Devuelve un vector que contiene algunos elementos de dos vectores, en el orden especificado por un
tercer vector.
Sintaxis
d=vec_perm(a, b, c)
Valor de resultado
Cada byte del resultado se selecciona utilizando los cinco bits menos significativos del byte
correspondiente de c como índice en los bytes concatenados de a y b.
vec_permi
objetivo
Devuelve un vector permutando y combinando dos elementos de vector de ocho bytes de longitud en a y
b basándose en el valor de c.
Sintaxis
d=vec_permi(a, b, c)
Valor de resultado
Si utilizamos a[0] y a[1] para representar el primero y segundo elementos de ocho bytes de longitud en
a, y utilizamos b[0] y b[1] para elementos en b, esta función determina los elementos en el vector de
resultados basándose en el valor binario de c. Esto se ilustra de la siguiente manera:
• 00 - a[0],b[0]
• 01 - a[0], b[1]
• 10 - a[1], b[0]
• 11 - a[1], b[1]
vec_permx
Purpose
Performs a partial permute of the first two arguments, which form an aligned 32-byte section of an
emulated vector up to 256 bytes wide, using the partial permute control vector in the third argument.
The fourth argument identifies which 32-byte section of the emulated vector is contained in the first two
arguments.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_permx(a,b,c,e)
Result value
Let s be the concatenation of a and b. For each integer value i from 0 to 15, do the following: let j be the
contents of bits 3 through 7 of byte element i of c. If e is equal to the contents of bits 0 through 2 of
byte element i of c, the contents of byte element j of s are placed into byte element i of d. Otherwise, the
contents of byte element i of d are set to zero.
This built-in function can be used to emulate permutes on vectors up to 256 bytes in length, and can also
be used to perform a parallel table lookup on up to 256-bytes tables.
vec_pext
Purpose
Copies some bits from each element of one vector as specified by a mask in another vector into the
rightmost bits of the target vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_pext(a,b)
Consider element 0 in the previous table. Since b contains 16 bits that are set to 1, all bits except the
rightmost 16 bits of d are set to zero. The rightmost 16 bits are set by extracting the bits of a at the
positions of the 1-bits in b. Those bits are 0011 0010 0001 0000, providing the result shown in the
previous table.
vec_popcnt
objetivo
Calcula el recuento de población (número de bits establecidos) en cada elemento de la entrada.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_popcnt(a)
vec_promocionar
objetivo
Devuelve un vector con a en la posición del elemento b.
Sintaxis
d=vec_promote(a, b)
Valor de resultado
El resultado es un vector con a en la posición del elemento b. Esta función utiliza la aritmética de módulo
en b para determinar el número de elemento. Por ejemplo, si b está fuera de rango, el compilador utiliza
el módulo b el número de elementos del vector para determinar la posición del elemento. Los otros
elementos del vector no están definidos.
vec_re
objetivo
Devuelve un vector que contiene estimaciones de los reciprocales de los elementos correspondientes del
vector dado.
Sintaxis
d=vec_re(a)
Valor de resultado
Cada elemento del resultado contiene el valor estimado del recíproco del elemento correspondiente de a.
vec_replace_elt
Purpose
Replaces an element in a vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_replace_elt(a,b,c)
Result value
The result d is set to the value of a. Then the element of d indexed by c using natural element order is set
to the value of b.
Note: The value of c must be in the range of 0 to 3, inclusive for word-length elements, and in the range of
0 and 1, inclusive for doubleword-length elements.
vec_replace_unaligned
Syntax
d=vec_replace_unaligned(a,b,c)
Result value
The result d is set to the value of a. Then the value of b is written to d starting at the byte position
indicated by c in left-to-right byte order.
vec_revb
objetivo
Devuelve un vector que contiene los bytes del elemento correspondiente del argumento en el orden
inverso de bytes.
Sintaxis
d=vec_revb(a)
Valor de resultado
Cada elemento del resultado contiene los bytes del elemento correspondiente de a en el orden inverso de
bytes.
vec_reve
objetivo
Devuelve un vector que contiene los elementos del argumento en el orden inverso del elemento.
Sintaxis
d=vec_reve(a)
Valor de resultado
El resultado contiene los elementos de a en el orden inverso del elemento.
vec_rl
objetivo
Gira cada elemento de un vector dejado por un número determinado de bits.
Sintaxis
d=vec_rl(a, b)
Valor de resultado
Cada elemento del resultado se obtiene girando el elemento correspondiente de a a la izquierda por el
número de bits especificado por el elemento correspondiente de b.
vec_rlmi
objetivo
Devuelve un vector que contiene cada elemento del vector dado girado a la izquierda e insertado bajo una
máscara en otro vector.
Nota: Esta función incorporada sólo es válida cuando se cumplen todas las condiciones siguientes:
• La opción -mcpu se establece en el destino de los procesadores POWER9 o superior.
• Se especifica la opción -qaltivec .
• Se incluye el archivo altivec.h .
Sintaxis
d=vec_rlmi(a, b, c)
Valor de resultado
Cada elemento de d se obtiene girando el elemento correspondiente de b a la izquierda e insertándolo
bajo máscara en el elemento correspondiente de a. c contiene la máscara y el recuento de turnos.
Para cada elemento de c, los bits 11:15 contienen el inicio de máscara, los bits 19:23 contienen el final
de máscara y los bits 27:31 contienen el recuento de desplazamiento.
Nota: No puede especificar una máscara de todo cero.
objetivo
Devuelve un vector que contiene cada elemento del vector dado girado a la izquierda e intersectado con
una máscara.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_rlnm(a, b, c)
Valor de resultado
Cada elemento de a se rota a la izquierda y, a continuación, se realiza una operación AND lógica con una
máscara especificada por b y c.
b contiene el recuento de turnos para cada elemento en el byte de orden inferior, con otros bytes cero. c
contiene el inicio de máscara y el final de máscara para cada elemento, con el final de máscara en el byte
de orden inferior, la máscara empieza en el siguiente byte superior y otros bytes cero.
Nota: No puede especificar una máscara de todo cero.
vec_round
objetivo
Devuelve un vector que contiene los valores redondeados de los elementos correspondientes del vector
dado.
Sintaxis
d=vec_round(a)
rodo_vecc
objetivo
Devuelve un vector redondeando cada elemento de coma flotante de precisión simple o de precisión
doble en el vector dado a entero.
Sintaxis
d=vec_roundc(a)
rota_vecm
objetivo
Devuelve un vector que contiene los valores enteros de coma flotante representables más grandes
menores o iguales que los valores de los elementos correspondientes del vector dado.
Nota: vec_roundm es otro nombre para vec_floor.
Sintaxis
d=vec_roundm(a)
Referencia relacionada
“vec_floor” en la página 254
objetivo
Devuelve un vector que contiene los valores enteros de coma flotante representables más pequeños
mayores o iguales que los valores de los elementos correspondientes del vector dado.
Nota: vec_roundp es otro nombre para vec_ceil.
Sintaxis
d=vec_roundp(a)
Referencia relacionada
“vec_ceil” en la página 224
rodo_vecz
objetivo
Devuelve un vector que contiene los valores truncados de los elementos correspondientes del vector
dado.
Nota: vec_roundz es otro nombre para vec_trunc.
Sintaxis
d=vec_roundz(a)
Valor de resultado
Cada elemento del resultado contiene el valor del elemento correspondiente de a, truncado en un valor
integral.
Referencia relacionada
“vec_trunc” en la página 345
objetivo
Devuelve un vector que contiene el valor estimado de las raíces cuadradas recíprocas de los elementos
correspondientes del vector dado.
Sintaxis
d=vec_rsqrte(a)
Valor de resultado
Cada elemento del resultado contiene el valor estimado de la raíz cuadrada recíproca del elemento
correspondiente de a.
vec_sel
objetivo
Devuelve un vector que contiene el valor de a o b en función del valor de c.
Sintaxis
d=vec_sel(a, b, c)
Valor de resultado
Cada bit del vector de resultado tiene el valor del bit correspondiente de a si el bit correspondiente de c
es 0, o el valor del bit correspondiente de b en caso contrario.
Purpose
Sign-extends smaller elements of a source vector to word length in the result vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Syntax
d=vec_signexti (a)
Result value
Each word element of d is computed by sign-extending the rightmost element in the corresponding word
of a.
vec_signextll
Purpose
Sign-extends smaller elements of a source vector to doubleword length in the result vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_signextll (a)
vec_sl
objetivo
Realiza un desplazamiento a la izquierda para cada elemento de un vector.
Sintaxis
d=vec_sl(a, b)
Nota: Los tipos siguientes son válidos cuando -mcpu está establecido en procesadores POWER7 de
destino o superior. Sin embargo, la compilación con procesadores POWER8 o superior proporciona una
generación de código más eficiente utilizando las instrucciones POWER8 disponibles.
Valor de resultado
Cada elemento del vector de resultado es el resultado de desplazar a la izquierda el elemento
correspondiente de a por el número de bits especificado por el valor del elemento correspondiente de b,
módulo el número de bits del elemento. Los bits que se desplazan hacia fuera se sustituyen por ceros.
vec_sld
objetivo
La izquierda desplaza dos vectores concatenados por un número determinado de bytes.
Nota:
1. c debe ser un literal sin signo con un valor comprendido entre 0 y 15 inclusive.
Valor de resultado
El resultado son los 16 bytes más significativos obtenidos concatenando a y b, y desplazándose a la
izquierda por el número de bytes especificado por c.
vec_sldb
Purpose
Shifts a double-wide vector left by given bits and returns the leftmost 128 bits of the shift result.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_sldb(a,b,c)
Result value
Let e be the concatenation of a and b, with a on the left. Let e' be e shifted left by the number of bits
specified by c. Then d is set to the leftmost 128 bits of e'.
vec_sldw
objetivo
La izquierda desplaza dos vectores concatenados por un número determinado de 4 bytes.
Sintaxis
d=vec_sldw(a, b, c)
Valor de resultado
El resultado son los 16 bytes más significativos obtenidos concatenando a y b, y desplazándose a la
izquierda por el número de 4 bytes especificado por c.
vec_sll
objetivo
La izquierda desplaza un vector por un número determinado de bits.
Sintaxis
d=vec_sll(a, b)
Nota:
1. Los tres bits menos significativos de todos los elementos de bytes en b deben ser iguales.
Valor de resultado
El resultado se genera desplazando el contenido de a a la izquierda por el número de bits especificado
por los últimos tres bits del último elemento de b. Los bits que se desplazan hacia fuera se sustituyen por
ceros.
vec_slo
objetivo
La izquierda desplaza un vector por un número determinado de bytes.
Sintaxis
d=vec_slo(a, b)
Valor de resultado
El resultado se genera desplazando el contenido de a a la izquierda por el número de bytes especificado
por los bits 121 a 124 de b. Los bits que se desplazan hacia fuera se sustituyen por ceros.
vec_slv
objetivo
La izquierda desplaza los elementos de un vector dado por un número determinado de bits.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_slv(a, b)
Valor de resultado
Supongamos la siguiente información. El elemento i del vector de resultado contiene la misma serie de
bits que el bit Si -bit Si + 7 de Xi.
• Si (0<=i<=15) indica el valor en los tres bits menos significativos del elemento i de b.
• Xi (0<=i<=14) indica la media palabra formada por los elementos de concatenación i y i+1 de a.
• X15 indica la media palabra formada por la concatenación del elemento 15 de a y un byte cero.
vec_splat
objetivo
Devuelve un vector del que todos los elementos se establecen en un valor determinado.
Valor de resultado
Cada elemento de d contiene el valor del elemento de a especificado por b.
vec_splati
Purpose
Copies an immediate value into every element of a vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_splati(a)
Result value
The result d is a vector with each element set to the value of a.
vec_splati_ins
Purpose
Copies an immediate value into a specified word of each doubleword of a vector, leaving the remaining
words unchanged.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_splati_ins(a,b,c)
Result value
If b has a value of 0, then the even elements of d are set to the value of c and the odd element of d are
copied from the corresponding element of a. Otherwise, b must have a value of 1, and the odd elements
of d are set to the value of c and the even elements of d are copied from the corresponding elements of a.
vec_splatid
Purpose
Converts an immediate single-precision floating-point value to double precision, and copies the result
into every element of a vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Result value
The result d is a vector with each element set to the value of a after a is converted to double precision.
vec_splats
objetivo
Devuelve un vector del que todos los elementos se establecen en un valor determinado.
Sintaxis
d=vec_splats(a)
Valor de resultado
Cada elemento de d tiene el valor de a.
objetivo
Devuelve un vector del que todos los elementos se establecen en un valor determinado.
Sintaxis
d=vec_splat_s8(a)
Nota:
1. a debe ser un literal con signo con un valor comprendido entre -16 y 15 inclusive.
Valor de resultado
Cada elemento de d tiene el valor de a.
vec_splat_s16
objetivo
Devuelve un vector del que todos los elementos se establecen en un valor determinado.
Sintaxis
d=vec_splat_s16(a)
Nota:
1. a debe ser un literal con signo con un valor comprendido entre -16 y 15 inclusive.
Valor de resultado
Cada elemento de d tiene el valor de a.
objetivo
Devuelve un vector del que todos los elementos se establecen en un valor determinado.
Sintaxis
d=vec_splat_s32(a)
Nota:
1. a debe ser un literal con signo con un valor comprendido entre -16 y 15 inclusive.
Valor de resultado
Cada elemento de d tiene el valor de a.
vec_splat_u8
objetivo
Devuelve un vector del que todos los elementos se establecen en un valor determinado.
Sintaxis
d=vec_splat_u8(a)
Nota:
1. a debe ser un literal con signo con un valor comprendido entre -16 y 15 inclusive.
Valor de resultado
El patrón de bits de a se interpreta como un valor sin signo. A cada elemento de d se le asigna este valor.
objetivo
Devuelve un vector del que todos los elementos se establecen en un valor determinado.
Sintaxis
d=vec_splat_u16(a)
Nota:
1. a debe ser un literal con signo con un valor comprendido entre -16 y 15 inclusive.
Valor de resultado
El patrón de bits de a se interpreta como un valor sin signo. A cada elemento de d se le asigna este valor.
vec_splat_u32
objetivo
Devuelve un vector del que todos los elementos se establecen en un valor determinado.
Sintaxis
d=vec_splat_u32(a)
Nota:
1. a debe ser un literal con signo con un valor comprendido entre -16 y 15 inclusive.
Valor de resultado
El patrón de bits de a se interpreta como un valor sin signo. A cada elemento de d se le asigna este valor.
objetivo
Devuelve un vector que contiene la raíz cuadrada de cada elemento en el vector dado.
Sintaxis
d=vec_sqrt(a)
vec_sr
objetivo
Realiza un desplazamiento a la derecha para cada elemento de un vector.
Sintaxis
d=vec_sr(a, b)
Nota: Los tipos siguientes son válidos cuando -mcpu está establecido en procesadores POWER7 de
destino o superior. Sin embargo, la compilación con procesadores POWER8 o superior proporciona una
generación de código más eficiente utilizando las instrucciones POWER8 disponibles.
Valor de resultado
Cada elemento del vector de resultado es el resultado de desplazar a la derecha el elemento
correspondiente de a por el número de bits especificado por el valor del elemento correspondiente de b,
módulo el número de bits del elemento. Los bits que se desplazan hacia fuera se sustituyen por ceros.
vec_sra
objetivo
Realiza un desplazamiento algebraico a la derecha para cada elemento de un vector.
Sintaxis
d=vec_sra(a, b)
Nota: Los tipos siguientes son válidos cuando -mcpu está establecido en procesadores POWER7 de
destino o superior. Sin embargo, la compilación con procesadores POWER8 o superior proporciona una
generación de código más eficiente utilizando las instrucciones POWER8 disponibles.
Valor de resultado
Cada elemento del vector de resultado es el resultado de desplazar algebraicamente a la derecha
el elemento correspondiente de a por el número de bits especificado por el valor del elemento
correspondiente de b, modulo el número de bits en el elemento. Los bits que se desplazan hacia fuera se
sustituyen por copias del bit más significativo del elemento de a.
Purpose
Shifts a double-wide vector right by given bits and returns the rightmost 128 bits of the result.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_srdb(a,b,c)
Result value
Let e be the concatenation of a and b, with a on the left. Let e' be e shifted right by the number of bits
specified by c. Then d is set to the rightmost 128 bits of e'.
vec_srl
objetivo
La derecha desplaza un vector por un número determinado de bits.
Sintaxis
d=vec_srl(a,b)
Nota:
1. Los tres bits menos significativos de todos los elementos de bytes en b deben ser iguales.
Valor de resultado
El resultado se genera desplazando el contenido de a a la derecha por el número de bits especificado por
los últimos tres bits del último elemento de b. Los bits que se desplazan hacia fuera se sustituyen por
ceros.
vec_sro
objetivo
La derecha desplaza un vector por un número determinado de bytes.
Sintaxis
d=vec_sro(a,b)
Valor de resultado
El resultado se produce desplazando el contenido de a a la derecha por el número de bytes especificado
por los bits 121 a 124 de b. Los bits que se desplazan hacia fuera se sustituyen por ceros.
vec_srv
objetivo
Desplaza a la derecha los elementos de un vector determinado por un número determinado de bits.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_srv(a, b)
Valor de resultado
Supongamos la siguiente información. El elemento i del vector de resultado contiene la misma serie de
bits que del bit 8-Si al bit 15 -Si de Xi, ambos inclusive.
• Si (0<=i<=15) indica el valor en los tres bits menos significativos del elemento i de b.
• X0 indica el valor de la media palabra formada concatenando un byte cero y el elemento 0 de a.
• Xi (1 < =i< =15) indica el valor de la media palabra formada por los elementos de concatenación i y i+1
de a.
vec_st
objetivo
Almacena un vector en la memoria en la dirección indicada.
Tipos de argumento
Esta función no devuelve un valor. El valor de b se añade a la dirección especificada por c, y la suma
se trunca en un múltiplo de 16 bytes. A continuación, el valor de a se almacena en esta dirección de
memoria.
La siguiente tablas describe los tipos de los argumentos de función.
Tabla 283. Tipo de datos de valor y argumentos devueltos por la función (en modalidad de 32 bits)
a b c
vector unsigned char Int vector unsigned char *
unsigned char *
carácter con signo de vector vector signed char *
carácter firmado *
carácter de bool de vector Vector bool char *
unsigned char *
carácter firmado *
vector corto sin signo vector sin signo corto *
corto sin signo *
vector firmado corto vector firmado corto *
firmado corto *
bool vectorial corto Bool vectorial corto
corto sin signo *
corto *
píxel vector píxel vector *
corto sin signo *
corto *
vector int sin signo vector no firmado int *
unsigned int *
vector firmado int vector firmado int *
firmado int *
vector bool int vector bool int *
unsigned int *
int *
flotador vectorial flotante vectorial *
float *
vec_ste
objetivo
Almacena un elemento vector en la memoria en la dirección indicada.
Tipos de argumento
Esta función no devuelve un valor. La tabla siguiente describe los tipos de los argumentos de función.
Valor de resultado
La dirección efectiva es la suma de b y la dirección especificada por c, truncada en un múltiplo
del tamaño en bytes de un elemento del vector de resultados. El valor del elemento de a en el
desplazamiento de bytes que corresponde a los cuatro bits menos significativos de la dirección efectiva
se almacena en la memoria en la dirección efectiva.
vec_stl
objetivo
Almacena un vector en la memoria en la dirección indicada y marca los datos como utilizados menos
recientemente.
Sintaxis
vec_stl(a,b,c)
Tipos de argumento
Esta función no devuelve un valor. La tabla siguiente describe los tipos de los argumentos de función.
Valor de resultado
b se añade a la dirección especificada por c, y la suma se trunca en un múltiplo de 16 bytes. A
continuación, el valor de a se almacena en esta dirección de memoria. Los datos se marcan como
utilizados menos recientemente.
vec_stril
Syntax
d=vec_stril(a)
Result value
Elements in a are copied, in natural element order, to corresponding elements of d until the first zero
element of a is encountered, or until all elements have been copied. If a zero element is encountered, all
remaining elements of d are set to zero.
vec_stril_p
Purpose
Tests whether the input vector contains a zero element.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_stril_p(a)
Result value
The result d is given a non-zero value if any element in a has a zero value. Otherwise, d is set to zero.
vec_strir
Purpose
Copies a null-terminated string of elements from the input vector to the output vector, replacing all
elements that follow the first zero element with zeros. Elements appear in the reverse of the natural
element order.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_strir(a)
Result value
Elements in a are copied, in the reverse of natural element order, to corresponding elements of d until
the first zero element of a is encountered, or until all elements have been copied. If a zero element is
encountered, all remaining elements of d are set to zero.
vec_strir_p
Purpose
Tests whether the input vector contains a zero element.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Result value
The result d is given a non-zero value if any element in a has a zero value. Otherwise, d is set to zero.
vec_sub
objetivo
Devuelve un vector que contiene el resultado de restar cada elemento de b del elemento correspondiente
de a.
Esta función emula la operación en vectores largos.
Sintaxis
d=vec_sub(a, b)
Valor de resultado
El valor de cada elemento del resultado es el resultado de restar el valor del elemento correspondiente de
b del valor del elemento correspondiente de a. La aritmética es modular para vectores enteros.
vec_sub_u128
objetivo
Resta los valores de cuádruple sin signo.
La función opera en vectores como enteros sin signo de 128 bits.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_sub_u128(a, b)
Valor de resultado
Devuelve 128 bits bajos de a - b.
vec_subc
objetivo
Devuelve un vector que contiene los préstamos producidos restando cada conjunto de elementos
correspondientes de los vectores dados.
Valor de resultado
El valor de cada elemento del resultado es el valor del préstamo generado restando el valor del elemento
correspondiente de b del valor del elemento correspondiente de a. El valor es 0 si se ha producido un
préstamo, o 1 si no se ha producido ningún préstamo.
vec_subc_u128
objetivo
Devuelve el bit de transporte de la resta de 128 bits de dos valores de cuádruple.
La función opera en vectores como enteros sin signo de 128 bits.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_subc_u128(a, b)
Valor de resultado
Devuelve la ejecución de a - b.
vec_sube_u128
objetivo
Resta los valores de cuádruple sin signo con bit de transporte de la operación anterior.
La función opera en vectores como enteros sin signo de 128 bits.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_sube_u128(a, b, c)
Valor de resultado
Devuelve los 128 bits inferiores de a - b - (c & 1).
objetivo
Obtiene el bit de transporte de la resta de 128 bits de dos valores de cuádruple palabra con el bit de
transporte de la operación anterior.
La función opera en vectores como enteros sin signo de 128 bits.
Nota: Esta función incorporada es válida cuando la opción -mcpu está establecida en destino POWER8 o
superior.
Sintaxis
d=vec_subec_u128(a, b, c)
Valor de resultado
Devuelve la ejecución de a - b - (c & 1).
vec_subs
objetivo
Devuelve un vector que contiene las diferencias saturadas de cada conjunto de elementos
correspondientes de los vectores dados.
Sintaxis
d=vec_subs(a, b)
Valor de resultado
El valor de cada elemento del resultado es el resultado saturado de restar el valor del elemento
correspondiente de b del valor del elemento correspondiente de a.
objetivo
Devuelve un vector que contiene los resultados de realizar una suma a través de 1/2 operación de vector
en dos vectores dados.
Sintaxis
d=vec_sum2s(a, b)
Valor de resultado
El primer y tercer elementos de d son 0. El segundo elemento de d contiene la suma saturada del primer y
segundo elementos de a y el segundo elemento de b. El cuarto elemento de d contiene la suma saturada
del tercer y cuarto elementos de a y el cuarto elemento de b.
d[0] = 0
d[1] = a[0] + a[1] + b[1]
d[2] = 0
d[3] = a[2] + a[3] + b[3]
vec_sum4s
objetivo
Devuelve un vector que contiene los resultados de realizar una suma a través de una operación de vector
1/4 en dos vectores determinados.
Sintaxis
d=vec_sum4s(a, b)
Valor de resultado
Para cada elemento n de d, el valor se obtiene de la forma siguiente:
• Si a es de tipo vector signed char o vector unsigned char, el valor es la adición saturada de
elementos 4n a través de 4n+3 de a y el elemento n de b.
vec_Sumas
objetivo
Devuelve un vector que contiene los resultados de realizar una operación de suma entre vectores en los
vectores proporcionados.
Sintaxis
d=vec_sums(a, b)
Valor de resultado
Los tres primeros elementos de d son 0. El cuarto elemento es la suma saturada de todos los elementos
de a y el cuarto elemento de b.
vec_ternarylogic
Purpose
Performs one of the 256 logical operations on three input vectors to produce the output vector.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_ternarylogic(a,b,c,e)
Result value
For each integer value i from 0 to 127, let j be the value of the concatenation of the contents of bit i of a,
b, and c. The value of bit j of the 8-bit value in e is placed into bit i of d.
vec_test_data_class
objetivo
Determina la clase de datos de los elementos del vector dado.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_test_data_class(a, b)
Valor de resultado
Devuelve los resultados de probar a para la condición seleccionada por b. El valor de b está en el rango
de 0 a 127. Cada bit de b habilita la prueba de una condición diferente. Puede hacer referencia a la tabla
siguiente para las relaciones de correlación entre condiciones de prueba y bits de b:
vec_test_lsbb_all_ones
Purpose
Tests whether the least-significant bits of all bytes of the input argument are equal to 1.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_test_lsbb_all_ones(a)
Result value
The result d is set to 1 if the least-significant bit or least-significant bits of all bytes of a are equal to 1.
Otherwise, d is set to 0.
vec_test_lsbb_all_zeros
Purpose
Tests whether the least-significant bit of all bytes of the input argument are equal to 0.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=vec_test_lsbb_all_zeros(a)
vec_trunc
objetivo
Devuelve un vector que contiene los valores truncados de los elementos correspondientes del vector
dado.
Nota: vec_trunc es otro nombre para vec_roundz. Para obtener más información, consulte
“rodo_vecz” en la página 310.
vec_unpackh
objetivo
Desempaqueta la mitad más significativa de un vector en otro vector.
Sintaxis
d=vec_unpackh(a)
Nota: Los tipos siguientes son válidos cuando la opción -mcpu está establecida en procesadores
POWER8 de destino o superior.
Valor de resultado
El valor de cada elemento de d es el valor del elemento correspondiente de la mitad más significativa de
a.
objetivo
Desempaqueta la mitad menos significativa de un vector en otro vector.
Sintaxis
d=vec_unpackl(a)
Nota: Los tipos siguientes son válidos cuando la opción -mcpu está establecida en procesadores
POWER8 de destino o superior.
Valor de resultado
El valor de cada elemento de d es el valor del elemento correspondiente de la mitad menos significativa
de a.
vec_xl
objetivo
Carga un vector de 16 bytes de la dirección de memoria especificada por el desplazamiento a y el puntero
b.
Sintaxis
d=vec_xl(a, b)
Tabla 303. Tipo de datos de valor y argumentos devueltos por la función (en modalidad de 32 bits)
d a b
carácter con signo de vector Int carácter firmado const *
vector unsigned char const carácter sin signo *
vector firmado corto consignst short firmado *
vector corto sin signo const corto sin signo *
vector firmado int const int firmado *
vector int sin signo const int no firmado *
vector largo firmado largo const long firmado largo *
vector largo sin signo largo const long largo no firmado *
flotador vectorial Flotante de const *
vector doble const doble *
Tabla 304. Tipo de datos de valor y argumentos devueltos por la función (en modalidad de 64 bits)
d a b
carácter con signo de vector largo carácter firmado const *
vector unsigned char const carácter sin signo *
vector firmado corto consignst short firmado *
vector corto sin signo const corto sin signo *
vector firmado int const int firmado *
vector int sin signo const int no firmado *
vector largo firmado largo const long firmado largo *
vector largo sin signo largo const long largo no firmado *
flotador vectorial Flotante de const *
vector doble const doble *
Valor de resultado
vec_xl añade el desplazamiento proporcionado por a a la dirección proporcionada por b para obtener la
dirección efectiva para la operación de carga. No trunca la dirección efectiva en un múltiplo de 16 bytes.
El orden de los elementos en el resultado de la función es diferente en los sistemas little endian.
vec_xl_be
objetivo
Carga un vector de 16 bytes de la dirección de memoria especificada por el desplazamiento a y el puntero
b.
Tabla 305. Tipo de datos de valor y argumentos devueltos por la función (en modalidad de 32 bits)
d a b
carácter con signo de vector Int carácter firmado const *
vector unsigned char const carácter sin signo *
vector firmado corto consignst short firmado *
vector corto sin signo const corto sin signo *
vector firmado int const int firmado *
vector int sin signo const int no firmado *
vector largo firmado largo const long firmado largo *
vector largo sin signo largo const long largo no firmado *
flotador vectorial Flotante de const *
vector doble const doble *
Tabla 306. Tipo de datos de valor y argumentos devueltos por la función (en modalidad de 64 bits)
d a b
carácter con signo de vector largo carácter firmado const *
vector unsigned char const carácter sin signo *
vector firmado corto consignst short firmado *
vector corto sin signo const corto sin signo *
vector firmado int const int firmado *
vector int sin signo const int no firmado *
vector largo firmado largo const long firmado largo *
vector largo sin signo largo const long largo no firmado *
flotador vectorial Flotante de const *
vector doble const doble *
Valor de resultado
vec_xl_be añade el desplazamiento proporcionado por a a la dirección proporcionada por b para obtener
la dirección efectiva para la operación de carga. No trunca la dirección efectiva en un múltiplo de 16
bytes.
El orden de los elementos en el resultado de la función es big endian, incluso cuando se llama a la función
en sistemas little endian.
objetivo
Devuelve un vector que carga un número determinado de bytes de la dirección indicada.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
Sintaxis
d=vec_xl_len(a, b)
Valor de resultado
El resultado se carga desde la dirección de memoria especificada por a. bespecifica el número de bytes
cargados. Los bytes de elementos se inicializan en orden desde la corriente de bytes que se define
mediante la endianness del entorno operativo. Cualquier byte de elementos que no se inicializa se
establece en un valor 0.
El comportamiento no está definido si el valor de b está fuera del rango de 0 a 255.
vec_xl_len_r
objetivo
Carga una serie de bytes en el registro de vector, justificado a la derecha. Establece los elementos
situados más a la izquierda (16-cnt) en 0.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en el destino
POWER9 o superior.
parámetros
ptr
Apunta a una dirección base.
cnt
El número de bytes a cargar. El valor de cnt debe estar en el rango de 1 a 16.
vec_xld2
objetivo
Carga un vector de 16 bytes de dos elementos de 8 bytes en la dirección de memoria especificada por el
desplazamiento a y el puntero b.
Sintaxis
d=vec_xld2(a, b)
Valor de resultado
Esta función añade el desplazamiento y el puntero R-valor para obtener la dirección para la operación de
carga. No trunca la dirección efectiva a un múltiplo de 16 bytes.
vec_xlds
objetivo
Carga un elemento de 8 bytes de la dirección de memoria especificada por el desplazamiento a y el
puntero b y, a continuación, lo divide en un vector.
Sintaxis
d=vec_xlds(a, b)
Valor de resultado
Esta función añade el desplazamiento y el puntero R-valor para obtener la dirección para la operación de
carga. No trunca la dirección efectiva a un múltiplo de 16 bytes.
objetivo
Carga un vector de 16 bytes de cuatro elementos de 4 bytes en la dirección de memoria especificada por
el desplazamiento a y el puntero b.
Sintaxis
d=vec_xlw4(a, b)
Valor de resultado
Esta función añade el desplazamiento y el puntero R-valor para obtener la dirección para la operación de
carga. No trunca la dirección efectiva a un múltiplo de 16 bytes.
vec_xor
objetivo
Realiza un XOR bit a bit de los vectores dados.
Valor de resultado
El resultado es el XOR a nivel de bit de a y b.
vec_xst
objetivo
Almacena los elementos del vector de 16 bytes a en la dirección efectiva obtenida añadiendo el
desplazamiento proporcionado por b con la dirección proporcionada por c. La dirección efectiva no se
trunca en un múltiplo de 16 bytes.
El orden de los elementos de vector almacenados en la dirección efectiva puede ser diferente en los
sistemas little-endian.
Sintaxis
d=vec_xst(a, b, c)
Tabla 313. Tipo de datos de valor y argumentos devueltos por la función (en modalidad de 64 bits)
d a b c
vacío carácter con signo de largo carácter firmado *
vector
vector unsigned char unsigned char *
vector firmado corto firmado corto *
vector corto sin signo corto sin signo *
vector firmado int firmado int *
vector int sin signo unsigned int *
vector largo firmado long long firmado *
largo
vector largo sin signo largo sin firmar *
largo
flotador vectorial float *
vector doble doble *
vec_xst_be
objetivo
Almacena los elementos del vector de 16 bytes a en orden de elemento big endian a la dirección efectiva
obtenida añadiendo el desplazamiento proporcionado por b con la dirección proporcionada por c. La
dirección efectiva no se trunca en un múltiplo de 16 bytes.
Tabla 314. Tipo de datos de valor y argumentos devueltos por la función (en modalidad de 32 bits)
d a b c
vacío carácter con signo de Int carácter firmado *
vector
vector unsigned char unsigned char *
vector firmado corto firmado corto *
vector corto sin signo corto sin signo *
vector firmado int firmado int *
vector int sin signo unsigned int *
vector largo firmado long long firmado *
largo
vector largo sin signo largo sin firmar *
largo
flotador vectorial float *
vector doble doble *
Tabla 315. Tipo de datos de valor y argumentos devueltos por la función (en modalidad de 64 bits)
d a b c
vacío carácter con signo de largo carácter firmado *
vector
vector unsigned char unsigned char *
vector firmado corto firmado corto *
vector corto sin signo corto sin signo *
vector firmado int firmado int *
vector int sin signo unsigned int *
vector largo firmado long long firmado *
largo
vector largo sin signo largo sin firmar *
largo
flotador vectorial float *
vector doble doble *
objetivo
Almacena una longitud de byte determinada de un vector en una dirección determinada.
Nota: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu está establecida en procesadores POWER9 de destino o superior.
• La modalidad de compilador es de 64 bits.
Sintaxis
void vec_xst_len(a, b, c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Resultado
No se devuelve ningún valor. Los bytes especificados de a se almacenan en una dirección. c especifica el
número de bytes que se van a almacenar y bespecifica la dirección.
El comportamiento no está definido si el valor de c está fuera de 0-255. El comportamiento se define si el
valor de c no es un múltiplo del tamaño del elemento vector.
vec_xst_len_r
objetivo
Almacena una serie de bytes justificada por la derecha.
Nota: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu está establecida en procesadores POWER9 de destino o superior.
• La modalidad de compilador es de 64 bits.
parámetros
datos
Desplazamiento de dirección.
ptr
Apunta a una dirección base.
cnt
El número de bytes que se van a almacenar. El valor de cnt debe estar en el rango de 1 a 16 y debe ser
una constante conocida en tiempo de compilación.
vec_xstd2
objetivo
Coloca un vector de 16 bytes a como dos elementos de 8 bytes en la dirección de memoria especificada
por el desplazamiento b y el puntero c.
Sintaxis
d=vec_xstd2(a, b, c)
Valor de resultado
Esta función añade el desplazamiento y el puntero R-value para obtener la dirección para la operación de
almacenamiento. No trunca la dirección efectiva a un múltiplo de 16 bytes.
vec_xstw4
objetivo
Coloca un vector de 16 bytes a en cuatro elementos de 4 bytes en la dirección de memoria especificada
por el desplazamiento b y el puntero c.
Valor de resultado
Esta función añade el desplazamiento y el puntero R-value para obtener la dirección para la operación de
almacenamiento. No trunca la dirección efectiva a un múltiplo de 16 bytes.
En el prototipo de cada función, los puntos suspensivos (...) representan una lista opcional de
parámetros. IBM Open XL C/C++ ignora estos parámetros opcionales y protege todas las variables
accesibles globalmente.
Las funciones incorporadas de acceso a memoria atómica de GCC se agrupan en las categorías siguientes.
objetivo
Esta función asigna de forma atómica el valor de __v a la variable a la que apunta __p .
Se crea una barrera de adquisición de memoria cuando se invoca esta función.
Prototipo
T __sync_lock_test_and_set (T* __p, U __v, ...);
parámetros
__p
El puntero de la variable que se va a establecer.
__v
El valor a establecer en la variable a la que apunta __p .
Valor de retorno
La función devuelve el valor inicial de la variable a la que apunta __p .
objetivo
Esta función libera el bloqueo adquirido por la función __sync_lock_test_and_set y asigna el valor
cero a la variable a la que apunta __p .
Se crea una barrera de memoria de liberación cuando se invoca esta función.
Prototipo
void __sync_lock_release (T* __p, ...);
parámetros
__p
El puntero de la variable que se va a establecer.
__sync_sync
objetivo
Esta función sincroniza los datos en todas las hebras.
Se crea una barrera de memoria completa cuando se invoca esta función.
Prototipo
void __sync_synchronize ();
objetivo
Esta función realiza una operación AND a nivel de bit atómica en la variable __v con la variable a la que
apunta __p . El resultado se almacena en la dirección especificada por __p.
Se crea una barrera de memoria completa cuando se invoca esta función.
Prototipo
T __sync_fetch_and_and (T* __p, U __v, ...);
parámetros
__p
Puntero de una variable en la que se va a realizar la operación AND a nivel de bit. El valor de esta
variable debe cambiarse al resultado de la operación.
__v
La variable con la que se va a realizar la operación AND a nivel de bit.
Valor de retorno
La función devuelve el valor inicial de la variable a la que apunta __p .
objetivo
Esta función realiza una operación NAND a nivel de bit atómica en la variable __v con la variable a la que
apunta __p . El resultado se almacena en la dirección especificada por __p.
Se crea una barrera de memoria completa cuando se invoca esta función.
Prototipo
T __sync_fetch_and_nand (T* __p, U __v, ...);
parámetros
__p
Puntero de una variable en la que se va a realizar la operación NAND a nivel de bit. El valor de esta
variable debe cambiarse al resultado de la operación.
__v
La variable con la que se va a realizar la operación NAND a nivel de bit.
Valor de retorno
La función devuelve el valor inicial de la variable a la que apunta __p .
__sync_fetch_and_or
objetivo
Esta función realiza una operación OR inclusiva a nivel de bit atómica en la variable __v con la variable a la
que apunta __p . El resultado se almacena en la dirección especificada por __p.
Se crea una barrera de memoria completa cuando se invoca esta función.
Prototipo
T __sync_fetch_and_or (T* __p, U __v, ...);
parámetros
__p
Puntero de una variable en la que se va a realizar la operación OR inclusiva a nivel de bit. El valor de
esta variable debe cambiarse al resultado de la operación.
__v
La variable con la que se va a realizar la operación OR inclusiva a nivel de bit.
Valor de retorno
La función devuelve el valor inicial de la variable a la que apunta __p .
__sync_fetch_and_xor
objetivo
Esta función realiza una operación OR exclusiva a nivel de bit atómica en la variable __v con la variable a
la que apunta __p . El resultado se almacena en la dirección especificada por __p.
Se crea una barrera de memoria completa cuando se invoca esta función.
parámetros
__p
Puntero de una variable en la que se va a realizar la operación OR exclusiva a nivel de bit. El valor de
esta variable debe cambiarse al resultado de la operación.
__v
La variable con la que se va a realizar la operación OR exclusiva a nivel de bit.
Valor de retorno
La función devuelve el valor inicial de la variable a la que apunta __p .
__sync_fetch_and_add
objetivo
Esta función añade de forma atómica el valor de __v a la variable a la que apunta __p . El resultado se
almacena en la dirección especificada por __p.
Se crea una barrera de memoria completa cuando se invoca esta función.
Prototipo
T __sync_fetch_and_add (T* __p, U __v, ...);
parámetros
__p
Puntero de una variable a la que se va a añadir __v . El valor de esta variable debe cambiarse al
resultado de la operación de adición.
__v
La variable cuyo valor se va a añadir a la variable a la que apunta __p .
Valor de retorno
La función devuelve el valor inicial de la variable a la que apunta __p .
__sync_fetch_and_sub
objetivo
Esta función resta atómicamente el valor de __v de la variable a la que apunta __p . El resultado se
almacena en la dirección especificada por __p.
Se crea una barrera de memoria completa cuando se invoca esta función.
Prototipo
T __sync_fetch_and_sub (T* __p, U __v, ...);
Valor de retorno
La función devuelve el valor inicial de la variable a la que apunta __p .
objetivo
Esta función realiza una operación AND a nivel de bit atómica en la variable __v con la variable a la que
apunta __p . El resultado se almacena en la dirección especificada por __p.
Se crea una barrera de memoria completa cuando se invoca esta función.
Prototipo
T __sync_and_and_fetch (T* __p, U __v, ...);
parámetros
__p
Puntero de una variable en la que se va a realizar la operación AND a nivel de bit. El valor de esta
variable debe cambiarse al resultado de la operación.
__v
La variable con la que se va a realizar la operación AND a nivel de bit.
Valor de retorno
La función devuelve el nuevo valor de la variable a la que apunta __p .
__sync_nand_and_fetch
objetivo
Esta función realiza una operación NAND a nivel de bit atómica en la variable __v con la variable a la que
apunta __p . El resultado se almacena en la dirección especificada por __p.
Se crea una barrera de memoria completa cuando se invoca esta función.
Prototipo
T __sync_nand_and_fetch (T* __p, U __v, ...);
parámetros
__p
Puntero de una variable en la que se va a realizar la operación NAND a nivel de bit. El valor de esta
variable debe cambiarse al resultado de la operación.
Valor de retorno
La función devuelve el nuevo valor de la variable a la que apunta __p .
__sync_or_and_fetch
objetivo
Esta función realiza una operación OR inclusiva a nivel de bit atómica en la variable __v con la variable a la
que apunta __p . El resultado se almacena en la dirección especificada por __p.
Se crea una barrera de memoria completa cuando se invoca esta función.
Prototipo
T __sync_or_and_fetch (T* __p, U __v, ...);
parámetros
__p
Puntero de una variable en la que se va a realizar la operación OR inclusiva a nivel de bit. El valor de
esta variable debe cambiarse al resultado de la operación.
__v
La variable con la que se va a realizar la operación OR inclusiva a nivel de bit.
Valor de retorno
La función devuelve el nuevo valor de la variable a la que apunta __p .
__sync_xor_y_fetch
objetivo
Esta función realiza una operación OR exclusiva a nivel de bit atómica en la variable __v con la variable a
la que apunta __p . El resultado se almacena en la dirección especificada por __p.
Se crea una barrera de memoria completa cuando se invoca esta función.
Prototipo
T __sync_xor_and_fetch (T* __p, U __v, ...);
parámetros
__p
Puntero de la variable en la que se va a realizar la operación OR exclusiva a nivel de bit. El valor de
esta variable debe cambiarse al resultado de la operación.
__v
La variable con la que se va a realizar la operación OR exclusiva a nivel de bit.
Valor de retorno
La función devuelve el nuevo valor de la variable a la que apunta __p .
objetivo
Esta función añade de forma atómica el valor de __v a la variable a la que apunta __p . El resultado se
almacena en la dirección especificada por __p.
Se crea una barrera de memoria completa cuando se invoca esta función.
Prototipo
T __sync_add_and_fetch (T* __p, U __v, ...);
parámetros
__p
Puntero de una variable a la que se va a añadir __v . El valor de esta variable debe cambiarse al
resultado de la operación de adición.
__v
La variable cuyo valor se va a añadir a la variable a la que apunta __p .
Valor de retorno
La función devuelve el nuevo valor de la variable a la que apunta __p .
__sync_sub_y_fetch
objetivo
Esta función resta atómicamente el valor de __v de la variable a la que apunta __p . El resultado se
almacena en la dirección especificada por __p.
Se crea una barrera de memoria completa cuando se invoca esta función.
Prototipo
T __sync_sub_and_fetch (T* __p, U __v, ...);
parámetros
__p
El puntero de una variable de la que se va a restar __v . El valor de esta variable debe cambiarse al
resultado de la suboperación.
__v
La variable cuyo valor se va a restar de la variable a la que apunta __p .
Valor de retorno
La función devuelve el nuevo valor de la variable a la que apunta __p .
objetivo
Esta función compara el valor de __compVal con el valor de la variable a la que apunta __p . Si son iguales,
el valor de __exchVal se almacena en la dirección especificada por __p; de lo contrario, no se realiza
ninguna operación.
Se crea una barrera de memoria completa cuando se invoca esta función.
Prototipo
E __sync_val_compare_and_swap (E* __p, I __compVal, I __exchVal, ...);
parámetros
__p
El puntero a una variable con cuyo valor se va a comparar.
__compVal
El valor que se comparará con el valor de la variable a la que apunta __p .
__exchVal
El valor que se almacenará en la dirección a la que apunta __p .
Valor de retorno
La función devuelve el valor inicial de la variable a la que apunta __p .
__sync_bool_compare_and_swap
objetivo
Esta función compara el valor de __compVal con el valor de la variable a la que apunta __p . Si son iguales,
el valor de __exchVal se almacena en la dirección especificada por __p; de lo contrario, no se realiza
ninguna operación.
Se crea una barrera de memoria completa cuando se invoca esta función.
Prototipo
bool __sync_bool_compare_and_swap (T* __p, U __compVal, V __exchVal, ...);
parámetros
__p
El puntero a una variable con cuyo valor se va a comparar.
__compVal
El valor que se comparará con el valor de la variable a la que apunta __p .
__exchVal
El valor que se almacenará en la dirección a la que apunta __p .
Valor de retorno
Si el valor de __compVal y el valor de la variable a la que apunta __p son iguales, la función devuelve
true; de lo contrario, devuelve false.
__builtin_object_size
objetivo
Cuando se utiliza con -O2 o una optimización superior, devuelve un número constante de bytes desde el
puntero especificado hasta el final del objeto al que se apunta si el tamaño del objeto se conoce en el
momento de la compilación.
Prototipo
size_t __builtin_object_size (void *ptr, int tipo);
parámetros
ptr
Puntero del objeto.
Tipo
Una constante entera que está en el rango de 0 a 3 inclusive. Si el puntero apunta a varios objetos
en tiempo de compilación, type determina si esta función devuelve el máximo o mínimo de los
recuentos de bytes restantes en esos objetos. Si el objeto al que apunta un puntero está encerrado en
otro objeto, tipo determina si se considera que la variable completa o el subobjeto circundante más
cercano es el objeto al que apunta el puntero.
Valor de retorno
Tabla 321 en la página 369 describe los valores de retorno de esta función incorporada cuando se
cumplen las dos condiciones siguientes.
• -O2 o un nivel de optimización superior está en vigor.
• Los objetos a los que apunta ptr se pueden determinar en el tiempo de compilación.
Si no se cumple alguna de estas condiciones, esta función incorporada devuelve los valores tal como se
describe en Tabla 322 en la página 370.
Nota: IBM Open XL C/C++ para AIX 17.1.0 no da soporte a los varios destinos y características
circundantes más cercanas. Puede asignar un valor en el rango de 0 a 3 a tipo, pero el comportamiento
del compilador es como si el tipo fuera 0.
Ejemplos
Considere el archivo myprogram.c:
#include "stdio.h"
int main(){
char a[10];
func(a);
return 0;
}
__builtin_object_size(a,0):10
__builtin_object_size(b,0):10
__builtin_object_size(p,0):5
__builtin_object_size(a,0):-1
/* The objects the pointer points to cannot be determined at compile time. */
__builtin_object_size(b,0):10
__builtin_object_size(p,0):5
__builtin___ * _chk
Además de __builtin_object_size, IBM Open XL C/C++ para AIX 17.1.0 también da soporte a las
funciones incorporadas * _chk para algunas funciones de operación de serie comunes; por ejemplo,
se proporciona __builtin___memcpy_chk para memcpy. Cuando estas funciones incorporadas se
Tabla 323. Comprobación de las funciones incorporadas para las funciones de operación de serie
Función Función incorporada Prototipo
memcpy __builtin___memcpy_chk void * __builtin___memcpy_chk
(void * dest, const void * src,
size_t n, size_t os);
mempcpy __builtin___mempcpy_chk void * __builtin___mempcpy_chk
(void * dest, const void * src,
size_t n, size_t os);
movimiento de memoria __builtin___memmove_chk void *
__builtin___memmove_chk (void
* dest, const void * src, size_t n,
size_t os);
conjunto de memorias __builtin___memset_chk void * __builtin___memset_chk
(void * s, int c, size_t n, size_t os);
Strcpy __builtin___strcpy_chk char * __builtin___strcpy_chk
(char * dest, const char * src,
size_t os);
Strncpy __builtin___strncpy_chk char * __builtin___strncpy_chk
(char * dest, const char * src,
size_t n, size_t os);
stpcpy __builtin___stpcpy_chk char * __builtin___stpcpy_chk
(char * dest, const char * src,
size_t os);
gatito __builtin___strcat_chk char * __builtin___strcat_chk
(char * dest, const char * src,
size_t os);
gato de cadena __builtin___strncat_chk char * __builtin___strncat_chk
(char * dest, const char * src,
size_t n, size_t os);
Hay otras funciones incorporadas de comprobación tal como se describe en la tabla siguiente. Se llama a
las funciones de biblioteca correspondientes cuando se utilizan estas funciones incorporadas.
Nota: En el prototipo de cada función, los puntos suspensivos (...) representan una lista opcional de
parámetros. IBM Abrir XL C/C++ para AIX ignora estos parámetros opcionales y protege todas las
variables accesibles globalmente.
objetivo
Separa los bits del argumento de entrada a la derecha y a la izquierda dentro de una variable de destino,
de acuerdo con la máscara del elemento correspondiente del segundo argumento de entrada.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=__builtin_cfuged(a,b)
Valor de resultado
Para a, los bits cuyos bits correspondientes en la máscara en b igual a 1 se colocan en los bits situados
más a la derecha en d, manteniendo su orden relativo original. Los otros bits de a se colocan en los bits
más a la izquierda en d, manteniendo su orden relativo original.
A continuación se muestra un ejemplo de entradas de doble palabra:
Argumento Valor
a 0x 0123 4567 89ab cdef
b 0x 0f0f 0f0f 0f0f 0f0f
d 0x 0246 8ace 1357 9bdf
__builtin_cntlzdm
Purpose
Returns the number of leading consecutive 0-bits in the result returned when the first argument
corresponds to 1-bits in the second argument.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=__builtin_cntlzdm(a,b)
Result value
The result d is set to the number of consecutive 0-bits, starting on the left, in a that corresponds to 1-bits
in b.
Here is an example for doubleword inputs:
Argument Value
a 0x 0123 4567 89ab cdef
b 0x aaaa aaaa aaaa aaaa
d 5
__builtin_cnttzdm
Purpose
Returns the number of trailing consecutive 0-bits in the result returned when the first argument
correspond to 1-bits in the second argument.
Note: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Syntax
d=__builtin_cnttzdm(a,b)
Result value
The result d is set to the number of consecutive 0-bits, starting on the right, in a that corresponds to
1-bits in b.
Here is an example for doubleword inputs:
Argument Value
a 0x fedc ba98 7654 3210
b 0x aaaa aaaa aaaa aaaa
d 4
In the above table, the last sixteen bits of a are 0011 0010 0001 0000. The last sixteen bits of b are 1010
1010 1010 1010. Applying the mask of b to a means that the compiler only considers the even-numbered
bits of a, which are 0 1 0 1 0 0 0 0. The number of trailing zeros in this result is 4.
__builtin_pdepd
objetivo
Copia algunos bits de un argumento de entrada en posiciones de la variable de destino especificada por
una máscara en otro argumento de entrada.
Nota: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Valor de resultado
El bit situado más a la derecha de a se copia en la posición de bit de d en la que aparece el bit situado
más a la derecha en b. El siguiente bit situado más a la derecha de a se copia en la posición de bit de
d en la que aparece el siguiente bit situado más a la derecha en b, y así sucesivamente hasta que b no
contenga más de 1 bit. Todos los bits de d que corresponden a 0-bits en b se establecen en cero.
A continuación se muestra un ejemplo de entradas de doble palabra:
Argumento Valor
a 0x fedc ba98 7654 3210
b 0x 8888 8888 8888 8888
d 0x 0088 0080 0008 0000
En la tabla anterior, puesto que b contiene 16 bits que están establecidos en 1, sólo los 16 bits más a
la derecha de a son pertinentes para el resultado. Estos bits son 0011 0010 0001 0000. Estos bits se
distribuyen en d en las posiciones de bits establecidas en b, proporcionando el resultado que se muestra
en la tabla anterior.
__builtin_pextd
objetivo
Copia algunos bits de un argumento de entrada especificado por una máscara en otro argumento de
entrada en los bits situados más a la derecha de la variable objetivo.
Nota: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
• La opción -mcpu se establece en procesadores Power10 de destino.
• La modalidad de compilador es de 64 bits.
Sintaxis
d=__builtin_pextd(a,b)
Valor de resultado
El bit de a, para el que el bit correspondiente de b es el bit situado más a la derecha, se copia en
la posición de bit situado más a la derecha de d. El bit de a, para el que el bit correspondiente de b
es el siguiente-más a la derecha de 1 bit, se copia en la posición de bit más a la derecha de d, y así
sucesivamente hasta que b no contenga más de 1 bits. Todos los bits de d que no se copian de a se
establecen en cero.
A continuación se muestra un ejemplo de entradas de doble palabra:
Argumento Valor
a 0x0088 0080 0008 0000
b 0x 8888 8888 8888 8888
d 0x 0000 0000 0000 0000 3210
En la tabla anterior, puesto que b contiene 16 bits que se han establecido en 1, todos los bits excepto los
16 bits situados más a la derecha de d se han establecido en cero. Los 16 bits situados más a la derecha
se establecen extrayendo los bits de a en las posiciones de 1-bits en b. Estos bits son 0011 0010 0001
0000, proporcionando el resultado que se muestra en la tabla anterior.
__alignx, __builtin_ppc_alignx
objetivo
Permite optimizaciones como, por ejemplo, la vectorización automática informando al compilador de que
los datos a los que apunta el puntero están alineados en un desplazamiento de tiempo de compilación
conocido.
Sintaxis
void __builtin_ppc_alignx (int alignment, const void* pointer)
void __alignx (int alignment, const void* pointer)
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
parámetros
alineación
Debe ser un entero constante con un valor mayor que cero y de una potencia de dos.
objetivo
Indica que es probable que una expresión se evalúe en un valor especificado. El compilador puede utilizar
este conocimiento para dirigir optimizaciones.
Sintaxis
long __builtin_expect (long expression, long value)
parámetros
expresión
Debe ser una expresión de tipo integral.
VALOR
Debe ser un literal constante.
Uso
Si la expresión no evalúa realmente en tiempo de ejecución el valor previsto, el rendimiento puede verse
afectado. Por lo tanto, esta función incorporada debe utilizarse con precaución.
__builtin_ppc_get_timebase
objetivo
Mover de base horaria
Devuelve toda la palabra doble del registro de base de tiempo.
Sintaxis
unsigned long __builtin_ppc_get_timebase (void)
__mftbu, __builtin_ppc_mftbu
objetivo
Mover de base de tiempo superior
Devuelve la palabra superior del registro de base de tiempo.
Sintaxis
unsigned int __builtin_ppc_mftbu (void)
unsigned int __mftbu (void)
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
__mfmsr, __builtin_ppc_mfmsr
objetivo
Mover del registro de estado de máquina
Mueve el contenido del registro de estado de máquina (MSR) a los bits 32 a 63 del registro de propósito
general designado.
Sintaxis
unsigned long __builtin_ppc_mfmsr (void)
unsigned long __mfmsr (void)
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
Uso
La ejecución de esta instrucción tiene privilegios y está restringida únicamente a la modalidad de
supervisor.
__mfspr, __builtin_ppc_mfspr
objetivo
Mover del registro de fines especiales
Devuelve el valor del registro de propósito especial dado.
Sintaxis
unsigned long __builtin_ppc_mfspr (const int registerNumber)
unsigned long __mfspr (const int registerNumber)
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
parámetros
númeroRegistro
El número del registro de finalidad especial cuyo valor se va a devolver. El registerNumber debe
conocerse en el momento de la compilación.
objetivo
Mover a registro de estado de máquina
Mueve el contenido de los bits 32 a 62 del GPR designado al MSR.
Sintaxis
void __builtin_ppc_mtmsr (unsigned long value)
void __mtmsr (unsigned long value)
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
parámetros
VALOR
El resultado OR a nivel de bit de los bits 48 y 49 de valor se coloca en MSR48. El resultado OR a nivel
de bit de los bits 58 y 49 de valor se coloca en MSR58. El resultado de OR a nivel de bit de los bits 59
y 49 de valor se coloca en MSR59. Los bits 32:47, 49:50, 52:57 y 60:62 de valor se colocan en los bits
correspondientes del MSR.
Uso
La ejecución de esta instrucción tiene privilegios y está restringida únicamente a la modalidad de
supervisor.
__mtspr, __builtin_ppc_mtspr
objetivo
Mover a registro con fines especiales
Establece el valor de un registro de propósito especial.
Sintaxis
void __builtin_ppc_mtspr (const int registerNumber, unsigned long value)
void __mtspr (const int registerNumber, unsigned long value)
Nota:
• La función incorporada en forma de __name es un sinónimo de la función incorporada en forma de
__builtin_ppc_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Este formulario de función incorporado podría estar en desuso en
el futuro.
objetivo
Asigna espacio para un objeto. El espacio asignado se coloca en la pila y se libera cuando se devuelve la
función de llamada.
Sintaxis
void* __builtin_alloca (size_t size)
void* __alloca (size_t size)
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_name.
• La función incorporada en forma de __name se proporciona para la compatibilidad con IBM XL C/C++
para AIX 16.1.0 o releases anteriores. Esta función incorporada podría estar en desuso en el futuro.
parámetros
tamaño
Un entero que representa la cantidad de espacio que se va a asignar, medido en bytes.
__builtin_frame_address, __builtin_return_address
objetivo
Devuelve la dirección del marco de pila, o dirección de retorno, de la función actual, o de uno de sus
llamantes.
Sintaxis
void* __builtin_frame_address (unsigned int level)
void* __builtin_return_address (unsigned int level)
parámetros
Nivel
Un literal constante que indica el número de marcos para explorar la pila de llamadas. El nivel debe
estar comprendido entre 0 y 63. Un valor de 0 devuelve la dirección de trama o de retorno de la
función actual, un valor de 1 devuelve la dirección de trama o de retorno del llamante de la función
actual y así sucesivamente.
vector double vec_vsx_ld (int, const vector double vector double vec_xl (signed long, const vector
*) double *)
vector doble vec_vsx_ld (int, const doble *) vector double vec_xl (signed long, const double *)
vector float vec_vsx_ld (int, const vector float *) vector float vec_xl (signed long, const vector float
*)
vector float vec_vsx_ld (int, const float *) vector float vec_xl (signed long, const float *)
vector bool int vec_vsx_ld (int, const vector bool int
*)
vector signed int vec_vsx_ld (int, const vector vector signed int vec_xl (signed long, const vector
signed int *) signed int *)
vector firmado int vec_vsx_ld (int, const int *) vector signed int vec_xl (signed long, const signed
int *)
vector signed int vec_vsx_ld (int, const long *)
vector unsigned int vec_vsx_ld (int, const vector vector unsigned int vec_xl (signed long, const
unsigned int *) vector unsigned int *)
vector unsigned int vec_vsx_ld (int, const unsigned vector unsigned int vec_xl (signed long, const
int *) unsigned int *)
vector unsigned int vec_vsx_ld (int, const unsigned
long *)
vector bool short vec_vsx_ld (int, const vector bool
short *)
vector pixel vec_vsx_ld (int, const vector pixel *)
vector firmado corto vec_vsx_ld (int, const vector vector signed short vec_xl (signed long, const
firmado corto *) vector signed short *)
vector firmado corto vec_vsx_ld (int, const short *) vector signed short vec_xl (signed long, const
signed short *)
vector unsigned short vec_vsx_ld (int, const vector vector unsigned short vec_xl (signed long, const
unsigned short *) vector unsigned short *)
vector unsigned short vec_vsx_ld (int, const vector unsigned short vec_xl (signed long, const
unsigned short *) unsigned short *)
vector bool char vec_vsx_ld (int, const vector bool
char *)
vector signed char vec_vsx_ld (int, const vector vector signed char vec_xl (signed long, const
signed char *) vector signed char *)
vector signed char vec_vsx_ld (int, const signed vector signed char vec_xl (signed long, const
char *) signed char *)
vector unsigned char vec_vsx_ld (int, const vector vector unsigned char vec_xl (signed long, const
unsigned char *) vector unsigned char *)
vector unsigned char vec_vsx_ld (int, const vector unsigned char vec_xl (signed long, const
unsigned char *) unsigned char *)
void vec_vsx_st (vector double, int, vector double void vec_xst (vector double, signed long, const
*) vector double *)
void vec_vsx_st (vector double, int, double *) void vec_xst (vector double, signed long, double *)
void vec_vsx_st (vector float, int, vector float *) void vec_xst (vector float, signed long, const vector
float *)
void vec_vsx_st (vector float, int, float *) void vec_xst (vector float, signed long, float *)
void vec_vsx_st (vector signed int, int, vector void vec_xst (vector signed int, signed long, const
signed int *) vector signed int *)
void vec_vsx_st (vector signed int, int, int *) void vec_xst (vector signed int, signed long, signed
int *)
void vec_vsx_st (vector unsigned int, int, vector void vec_xst (vector unsigned short, signed long,
unsigned int *) const vector unsigned short *)
void vec_vsx_st (vector unsigned int, int, unsigned void vec_xst (vector unsigned int, signed long,
int *) unsigned int *)
void vec_vsx_st (vector bool int, int, vector bool int
*)
void vec_vsx_st (vector bool int, int, unsigned int *)
vector doble vec_xxsldi (vector doble, vector vector double vec_sldw (vector double, vector
doble, int) double, signed int)
vector doble vec_xxpermdi (vector doble, vector vector double vec_permi (vector double, vector
doble, int) double, signed int)
vector long vec_xxpermdi (vector long long, vector vector firmado long long vec_permi (vector firmado
long long, int) long long, vector firmado long long, signed int)
vector unsigned long vec_xxpermdi (vector vector unsigned long vec_permi (vector unsigned
unsigned long long, vector unsigned long long, int) long long, vector unsigned long long, signed int)
int vec_xxpermdi (vector int, vector int, int) vector firmado long long vec_permi (vector firmado
long long, vector firmado long long, signed int)
unsigned int vec_xxpermdi (vector unsigned int, vector unsigned long vec_permi (vector unsigned
vector unsigned int, int) long long, vector unsigned long long, signed int)
vector corto vec_xxpermdi (vector corto, vector vector firmado long long vec_permi (vector firmado
corto, int) long long, vector firmado long long, signed int)
vector unsigned short vec_xxpermdi (vector vector unsigned long vec_permi (vector unsigned
unsigned short, vector unsigned short, int) long long, vector unsigned long long, signed int)
vector signed char vec_xxpermdi (vector signed vector firmado long long vec_permi (vector firmado
char, vector signed char, int) long long, vector firmado long long, signed int)
vector unsigned char vec_xxpermdi (vector vector unsigned long vec_permi (vector unsigned
unsigned char, vector unsigned char, int) long long, vector unsigned long long, signed int)
Información relacionada
• vec_xl
• vec_xst
• v_sldw
• permi de vector
Identificadores
Las funciones C++ invocables desde Fortran deben declararse con extern "C" para evitar la gestión de
nombres.
Para obtener detalles, consulte la sección adecuada sobre opciones y convenios para combinar Fortran
con código C/C++ en Abrir referencia de compilador XL Fortran.
Debe seguir estas recomendaciones al escribir código C y C++ para llamar a las funciones escritas en
Fortran:
• Evite utilizar letras mayúsculas en los identificadores. Aunque XL Fortran dobla los identificadores
externos a minúsculas de forma predeterminada, el compilador Fortran se puede establecer para
distinguir los nombres externos por mayúsculas y minúsculas.
• Evite utilizar nombres de identificador largos. El número máximo de caracteres significativos en los
identificadores XL Fortran es 2501.
Nota:
1. Los estándares de idioma Fortran 90 y 95 requieren que los identificadores no tengan más de
31 caracteres; los estándares Fortran 2003 y los estándares Fortran 2008 requieren que los
identificadores no tengan más de 63 caracteres.
Punteros a funciones
Un puntero de función es un tipo de datos cuyo valor es una dirección de función.
En Fortran, un argumento ficticio que aparece en una sentencia EXTERNAL es un puntero de función. A
partir del estándar Fortran 2003, las variables Fortran de tipo C_FUNPTR son interoperables con punteros
de función. Los punteros de función están soportados en contextos como el destino de una sentencia de
llamada o un argumento real de dicha sentencia.
#include <stdio.h>
extern double add(int *, double [], int *, double []);
x = 3;
y = 3;
Compile el programa principal y Fortran añada archivos fuente de función de la forma siguiente:
ibm-clang -c example.c
xlf -c add.f
Enlace los archivos de objeto del paso de compilación para crear el ejecutable add:
Ejecutar binario:
./add
La salida es la siguiente:
-mllvm -enable-ppc-gen-scalar-mass
Para utilizar automáticamente las bibliotecas SIMD MASS, especifique la opción siguiente:
-mllvm -vector-library=MASSV
Puede especificar ambos conjuntos de opciones, en cuyo caso el compilador primero intenta realizar
llamadas SIMDize a las funciones matemáticas del sistema llamando a las funciones SIMD MASS
equivalentes cuando sea apropiado. De lo contrario, llama automáticamente a las funciones escalares
MASS equivalentes.
Para el uso automático, el compilador utiliza versiones de las funciones MASS contenidas en la biblioteca
XLOPT libxlopt.a, que está enlazada de forma predeterminada.
“Compilación y enlace de un programa con MASS” en la página 414 describe cómo compilar y enlazar un
programa que utiliza manualmente las bibliotecas MASS y cómo utilizar de forma selectiva las funciones
de biblioteca escalar MASS junto con las bibliotecas normales del sistema.
Información relacionada:
Utilización de la biblioteca escalar
La biblioteca escalar MASS libmass.a contiene un conjunto acelerado de funciones intrínsecas
matemáticas utilizadas con frecuencia que proporcionan un rendimiento mejorado sobre las funciones
de biblioteca del sistema estándar correspondientes.
Notas:
• Las funciones trigonométricas (sin, cos, tan) devuelven NaN (Not-a-Number) para argumentos
grandes (donde el valor absoluto es mayor que 250pi).
• En algunos casos, las funciones MASS no son tan precisas como las de la biblioteca libm.a y pueden
manejar los casos periféricos de forma diferente (sqrt(Inf), por ejemplo).
• Para obtener comparaciones de precisión con libm.a, consulte la documentación del producto
(manuales) en la sección Contenido de soporte del producto del sitio web deMathematical Acceleration
Subsystem disponible en https://www.ibm.com/support/pages/node/6250945.
Información externa relacionada
Mathematical Acceleration Subsystem Bibliotecas
function_name (y,x,n)
donde y es el vector de destino, x es el vector de origen y n es la longitud del vector. Se presupone que
los parámetros y y x son de precisión doble para las funciones con el prefijo vy precisión simple para las
funciones con el prefijo vs. Como ejemplo, el código siguiente genera un vector y de longitud 500 cuyos
elementos son exp (x [i]), donde i=0, ..., 499:
#include <massv.h>
Las funciones vdiv, vsincos, vpowy vatan2 (y sus versiones de precisión única, vsdiv, vssincos,
vspowy vsatan2) toman cuatro argumentos. Las funciones vdiv, vpowy vatan2 toman los argumentos
(z,x, y,n). La función vdiv genera un vector z cuyos elementos son x [i] /y [i], donde i=0, .., * n-1. La
función vpow genera un vector z cuyos elementos son x [i]y [i], donde i=0, .., * n-1. La función vatan2
genera un vector z cuyos elementos son atan (x [i] /y [i]), donde i=0, .., * n-1. La función vsincos
toma los argumentos (y,z,x,n) y genera dos vectores, y y z, cuyos elementos son sin (x [i]) y cos (x [i]),
respectivamente.
En vcosisin(y,x,n) y vscosisin(y,x,n), x es un vector de elementos n y la función genera un
vector y de elementos n __Complex con el formato [cos (x [i]), sin (x [i])]. Si se utiliza -D__nocomplex
(consulte la nota en Tabla 337 en la página 405), el vector de salida contiene y [0] [i] = cos (x [i]) e y [1] [i]
= sin (x [i]), donde i=0,..,*n-1.
Nota:
1. De forma predeterminada, estas funciones utilizan el tipo de datos __Complex , que sólo está disponible
para AIX 5.2 y posterior, y no se compila en versiones anteriores del sistema operativo. Para obtener un
prototipo alternativo para estas funciones, compile con -D__nocomplex. Define las funciones como void
vcosisin (double y[][2], double *x, int *n); y void vscosisin(float y[][2], float
*x, int *n);
Las funciones enteras tienen el formato nombre_función (x[], *n), donde x [] es un vector de objetos
numéricos de 4 bytes (para vpopcnt4) u 8 bytes (para vpopcnt8) (integrales o de coma flotante), y *n es
la longitud del vector.
divd2 divf4 Calcula el cociente vector doble divd2 (vector flotador de vector divf4 (vx
vx/vy. doble vx, vector doble vy); de flotador de vector, vy de
flotador de vector);
erfcd2 erfcf4 Calcula la función de vector doble erfcd2 (vector flotante vectorial erfcf4 (vector
error complementaria doble vx); float vx);
de cada elemento de
vx.
erfd2 erff4 Calcula la función vector doble erfd2 (vector float vector erff4 (vector float
de error de cada doble vx); vx);
elemento de vx.
expd2 expf4 Calcula la función vector doble expd2 (vector vector float expf4 (vector float
exponencial de cada doble vx); vx);
elemento de vx.
exp2d2 exp2f4 Calcula 2 elevado a vector doble exp2d2 (vector vector float exp2f4 (vector float
la potencia de cada doble vx); vx);
elemento de vx.
expm1d expm1f4 Calcula (la función vector doble expm1d2 (vector Vector float expm1f4 (vector
2 exponencial de cada doble vx); float vx);
elemento de vx)-1.
tan
2. Cree un objeto compartido a partir de la lista de exportación con el mandato ld , enlazando con la
biblioteca libmass.a . Por ejemplo:
ar -q libfasttan.a fasttan.o
4. Cree el ejecutable final utilizando IBM Open XL C/C++, especificando el archivo de objeto que contiene
las funciones MASS. Esto enlaza sólo las funciones especificadas en el archivo de objeto (en este
ejemplo, la función tan ) y el resto de las funciones matemáticas de la biblioteca matemática
estándar. Por ejemplo:
Notas:
• La función MASS sincos se enlaza automáticamente si exporta MASS cosisin.
• La función MASS cos se enlaza automáticamente si exporta MASS sin.
• El MASS atan2 se enlaza automáticamente si exporta MASS atan.
Información externa relacionada
• ar y ld en AIX Consulta de mandatos, Volúmenes 1-6(https://www.ibm.com/docs/en/aix/7.1?
topic=commands)
void sgemv(const char *trans, int *m, int *n, float *alpha,
void *a, int *lda, void *x, int *incx,
float *beta, void *y, int *incy);
void dgemv(const char *trans, int *m, int *n, double *alpha,
void *a, int *lda, void *x, int *incx,
double *beta, void *y, int *incy);
El compilador llamará a las funciones sgemv, dgemv, sgemmy dgemm desde la biblioteca libxlopt y
todas las demás funciones BLAS de la biblioteca libblas.a .
Para consultas sobre licencias en las que se solicite información sobre juegos de caracteres de doble byte
(DBCS), póngase en contacto con el departamento de propiedad intelectual de IBM de su país o envíe sus
consultas, por escrito, a la dirección siguiente:
El párrafo siguiente no se aplica al Reino Unido ni a ningún otro país donde estas disposiciones
sean incompatibles con la legislación local: INTERNATIONAL BUSINESS MACHINES CORPORATION
PROPORCIONA ESTA PUBLICACIÓN "TAL CUAL" SIN GARANTÍAS DE NINGÚN TIPO, NI EXPLÍCITAS
NI IMPLÍCITAS, INCLUIDAS, PERO SIN LIMITARSE A ELLAS, LAS GARANTÍAS IMPLÍCITAS DE NO
VULNERACIÓN, COMERCIALIZACIÓN O IDONEIDAD PARA UN FIN DETERMINADO. Algunos países no
permiten la renuncia a garantías explícitas o implícitas en ciertas transacciones, por lo que la declaración
anterior puede no aplicarse en su caso.
Esta información puede incluir imprecisiones técnicas o errores tipográficos. Periódicamente se realizan
cambios en la información aquí contenida; estos cambios se incorporarán en nuevas ediciones de la
publicación. IBM puede reservarse el derecho de realizar mejoras y/o cambios en los productos y/o
programas descritos en esta publicación en cualquier momento sin previo aviso.
Las referencias contenidas en esta información a sitios web que no son deIBM se proporcionan
únicamente para su comodidad y no constituyen en modo alguno un aval de dichos sitios web de . Los
materiales de dichos sitios web no forman parte de los materiales para este producto IBM y el uso de
dichos sitios web es a cuenta y riesgo del usuario.
IBM puede utilizar o distribuir la información que usted le suministre del modo que IBM considere
conveniente sin incurrir por ello en ninguna obligación para con usted.
Los licenciatarios de este programa que deseen tener información sobre el mismo con el fin de habilitar:
(i) el intercambio de información entre programas creados independientemente y otros programas
Dicha información puede estar disponible, sujeta a los términos y condiciones correspondientes,
incluyendo, en algunos casos, el pago de una tarifa.
IBM proporciona el programa bajo licencia descrito en este documento y todo el material bajo licencia
disponible para el mismo bajo los términos del IBM Acuerdo de cliente, IBM Acuerdo internacional de
licencia de programa o cualquier acuerdo equivalente entre las partes.
Todos los datos de rendimiento contenidos en el presente documento se han obtenido en un entorno
controlado. Por tanto, los resultados obtenidos en otros entornos operativos pueden variar de forma
significativa. Algunas de las medidas podrían proceder de sistemas en proceso de desarrollo y no se
garantiza que dichas medidas sean las mismas en sistemas disponibles para uso general. Además, es
posible que algunas de las medidas se hayan estimado a través de una extrapolación. Los resultados
reales pueden variar. Los usuarios de este documento deben consultar los datos que corresponden a su
entorno específico.
La información relativa a productos que no son de IBM se obtuvo de los proveedores de esos productos,
sus anuncios publicados u otras fuentes de disponibilidad pública. IBM no ha probado estos productos y
no puede confirmar la precisión de su rendimiento, compatibilidad o cualquier otro aspecto relacionado
con los productos que no son de IBM. Las preguntas relacionadas con productos que no son de IBM
deberán dirigirse a los proveedores de estos productos.
Las declaraciones relativas a la dirección o intenciones futuras de IBM pueden cambiar o ser retiradas sin
aviso, y representan sólo propósitos y objetivos.
Esta información contiene ejemplos de datos e informes utilizados en operaciones comerciales diarias.
Para ilustrarlos de la forma más completa posible, los ejemplos incluyen los nombres de personas,
empresas, marcas y productos. Todos estos nombres son ficticios y cualquier parecido con los nombres y
direcciones utilizados por una empresa real es mera coincidencia.
LICENCIA DE DERECHOS DE AUTOR:
Esta información contiene programas de aplicación de ejemplo en lenguaje fuente, que ilustra técnicas de
programación en diversas plataformas operativas. Puede copiar, modificar y distribuir estos programas de
ejemplo de cualquier forma sin realizar ningún pago a IBM, con el fin de desarrollar, utilizar, comercializar
o distribuir programas de aplicación que se ajusten a la interfaz de programación de aplicaciones para
la plataforma operativa para la que se han escrito los programas de ejemplo. Estos ejemplos no se han
probado a fondo en todas las condiciones. Por lo tanto, IBMno puede garantizar ni dar por supuesta la
fiabilidad, la capacidad de servicio o el funcionamiento de estos programas. Los programas de ejemplo se
proporcionan "TAL CUAL", sin garantía de ningún tipo. IBM no será responsable de ningún daño resultante
del uso de los programas de ejemplo.
Cada copia o parte de estos programas de ejemplo o cualquier trabajo derivado, debe incluir un aviso de
copyright como el siguiente:
© (nombre de su empresa) (año). Partes de este código derivan de IBM Corp. Programas de ejemplo. ©
Copyright IBM Corp. 1998, 2021.
CONSIDERACIONES SOBRE LA POLÍTICA DE PRIVACIDAD:
IBM , incluido el software como soluciones de servicio, ("Ofertas de software") pueden utilizar cookies u
otras tecnologías para recopilar información de uso del producto, para ayudar a mejorar la experiencia del
usuario final o para adaptar las interacciones con el usuario final, o para otros fines. En muchos casos,
las ofertas de software no recopilan información de identificación personal. Algunas de nuestras ofertas
de software pueden ayudarle a recopilar información de identificación personal. Si esta oferta de software
Avisos 421
422 IBM Open XL C/C++: Guía del usuario
Índice
A ensamblaje
sentencias 35
alineación error de enlazador 19
pragma pack 74 especificaciones de idioma
archivo de origen C 25
editar 9 C++ 25
asmo especificadores de tipo
sentencias 35 vectores 33
extensión de lenguaje 25
B
F
biblioteca
escalar 402 funciones incorporadas
MASS 401 Acceso a memoria atómica GCC
biblioteca libmass 402 bloqueo 361
biblioteca MASS escalar 402 captación y operación 362
Bibliotecas comparar e intercambiar 368
vector 404 conceptos básicos 360
Bibliotecas MASS operación y captación 365
conceptos básicos 401 RELEASE 361
funciones escalares 402 sincronización 361
Funciones SIMD 410 atómico 128
funciones vectoriales 404 bloque 145
coma flotante
binario 108
C coma flotante binario
c + + flit 3 conversión 108
Clang 1 división de software 122
Comentarios de LLVM estimación recíproca 118
informes de optimización 5 FPSCR 113
comprobación de tamaño de objeto multiply-add/substract 116
funciones incorporadas 369 raíz cuadrada 121
redondeo 118
selección 121
D comprobación de tamaño de objeto 369
criptografía 140
declaraciones
decimal codificado en binario (BCD) 123
tipos de vector 33
funciones varias 372
depuración 1, 22
manipulación de bits 372
desasignación de tamaño 25
memoria caché 136
diagnóstico 19
punto fijo
almacenamiento 105
E cargar 97
condición de excepción 106
ejecución multiplicar 98
aplicaciones 21 permutación de bits 92
Ejemplos recuento cero 94
sentencias de ensamblaje en línea 39 recuento de población 101
emacs 9 rotación 103
en línea sincronización 128
sentencias de ensamblaje 35 funciones incorporadas de criptografía
enlace dinámico 19 función estándar 140
enlace estático 19 funciones miiscellaneous 142
enlazar funciones incorporadas de sincronización y atómicas
dinámico 19 almacenamiento 133
estático 19 captar 129
volver a enlazar 19 cargar 132
Índice 423
manipulación de bits
funciones incorporadas de sincronización y atómicas (continuación)
comparación 128 funciones incorporadas 372
intercambio 128 mensaje de diagnóstico 22
sincronización 134
funciones incorporadas relacionadas con la memoria caché
captación previa 139
N
datos 136 nivel de idioma
funciones incorporadas varias selección 2
memoria 380 soportado 25
movimiento 377 nivel de idioma estándar 25
optimización 376
O
G
Objeto de 64 bits 4
GCC Opción
Opciones incompatibilidad
resumen 69 resolución 13
secuencia de prioridad 13
H opción de compilador 1
opción de enlazador 19
hardware 1 operadores
Herramienta 3 suscripción vectorial 32
optimización
funciones matemáticas 401
I Optimización de LLVM 4
ibm-bugpoint 3 optimizar 1
ibm-clang-cpp 3
ibm-gen-list 3 P
ibm-llc 5
ibm-llvm-cxxfilt 3 programa de utilidad
ibm-llvm-profdata 3 c + + flit 3
ibm-opt 5 ibm-bugpoint 3
informes de optimización 5, 22 ibm-clang-cpp 3
inicialización ibm-gen-list 3
tipos de vector 26 ibm-llvm-cxxfilt 3
inicializadores ibm-llvm-profdata 3
listas 26 Lista de CreateExport 3
tipos de vector 26 Programa de utilidad de lista CreateExport 3
invocación programas
aplicaciones 21 ejecutar 21
fases 9 punto fijo
Valor predeterminado 9 conceptos básicos 91
valor absoluto 91
L
S
larga larga
especificadores de tipo 33 sentencias
literales conjunto en línea
vectores 29 restricciones 39
LTO 5 símbolo
LVM 1 duplicado 20
incompatible 20
sin resolver 19
M sistema operativo 1
macros soporte
característica de compilador 86 hardware 1
compilador 84 sistema operativo 1
Plataforma 86
mandato 3 T
mandato de invocación 1
Mandatos AIX 19 tipos de datos
mandatos de compilador vectores 33
xlCndi 81
Índice 425
426 IBM Open XL C/C++: Guía del usuario
IBM®
SC28-3312-00