Documentos de Académico
Documentos de Profesional
Documentos de Cultura
IBM
SC28-3312-01
Nota
Antes de utilizar esta información y el producto al que da soporte, lea la información incluida en el
apartado “Avisos” en la página 431.
Edición de Primero
Esta edición se aplica a IBM® Open XL C/C++ for AIX 17.1.1 (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 2022.
Contenido
iii
Capítulo 4. Soporte para características de idioma............................................... 27
Niveles de idioma soportados................................................................................................................... 27
IBM............................................................................................................................................................. 28
Extensiones para soporte de proceso vectorial.................................................................................. 28
Sentencias de ensamblaje en línea..................................................................................................... 37
Atributos de visibilidad.........................................................................................................................45
Capítulo 5. Opciones de compilador..................................................................... 47
-b................................................................................................................................................................ 47
-B................................................................................................................................................................ 48
-bmaxdata.................................................................................................................................................. 49
-bplugin...................................................................................................................................................... 49
-bplugin_opt...............................................................................................................................................50
-brtl.............................................................................................................................................................50
-c................................................................................................................................................................ 51
-C................................................................................................................................................................ 51
-D................................................................................................................................................................ 52
-e................................................................................................................................................................ 53
-E................................................................................................................................................................ 54
-ffat-lto-objects.............................................................................................................................. 55
-frestrict-args............................................................................................................................................. 56
-fslmtags.................................................................................................................................................... 56
-g................................................................................................................................................................ 57
-I................................................................................................................................................................. 58
-l................................................................................................................................................................. 59
-L.................................................................................................................................................................60
-M............................................................................................................................................................... 61
-mcpu......................................................................................................................................................... 63
-MF............................................................................................................................................................. 66
-mllvm........................................................................................................................................................ 66
-o................................................................................................................................................................ 70
-r................................................................................................................................................................. 71
-S................................................................................................................................................................ 71
-slm-auth................................................................................................................................................... 72
-slm-dir...................................................................................................................................................... 73
-slm-límite..................................................................................................................................................73
-slm-punto................................................................................................................................................. 73
-slm-tiempo-espera.................................................................................................................................. 74
-U................................................................................................................................................................ 74
-w................................................................................................................................................................75
-W (-X)........................................................................................................................................................ 76
Opciones de GCC soportadas.................................................................................................................... 78
Capítulo 6. pragmas de compilador...................................................................... 79
Alineación de #pragma..............................................................................................................................79
#pragma Push de visibilidad de GCC, #pragma pop de visibilidad de GCC............................................ 80
#pragma nosimd........................................................................................................................................81
Paquete de #pragma................................................................................................................................. 81
#pragma unroll, #pragma nounroll...........................................................................................................85
#pragma.....................................................................................................................................................86
Pragmas GCC soportados.......................................................................................................................... 87
iv
Macros generales.......................................................................................................................................91
Macros para identificar el compilador IBM Open XL C/C++..................................................................... 92
Macros relacionadas con la plataforma.................................................................................................... 94
Macros relacionadas con las características del compilador................................................................... 94
Macros relacionadas con valores de opción de compilador............................................................... 94
Macros relacionadas con los valores de arquitectura......................................................................... 95
Macros relacionadas con los niveles de idioma.................................................................................. 96
v
Matrix Multiply Accelerate funciones incorporadas............................................................................... 154
Acceso a memoria..............................................................................................................................154
Montaje y desmontaje de grandes tipos............................................................................................155
Operaciones de movimiento del acumulador................................................................................... 157
Operación de borrado de acumulador...............................................................................................159
Conversion Operations.......................................................................................................................159
Operaciones de productos externos................................................................................................. 160
Funciones incorporadas de vector.......................................................................................................... 191
vec_abs...............................................................................................................................................192
vec_absd.............................................................................................................................................193
vec_abss............................................................................................................................................. 193
vec_add.............................................................................................................................................. 194
vec_addc............................................................................................................................................ 195
vec_add.............................................................................................................................................. 195
vec_add_u128....................................................................................................................................196
vec_addc_u128..................................................................................................................................197
vec_adde_u128..................................................................................................................................197
vec_addec_u128................................................................................................................................198
vec_todos_eq..................................................................................................................................... 198
vec_todo_ge....................................................................................................................................... 200
vec_all_gt........................................................................................................................................... 202
vec_all_in........................................................................................................................................... 204
vec_all_le........................................................................................................................................... 204
vec_todos_lt....................................................................................................................................... 206
vec_all_nan........................................................................................................................................ 208
vec_todo_ne....................................................................................................................................... 208
vec_all_nge........................................................................................................................................ 210
vec_all_ngt......................................................................................................................................... 210
vec_all_nle......................................................................................................................................... 211
vec_all_nlt.......................................................................................................................................... 211
número_todo...................................................................................................................................... 212
vec_and.............................................................................................................................................. 212
vec_andc.............................................................................................................................................213
vec_any_eq......................................................................................................................................... 215
vec_any_ge......................................................................................................................................... 217
vec_any_gt..........................................................................................................................................219
vec_any_le.......................................................................................................................................... 221
vec_any_lt...........................................................................................................................................223
vec_any_nan.......................................................................................................................................225
vec_any_ne.........................................................................................................................................225
vec_any_nge....................................................................................................................................... 227
vec_any_ngt........................................................................................................................................227
vec_any_nle........................................................................................................................................228
vec_any_nlt.........................................................................................................................................228
número_vec_any_numérico............................................................................................................... 229
vec_any_out........................................................................................................................................229
vec_avg............................................................................................................................................... 230
vec_blendv......................................................................................................................................... 230
vec_bperm..........................................................................................................................................231
vec_ceil............................................................................................................................................... 232
vec_cfuge............................................................................................................................................232
vec_clr_first........................................................................................................................................ 233
vec_clr_last.........................................................................................................................................233
vec_cmpb........................................................................................................................................... 234
vec_cmpeq......................................................................................................................................... 235
vec_cmpge..........................................................................................................................................236
vec_cmpgt.......................................................................................................................................... 237
vec_cmple.......................................................................................................................................... 237
vi
vec_cmplt........................................................................................................................................... 238
vec_cmpne......................................................................................................................................... 239
vec_cmpnez........................................................................................................................................240
vec_cntlz.............................................................................................................................................241
vec_cntlz_lsbb....................................................................................................................................242
vec_cntlzm..........................................................................................................................................242
vec_cntm............................................................................................................................................ 243
vec_cnttz............................................................................................................................................ 244
vec_cnttz_lsbb................................................................................................................................... 244
vec_cnttzm......................................................................................................................................... 245
vec_cpsgn........................................................................................................................................... 246
vec_ctd............................................................................................................................................... 246
vec_ctf................................................................................................................................................ 247
cts....................................................................................................................................................... 247
vec_ctsl...............................................................................................................................................248
ctu....................................................................................................................................................... 248
vec_ctul.............................................................................................................................................. 249
vec_cvbf16spn................................................................................................................................... 250
vec_cvf................................................................................................................................................250
vec_cvspbf16..................................................................................................................................... 251
di_vecv................................................................................................................................................251
vec_dive..............................................................................................................................................252
vec_dss............................................................................................................................................... 253
vec_dssall........................................................................................................................................... 253
vec_dst............................................................................................................................................... 253
vec_dstst............................................................................................................................................ 254
vec_dststt........................................................................................................................................... 255
vec_dstt.............................................................................................................................................. 255
vec_eqv...............................................................................................................................................256
vec_expandm..................................................................................................................................... 257
vec_expte........................................................................................................................................... 257
vec_extract......................................................................................................................................... 258
ex_extracción_vecp............................................................................................................................258
vec_extract_sig.................................................................................................................................. 259
vec_extracth....................................................................................................................................... 260
vec_extractl........................................................................................................................................ 260
vec_extractm...................................................................................................................................... 261
vec_floor.............................................................................................................................................262
vec_first_match_index...................................................................................................................... 262
vec_first_match_or_eos_index..........................................................................................................262
vec_first_mismatch_index.................................................................................................................263
vec_first_mismatch_or_eos_index.................................................................................................... 264
vec_gbb.............................................................................................................................................. 265
vec_genbm......................................................................................................................................... 265
vec_gendm......................................................................................................................................... 266
vec_genhm......................................................................................................................................... 266
vec_genpcvm..................................................................................................................................... 267
vec_genwm........................................................................................................................................ 268
inserción_vector................................................................................................................................. 269
vec_insert_exp................................................................................................................................... 270
vec_inserth......................................................................................................................................... 271
vec_insertl.......................................................................................................................................... 272
vec_ld................................................................................................................................................. 272
vec_lde............................................................................................................................................... 274
vec_ldl................................................................................................................................................ 275
vec_load_splats................................................................................................................................. 276
vec_loge............................................................................................................................................. 277
vec_lvsl............................................................................................................................................... 277
vii
vec_lvsr...............................................................................................................................................278
vec_madd........................................................................................................................................... 279
vec_madds......................................................................................................................................... 280
máx_vectora....................................................................................................................................... 280
vec_mergee........................................................................................................................................ 281
vec_mergeh........................................................................................................................................ 282
vec_mergel......................................................................................................................................... 283
vec_mergeo........................................................................................................................................ 284
vec_mfvscr......................................................................................................................................... 285
vec_mín.............................................................................................................................................. 285
vec_mladd.......................................................................................................................................... 287
vec_mod............................................................................................................................................. 287
vec_mradds........................................................................................................................................288
vec_msub........................................................................................................................................... 288
vec_msum.......................................................................................................................................... 289
vec_mSumas...................................................................................................................................... 290
vec_mtvscr......................................................................................................................................... 290
vec_mul.............................................................................................................................................. 291
vec_mule............................................................................................................................................ 292
vec_mulh............................................................................................................................................ 292
vec_mulo............................................................................................................................................ 293
vec_nabs............................................................................................................................................ 294
vec_nand ........................................................................................................................................... 294
vec_neg.............................................................................................................................................. 295
vec_nmadd......................................................................................................................................... 296
vec_nmsub......................................................................................................................................... 296
vec_nor............................................................................................................................................... 297
vec_or................................................................................................................................................. 298
vec_orc............................................................................................................................................... 299
v_paquete...........................................................................................................................................301
vec_packpx.........................................................................................................................................301
paquetes de vec_packs..................................................................................................................... 302
paquete_vector...................................................................................................................................303
vec_parity_lsbb.................................................................................................................................. 303
vec_pdep............................................................................................................................................ 304
vec_perm............................................................................................................................................305
vec_permi...........................................................................................................................................306
vec_permx..........................................................................................................................................307
vec_pext............................................................................................................................................. 308
vec_popcnt.........................................................................................................................................309
vec_promocionar............................................................................................................................... 310
vec_re................................................................................................................................................. 310
vec_replace_elt................................................................................................................................. 311
vec_replace_unalineado.................................................................................................................... 311
vec_revb............................................................................................................................................. 312
vec_reve............................................................................................................................................. 313
vec_rl.................................................................................................................................................. 314
vec_rlmi.............................................................................................................................................. 315
vec_rlnm.............................................................................................................................................316
vec_round...........................................................................................................................................316
rodo_vecc........................................................................................................................................... 317
rota_vecm...........................................................................................................................................317
redondeo_vecp...................................................................................................................................318
rodo_vecz............................................................................................................................................318
vec_rsqrte...........................................................................................................................................319
vec_sel................................................................................................................................................319
vec_signexti........................................................................................................................................321
vec_signextll.......................................................................................................................................321
viii
vec_sl..................................................................................................................................................322
vec_sld................................................................................................................................................322
vec_sldb..............................................................................................................................................323
vec_sldw.............................................................................................................................................324
vec_sll.................................................................................................................................................325
vec_slo................................................................................................................................................326
vec_slv................................................................................................................................................ 327
vec_splat............................................................................................................................................ 327
vec_splati........................................................................................................................................... 328
vec_splati_ins.....................................................................................................................................329
vec_splatid......................................................................................................................................... 329
vec_splats...........................................................................................................................................330
vec_splat_s8...................................................................................................................................... 331
vec_splat_s16.................................................................................................................................... 331
vec_splat_s32.................................................................................................................................... 332
vec_splat_u8...................................................................................................................................... 332
vec_splat_u16.................................................................................................................................... 333
vec_splat_u32.................................................................................................................................... 333
vec_sqrt.............................................................................................................................................. 334
vec_sr................................................................................................................................................. 334
vec_sra............................................................................................................................................... 335
vec_srdb............................................................................................................................................. 336
vec_srl................................................................................................................................................ 336
vec_sro............................................................................................................................................... 337
vec_srv................................................................................................................................................338
vec_st..................................................................................................................................................339
vec_ste............................................................................................................................................... 341
vec_stl.................................................................................................................................................342
vec_stril.............................................................................................................................................. 343
vec_stril_p.......................................................................................................................................... 344
vec_strir.............................................................................................................................................. 345
vec_strir_p.......................................................................................................................................... 345
vec_sub...............................................................................................................................................346
vec_sub_u128.................................................................................................................................... 347
vec_subc.............................................................................................................................................347
vec_subc_u128.................................................................................................................................. 348
vec_sube_u128.................................................................................................................................. 348
vec_subec_u128................................................................................................................................ 349
vec_subs.............................................................................................................................................349
vec_sum2s......................................................................................................................................... 350
vec_sum4s......................................................................................................................................... 350
vec_Sumas......................................................................................................................................... 351
vec_ternarylogic.................................................................................................................................351
vec_test_data_class...........................................................................................................................352
vec_test_lsbb_all_ones..................................................................................................................... 353
vec_test_lsbb_all_zeros.................................................................................................................... 353
vec_trunc............................................................................................................................................354
vec_unpackh...................................................................................................................................... 354
vec_unpackl....................................................................................................................................... 355
vec_xl................................................................................................................................................. 355
vec_xl_be........................................................................................................................................... 356
vec_xl_len.......................................................................................................................................... 358
vec_xl_len_r.......................................................................................................................................358
vec_xld2............................................................................................................................................. 359
vec_xlds..............................................................................................................................................360
vec_xlw4............................................................................................................................................ 361
vec_xor............................................................................................................................................... 361
vec_xst............................................................................................................................................... 363
ix
vec_xst_be......................................................................................................................................... 364
vec_xst_len........................................................................................................................................ 366
vec_xst_len_r.....................................................................................................................................366
vec_xstd2........................................................................................................................................... 367
vec_xstw4.......................................................................................................................................... 368
Funciones incorporadas de acceso a memoria atómica GCC (extensiónIBM )..................................... 369
Funciones de bloqueo atómico, liberación y sincronización............................................................ 370
Funciones de operación y captación atómica................................................................................... 371
Funciones de operación atómica y captación................................................................................... 374
Funciones de comparación e intercambio atómico.......................................................................... 377
Funciones incorporadas de comprobación de tamaño de objeto GCC.................................................. 378
__builtin_object_size......................................................................................................................... 378
__builtin___ * _chk............................................................................................................................ 379
Funciones incorporadas varias................................................................................................................381
Funciones de manipulación de bits................................................................................................... 381
Funciones relacionadas con la optimización.....................................................................................385
Mover a/desde funciones de registro................................................................................................ 386
Funciones relacionadas con la memoria........................................................................................... 389
Funciones incorporadas de vector GCC soportadas...............................................................................390
Funciones incorporadas no vectoriales de GCC soportadas.................................................................. 394
Avisos............................................................................................................... 431
Índice............................................................................................................... 435
x
Acerca de este documento
Este documento es una referencia para el compilador IBM Open XL C/C++ for AIX 17.1.1 . 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 documentación de IBM Open XL
C/C++ for AIX 17.1.1 .
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 a abajo, siguiendo la vía de acceso 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.
• 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.
keyword required_argument1
required_argument2
Si la elección de uno de los elementos es opcional, toda la pila se muestra debajo de la ruta principal.
keyword
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:
,
keyword argumento_repetible
keyword argumento_alternativo
• 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, debe
especificarlos como parte de la sintaxis.
A continuación se muestra un ejemplo de un diagrama de sintaxis con una interpretación:
1
EXAMPLE constante_carácter a e lista_nombres
b c
Notas:
1 Extensión de IBM
Interprete el diagrama como se indica a continuación:
• Especifique la palabra clave EXAMPLE.
• EJEMPLO es una extensión IBM .
• Especifique un valor para char_constant.
• Especifique un valor para a o b, pero no para ambos.
• Opcionalmente, especifique un valor para c o d.
• Especifique al menos un valor para e. Si especifica más de un valor, debe colocar una coma entre
cada uno.
• Especifique el valor de al menos un nombre para lista_nombres. Si especifica más de un valor, debe
colocar una coma entre cada uno. (La sintaxis _list es equivalente a la sintaxis anterior para e.)
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 los compiladores C/C++ y Fortran en la
comunidad IBM Power en http://ibm.biz/openxl-power-compilers.
Más información
• Utilización de GNU Compiler Collection disponible en http://gcc.gnu.org/onlinedocs.
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échelo 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/open-xl-cpp-aix-compiler-power.
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.
Servicios
Lista de CreateExport
El programa de utilidad CreateExportList crea un archivo que contiene una lista de todos los
símbolos exportables que se encuentran 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 escrito 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/openxl-1711-llvm-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 . Encontrará más información de este programa de utilidad en tprof listando la
anotación con compiladores IBM Open XL para 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 el programa de utilidad c + + filt
name demangling que se enviaba en IBM XL C/C++ for 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 el 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/openxl-1711-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/openxl-1711-
llvm-profdata.
Nota: Estos programas de utilidad de compilador se suministran en el directorio /opt/IBM/openxlC/
17.1.1/bin/ excepto ibm-bugpoint, ibm-gen-listy ibm-llvm-cxxfilt, que son suministran en el
directorio /opt/IBM/openxlC/17.1.1/tools/ .
Mandatos
xlCndi
El script de xlCndi instala IBM Open XL C/C++ en una ubicación de directorio no predeterminada.
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.
• 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.
VIA
Especifica la vía de acceso de búsqueda de directorio para los archivos ejecutables del compilador.
Los ejecutables se encuentran en /opt/IBM/openxlc/17.1.1/bin/ y /opt/IBM/openxlC/17.1.1/bin/ si
están instalados en la ubicación predeterminada.
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.
Llamada archivos_entrada
opciones_línea_mandato
Llamada
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
Información relacionada
• “-mcpu” en la página 63
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 asignarle
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++ libraries (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
catálogos de archivos, 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++ for
AIX 17.1.1 y al que se hace referencia en un archivo de objeto generado por el frontal clásico de IBM XL
C/C++ for 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++ for AIX 17.1.1 son los definidos en Itanium C++ ABI.
Los archivos de objeto generados por el componente frontal clásico de IBM XL C/C++ for AIX 16.1.0 o
releases anteriores y IBM Open XL C/C++ for AIX 17.1.1 no son interoperables.
Información relacionada
Desarrollo y portación de aplicaciones C y C++ en AIX
//ex1.c
void bar() __attribute__((visibility("default")));
void bar() { }
Puede especificar los mandatos siguientes para exportar la función bar desde el objeto compartido
ex1.so aunque bar no esté listado en empty.exp.
ibm-clang -c ex1.c
ibm-clang -shared -mdefault-visibility-export-mapping=all -bE:empty.exp ex1.o -o ex1.so
// ex2.c
void bar1() __attribute__((visibility("hidden")));
void bar1() { }
void bar2() { }
// ex2.exp
bar1
bar2
Puede especificar los mandatos siguientes para ocultar la función bar1 aunque aparezca listada en
ex2.exp.
ibm-clang -c ex2.c
ibm-clang -shared ex2.o -o ex2.so -bE:ex2.exp
// ex3.exp
void bar() __attribute__((visibility("hidden")));
void bar() { }
// ex3.exp
bar export
ibm-clang -c ex3.c
ibm-clang -shared ex3.o -o ex3.so -bE:ex3.exp
Ejemplo 4: Diferencias entre los atributos de visibilidad default, protected, hiddeny internal
//a.c
#include <stdio.h>
void __attribute__((visibility("default"))) func1(){
printf("func1 in the shared library\n");
}
void __attribute__((visibility("protected"))) func2(){
printf("func2 in the shared library\n");
}
void __attribute__((visibility("hidden"))) func3(){
printf("func3 in the shared library\n");
}
void __attribute__((visibility("internal"))) func4(){
printf("func4 in the shared library\n");
}
//a.h
extern void func1();
extern void func2();
extern void func3();
extern void func4();
//b.c
#include "a.h"
void temp(){
func1();
func2();
}
//b.h
extern void temp();
//main.c
#include <stdio.h>
#include "a.h"
#include "b.h"
void func1(){
printf("func1 in b.c\n");
}
void func2(){
printf("func2 in b.c\n");
}
void main(){
temp();
// func3(); // error
// func4(); // error
}
Puede utilizar los mandatos siguientes para crear una biblioteca compartida denominada libtest.so:
A continuación, puede enlazar dinámicamente libtest.so durante el tiempo de ejecución utilizando los
mandatos siguientes:
func1 in b.c
func2 in the shared library
El atributo de visibilidad de la función func1() es default, por lo que func1() se ve precedido por la
función con el mismo nombre en main.c. El atributo de visibilidad de la función func2() es protected,
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
Además de los niveles de lenguaje estándar , IBM Open XL C/C++ da soporte a las siguientes extensiones
de lenguaje:
• Extensiones de lenguaje para dar soporte a la programación vectorial
• Un subconjunto de extensiones de lenguaje GNU C y C++
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 36, “Literales
vectoriales” en la página 32
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 se necesita un valor constante; la
inicialización de una variable de vector global es un contexto de este tipo. Por lo tanto, el siguiente
código está permitido:
int i=1;
int function() { return 2; }
int main()
{
vector unsigned int v1 = {i, function()};
return 0;
}
Aritmética de puntero
La aritmética de puntero se define para los tipos de puntero a vector.
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).
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 tecnológica deAltiVec, disponible en https://www.nxp.com/docs/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 )
{ lista_literales }
lista_literales
,
expresión_constante
vector_type es un tipo de vector soportado. Consulte “Tipos de vector” en la página 36 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.
Si la lista de expresiones separadas por comas se especifica entre llaves, el número de expresiones
constantes puede ser igual o menor que el número de elementos del vector. Si el número de
expresiones constantes es menor que el número de elementos del vector, los valores de los elementos
no especificados son 0.
Si la lista de expresiones separadas por comas se especifica entre paréntesis, el número de expresiones
constantes debe coincidir con el número de elementos del vector tal como se indica a continuación:
2
Para los tipos vector long long, vector bool long long, y vector double
4
Para los tipos vector int y vector float
8
Para tipos vector short y vector pixel
16
Para tipos vector char
La tabla siguiente muestra los literales vectoriales soportados y cómo los interpreta el compilador para
determinar sus valores.
(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) {int unsigned}
(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) {int sin signo, ...} 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
(carácter de bool de vector) {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) {int sin signo}
(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) {int sin signo, ...} enteros.
(vector unsigned int) (int unsigned) Un conjunto de 4 cantidades de 32 bits sin signo
que tienen el valor del entero único.
(vector unsigned int) {int unsigned}
(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 unsigned int) {int unsigned, ...} 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) {int sin signo}
(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) {int sin signo, ...} 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 sin signo long long) {unsigned long long} ú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
(longitud larga sin signo de vector) {longitud larga sin largos sin signo.
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
(longitud larga firmada por vector) {longitud larga largos.
firmada, ...}
(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) {long long sin signo}
(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) {long long sin signo, ...} 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:
• vec_extract
• vec_insert
• vec_promote
• vec_splats
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
_quad
float
double
Notas:
1 Este tipo es válido cuando -mcpu se establece en el destino de los procesadores Power10 .
2 Este tipo es válido cuando -mcpu se establece en el destino de los procesadores Power10 .
Notas:
• La palabra clave vector se reconoce en un contexto de declaración sólo cuando se utiliza como
especificador de tipo y cuando el soporte de vector está habilitado. Las palabras clave pixel, __pixel
y bool se reconocen como especificadores de tipo válidos sólo cuando va precedido de la palabra clave
vector o __vector.
• Los especificadores de tipo duplicado se ignoran en un contexto de declaración de vector.
La tabla siguiente lista los tipos de datos de vector soportados, el tamaño y los valores posibles para cada
tipo.
Nota: Los tipos __vector_pair y __vector_quad sólo son válidos cuando -mcpu está establecido en
procesadores Power10 de destino.
Todos los tipos de vector se alinean en un límite de 16 bytes. Un agregado que contiene uno o más tipos
de vector se alinea en un límite de 16 bytes y se rellena, si es necesario, para que cada miembro del tipo
de vector también esté alineado de 16 bytes.
Los distintos tipos de vector son incompatibles. Las asignaciones entre variables de distintos tipos de
vector pueden dar lugar a errores de programación.
serie_formato_código
:
Salida :
entrada :
clobbers
entrada
,
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
formato %[symbolic_name] , donde se hace referencia al symbolic_name en la lista de operandos.
Puede utilizar cualquier nombre, incluidos los símbolos C o C++ existentes, porque los nombres
simbólicos no tienen relación con ningún identificador C o C++ . Sin embargo, no hay dos operandos
en la misma sentencia de ensamblaje que puedan utilizar el mismo nombre simbólico. Consulte el
Ejemplo 2 para obtener información detallada sobre el uso.
Salida
La salida consta de cero, uno o más operandos de salida, separados por comas. Cada operando
consta de un par constraint(C_expression) . El operando de salida debe estar restringido por el
modificador = o + (descrito a continuación)y, opcionalmente, por un modificador % o & adicional.
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
Además, algunas restricciones que se originan en el compilador GNU no están soportadas, pero se toleran
cuando es posible. Por ejemplo, las restricciones S y T se tratan como inmediatas, pero el compilador
emite un mensaje de aviso que indica que no están soportadas.
#include <stdio.h>
" ori %1,%1,1 \n" // Sets the return value for the
// function acquireLock to true.
: "+r" (lockval),
"+r" (returnvalue)
: "r" (lock) // "lock" is the address of the lock in
// memory.
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 forma inesperada. Si utiliza el clobber 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.
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 que el programa sea correcto
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 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.
Ejemplo 8: el ejemplo siguiente muestra el uso de la restricción m .
Atributos de visibilidad
Los atributos de visibilidad describen si y cómo se puede hacer referencia o utilizar una entidad definida
en un módulo en otros módulos. Los atributos de visibilidad sólo afectan a entidades con enlaces
externos y no pueden aumentar la visibilidad de otras entidades. Al especificar atributos de visibilidad
para entidades, sólo puede exportar las entidades que son necesarias a bibliotecas compartidas. Con
esta característica, puede obtener las siguientes ventajas:
• Reduzca el tamaño de las bibliotecas compartidas.
• Reducir la posibilidad de colisión de símbolos.
• Permitir más optimización para las fases de compilación y enlace.
• Mejorar la eficiencia de los enlaces dinámicos.
Nota: En IBM Open XL C/C++ for AIX 17.1.1, cualquier atributo de visibilidad no tiene el efecto en el
momento del enlace.
-b
Pragma equivalente
Ninguna.
Finalidad
Establece opciones de proceso de enlazador especiales. Esta opción se puede repetir.
Sintaxis
dynamic
-b shared
static
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ática
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.
Utiliz
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.
Información relacionada
• “-brtl” en la página 50
Finalidad
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.
Utiliz
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/.
Finalidad
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
Finalidad
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
Utiliz
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 66.
-brtl
Pragma equivalente
Ninguna.
Finalidad
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
Utiliz
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 47
Finalidad
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.
Utiliz
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 el -E o -fsyntax-only .
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 54
• “-o” en la página 70
-C
Pragma equivalente
Ninguna.
Sintaxis
-C
Valores predeterminados
-C no está en vigor
Utiliz
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 54
-D
Pragma equivalente
Ninguna.
Finalidad
Define una macro como en una directiva de preprocesador #define .
Sintaxis
-D nombre
= definición
Valores predeterminados
No procede.
Utiliz
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 91
• "Archivos de cabecera" en la publicación AIX Referencia de archivos
-e
Pragma equivalente
Ninguna.
Finalidad
Cuando se utiliza junto con la opción o la opción -Gde -shared , especifica un punto de entrada para un
objeto compartido.
Sintaxis
-e nombre_entrada
Valores predeterminados
No procede.
Utiliz
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.
Finalidad
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.
Utiliz
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 fuente.
La opción -E altera temporalmente -fsyntax-only . 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 51
-ffat-lto-objects
Finalidad
Cuando Link Time Optimization (LTO) está habilitado, genera archivos de objeto XCOFF que contienen
código de objeto nativo y código de bits LLVM. Los archivos de objeto XCOFF están soportados por el
enlazador de AIX a partir de AIX 7.2 TL5 SP5 y AIX 7.3 TL1.
Sintaxis
no-fat-lto-objects
-f fat-lto-objects
Valores predeterminados
-fno-fat-lto-objects
Utiliz
Puede utilizar la opción -ffat-lto-objects cuando se vaya a utilizar el mismo archivo de objeto
en los enlaces nativos y habilitados para LTO. Por ejemplo, si un archivo de objeto se va a enlazar a
ambas pruebas de unidad donde no se desea -flto y un binario principal donde se desea enlazar con
-flto , utilice la opción -ffat-lto-objects para crear un archivo de objeto graso que contenga las
representaciones de código de bits XCOFF y LLVM nativas del archivo para satisfacer ambos casos.
Ejemplos
Ejemplo 1
Cuando -ffat-lto-objects no está en vigor, -flto genera archivos bitcode que solo se pueden
utilizar con -flto.
Ejemplo 2
Cuando -ffat-lto-objects está en vigor, -flto genera archivos de objeto XCOFF que contienen
secciones de código de bits incorporado. Estos archivos de objeto se pueden utilizar con o sin -flto.
Información relacionada
• Optimización de tiempo de enlace (LTO)
-frestrict-args
Finalidad
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 restrict-args
Utiliz
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.
Ejemplo
Para compilar myprogram.c e indicar al compilador que restrinja el acceso de puntero, especifique el
mandato siguiente:
-fslmtags
Pragma equivalente
Ninguna.
Sintaxis
no-slmtags
-f slmtags
Valores predeterminados
-fno-slmtags
Utiliz
Puede especificar -fslmtags para habilitar el seguimiento de uso de licencia. Cuando -fslmtags está
en vigor, el compilador registra el uso de licencia de compilador en el formato de códigos SLM, en una
ubicación que puede definir especificando el atributo -slm-dir opción. La ubicación predeterminada
es /var/opt/ibm/xl-compiler/ para una instalación predeterminada, o $prefix/var/opt/ibm/
xl-compiler/ para una instalación no predeterminada, donde $prefix es la vía de acceso de
instalación no predeterminada.
El compilador registra cada invocación de compilador como un usuario simultáneo o como una invocación
de usuario autorizado, en función de la presencia del uid en un archivo que lista los usuarios autorizados.
Macros predefinidas
Ninguna.
Información relacionada
• Capítulo 10, “Utilización del registro de códigos SLM”, en la página 403
• “-slm-auth” en la página 72
• “-slm-dir” en la página 73
• “-slm-límite” en la página 73
• “-slm-punto” en la página 73
• “-slm-tiempo-espera” en la página 74
-g
Pragma equivalente
Ninguna.
Finalidad
Genera información de depuración para que la utilice un depurador simbólico y hace que el estado del
programa esté disponible para 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.
-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.
Utiliz
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++ for AIX 17.1.1. Está previsto un futuro release de DBX para añadir este soporte.
Ejemplos
Utilice el mandato siguiente para compilar myprogram.c y generar un programa ejecutable llamado
testing para la depuración:
El mandato siguiente utiliza un nivel de -g específico con -O2 para compilar myprogram.c y generar
información de depuración:
-I
Pragma equivalente
Ninguna.
Finalidad
Añade un directorio a la vía de acceso de búsqueda para los archivos de inclusión.
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.
Utiliz
Si -nostdinc o -nostdinc++ están 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:
-l
Pragma equivalente
Ninguna.
Finalidad
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
Parámetros
key
El nombre de la biblioteca menos los caracteres lib y .a o .so .
Utiliz
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 48, “-brtl” en la página 50y “-b” en la
página 47 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 60
• “-b” en la página 47
• “-brtl” en la página 50
-L
Pragma equivalente
Ninguna.
Finalidad
Búsquedas la vía de acceso del directorio los archivos de biblioteca especificados por la opción -l .
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.
Utiliz
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 incluye 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 que se
deben 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 a, 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.
Macros predefinidas
Ninguna.
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 59
-M
Pragma equivalente
Ninguna.
Finalidad
Genera los archivos de dependencia que utiliza la herramienta make para cada archivo de origen.
Sintaxis
-M
Valores predeterminados
No procede.
Utiliz
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/, especifique:
Información relacionada
• “-MF” en la página 66
• “-o” en la página 70
• “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.
Finalidad
Especifica la arquitectura de procesador para la que se debe generar el código (instrucciones).
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
nativa
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.
La 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 al compilar 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.
ppc64gr
Esta subopción está en desuso. Aunque todavía se acepta, se actualiza de forma silenciosa a
-mcpu=power7.
ppc64grsq
Esta subopción está en desuso. Aunque todavía se acepta, se actualiza de forma silenciosa a
-mcpu=power7.
Utiliz
Especifique el nivel de -mcpu para la arquitectura más baja en la que el programa necesita ejecutarse.
Pasar a valores de -mcpu más recientes puede mejorar el rendimiento.
Para un programa de aplicación determinado, asegúrese de que especifica el mismo valor de -mcpu al
compilar cada uno de sus archivos de origen. Aunque el enlazador y el cargador pueden detectar archivos
de objeto compilados con valores de -mcpu incompatibles, no debe basarse en ellos.
Macros predefinidas
Consulte “Macros relacionadas con los valores de arquitectura” en la página 95 para obtener una lista
de macros predefinidas por las subopciones de -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
• “Macros relacionadas con los valores de arquitectura” en la página 95
Finalidad
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 61.
Sintaxis
-MF FILE_PATH
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
FILE_PATH
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.
Utiliz
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 70
• “Secuencia de búsqueda de directorio para archivos incluidos” en la página 15
-mllvm
Finalidad
Pasa opciones a componentes LLVM.
true
--array-compress = false
--data-layout-opt = 0
3
true
--disable-auto-paired-vec-ld = false
true
--disable-auto-paired-vec-st = false
false
--disable-paired-vec-ld = true
false
--disable-paired-vec-st = true
off
--dynamic-cast-opt = on
aggr
true
--enable-aggressive-vectorization = false
true
--enable-lvi-memoryssa = false
true
--enable-partial-inlining = false
true
--enable-ppc-gen-scalar-mass = false
true
--enable-vec-find = false
true
--fold-complex-pointer-compare = false
true
--inline-hot-callsites-aggressively = false
true
--ppc-enable-redxnintr = false
1
--ppc-set-dscr =< n >
--vector-library = none
MASSV
Notas:
1 n es de tipo uint64_t
Parámetros
--agresivo-tardío-completo-unroll
Habilita o inhabilita la heurística más agresiva para la optimización de anulación de bucle cuando es
beneficioso deslizar completamente un bucle.
-o
Pragma equivalente
Ninguna.
Finalidad
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
vía de acceso
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.
Utiliz
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-only alteran temporalmente la opción -o .
Macros predefinidas
Ninguna.
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 51
• “-E” en la página 54
-r
Pragma equivalente
Ninguna.
Finalidad
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.
Utiliz
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.
Sintaxis
-S
Valores predeterminados
No procede.
Utiliz
Puede invocar el ensamblador con cualquier mandato de invocación de compilador. Por ejemplo,
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 54
-slm-auth
Finalidad
Especifica la vía de acceso del archivo de autorización.
-slm-dir
Finalidad
Especifica el directorio del archivo de etiquetas SLM.
Sintaxis
-slm-dir = dir
-slm-límite
Finalidad
Especifica el número máximo de bytes que puede ocupar cada archivo de etiquetas.
Sintaxis
-slm-limit = límite
-slm-punto
Finalidad
Especifica el número de segundos que cubre cada métrica. El daemon SLM genera la información de uso
para cada periodo de tiempo definido.
Sintaxis
-slm-period = periodo
Sintaxis
-slm-timeout = tiempo de espera
-U
Pragma equivalente
Ninguna.
Finalidad
Desdefine una macro 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 91 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.
Parámetros
nombre
La macro que desea desdefinir.
Utiliz
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.
Información relacionada
• “-D” en la página 52
-w
Pragma equivalente
Ninguna.
Finalidad
Suprime mensajes de aviso.
Sintaxis
-w
Valores predeterminados
Se notifican todos los mensajes informativos y de aviso.
Utiliz
Esta opción no inhabilita los mensajes informativos y de aviso que proporcionan información adicional a
un error grave.
Macros predefinidas
Ninguna.
Ejemplos
Considere el archivo myprogram.c.
#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.
Finalidad
Pasa una o más opciones a un componente que se ejecuta durante la compilación.
Sintaxis
1
-X assembler Opción
preprocessor
linker
Notas:
1 Debe insertar al menos un espacio antes de la opción.
-W a , 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 as
Utiliz
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 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; las opciones de línea de
mandatos no reconocidas, 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
-W.
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
Alineación de #pragma
Finalidad
Especifica la alineación de los objetos de datos en el almacenamiento, lo que evita problemas de
rendimiento con datos no alineados.
Sintaxis
power
packed
reset
Parámetros
PACKED
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.
natural
Los miembros de estructura se correlacionan con sus límites naturales. Esto tiene el mismo efecto
que la subopción power , excepto que también aplica reglas de alineación a los miembros double y
long double que no son el primer miembro de una estructura o unión.
Restablecer
Descarta el valor del pragma actual y vuelve al valor especificado por la directiva pragma anterior.
Utiliz
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.
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 ( default )
Parámetros
default
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.
Utiliz
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.
#pragma nosimd
Finalidad
Inhabilita la generación automática de instrucciones de vector. Esta directiva pragma debe especificarse
por bucle.
Nota: IBM Open XL C/C++ for AIX 17.1.1 acepta #pragma nosimd y lo correlaciona con la directiva
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++ for AIX 17.1.1.
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
Paquete de #pragma
Finalidad
Establece la alineación de todos los miembros agregados en un límite de bytes especificado.
Si el número de límite de bytes es menor que la alineación natural de un miembro, se eliminan los bytes
de relleno, reduciendo así el tamaño global de la estructura o unión.
Sintaxis
# pragma pack ( )
nopack
número
pop
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.
hacer saltar
Elimina el valor añadido anterior con #pragma pack. Especificar #pragma pack () sin parámetros es
equivalente a #pragma pack (pop).
Utiliz
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.
La directiva #pragma pack modifica la regla de alineación actual sólo para los miembros de estructuras
cuyas declaraciones siguen a la directiva. No afecta directamente a la alineación de la estructura, pero
al afectar a la alineación de los miembros de la estructura, puede afectar a la alineación de la estructura
general.
La directiva #pragma pack no puede aumentar la alineación de un miembro, sino que puede disminuir la
alineación. Por ejemplo, para un miembro con un tipo de datos de short, una directiva #pragma pack (1)
haría que ese miembro se empaquetara en la estructura en un límite de 1 byte, mientras que una directiva
#pragma pack (4) no tendría ningún efecto.
La directiva #pragma pack alinea todos los campos de bits en una estructura/unión en límites de 1 bit.
Ejemplo:
#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.
Ejemplos
El ejemplo siguiente muestra cómo se puede utilizar la directiva #pragma pack para establecer la
alineación de una definición de estructura:
#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;
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:
El siguiente ejemplo utiliza #pragma pack (1) para establecer la alineación de uniones de tipo uu en 1
byte:
#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
unroll
( 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.
Utiliz
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 que una directiva #pragma unroll le preceda si la estrategia
de despliegue 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 .
La estructura de bucle debe cumplir 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.
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
Finalidad
Indica al compilador que intente una operación de deshacer y fusionar en bucles for anidados.
Nota: IBM Open XL C/C++ for AIX 17.1.1 sigue aceptando #pragma unrollandfuse pero lo
correlaciona con la directiva pragma #pragma unroll_and_jam Clang. Si ha utilizado #pragma
unrollandfuse en el programa, se recomienda sustituirlo por #pragma unroll_and_jam al migrar el
programa a IBM Open XL C/C++ for AIX 17.1.1.
Sintaxis
# pragma nounrollandfuse
unrollandfuse
( número )
Parámetros
número
Un factor de desbalanceo de bucle. El valor de número es una expresión constante integral
positiva. El valor de número es un entero escalar positivo o una expresión de inicialización
constante en tiempo de compilación.
Si no se especifica número , el optimizador determina un factor de desrotación adecuado para cada bucle
anidado.
Utiliz
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 .
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:
También puede especificar varias directivas #pragma unrollandfusionar en una estructura de bucle
anidado.
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
Finalidad
El script xlCndi instala IBM Open XL C/C++ en una ubicación de directorio no predeterminada.
Utiliz
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++ for AIX 17.1.1 (5765-J18;
XL C/C++ representada como una 5725-C72), Clang 14.0.0"
serie.
Información relacionada
• “-mcpu” en la página 63
Finalidad
Palabra de valor absoluto, Valor absoluto largo, Valor absoluto largo largo
Devuelve el valor absoluto del argumento.
Finalidad
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 con el formato __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.
Utiliz
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
Finalidad
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:
Prototipo
firmado largo __builtin_ppc_cmpeqb (firmado largo largo a, firmado largo largo b);
firmado largo __cmpeqb (firmado 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 con el formato __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.
Utiliz
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
Finalidad
Compara el byte de rango.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en POWER9 de
destino 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 con el formato __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.
Utiliz
• 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.
__setb, __builtin_ppc_setb
Finalidad
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 se establece en el destino de los procesadores POWER9 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 con el formato __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.
Utiliz
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
Finalidad
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 con el formato __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.
Finalidad
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.
Finalidad
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
Finalidad
Dividir palabra doble ampliada
Devuelve el resultado de una división ampliada de doble palabra. El resultado tiene un valor igual a
dividendo/divisor.
Prototipo
largo __builtin_divde (dividendo largo largo, divisor largo largo);
largo __divde (largo dividendo largo, largo divisor largo);
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_name.
• La función incorporada con el formato __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.
Utiliz
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
Finalidad
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 con el formato __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.
Utiliz
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
Finalidad
Dividir palabra ampliada
Devuelve el resultado de una división ampliada de palabra. El resultado tiene un valor igual a dividendo/
divisor.
Utiliz
Si el divisor es 0, el valor de retorno de la función no está definido.
__divweu, __builtin_divweu
Finalidad
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 con el formato __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.
Utiliz
Si el divisor es 0, el valor de retorno de la función no está definido.
Funciones de carga
__load2r, __builtin_ppc_load2r
Finalidad
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.
__load4r, __builtin_ppc_load4r
Finalidad
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 con el formato __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
Finalidad
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 con el formato __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.
Utiliz
Sólo es válido cuando el compilador está en modalidad de 64 bits.
Multiplicar funciones
__mulhd, __builtin_ppc_mulhd, __mulhdu, __builtin_ppc_mulhdu
Finalidad
Multiplicar palabra doble alta con signo, Multiplicar palabra doble alta sin signo
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 con el formato __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.
Utiliz
Sólo es válido en modalidad de 64 bits.
Finalidad
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 con el formato __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.
Finalidad
Punto fijo Multiplicar-Añadir palabra doble alta firmada.
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 con el formato __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
Finalidad
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 se establece en el destino de los procesadores POWER9 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 con el formato __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
Finalidad
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:
Prototipo
firmado long __builtin_ppc_maddld (firmado long long, firmado long long, firmado long long
long);
firmado largo __maddld (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 con el formato __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.
Finalidad
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
Finalidad
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);
Finalidad
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 con el formato __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.
Finalidad
Entrega un número aleatorio.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en POWER9 de
destino 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);
Utiliz
• __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
Finalidad
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 con el formato __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.
Finalidad
Rotar palabra doble izquierda inmediata y, a continuación, máscara insertar, rotar palabra izquierda
inmediata y, a continuación, máscara insertar
Prototipo
unsigned long __builtin_ppc_rldimi (unsigned long long long rs, unsigned long long es, unsigned
int shift, unsigned long long mask);
unsigned int __builtin_ppc_rlwimi (unsigned int rs, unsigned int is, unsigned int mayús,
unsigned int máscara);
unsigned long long __rldimi (unsigned long long rs, unsigned long long long es, unsigned int
shift, unsigned long long mask);
unsigned int __rlwimi (unsigned int rs, unsigned int es, unsigned int shift, unsigned int mask);
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 con el formato __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
shift
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
Finalidad
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 con el formato __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.
Finalidad
Girar la palabra izquierda, girar la palabra doble izquierda
Gira rs a la izquierda mayús bits.
Prototipo
unsigned int __builtin_rotateleft32 (unsigned int rs, unsigned int mayús);
unsigned long long __builtin_rotateleft64 (unsigned long long long rs, unsigned long long long
mayús);
unsigned int __rotatel4 (unsigned int rs, unsigned int mayús);
unsigned long long __rotatel8 (unsigned long long rs, unsigned long long mayús);
Nota:
• La función incorporada __rotatel4 es un sinónimo de __builtin_rotateleft32 y la función
incorporada __rotatel8 es un sinónimo de __builtin_rotateleft64.
• Las funciones incorporadas __rotatel4 y __rotatel8 se proporcionan para la compatibilidad con
IBM XL C/C++ para AIX 16.1 o releases anteriores. Esta función incorporada puede estar en desuso en
el futuro.
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
Finalidad
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:
__store4r, __builtin_ppc_store4r
Finalidad
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 con el formato __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
Finalidad
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 con el formato __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.
Finalidad
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.
Prototipo
void __builtin_ppc_tdw (long long a, long long b, unsigned int TO);
void __builtin_ppc_tw (int a, int b, unsigned int TO);
void __tdw (long long a, long long b, unsigned int TO);
void __tw (int a, int b, unsigned int TO);
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 con el formato __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
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.
Utiliz
__tdw sólo es válido en modalidad de 64 bits.
Finalidad
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);
Utiliz
__trapd sólo es válido en modalidad de 64 bits.
objetivo
Valor absoluto negativo flotante único
Devuelve el valor absoluto negativo del argumento.
Prototipo
float __fnabss (float);
__fnabs
objetivo
Valor absoluto negativo flotante
Devuelve el valor absoluto negativo del argumento.
Prototipo
doble __fnabs (doble);
Finalidad
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
Finalidad
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.
Prototipo
double __builtin_ppc_fcfid (doble);
doble __fcfid (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 con el formato __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.
__fcfud, __builtin_ppc_fcfud
Finalidad
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);
__fctid, __builtin_ppc_fctid
Finalidad
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 con el formato __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.
__fctidz, __builtin_ppc_fctidz
Finalidad
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 con el formato __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
Finalidad
Palabra de conversión flotante a entero
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 con el formato __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
Finalidad
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:
• 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 con el formato __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.
__fctudz, __builtin_ppc_fctudz
Finalidad
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 con el formato __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.
__fctuwz, __builtin_ppc_fctuwz
Finalidad
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 con el formato __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. Los 32 bits de orden inferior del resultado contienen el valor int sin
signo de convertir el parámetro double a int sin signo, redondeado a cero. Los 32 bits de orden superior
contienen un valor no definido.
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;
}
Finalidad
Devuelve el exponente del parámetro dado.
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 con el formato __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.
Finalidad
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 se establece en el destino de los procesadores POWER9 o superior.
• La opción -q64 está habilitada.
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 con el formato __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
Finalidad
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:
Parámetros
BT
Debe ser una constante con un valor de 0 a 31.
__mtfsb1, __builtin_ppc_mtfsb1
Finalidad
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:
• 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 con el formato __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.
__mtfsf, __builtin_ppc_mtfsf
Finalidad
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 con el formato __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.
__mtfsfi, __builtin_ppc_mtfsfi
Finalidad
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 con el formato __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
bf
Debe ser una constante con un valor de 0 a 7.
u
Debe ser una constante con un valor de 0 a 15.
__readflm, __builtin_readflm
Finalidad
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 con el formato __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
Finalidad
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.
__setrnd, __builtin_setrnd
Finalidad
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.
• La función incorporada con el formato __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
Los valores permitidos para mode son:
• 0-redondear al más cercano
• 1-redondeo a cero
• 2-redondeo a + infinito
• 3-redondeo a -infinito
Finalidad
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 se establece en el destino de los procesadores POWER9 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:
Utiliz
La palabra doble más a la derecha del resultado no está definida.
Funciones de multiplicar/restar
__fmadd, __builtin_fma, __fmadds, __builtin_fmaf
Finalidad
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);
doble __fmadd (doble, doble, doble);
float __fmadds (float, float, float);
Nota:
• La función incorporada __fmadd es un sinónimo de __builtin_fma y la función incorporada
__fmadds es un sinónimo de __builtin_fmaf.
• Las funciones incorporadas __fmadd y __fmadds 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.
Finalidad
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.
Finalidad
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 con el formato __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.
Finalidad
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 con el formato __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.
Finalidad
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 con el formato __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
Finalidad
Redondeo de coma flotante a entero con modalidad de redondeo actual
Redondea un valor de coma flotante de precisión doble a entero con la 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 con el formato __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.
Finalidad
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);
Finalidad
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:
• 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 con el formato __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.
Finalidad
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.
Finalidad
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 con el formato __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.
Seleccionar funciones
__fsel, __builtin_ppc_fsel, __fsels, __builtin_ppc_fsels
Finalidad
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 con el formato __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.
Finalidad
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 con el formato __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.
Finalidad
Raíz cuadrada flotante, Raíz cuadrada flotante única
Prototipo
double __builtin_ppc_fsqrt (doble);
float __builtin_ppc_fsqrts (float);
double __fsqrt (doble);
float __fsqrts (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 con el formato __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.
Finalidad
División de software sin comprobación, División de software sin comprobación única
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 con el formato __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.
Utiliz
Esta función puede proporcionar un mejor rendimiento que el operador de división normal en situaciones
en las que la división se realiza repetidamente en un bucle y cuando los argumentos están dentro de los
rangos permitidos.
Funciones de tienda
__stfiw, __builtin_ppc_stfiw
Finalidad
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:
__bcdadd
Finalidad
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 procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
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.
Finalidad
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 procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
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
Finalidad
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 procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Prototipo
long __bcdadd_ofl (vector unsigned char a, vector unsigned char b);
__bcdsub_ofl
Finalidad
Devuelve 1 si la operación de resta BCD correspondiente da como resultado un desbordamiento, o 0 en
caso contrario.
Prototipo
long __bcdsub_ofl (vector unsigned char a, vector unsigned char b);
__bcd_invalid
Finalidad
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 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 procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
__bcdcmpeq
Finalidad
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 procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Prototipo
long __bcdcmpeq (vector unsigned char a, vector unsigned char b);
__bcdcmpge
Finalidad
Devuelve 1 si el valor de BCD a es mayor o igual 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 __bcdcmpge (vector unsigned char a, vector unsigned char b);
__bcdcmpgt
Finalidad
Devuelve 1 si el valor de BCD a es mayor 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 procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Prototipo
long __bcdcmpgt (vector unsigned char a, vector unsigned char b);
__bcdcmple
Finalidad
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 procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Prototipo
long __bcdcmple (vector unsigned char a, vector unsigned char b);
__bcdcmplt
Finalidad
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 procesadores superiores.
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
Prototipo
long __bcdcmplt (vector unsigned char a, vector unsigned char b);
__vec_ldrmb
Finalidad
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 se cumplen las condiciones siguientes:
• Se especifica la opción -maltivec .
• Se incluye el archivo altivec.h .
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
Finalidad
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.
__compare_and_swap, __builtin_ppc_compare_and_swap,
__compare_and_swaplp, __builtin_ppc_compare_and_swaplp
Finalidad
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 con el formato __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
addr
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.
Utiliz
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.
Finalidad
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 con el formato __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
addr
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 .
Utiliz
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.
Finalidad
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);
Parámetros
addr
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.
Utiliz
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.
Finalidad
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 con el formato __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
addr
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.
Finalidad
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 con el formato __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
addr
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.
Utiliz
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
Finalidad
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
Prototipo
long __builtin_ppc_ldarx (long volátil * addr);
int __builtin_ppc_lwarx (volátil int * addr);
short __builtin_ppc_lharx (volátil short * dirección);
char __builtin_ppc_lbarx (char volátil * addr);
long __ldarx (volátil long * addr);
int __lwarx (volátil int * addr);
short __lharx (volátil short * dirección);
char __lbarx (char volátil * direc);
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 con el formato __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
addr
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.
Utiliz
Esta función se puede utilizar con un __stdcx posterior (__stwcx, __sthcx, o __stbcx) 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
Finalidad
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.
Parámetros
addr
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.
Utiliz
Esta función se puede utilizar con un __ldarx anterior (__lwarx, __lharx, o __lbarx) 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
Finalidad
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.
Utiliz
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
Finalidad
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 con el formato __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.
Finalidad
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
Prototipo
void __builtin_ppc_lwsync (void);
void __builtin_ppc_iospace_lwsync (void);
void __lwsync (void);
void __iospace_lwsync (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 con el formato __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.
Finalidad
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 con el formato __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.
Finalidad
Vaciado de bloque de Data Cache
Prototipo
void __builtin_dcbf (const void * addr);
void __dcbf (const void * addr);
Nota:
• La función incorporada en forma de __name es un sinónimo de __builtin_name.
• La función incorporada con el formato __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.
__dcbfl, __builtin_ppc_dcbfl
Finalidad
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 con el formato __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.
Utiliz
El bloque de almacenamiento de destino se conserva en la memoria caché L2 .
__dcbflp, __builtin_ppc_dcbflp
Finalidad
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.
__dcbst, __builtin_ppc_dcbst
Finalidad
Almacén de bloques de Data Cache
Copia el contenido de un bloque modificado de la memoria caché de datos en la memoria principal.
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 con el formato __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
Finalidad
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 con el formato __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
Finalidad
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);
__dcbz, __builtin_ppc_dcbz
Finalidad
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 con el formato __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
Finalidad
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 se establece en procesadores POWER8
de destino 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 con el formato __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.
Finalidad
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.
Prototipo
void __builtin_ppc_dcbtstt (void * address);
void __dcbtstt (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 con el formato __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.
__dcbtt, __builtin_ppc_dcbtt
Finalidad
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 con el formato __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.
Finalidad
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);
vector unsigned char __vcipher (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 con el formato __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 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
Finalidad
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 con el formato __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.
__vncipher, __builtin_altivec_crypto_vncipher
Finalidad
Realiza una ronda 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_vncipher (vector unsigned char matriz_estado,
vector unsigned char clave_redonda);
vector unsigned char __vncipher (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 con el formato __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 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
Finalidad
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 con el formato __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
Devuelve el estado final resultante.
Funciones varias
__vpermxor, __builtin_altivec_crypto_vpermxor
Finalidad
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 con el formato __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
Finalidad
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.
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].
__vpmsumd, __builtin_altivec_crypto_vpmsumd
Finalidad
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 con el formato __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
Finalidad
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.
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].
__vpmsumw, __builtin_altivec_crypto_vpmsumw
Finalidad
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 con el formato __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].
Finalidad
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);
bzero
Finalidad
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++ for AIX 17.1.1 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
Finalidad
Carga de vector emparejado.
Nota: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
Sintaxis
d = __builtin_vsx_lxvp(a,b)
Valor de resultado
__builtin_vsx_lxvp 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 a un múltiplo
de 16 bytes.
Esta función carga 32 bytes de la dirección efectiva en el vector de resultados.
__builtin_vsx_stxvp
Finalidad
Almacén de vectores emparejados.
Almacena los 32 bytes de 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.
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
__builtin_vsx_stxvp(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_build_acc
Finalidad
Construye un acumulador MMA utilizando los valores de determinados vectores.
ACC es un acumulador MMA de 512 bits. Se construye mediante los valores de b, c, dy e con b siendo el
elemento de matriz 0 en orden de elemento natural, c siendo el elemento de matriz 1, etc.
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
__builtin_mma_build_acc(a,b,c,d,e)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_disassemle_acc
Finalidad
Copia el valor de un acumulador MMA en la memoria.
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
__builtin_mma_disassemble_acc(a,b)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Finalidad
Produce un par de vectores a partir de dos vectores.
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
__builtin_vsx_build_pair(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_vsx_disassemle_pair
Finalidad
Genera una estructura que contiene dos vectores a partir de un par de vectores.
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
__builtin_vsx_disassemble_pair(a,b)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Finalidad
Se mueve al acumulador.
El contenido del acumulador representado por a se copia en los cuatro registros de vector representados
por a.
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.
Nota: Esta función incorporada se proporciona para insertar la operación de deprime del acumulador
según sea necesario. Debe evitarse ya que el compilador inserta las operaciones mínimas necesarias en
todos los casos conocidos. Su uso da como resultado operaciones redundantes.
Sintaxis
__builtin_mma_xxmfacc(a)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Información relacionada
• “__builtin_mma_disassemle_acc” en la página 156
__builtin_mma_xxmtacc
Finalidad
Se mueve al acumulador.
El contenido de los cuatro registros de vector representados por a se copian en el acumulador ACC .
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.
Nota: Esta función incorporada se proporciona para insertar la operación principal del acumulador según
sea necesario. Debe evitarse ya que el compilador inserta las operaciones mínimas necesarias en todos
los casos conocidos. Su uso da como resultado operaciones redundantes.
Sintaxis
__builtin_mma_xxmtacc(a)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xxsetaccz
Finalidad
Establece el acumulador en cero.
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
__builtin_mma_xxsetaccz(a)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Conversion Operations
Estas funciones incorporadas se convierten entre vectores de precisión única y tipos bfloat16 .
__builtin_vsx_xvcvbf16spn
Finalidad
Convierte un vector de valores bfloat16 en un vector de valores de precisión única.
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_vsx_xvcvbf16spn(a)
Valor de resultado
Cada elemento de d es el elemento correspondiente de a con el valor convertido de bfloat16 a precisión
simple.
__builtin_vsx_xvcvspbf16
Finalidad
Convierte un vector de valores de coma flotante de precisión simple en un vector de valores bfloat16 .
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_vsx_xvcvspbf16(a)
Valor de resultado
Cada elemento de d es el elemento correspondiente de a con el valor convertido de coma flotante de
precisión simple a bfloat16.
__builtin_mma_pmxvbf16ger2
Finalidad
Vector VSX enmascarado con prefijo bfloat16 GER (Rank-2 Update).
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.
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 3, ambos inclusive.
__builtin_mma_pmxvbf16ger2nn
Finalidad
Vector VSX enmascarado con prefijo bfloat16 GER (Rank-2 Update) con multiplicación negativa y
acumulación negativa.
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
__builtin_mma_pmxvbf16ger2nn (a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
__builtin_mma_pmxvbf16ger2np
Finalidad
Vector VSX enmascarado con prefijo bfloat16 GER (Rank-2 Update) con multiplicación negativa y
acumulación positiva.
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
__builtin_mma_pmxvbf16ger2np (a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 3, ambos inclusive.
__builtin_mma_pmxvbf16ger2pn
Finalidad
Vector VSX enmascarado con prefijo bfloat16 GER (Rank-2 Update) con multiplicación positiva y
acumulación negativa.
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
__builtin_mma_pmxvbf16ger2pn(a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 3, ambos inclusive.
__builtin_mma_pmxvbf16ger2pp
Finalidad
Vector VSX enmascarado con prefijo bfloat16 GER (Rank-2 Update) con multiplicación positiva y
acumulación positiva.
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
__builtin_mma_pmxvbf16ger2pp (a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 3, ambos inclusive.
__builtin_mma_pmxvf16ger2
Finalidad
VSX Vector enmascarado con prefijo de 16 bits de coma flotante GER (actualización derank-2 ).
Sintaxis
__builtin_mma_pmxvf16ger2(a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 3, ambos inclusive.
__builtin_mma_pmxvf16ger2nn
Finalidad
GER de coma flotante de 16 bits del vector VSX enmascarado con prefijo (actualizaciónrank-2 ) con
multiplicación negativa y acumulación negativa.
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
__builtin_mma_pmxvf16ger2nn(a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
__builtin_mma_pmxvf16ger2np
Finalidad
VSX Vector enmascarado con prefijo de 16 bits de coma flotante GER (actualizaciónrank-2 ) con
multiplicación negativa y acumulación positiva.
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
__builtin_mma_pmxvf16ger2np(a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 3, ambos inclusive.
__builtin_mma_pmxvf16ger2pn
Finalidad
VSX Vector enmascarado con prefijo de 16 bits de coma flotante GER (actualizaciónrank-2 ) con
multiplicación positiva y acumulación negativa.
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.
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 3, ambos inclusive.
__builtin_mma_pmxvf16ger2pp
Finalidad
VSX Vector enmascarado con prefijo de 16 bits de coma flotante GER (actualizaciónrank-2 ) con
multiplicación positiva y acumulación positiva.
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
__builtin_mma_pmxvf16ger2pp(a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
__builtin_mma_pmxvf32ger
Finalidad
GER de coma flotante de 32 bits del vector VSX enmascarado con prefijo (actualizaciónrank-1 ).
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
__builtin_mma_pmxvf32ger(a,b,c,d,e)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
__builtin_mma_pmxvf32gernn
Finalidad
GER de coma flotante de 32 bits de VSX enmascarado con prefijo (actualización derank-1 ) con
multiplicación negativa y acumulación negativa.
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
__builtin_mma_pmxvf32gernn(a,b,c,d,e)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
__builtin_mma_pmxvf32gernp
Finalidad
VSX Vector enmascarado de 32 bits con prefijo GER de coma flotante (actualización derank-1 ) con
multiplicación negativa y acumulación positiva.
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
__builtin_mma_pmxvf32gernp(a,b,c,d,e)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
__builtin_mma_pmxvf32gerpn
Finalidad
VSX Vector enmascarado con prefijo de 32 bits GER de coma flotante (actualización derank-1 ) con
multiplicación positiva y acumulación negativa.
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.
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
__builtin_mma_pmxvf32gerpp
Finalidad
GER de coma flotante de 32 bits del vector VSX enmascarado con prefijo (actualizaciónrank-1 ) con
multiplicación positiva y acumulación positiva.
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
__builtin_mma_pmxvf32gerpp(a,b,c,d,e)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
Finalidad
VSX Vector enmascarado con prefijo de 64 bits GER de coma flotante (actualización derank-1 ).
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
__builtin_mma_pmxvf64ger(a,b,c,d,e)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 3, ambos inclusive.
__builtin_mma_pmxvf64gernn
Finalidad
VSX Vector enmascarado con prefijo de 64 bits de coma flotante GER (rank-1 actualización) Multiplicación
negativa y acumulación negativa.
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
__builtin_mma_pmxvf64gernn(a,b,c,d,e)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_pmxvf64gernp
Finalidad
Vector VSX enmascarado con prefijo de 64 bits de coma flotante GER (rank-1 actualización) Multiplicación
negativa y acumulación positiva.
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
__builtin_mma_pmxvf64gernp(a,b,c,d,e)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 3, ambos inclusive.
__builtin_mma_pmxvf64gerpn
Finalidad
VSX Vector enmascarado con prefijo de 64 bits de coma flotante GER (rank-1 actualización) Multiplicación
positiva y acumulación negativa.
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
__builtin_mma_pmxvf64gerpn(a,b,c,d,e)
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 3, ambos inclusive.
__builtin_mma_pmxvf64gerpp
Finalidad
GER de coma flotante de 64 bits del vector VSX enmascarado con prefijo (actualizaciónrank-1 ) con
multiplicación positiva y acumulación positiva.
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
__builtin_mma_pmxvf64gerpp(a,b,c,d,e)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 3, ambos inclusive.
__builtin_mma_pmxvi16ger2
Finalidad
Entero con signo GER (rank-2 update) de vector VSX enmascarado con prefijo de 16 bits con
multiplicación positiva y acumulación positiva.
Nota: Esta función incorporada sólo es válida cuando se cumplen las dos condiciones siguientes:
Sintaxis
__builtin_mma_pmxvi16ger2(a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 3, ambos inclusive.
__builtin_mma_pmxvi16ger2pp
Finalidad
Entero con signo GER (rank-2 update) de vector VSX enmascarado con prefijo de 16 bits con
multiplicación positiva y acumulación positiva.
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
__builtin_mma_pmxvi16ger2pp(a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
__builtin_mma_pmxvi16ger2s
Finalidad
VSX vectorial enmascarado con prefijo de 16 bits Entero con signo GER (actualizaciónrank-2 ) con
Saturación.
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
__builtin_mma_pmxvi16ger2s(a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 3, ambos inclusive.
__builtin_mma_pmxvi16ger2spp
Finalidad
GER de entero con signo de 16 bits de VSX VSX enmascarado con prefijo (rank-2 actualización) con
Saturación, Multiplicación positiva y Acumulación positiva.
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
__builtin_mma_pmxvi16ger2spp(a,b,c,d,e,f)
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 3, ambos inclusive.
__builtin_mma_pmxvi4ger8
Finalidad
GER de entero con signo de 4 bits de VSX enmascarado con prefijo (rank-8 actualización).
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
__builtin_mma_pmxvi4ger8(a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 3, ambos inclusive.
Finalidad
Entero con signo de 4 bits de vector VSX enmascarado con prefijo GER (actualizaciónrank-8 ) con
multiplicación positiva y acumulación positiva.
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
__builtin_mma_pmxvi4ger8pp(a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 255, ambos inclusive.
__builtin_mma_pmxvi8ger4
Finalidad
VSX Vector enmascarado con prefijo 8-bit Signed/Unsigned Integer GER (actualizaciónrank-4 ).
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
__builtin_mma_pmxvi8ger4(a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 15, inclusive.
__builtin_mma_pmxvi8ger4pp
Finalidad
Vector VSX enmascarado con prefijo de 8 bits Firmado/Entero sin firmar GER (actualización derank-4 )
con multiplicación positiva y acumulación positiva.
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
__builtin_mma_pmxvi8ger4pp(a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 15, inclusive.
__builtin_mma_pmxvi8ger4spp
Finalidad
VSX Vector enmascarado con prefijo de 8 bits Firmado/Entero sin signo GER (rank-4 actualización) con
Saturación, Multiplicación positiva y Acumulativo positivo.
Sintaxis
__builtin_mma_pmxvi8ger4spp(a,b,c,d,e,f)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Nota:
d
El valor está en el rango de 0 a 15, inclusive.
e
El valor está en el rango de 0 a 15, inclusive.
f
El valor está en el rango de 0 a 15, inclusive.
__builtin_mma_xvbf16ger2
Finalidad
VSX Vector bfloat16 GER (Rank-2 Update).
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
__builtin_mma_xvbf16ger2 (a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Finalidad
VSX Vector bfloat16 GER (Rank-2 Update) Negativo multiplicar y Negativo acumular.
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
__builtin_mma_xvbf16ger2nn(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvbf16ger2np
Finalidad
VSX Vector bfloat16 GER (Rank-2 Update) Negativo multiplicar y Positivo acumular.
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
__builtin_mma_xvbf16ger2np(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvbf16ger2pn
Finalidad
VSX Vector bfloat16 GER (Rank-2 Update) Multiplicación positiva y acumulación negativa.
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.
Sintaxis
__builtin_mma_xvbf16ger2pn(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvbf16ger2pp
Finalidad
VSX Vector bfloat16 GER (Rank-2 Update) Multiplicación positiva y acumulación positiva.
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
__builtin_mma_xvbf16ger2pp(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvf16ger2
Finalidad
GER de coma flotante de 16 bits de vector (rank-2).
La suma de los dos productos externos de los valores de coma flotante de 16 bits en b y c y se colocan en
el acumulador a .
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
__builtin_mma_xvf16ger2(a,b,c)
__builtin_mma_xvf16ger2nn
Finalidad
VSX Vector de 16 bits de coma flotante GER (actualización derank-2 ) con multiplicación negativa y
acumulación negativa.
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
__builtin_mma_xvf16ger2nn(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvf16ger2np
Finalidad
VSX Vector de 16 bits de coma flotante GER (actualización derank-2 ) con multiplicación negativa y
acumulación positiva.
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
__builtin_mma_xvf16ger2np(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvf16ger2pn
Finalidad
VSX Vector de 16 bits de coma flotante GER (actualización derank-2 ) con multiplicación positiva y
acumulación negativa.
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
__builtin_mma_xvf16ger2pn(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvf16ger2pp
Finalidad
VSX Vector de 16 bits de coma flotante GER (actualización derank-2 ) con multiplicación positiva y
acumulación positiva.
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
__builtin_mma_xvf16ger2pp(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Finalidad
GER de coma flotante de 32 bits de vector (rank-1).
El producto externo de los valores de coma flotante de 32 bits en b y c se coloca en el acumulador a .
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
__builtin_mma_xvf32ger(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvf32gernn
Finalidad
GER de coma flotante de 32 bits de VSX enmascarado con prefijo (actualización derank-1 ) con
multiplicación negativa y acumulación negativa.
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
__builtin_mma_xvf32gernn(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvf32gernp
Finalidad
VSX Vector enmascarado de 32 bits con prefijo GER de coma flotante (actualización derank-1 ) con
multiplicación negativa y acumulación positiva.
Sintaxis
__builtin_mma_xvf32gernp(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvf32gerpn
Finalidad
VSX Vector enmascarado con prefijo de 32 bits GER de coma flotante (actualización derank-1 ) con
multiplicación positiva y acumulación negativa.
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
__builtin_mma_xvf32gerpn(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvf32gerpp
Finalidad
GER de coma flotante de 32 bits del vector VSX enmascarado con prefijo (actualizaciónrank-1 ) con
multiplicación positiva y acumulación positiva.
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.
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvf64ger
Finalidad
GER de coma flotante de 64 bits de vector (rank-1).
El producto externo de los valores de coma flotante de 64 bits en b y c se coloca en el acumulador a .
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
__builtin_mma_xvf64ger(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvf64gernn
Finalidad
VSX Vector de 64 bits de coma flotante GER (actualización derank-1 ) con multiplicación negativa y
acumulación negativa.
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
__builtin_mma_xvf64gernn(a,b,c)
__builtin_mma_xvf64gernp
Finalidad
VSX Vector de 64 bits de coma flotante GER (actualización derank-1 ) con multiplicación negativa y
acumulación positiva.
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
__builtin_mma_xvf64gernp(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvf64gerpn
Finalidad
VSX Vector de 64 bits de coma flotante GER (actualización derank-1 ) con multiplicación positiva y
acumulación negativa.
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
__builtin_mma_xvf64gerpn(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvf64gerpp
Finalidad
VSX Vector de 64 bits de coma flotante GER (actualización derank-1 ) con multiplicación positiva y
acumulación positiva.
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
__builtin_mma_xvf64gerpp(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvi16ger2
Finalidad
VSX Vector de 16 bits-Entero con signo GER (actualizaciónrank-2 ) con multiplicación positiva y
acumulación positiva.
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
__builtin_mma_xvi16ger2 (a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Finalidad
VSX Vector de 16 bits-Entero con signo GER (actualizaciónrank-2 ) con multiplicación positiva y
acumulación positiva.
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
__builtin_mma_xvi16ger2pp(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvi16ger2s
Finalidad
Entero con signo de vector de 16 bits GER (rank-2).
La suma de los dos productos externos de los valores enteros con signo de 16 bits en b y c se coloca en el
acumulador a .
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
__builtin_mma_xvi16ger2s(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Finalidad
VSX Vector de 16 bits-Entero con signo GER (actualización derank-2 ) con Saturación, Multiplicación
positiva y Acumulación positiva.
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
__builtin_mma_xvi16ger2spp(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvi4ger8
Finalidad
GER de entero con signo de 4 bits de vector (rank-8).
La suma de los ocho productos externos de los valores enteros con signo de 4 bits en b y c y se coloca en
el acumulador a .
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
__builtin_mma_xvi4ger8(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Finalidad
Entero con signo de 4 bits de vector VSX enmascarado con prefijo GER (actualizaciónrank-8 ) con
multiplicación positiva y acumulación positiva.
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
__builtin_mma_xvi4ger8pp(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvi8ger4
Finalidad
GER de entero firmado/sin firmar de 8 bits de vector (rank-4).
La suma de los cuatro productos externos de los valores enteros firmados y no firmados de 8 bits en b y c
se coloca en el acumulador a .
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
__builtin_mma_xvi8ger4 (a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
Finalidad
Vector VSX enmascarado con prefijo de 8 bits Firmado/Entero sin firmar GER (actualización derank-4 )
con multiplicación positiva y acumulación positiva.
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
__builtin_mma_xvi8ger4pp(a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
__builtin_mma_xvi8ger4spp
Finalidad
VSX Vector 8 bits Signed/Unsigned Integer GER (rank-4 update) con Saturate, Positive multiply y Positive
acumula.
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
__builtin_mma_xvi8ger4spp (a,b,c)
Tipos de argumento
La tabla siguiente describe los tipos de los argumentos de función.
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
otras funciones incorporadas de AltiVec , consulte la especificación de la interfaz de programación de
aplicaciones de AltiVec .
• Para utilizar las funciones incorporadas, debe especificar la opción -maltivec e incluir el archivo
altivec.h .
vec_abs
Finalidad
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
Finalidad
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 POWER9 de
destino 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
Finalidad
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
Finalidad
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
Finalidad
Devuelve un vector que contiene las transportaciones producidas añadiendo cada conjunto de elementos
correspondientes de dos vectores determinados.
Sintaxis
d=vec_addc(a, b)
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
Finalidad
Devuelve un vector que contiene las sumas saturadas de cada conjunto de elementos correspondientes
de dos vectores determinados.
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
Finalidad
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 se establece en procesadores POWER8
de destino o superior.
Valor de resultado
Devuelve 128 bits bajos de a + b.
vec_addc_u128
Finalidad
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 se establece en procesadores POWER8
de destino o superior.
Sintaxis
d=vec_addc_u128(a, b)
Valor de resultado
Devuelve la ejecución de a + b.
vec_adde_u128
Finalidad
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 se establece en procesadores POWER8
de destino o superior.
Sintaxis
d=vec_adde_u128(a, b, c)
Valor de resultado
Devuelve 128 bits bajos de a + b + (c & 1).
Finalidad
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 se establece en procesadores POWER8
de destino 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
Finalidad
Prueba si todos los conjuntos de elementos correspondientes de los vectores dados son iguales.
Sintaxis
d=vec_all_eq(a, b)
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.
Finalidad
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.
Finalidad
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.
Finalidad
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
Finalidad
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.
Finalidad
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.
Finalidad
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
Finalidad
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.
Finalidad
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
Finalidad
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.
Finalidad
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
Finalidad
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.
Finalidad
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
Finalidad
Realiza un AND a nivel de bit de los vectores dados.
Sintaxis
d=vec_and(a, b)
vec_andc
Finalidad
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
Finalidad
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.
Finalidad
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.
Finalidad
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.
Finalidad
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.
Finalidad
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.
Finalidad
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
Finalidad
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.
Finalidad
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
Finalidad
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.
Finalidad
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
Finalidad
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.
Finalidad
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
Finalidad
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.
Finalidad
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
Finalidad
Mezcla dos vectores fuente de acuerdo con los bits de signo de los elementos correspondientes del tercer
vector fuente.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_blendv(a,b,c)
Valor de resultado
Para cada elemento de c, si el bit 0 de ese elemento es igual a 0, el elemento correspondiente de d
se establece en el elemento correspondiente de a; de lo contrario, el elemento correspondiente de d se
establece en el elemento correspondiente de b.
vec_bperm
Finalidad
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 está establecido
en el destino POWER8 o procesadores superiores:
Supongamos i(0 < =i< 16) y j. Let i denota el índice de elementos de b, y deje que j indique 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 j< 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 unsigned long long, 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 denotar el índice de elemento de palabra doble de a; let j
denotar el índice de elemento de b; y deje que k denote el valor de byte del elemento j de b:
– Si k> =64, el bit 56+j del elemento i se establece en 0.
– Si k< 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
Finalidad
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 detalles, consulte el apartado
“redondeo_vecp” en la página 318.
vec_cfuge
Finalidad
Separa los bits de cada elemento en un vector de entrada a la derecha y a la izquierda dentro de un
elemento vector objetivo, de acuerdo con la máscara en el elemento correspondiente del segundo vector
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=vec_cfuge(a,b)
vec_clr_first
Finalidad
Borra los primeros N elementos de un vector determinado a cero.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_clr_first(a,b)
Valor de resultado
Deje que N sea el valor de b. b debe tener un valor entre 1 y el número de elementos de a, inclusive, pero
no es necesario que sea una constante literal. El resultado es a con los elementos N más a la izquierda
borrados a cero.
vec_clr_last
Finalidad
Borra los últimos N elementos de un vector a cero.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Valor de resultado
Deje que N sea el valor de b. Los últimos N elementos de d se establecen en cero. Los elementos
restantes de d se copian de los elementos correspondientes de a. b debe tener un valor entre 1 y el
número de elementos de a, inclusive, pero no es necesario que sea una constante literal.
vec_cmpb
Finalidad
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.
vec_cmpeq
Finalidad
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 se establece en el destino de los procesadores
POWER7 o superior. Sin embargo, la compilación con procesadores POWER8 o superior produce una
generación de código más eficiente utilizando las instrucciones POWER8 disponibles.
vec_cmpge
Finalidad
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 se establece en el destino de los procesadores
POWER7 o superior. Sin embargo, la compilación con procesadores POWER8 o superior produce 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.
Finalidad
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.
Sintaxis
d=vec_cmpgt(a, b)
Nota: Los tipos siguientes son válidos cuando -mcpu se establece en el destino de los procesadores
POWER7 o superior. Sin embargo, la compilación con procesadores POWER8 o superior produce 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
Finalidad
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.
Nota: Los tipos siguientes son válidos cuando -mcpu se establece en el destino de los procesadores
POWER7 o superior. Sin embargo, la compilación con procesadores POWER8 o superior produce 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
Finalidad
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 se establece en el destino de los procesadores
POWER7 o superior. Sin embargo, la compilación con procesadores POWER8 o superior produce 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
Finalidad
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 POWER9 de
destino 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
Finalidad
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 POWER9 de
destino 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
Finalidad
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 se establece en procesadores POWER8
de destino o superior.
Sintaxis
d=vec_cntlz(a)
vec_cntlz_lsbb
Finalidad
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 POWER9 de
destino 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
Finalidad
Devuelve el número de 0 bits consecutivos iniciales en el resultado devuelto cuando el primer argumento
corresponde a 1 bits en el segundo argumento.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_cntlzm(a,b)
Considere el elemento 0 en la tabla anterior. Los primeros dieciséis bits de a son 0000 0001 0010 0011.
Los primeros dieciséis bits de b son 1010 1010 1010 1010. Aplicar la máscara de b a a significa que el
compilador sólo tiene en cuenta los bits pares de a, que son 0 0 0 0 0 1 0 1 0 1. El número de ceros
iniciales en este resultado es 5.
vec_cntm
Finalidad
Cuenta el número de elementos con su bit de orden superior igual a un valor específico.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_cntm(a, b)
Valor de resultado
Deje que N sea 7 cuando a es un vector unsigned char, 6 cuando a es un vector unsigned short, 5 cuando
a es un vector unsigned int, y 4 cuando a es un vector largo sin signo.
A continuación, los bits 0:N de d se establecen en el número de elementos en a con su bit de orden
superior igual a b, que debe ser 0 o 1.
Los bits N+1:53 de d se establecen en 0.
Finalidad
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 POWER9 de
destino 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
Finalidad
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 POWER9 de
destino 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
Finalidad
Devuelve el número de 0-bits consecutivos de cola en el resultado devuelto cuando el primer argumento
corresponde a 1-bits en el segundo argumento.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_cnttzm(a,b)
Valor de resultado
Cada elemento de d se establece en el número de 0 bits consecutivos, empezando por la derecha, en el
elemento correspondiente de a que corresponde a 1 bits en el elemento correspondiente de b.
A continuación se muestra un ejemplo de entradas de doble palabra:
Considere el elemento 0 en la tabla anterior. Los últimos dieciséis bits de a son 0011 0010 0001 0000.
Los últimos dieciséis bits de b son 1010 1010 1010 1010. La aplicación de la máscara de b a a significa
que el compilador sólo tiene en cuenta los bits pares de a, que son 0 1 0 1 0 0 0 0. El número de ceros
finales en este resultado es 4.
Finalidad
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
Finalidad
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
Finalidad
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
Finalidad
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
Finalidad
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
Finalidad
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
Finalidad
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
Finalidad
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
Finalidad
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.
Finalidad
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
Finalidad
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
Finalidad
Divide los elementos desplazados a la izquierda de un vector por los elementos correspondientes de otro
vector y coloca los cocientes en el vector objetivo.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_dive(a, b)
Valor de resultado
El valor de cada elemento de d se obtiene desplazando el elemento correspondiente de a a la
izquierda por el tamaño del elemento en bits y, a continuación, dividiendo dicho valor por el elemento
correspondiente de b. El importe del turno es el siguiente:
• 32 bits si a es del tipo vector signed int o vector unsigned int .
• 64 bits si a es del tipo vector signed long long o vector unsigned long long .
Notas:
• Cuando cualquier elemento de b es cero, el elemento correspondiente de d no está definido.
• Si algún cociente no se puede representar en el tipo de elemento de d , el elemento correspondiente de
d no está definido.
vec_dss
Finalidad
Detiene la secuencia de datos leída especificada por a.
Sintaxis
vec_dss(a)
vec_dssall
Finalidad
Detiene todas las lecturas de corriente de datos.
Sintaxis
vec_dssall()
vec_dst
Finalidad
Inicia la lectura de datos de una línea en la memoria caché en un estado más eficiente para la lectura.
Sintaxis
vec_dst(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.
vec_dstst
Finalidad
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.
Finalidad
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
Finalidad
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
Finalidad
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 se establece en procesadores POWER8
de destino o superior.
Sintaxis
d=vec_eqv(a, b)
vec_expandm
Finalidad
Crea una máscara de elemento basada en bits de orden superior en el elemento del vector dado.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_expandm (a)
Valor de resultado
Todos los bits de cada elemento de d se establecen en 0 si el bit de orden superior del elemento
correspondiente de a es igual a 0; de lo contrario, todos los bits se establecen en 1.
vec_expte
Finalidad
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.
Finalidad
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
Finalidad
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 POWER9 de
destino 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
Finalidad
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 POWER9 de
destino 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.
Finalidad
Extrae un elemento de un par de vectores utilizando un índice en orden natural inverso.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_extracth(a,b,c)
Valor de resultado
Deje que v sea un vector ancho que conste de a concatenado con b. Deje que e sea el elemento de v
a partir de la posición de byte c en el orden inverso de bytes naturales. A continuación, el elemento de
palabra doble 1 de d se establece en e, y el elemento de palabra doble 0 de d se establece en cero.
Nota: El índice de bytes c debe estar en el rango de 0 a 31, ambos inclusive. El resultado no está definido
si el índice de bytes no se dirige a un límite de elemento.
vec_extractl
Finalidad
Extrae un elemento de un par de vectores utilizando un índice en orden natural.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_extractl(a,b,c)
Valor de resultado
Deje que v sea un vector ancho que conste de a concatenado con b. Deje que e sea el elemento de v a
partir de la posición de byte c en orden de bytes natural. A continuación, el elemento de palabra doble 1
de d se establece en e, y el elemento de palabra doble 0 de d se establece en cero.
Nota: El índice de bytes c debe estar en el rango de 0 a 31, ambos inclusive. El resultado no está definido
si el índice de bytes no se dirige a un límite de elemento.
vec_extractm
Finalidad
Recopila los bits de orden superior de cada elemento del vector dado.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_extractm(a)
Valor de resultado
El contenido del bit de orden superior de cada elemento de a se concatena y se coloca en los bits
situados más a la derecha de d , con otros bits de d establecido en 0.
Finalidad
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 detalles, consulte el apartado
“rota_vecm” en la página 317.
vec_first_match_index
Finalidad
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 POWER9 de
destino 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
Finalidad
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 POWER9 de
destino 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
Finalidad
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 POWER9 de
destino 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
Finalidad
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 POWER9 de
destino 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.
Finalidad
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 se establece en procesadores POWER8
de destino 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
Finalidad
Crea una máscara de elemento para elementos de bytes a partir de una máscara de bits.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d = vec_genbm (a)
Nota: Cuando a es una constante, los compiladores pueden generar la instrucción mtvsrbmi como una
optimización.
argumento Ejemplo
a 1010 1010 1010 1010
d 0x ff00 ff00 ff00 ff00 ff00 ff00 ff00 ff00
vec_gendm
Finalidad
Crea una máscara de elemento para elementos de palabra doble a partir de una máscara de bits.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d = vec_gendm (a)
Valor de resultado
Los bits de a están numerados de izquierda a derecha.
Para cada entero i de 0 a 1, el elemento situado más a la izquierda de d se cuenta como el elemento 0th y
el elemento situado más a la derecha se cuenta como el elemento 1st .
Todos los bits del elemento ith de d se establecen en 0 si el bit ith del valor de 2 bits en a es igual a 0.
Todos los bits del elemento ith de d se establecen en 1 si el bit ith del valor de 2 bits en a es igual a 1.
Por ejemplo:
argumento Ejemplo
a 01
d 0x 0000 0000 0000 0000 ffff ffff
vec_genhm
Sintaxis
d = vec_genhm (a)
Valor de resultado
Los bits de a están numerados de izquierda a derecha.
Para cada entero i de 0 a 7, el elemento situado más a la izquierda de d se cuenta como el elemento 0th y
el elemento situado más a la derecha se cuenta como el elemento 7th .
Todos los bits del elemento ith de d se establecen en 0 si el bit ith del valor de 8 bits en a es igual a 0.
Todos los bits del elemento ith de d se establecen en 1 si el bit ith del valor de 8 bits en a es igual a 1.
Por ejemplo:
argumento Ejemplo
a 10 10 01 01
d 0x ffff 0000 ffff 0000 0000 ffff 0000
vec_genpcvm
Finalidad
Genera un vector de control de permuta para expandir o comprimir un vector de origen de acuerdo con
una máscara especificada.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d = vec_genpcvm(a, b)
Valor de resultado
a contiene una máscara de bits donde el bit de orden superior de cada elemento se establece si la
máscara de permute especifica la expansión o compresión de ese elemento:
• Si b = 0, d se le asigna el valor del vector de control de permute necesario para habilitar un permute
indexado a la izquierda para implementar una expansión de los elementos más a la izquierda de un
vector de origen en los elementos de un vector de resultado especificado por la máscara de elemento
en a.
• Si b = 1, d se le asigna el valor del vector de control de permute necesario para habilitar un permute
indexado a la izquierda para implementar una compresión de los elementos dispersos en un vector de
origen especificado por la máscara de elemento en a en los elementos situados más a la izquierda de
un vector de resultado.
• Si b = 2, d se le asigna el valor del vector de control de permute necesario para habilitar un permute
indexado a la derecha para implementar una expansión de los elementos situados más a la derecha
de un vector de origen en los elementos de un vector de resultado especificado por la máscara de
elemento en a.
• Si b = 3, d se le asigna el valor del vector de control de permute necesario para habilitar un permute
indexado a la derecha para implementar una compresión de los elementos dispersos en un vector de
origen especificado por la máscara de elemento en a en los elementos situados más a la derecha de un
vector de resultado.
vec_genwm
Finalidad
Crea una máscara de elemento para elementos de palabra a partir de una máscara de bits.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d = vec_genwm (a)
argumento Ejemplo
a 10 01
d 0x ffff 0000 0000 0000 0000 ffff
inserción_vector
Finalidad
Devuelve una copia del vector b con el valor de su elemento c sustituido por a.
Sintaxis
d=vec_insert(a, b, c)
Valor de resultado
Esta función utiliza la aritmética de módulo en c para determinar el número de elemento. Por ejemplo,
si c está fuera de rango, el compilador utiliza el módulo c el número de elementos del vector para
determinar la posición del elemento.
vec_insert_exp
Finalidad
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 POWER9 de
destino 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
Finalidad
Inserta un elemento de origen en un vector de origen en una posición de byte especificada en orden
inverso de bytes naturales.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_inserth(a,b,c)
Valor de resultado
Cuando a es un escalar, deje que e sea igual a a. De lo contrario, cuando a es un vector, deje que e sea
el elemento situado más a la derecha de la palabra doble situada más a la izquierda de a en orden de
vec_insertl
Finalidad
Inserta un elemento de origen en un vector de origen en una posición de byte especificada en orden de
bytes natural.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_insertl(a,b,c)
Valor de resultado
Cuando a es un escalar, deje que e sea igual a a. De lo contrario, cuando a es un vector, deje que e sea
el elemento situado más a la derecha de la palabra doble situada más a la izquierda de a en orden de
registro. A continuación, d se establece en el valor de b con e insertado en posición de byte c en orden de
bytes natural. Aparte de los bytes modificados por la operación de inserción, los bytes de d son idénticos
a los bytes correspondientes de b.
Nota: El índice de bytes c debe estar en el rango de 0 a 15, ambos inclusive. El resultado no está definido
si el índice de bytes no se dirige a un límite de elemento.
vec_ld
Finalidad
Carga un vector de la dirección de memoria proporcionada.
Tabla 186. Tipo de datos de valor y argumentos devueltos por la función (en modalidad de 32 bits)
d a b
flotador vectorial Int Vector const float *
Flotante de const *
vector firmado int vector const signed int *
const int firmado *
vector int sin signo vector de const sin signo int *
const int no firmado *
vector firmado corto vector de const firmado short *
consignst short firmado *
vector corto sin signo vector const sin signo corto *
const corto sin signo *
carácter con signo de vector const vector signed char *
carácter firmado const *
vector unsigned char vector const unsigned char *
const carácter sin signo *
carácter de bool de vector const vector bool char *
vector bool int vector const bool int *
bool vectorial corto bool de vector const corto *
píxel vector píxel de vector const *
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
Finalidad
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
Finalidad
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
Finalidad
Carga un elemento de 4 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.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en POWER9 de
destino 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
Finalidad
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
Finalidad
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 larga 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,
modulo 16. El valor de cada elemento sucesivo es el valor del elemento anterior más 1.
vec_lvsr
Finalidad
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 larga 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
Finalidad
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
Finalidad
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
Finalidad
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 se establece 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
Finalidad
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 284
vec_mergeh
Finalidad
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 283
vec_mergel
Finalidad
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 282
vec_mergeo
Finalidad
Fusiona los valores de los elementos numerados de dos vectores.
Nota: Esta función incorporada es válida cuando la opción -mcpu se establece en procesadores POWER8
de destino 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 281
vec_mfvscr
Finalidad
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
Finalidad
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 se establece en procesadores POWER8 de
destino o superior.
vec_mladd
Finalidad
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
Finalidad
Produce los restos de dividir los elementos de un vector por los elementos correspondientes de otro
vector, y los coloca en el vector de resultado.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_mod(a, b)
Valor de resultado
Cada elemento de d es el resto de la división del elemento correspondiente de a por el elemento
correspondiente de b.
Notas:
• Cuando cualquier elemento de b es cero, el elemento correspondiente de d no está definido.
• Para la aritmética con signo, cuando cualquier elemento de a es el 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 negativo, el elemento correspondiente de d no está definido.
vec_mradds
Finalidad
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
Finalidad
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, restas
el elemento correspondiente en c a partir del resultado.
vec_msum
Finalidad
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
Finalidad
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
Finalidad
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
Finalidad
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.
Finalidad
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 se establece 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
Finalidad
Multiplica los elementos de los vectores dados y coloca la mitad alta de cada producto en el vector
objetivo.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_mulh(a, b)
Valor de resultado
Cada elemento de d es la mitad superior del producto de los elementos correspondientes de a y b.
vec_mulo
Finalidad
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 se establece en procesadores POWER8 de
destino o superior.
vec_nabs
Finalidad
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 se establece 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
Finalidad
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 se establece en procesadores POWER8
de destino o superior.
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, bit i del resultado se establece en 0 sólo si los ith bits de
a y b son 1.
vec_neg
Finalidad
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, a continuación, asigna el
resultado a los elementos correspondientes en el vector de resultado.
vec_nmadd
Finalidad
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
Finalidad
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
Finalidad
Realiza un NOR bit a bit de los vectores dados.
Sintaxis
d=vec_nor(a, b)
vec_or
Finalidad
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
Finalidad
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 se establece en procesadores POWER8
de destino 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.
Finalidad
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 se establece 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
Finalidad
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
Finalidad
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 se establece en procesadores POWER8 de
destino o superior.
paquete_vector
Finalidad
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 se establece 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
Finalidad
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 POWER9 de
destino 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
Finalidad
Copia algunos bits de cada elemento de un vector en posiciones del vector objetivo especificado por una
máscara en otro vector.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_pdep(a,b)
Valor de resultado
El bit situado más a la derecha de cada elemento de a se copia en la posición de bit del elemento
correspondiente de d en el que aparece el bit situado más a la derecha en el elemento correspondiente
de b. El siguiente bit situado más a la derecha de cada elemento de a se copia en la posición de bit del
elemento correspondiente de d en el que aparece el siguiente bit situado más a la derecha en el elemento
correspondiente de b, y así sucesivamente hasta que el elemento de b no contenga más de 1 bits. Todos
los bits del elemento de d que corresponden a 0 bits en el elemento correspondiente de b se establecen
en cero.
A continuación se muestra un ejemplo de entradas de doble palabra:
Considere el elemento 0 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. Puede obtener el elemento 1 de d utilizando el mismo
método.
vec_perm
Finalidad
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
Finalidad
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
Finalidad
Realiza un permute parcial de los dos primeros argumentos, que forman una sección alineada de 32 bytes
de un vector emulado de hasta 256 bytes de ancho, utilizando el vector de control de permute parcial
en el tercer argumento. El cuarto argumento identifica qué sección de 32 bytes del vector emulado está
contenida en los dos primeros argumentos.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_permx(a,b,c,e)
Valor de resultado
Deje que s sea la concatenación de a y b. Para cada valor entero i de 0 a 15, haga lo siguiente: deje que j
sea el contenido de los bits 3 a 7 del elemento de bytes i de c. Si e es igual al contenido de los bits 0 a 2
del elemento de byte i de c, el contenido del elemento de byte j de s se coloca en el elemento de byte i de
d. De lo contrario, el contenido del elemento de byte i de d se establece en cero.
Esta función incorporada se puede utilizar para emular permutas en vectores de hasta 256 bytes de
longitud, y también se puede utilizar para realizar una búsqueda de tabla paralela en tablas de hasta 256
bytes.
vec_pext
Finalidad
Copia algunos bits de cada elemento de un vector según lo especificado por una máscara en otro vector
en los bits situados más a la derecha del vector objetivo.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_pext(a,b)
Considere el elemento 0 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.
vec_popcnt
Finalidad
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 se establece en procesadores POWER8
de destino o superior.
Sintaxis
d=vec_popcnt(a)
vec_promocionar
Finalidad
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
Finalidad
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
Finalidad
Sustituye un elemento en un vector.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_replace_elt(a,b,c)
Valor de resultado
El resultado d se establece en el valor de a. A continuación, el elemento de d indexado por c utilizando el
orden de elementos naturales se establece en el valor de b.
Nota: El valor de c debe estar en el rango de 0 a 3, inclusive para elementos de longitud de palabra, y en
el rango de 0 y 1, inclusive para elementos de longitud de palabra doble.
vec_replace_unalineado
Sintaxis
d=vec_replace_unaligned(a,b,c)
Nota: El valor de c debe estar en el rango de 0 a 12, inclusive si el tipo de b es signed int, unsigned
into float. De lo contrario, el valor de c debe estar en el rango de 0 a 8, ambos incluidos.
Valor de resultado
El resultado d se establece en el valor de a. A continuación, el valor de b se graba en d empezando en la
posición de byte indicada por c en orden de byte de izquierda a derecha.
vec_revb
Finalidad
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
Finalidad
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
Finalidad
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
Finalidad
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 POWER9 de destino 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.
Finalidad
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 POWER9 de
destino 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
Finalidad
Devuelve un vector que contiene los valores redondeados de los elementos correspondientes del vector
dado.
Sintaxis
d=vec_round(a)
rodo_vecc
Finalidad
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
Finalidad
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 262
Finalidad
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 232
rodo_vecz
Finalidad
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 354
Finalidad
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
Finalidad
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.
Finalidad
Signo-amplía los elementos más pequeños de un vector de origen a la longitud de palabra en el vector de
resultado.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en POWER9 de
destino o superior.
Sintaxis
d=vec_signexti (a)
Valor de resultado
Cada elemento de palabra de d se calcula mediante un signo que amplía el elemento de más a la derecha
en la palabra correspondiente de a.
vec_signextll
Finalidad
Signo-amplía los elementos más pequeños de un vector de origen a la longitud de doble palabra en el
vector de resultado.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_signextll (a)
vec_sl
Finalidad
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 se establece en el destino de los procesadores
POWER7 o superior. Sin embargo, la compilación con procesadores POWER8 o superior produce 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
Finalidad
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
Finalidad
Desplaza un vector de doble ancho a la izquierda por los bits dados y devuelve los 128 bits más a la
izquierda del resultado del desplazamiento.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_sldb(a,b,c)
Valor de resultado
Deje que e sea la concatenación de a y b, con a a la izquierda. Deje que e' sea e desplazado a la izquierda
por el número de bits especificado por c. A continuación, d se establece en los 128 bits más a la izquierda
de e'.
vec_sldw
Finalidad
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
Finalidad
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
Finalidad
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
Finalidad
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 POWER9 de
destino 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
Finalidad
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
Finalidad
Copia un valor inmediato en cada elemento de un vector.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_splati(a)
Valor de resultado
El resultado d es un vector con cada elemento establecido en el valor de a.
vec_splati_ins
Finalidad
Copia un valor inmediato en una palabra especificada de cada palabra doble de un vector, dejando las
palabras restantes sin modificar.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_splati_ins(a,b,c)
Valor de resultado
Si b tiene un valor de 0, los elementos pares de d se establecen en el valor de c y el elemento impar de d
se copian del elemento correspondiente de a. De lo contrario, b debe tener un valor de 1, y los elementos
impares de d se establecen en el valor de c y los elementos pares de d se copian de los elementos
correspondientes de a.
vec_splatid
Finalidad
Convierte un valor de coma flotante de precisión simple inmediato en precisión doble y copia el resultado
en cada elemento de un vector.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Valor de resultado
El resultado d es un vector con cada elemento establecido en el valor de a después de que a se convierta
a precisión doble.
vec_splats
Finalidad
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.
Finalidad
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
Finalidad
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.
Finalidad
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
Finalidad
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.
Finalidad
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
Finalidad
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.
Finalidad
Devuelve un vector que contiene la raíz cuadrada de cada elemento en el vector dado.
Sintaxis
d=vec_sqrt(a)
vec_sr
Finalidad
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 se establece en el destino de los procesadores
POWER7 o superior. Sin embargo, la compilación con procesadores POWER8 o superior produce 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
Finalidad
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 se establece en el destino de los procesadores
POWER7 o superior. Sin embargo, la compilación con procesadores POWER8 o superior produce 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.
Finalidad
Desplaza un vector de doble ancho a la derecha por bits dados y devuelve los 128 bits más a la derecha
del resultado.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_srdb(a,b,c)
Valor de resultado
Deje que e sea la concatenación de a y b, con a a la izquierda. Deje que e' sea e desplazado a la derecha
por el número de bits especificado por c. A continuación, d se establece en los 128 bits más a la derecha
de e'.
vec_srl
Finalidad
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
Finalidad
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
Finalidad
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 POWER9 de
destino 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 por la concatenación de 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.
Finalidad
Almacena un vector en la memoria en la dirección indicada.
Sintaxis
vec_st(a, b, c)
Tipos de argumento
Esta función no devuelve un valor. El valor de b se añade a la dirección especificada por cy 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 284. Tipo de datos de valor y argumentos devueltos por la función (en modalidad de 64 bits)
a b c
vector int sin signo Int largo sin firmar *
vector firmado int firmado largo *
vec_ste
Finalidad
Almacena un elemento vector en la memoria en la dirección indicada.
Sintaxis
vec_ste(a,b,c)
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
Finalidad
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
Sintaxis
d=vec_stril(a)
Valor de resultado
Los elementos de a se copian, en orden de elementos naturales, en los elementos correspondientes de d
hasta que se encuentre el primer elemento cero de a o hasta que se hayan copiado todos los elementos.
Si se encuentra un elemento cero, todos los elementos restantes de d se establecen en cero.
vec_stril_p
Finalidad
Comprueba si el vector de entrada contiene un elemento cero.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_stril_p(a)
Valor de resultado
Al resultado d se le proporciona un valor distinto de cero si algún elemento de a tiene un valor cero. De lo
contrario, d se establece en cero.
vec_strir
Finalidad
Copia una serie de elementos terminados en nulo del vector de entrada en el vector de salida,
sustituyendo todos los elementos que siguen al primer elemento cero por ceros. Los elementos aparecen
en el reverso del orden de los elementos naturales.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_strir(a)
Valor de resultado
Los elementos de a se copian, en el orden inverso del elemento natural, en los elementos
correspondientes de d hasta que se encuentre el primer elemento cero de a o hasta que se hayan copiado
todos los elementos. Si se encuentra un elemento cero, todos los elementos restantes de d se establecen
en cero.
vec_strir_p
Finalidad
Comprueba si el vector de entrada contiene un elemento cero.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Valor de resultado
Al resultado d se le proporciona un valor distinto de cero si algún elemento de a tiene un valor cero. De lo
contrario, d se establece en cero.
vec_sub
Finalidad
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
Finalidad
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 se establece en procesadores POWER8
de destino o superior.
Sintaxis
d=vec_sub_u128(a, b)
Valor de resultado
Devuelve 128 bits bajos de a - b.
vec_subc
Finalidad
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
Finalidad
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 se establece en procesadores POWER8
de destino o superior.
Sintaxis
d=vec_subc_u128(a, b)
Valor de resultado
Devuelve la ejecución de a - b.
vec_sube_u128
Finalidad
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 se establece en procesadores POWER8
de destino o superior.
Sintaxis
d=vec_sube_u128(a, b, c)
Valor de resultado
Devuelve los 128 bits inferiores de a - b - (c & 1).
Finalidad
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 se establece en procesadores POWER8
de destino o superior.
Sintaxis
d=vec_subec_u128(a, b, c)
Valor de resultado
Devuelve la ejecución de a - b - (c & 1).
vec_subs
Finalidad
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.
Finalidad
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
Finalidad
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 4n+3 de a y el elemento n de b.
vec_Sumas
Finalidad
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
Finalidad
Realiza una de las 256 operaciones lógicas en tres vectores de entrada para producir el vector de salida.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_ternarylogic(a,b,c,e)
Valor de resultado
Para cada valor entero i de 0 a 127, deje j ser el valor de la concatenación del contenido del bit i de a, by
c. El valor del bit j del valor de 8 bits en e se coloca en el bit i de d.
vec_test_data_class
Finalidad
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 POWER9 de
destino 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
Finalidad
Comprueba si los bits menos significativos de todos los bytes del argumento de entrada son iguales a 1.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_test_lsbb_all_ones(a)
Valor de resultado
El resultado d se establece en 1 si el bit menos significativo o el bit menos significativo de todos los bytes
de a son iguales a 1. De lo contrario, d se establece en 0.
vec_test_lsbb_all_zeros
Finalidad
Comprueba si el bit menos significativo de todos los bytes del argumento de entrada es igual a 0.
Nota: Esta función incorporada sólo es válida cuando la opción -mcpu está establecida en procesadores
Power10 de destino.
Sintaxis
d=vec_test_lsbb_all_zeros(a)
vec_trunc
Finalidad
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 detalles, consulte el apartado
“rodo_vecz” en la página 318.
vec_unpackh
Finalidad
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 se establece 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.
Finalidad
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 se establece 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
Finalidad
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 larga 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
Finalidad
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 larga 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.
Finalidad
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 POWER9 de
destino 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
Finalidad
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 POWER9 de
destino 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
Finalidad
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
Finalidad
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.
Finalidad
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
Finalidad
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
Finalidad
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
void carácter con signo de larga 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
Finalidad
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
void 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
void carácter con signo de larga 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 *
Finalidad
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 se establece en el destino de los procesadores POWER9 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
Finalidad
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 se establece en el destino de los procesadores POWER9 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
Finalidad
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
Finalidad
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.
Finalidad
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 .
Finalidad
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
Finalidad
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 ();
Finalidad
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 .
Finalidad
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
Finalidad
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
Finalidad
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
Finalidad
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
Finalidad
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 .
Finalidad
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
Finalidad
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
Finalidad
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
Finalidad
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 .
Finalidad
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
Finalidad
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 .
Finalidad
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
T __sync_val_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
La función devuelve el valor inicial de la variable a la que apunta __p .
__sync_bool_compare_and_swap
Finalidad
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 __p apunta son iguales, la función devuelve
true; de lo contrario, devuelve false.
__builtin_object_size
Finalidad
Cuando se utiliza con -O2 o una optimización superior, devuelve un número constante de bytes desde el
puntero dado hasta el final del objeto al que se apunta si el tamaño del objeto se conoce en el tiempo de
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 378 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 379.
Nota: IBM Open XL C/C++ for AIX 17.1.1 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++ for AIX 17.1.1 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 utilizan con -O2
Tabla 323. Comprobación de las funciones incorporadas para las funciones de operación de serie
Función función integrada 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 Open XL C/C++ for AIX ignora estos parámetros opcionales y protege todas las variables
accesibles globalmente.
Finalidad
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
Finalidad
Devuelve el número de 0 bits consecutivos iniciales en el resultado devuelto cuando el primer argumento
corresponde a 1 bits en el segundo argumento.
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_cntlzdm(a,b)
Valor de resultado
El resultado d se establece en el número de 0 bits consecutivos, empezando por la izquierda, en a que
corresponde a 1 bits en b.
A continuación se muestra un ejemplo de entradas de doble palabra:
argumento Valor
a 0x 0123 4567 89ab cdef
b 0x aaaa aaaa aaaa aaaa
d 5
__builtin_cnttzdm
Finalidad
Devuelve el número de 0-bits consecutivos de cola en el resultado devuelto cuando el primer argumento
corresponde a 1-bits en el segundo argumento.
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_cnttzdm(a,b)
Valor de resultado
El resultado d se establece en el número de 0 bits consecutivos, empezando por la derecha, en a que
corresponde a 1 bits en b.
A continuación se muestra un ejemplo de entradas de doble palabra:
argumento Valor
a 0x fedc ba98 7654 3210
b 0x aaaa aaaa aaaa aaaa
d 4
En la tabla anterior, los últimos dieciséis bits de a son 0011 0010 0001 0000. Los últimos dieciséis bits
de b son 1010 1010 1010 1010. La aplicación de la máscara de b a a significa que el compilador sólo
tiene en cuenta los bits pares de a, que son 0 1 0 1 0 0 0 0. El número de ceros finales en este resultado
es 4.
__builtin_pdepd
Finalidad
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 el 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 el 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
Finalidad
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 bit. 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 establecen en 1, todos los bits excepto los
16 bits situados más a la derecha de d se establecen 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
Finalidad
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 con el formato __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.
Finalidad
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.
Utiliz
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
Finalidad
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
Finalidad
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 con el formato __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.
Utiliz
La ejecución de esta instrucción tiene privilegios y está restringida únicamente a la modalidad de
supervisor.
__mfspr, __builtin_ppc_mfspr
Finalidad
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 con el formato __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
registerNumber
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.
Finalidad
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 con el formato __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 de 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.
Utiliz
La ejecución de esta instrucción tiene privilegios y está restringida únicamente a la modalidad de
supervisor.
__mtspr, __builtin_ppc_mtspr
Finalidad
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 con el formato __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.
Finalidad
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 con el formato __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
Finalidad
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.
Función incorporada de vector GCC soportada: Función IBM Open XL C/C++ for AIX equivalente:
vec_vsx_ld vec_xl
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 *)
Función incorporada de vector GCC soportada: Función IBM Open XL C/C++ for AIX equivalente:
vec_vsx_ld vec_xl
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 *)
Función incorporada de vector GCC soportada: Función IBM Open XL C/C++ for AIX equivalente:
vec_vsx_st vec_xst
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 *)
void vec_vsx_st (vector bool int, int, int *)
Función incorporada de vector GCC soportada: Función IBM Open XL C/C++ for AIX equivalente:
vec_vsx_st vec_xst
void vec_vsx_st (vector signed short, int, vector void vec_xst (vector signed short, signed long,
signed short *) const vector signed short *)
void vec_vsx_st (vector signed short, int, short *) void vec_xst (vector signed short, signed long,
signed short *)
void vec_vsx_st (vector unsigned short, int, vector void vec_xst (vector unsigned short, signed long,
unsigned short *) const vector unsigned short *)
void vec_vsx_st (vector unsigned short, int, void vec_xst (vector unsigned short, signed long,
unsigned short *) unsigned short *)
void vec_vsx_st (vector bool short, int, vector bool
short *)
void vec_vsx_st (vector bool short, int, unsigned
short *)
void vec_vsx_st (vector pixel, int, vector pixel *)
void vec_vsx_st (vector pixel, int, unsigned short *)
void vec_vsx_st (vector pixel, int, short *)
void vec_vsx_st (vector bool short, int, short *)
void vec_vsx_st (vector signed char, int, vector void vec_xst (vector signed char, signed long, const
signed char *) vector signed char *)
void vec_vsx_st (vector signed char, int, signed void vec_xst (vector signed char, signed long,
char *) signed char *)
void vec_vsx_st (vector unsigned char, int, vector void vec_xst (vector unsigned char, signed long,
unsigned char *) const vector unsigned char *)
void vec_vsx_st (vector unsigned char, int, void vec_xst (vector unsigned char, signed long,
unsigned char *) unsigned char *)
void vec_vsx_st (vector bool char, int, vector bool
char *)
void vec_vsx_st (vector bool char, int, unsigned
char *)
void vec_vsx_st (vector bool char, int, signed char
*)
Función incorporada de vector GCC soportada: Función IBM Open XL C/C++ for AIX equivalente:
vec_xxsldi v_sldw
vector doble vec_xxsldi (vector doble, vector vector double vec_sldw (vector double, vector
doble, int) double, signed int)
vector float vec_xxsldi (vector float, vector float,
int)
Función incorporada de vector GCC soportada: Función IBM Open XL C/C++ for AIX equivalente:
vec_xxsldi v_sldw
vector long vec_xxsldi largo (vector long long, vector firmado long long vec_sldw (vector firmado
vector long long, int) long long, vector firmado long long, signed int)
vector unsigned long long vec_xxsldi (vector vector unsigned long vec_sldw (vector unsigned
unsigned long long, vector unsigned long long, int) long long, vector unsigned long long, signed int)
vector int vec_xxsldi (vector int, vector int, int) vector signed int vec_sldw (vector signed int,
vector signed int, signed int)
vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int vec_sldw (vector unsigned int,
vector unsigned int, int) vector unsigned int, signed int)
vector corto vec_xxsldi (vector corto, vector corto, vector firmado corto vec_sldw (vector firmado
int) corto, vector firmado corto, int firmado)
vector unsigned short vec_xxsldi (vector unsigned vector unsigned short vec_sldw (vector unsigned
short, vector unsigned short, int) short, vector unsigned short, signed int)
vector signed char vec_xxsldi (vector signed char, vector signed char vec_sldw (vector signed char,
vector signed char, int) vector signed char, signed int)
vector unsigned char vec_xxsldi (vector unsigned vector unsigned char vec_sldw (vector unsigned
char, vector unsigned char, int) char, vector unsigned char, signed int)
Función incorporada de vector GCC soportada: Función IBM Open XL C/C++ for AIX equivalente:
vec_xxpermdi vec_permi
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)
<SchemaVersion>2.1.1</SchemaVersion>
<SoftwareIdentity>
<PersistentId>80bc33fc989d4df6a6cab5c741384a31</PersistentId>
<Name>IBM Open XL C/C++ for AIX</Name>
<InstanceId>/opt/ibm/ibm-clang/17.1.1</InstanceId>
</SoftwareIdentity>
<Metric logTime="2022-10-01T18:39:51Z">
<Type>AUTHORIZED_USER</Type>
<Value>1</Value>
<Period>
<StartTime>2022-10-01T18:34:51Z</StartTime>
<EndTime>2022-10-01T18:39:51Z</EndTime>
</Period>
</Metric>
<Metric logTime="2022-10-01T18:39:51Z">
<Type>CONCURRENT_USER</Type>
<Value>3</Value>
<Period>
<StartTime>2022-10-01T18:14:51Z</StartTime>
<EndTime>2022-10-01T18:19:51Z</EndTime>
</Period>
</Metric>
Registros de errores
Si se produce un error antes de que se bifurque el daemon, se devuelve un código de retorno de
-1. De lo contrario, no se informará de ninguna anomalía. En cualquier caso, el error se registrará en
slm_dir/.hash/log.
Referencia relacionada
-fslmtags
-slm-auth
-slm-dir
-slm-límite
-slm-punto
-slm-tiempo-espera
donde V.R.M es el nivel Version.Release.Modification del compilador que está instalado en el sistema.
Para IBM XL C/C++ for AIX 16.1.0, el SWID es 80bc33fc989d4df6a6cab5c741384a31. Para IBM
Open XL C/C++ for AIX, el SWID es ded7e9aa0db74de79fe1f9081087dc13. El SWID no cambia
entre las versiones del compilador de IBM Open XL C/C++ for AIX o para distintas instancias de
instalación.
3. Establezca /etc/XLAuthorizedUsers para que todos los usuarios que invocan el compilador
puedan leerlo:
$id -u bsmith
24461
$id -u rsingh
9204
$id -u jchen
7531
A continuación, cree /etc/XLAuthorizedUsers con las líneas siguientes para autorizar a estos
usuarios a utilizar el compilador:
24461,ded7e9aa0db74de79fe1f9081087dc13
9204,ded7e9aa0db74de79fe1f9081087dc13
7531,ded7e9aa0db74de79fe1f9081087dc13
Referencia relacionada
-fslmtags
-slm-auth
-slm-dir
-slm-límite
-slm-punto
-slm-tiempo-espera
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:
Notas:
• Las funciones trigonométricas (sin, cos, tan) devuelven NaN (No es un número) 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 de 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 de 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 417), 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 posteriores, 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 de enteros 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 vector float divf4 (vector float
vx/vy. doble vx, vector doble vy); vx, vector float vy);
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 flotante de vector erff4 (vector
de error de cada doble vx); float 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/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 siguiente párrafo no se aplica al Reino Unido ni a ningún otro país donde tales disposiciones
estén en contradicción con la legislación local: INTERNATIONAL BUSINESS MACHINES CORPORATION
PROPORCIONA ESTA PUBLICACIÓN "TAL CUAL" SIN GARANTÍAS DE NINGUNA CLASE, YA SEAN
EXPRESAS O IMPLÍCITAS, INCLUIDAS, PERO SIN LIMITARSE A, LAS GARANTÍAS IMPLÍCITAS DE NO
INFRACCIÓ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 contener imprecisiones técnicas o errores tipográficos. La información incluida
en este documento está sujeta a cambios periódicos, que se incorporarán en nuevas ediciones de la
publicación. IBM puede efectuar mejoras y/o cambios en los productos y/o programas descritos en esta
publicación en cualquier momento y 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 él con el fin de habilitar: (i) el
intercambio de información entre programas creados independientemente y otros programas (incluido
éste) y (ii) el uso mutuo de la información que se ha intercambiado, deben ponerse en contacto con:
Esta información puede estar disponible, sujeta a los términos y condiciones adecuados, y puede incluir
en algunos casos el pago de una tarifa.
IBM proporciona el programa bajo licencia que se describe en esta información y todo el material bajo
licencia disponible bajo los términos del acuerdo IBM Customer Agreement, IBM International Program
License Agreement o de 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 relacionada con productos que no son de IBM se ha obtenido de los proveedores de
dichos productos, de sus anuncios publicados o de 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 sobre las posibilidades de
productos que no son de IBM deben dirigirse a los proveedores de esos productos.
Todas las declaraciones sobre la futura dirección o intención de IBM están sujetas a cambios o a la
retirada sin previo aviso, y sólo representan finalidades 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 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 muestran técnicas
de programación en varias plataformas operativas. Puede copiar, modificar y distribuir estos programas
de muestra de cualquier forma sin pagar ninguna cuota a IBM, para fines de desarrollo, uso, marketing o
distribución de programas de aplicación que se ajusten a las interfaces de programación de aplicaciones
para la plataforma operativa para la que se han escrito los programas de muestra. Estos ejemplos no se
han probado exhaustivamente bajo todas las condiciones. Por lo tanto, IBM no puede garantizar ni dar
por supuesta la fiabilidad, la capacidad de servicio ni la funcionalidad 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, así como todo trabajo derivado, debe incluir un aviso
de copyright como el siguiente:
© (nombre de la empresa) (año). Las partes de este código se derivan de IBM Corp. Programas de
ejemplo. © Copyright IBM Corp. 1998, 2022.
CONSIDERACIONES SOBRE LA POLÍTICA DE PRIVACIDAD:
Los productos de software de 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 utiliza cookies para recopilar información de
Avisos 433
434 IBM Open XL C/C++: Guía del usuario
Índice
Índice 435
funciones incorporadas de sincronización y atómicas mandato 3
almacenamiento 141 mandato de invocación 1
carga 140 Mandatos AIX 19
comparación 137 mandatos de compilador
extraer 138 xlCndi 89
Intercambiar 137 manipulación de bits
sincronización 142 Built-in Functions 381
funciones incorporadas relacionadas con la memoria caché mensaje de diagnóstico 24
datos 144
prefetch (captación previa) 148
funciones incorporadas varias
N
Memoria 389 nivel de idioma
Movimiento 386 Selección 2
optimización 385 soportados 27
nivel de idioma estándar 27
G
GCC
O
Opciones Objeto de 64 bits 4
resumen 78 Opción
incompatibilidad
H resolución 13
secuencia de prioridad 13
hardware 1 opción de compilador 2
Herramienta 3 opción de enlazador 19
operadores
suscripción vectorial 35
I optimización
ibm-bugpoint 3 funciones matemáticas 413
ibm-clang-cpp 3 Optimización de LLVM 4
ibm-gen-list 3 optimizar 2
ibm-llc 5
ibm-llvm-cxxfilt 3 P
ibm-llvm-profdata 3
ibm-opt 5 programa de utilidad
informes de optimización 5, 25 c + + flit 3
inicialización ibm-bugpoint 3
tipos de vector 29 ibm-clang-cpp 3
inicializadores ibm-gen-list 3
listas 29 ibm-llvm-cxxfilt 3
tipos de vector 29 ibm-llvm-profdata 3
Lista de CreateExport 3
Programa de utilidad de lista CreateExport 3
L programas
larga larga ejecutar 24
especificadores de tipo 36 punto fijo
libraries (bibliotecas) conceptos básicos 99
vector 416 valor absoluto 99
Literales
vectores 32 S
Llamada
aplicaciones 24 Sentencias
default 9 conjunto en línea
Fases 9 restricciones 42
LTO 5 Símbolo
LVM 1 duplicados 20
Incompatible 20
No resuelto 19
M sistema operativo 1
macros soporte
característica de compilador 94 hardware 1
compilador 92 sistema operativo 1
plataforma 94
V
variable de entorno 2
vectores
Literales 32
operadores de suscripción 35
tipos de datos 36
vi 9
Índice 437
438 IBM Open XL C/C++: Guía del usuario
IBM®
SC28-3312-01