Spec-Zone.ru › GCC 14

6.33.33 Атрибуты функций x86

Для внутренней части x86 поддерживаются следующие атрибуты функций:

cdecl

На целевых платформах x86-32 атрибут cdecl заставляет компилятор предполагать, что вызывающая функция удаляет из стека область, использованную для передачи аргументов. Это удобно для переопределения эффекта параметра -mrtd.

fastcall

На целевых платформах x86-32 атрибут fastcall заставляет компилятор передавать первый аргумент (если он целочисленного типа) в регистре ECX, а второй аргумент (если он целочисленного типа) — в регистре EDX. Последующие аргументы и аргументы других типов передаются через стек. Вызываемая функция удаляет аргументы из стека. Если число аргументов переменно, все аргументы помещаются в стек.

thiscall

На целевых платформах x86-32 атрибут thiscall заставляет компилятор передавать первый аргумент (если он целочисленного типа) в регистре ECX. Последующие аргументы и аргументы других типов передаются через стек. Вызываемая функция удаляет аргументы из стека. Если число аргументов переменно, все аргументы помещаются в стек. Атрибут thiscall предназначен для нестатических функций-членов C++. Как расширение GCC это соглашение о вызовах можно использовать для функций C и статических методов-членов.

ms_abi
sysv_abi

На целевых платформах x86-32 и x86-64 можно использовать атрибут ABI, чтобы указать соглашение о вызовах для функции. Атрибут ms_abi указывает компилятору использовать ABI Microsoft, а атрибут sysv_abi — ABI System V ELF, применяемый в GNU/Linux и других системах. При компиляции для Windows по умолчанию используется ABI Microsoft. Во всех остальных системах по умолчанию используется ABI System V ELF.

Обратите внимание: для атрибута ms_abi на целевых 64-разрядных платформах Microsoft Windows в настоящее время требуется параметр -maccumulate-outgoing-args.

callee_pop_aggregate_return (number)

На целевых платформах x86-32 этот атрибут позволяет управлять тем, как агрегатные типы возвращаются через память. Если за удаление скрытого указателя вместе с остальными аргументами отвечает вызывающая функция, укажите для number значение ноль. Если за удаление скрытого указателя отвечает вызываемая функция, укажите для number значение один.

ABI x86-32 по умолчанию предполагает, что вызываемая функция удаляет из стека скрытый указатель. Однако на целевых платформах Microsoft Windows x86-32 компилятор предполагает, что скрытый указатель удаляет из стека вызывающая функция.

ms_hook_prologue

На целевых платформах x86-32 и x86-64 этот атрибут функции позволяет заставить GCC генерировать пролог функции с «горячей заплаткой», используемый в функциях Win32 API в Microsoft Windows XP Service Pack 2 и более поздних версиях.

naked

Этот атрибут позволяет компилятору создать необходимое объявление функции, оставляя при этом тело функции на языке ассемблера. Для указанной функции компилятор не генерирует последовательности пролога и эпилога. В функции без пролога и эпилога безопасно использовать только базовые инструкции asm (см. Базовый Asm — инструкции ассемблера без операндов). Использование расширенного asm или сочетание базового asm с кодом C может казаться работоспособным, однако на это нельзя полагаться: такая конструкция не гарантирует надежную работу и не поддерживается.

regparm (number)

На целевых платформах x86-32 атрибут regparm заставляет компилятор передавать первые number аргументов (если они целочисленного типа) в регистрах EAX, EDX и ECX, а не через стек. Функциям с переменным числом аргументов все аргументы по-прежнему передаются через стек.

Обратите внимание, что в некоторых системах ELF этот атрибут не подходит для глобальных функций в разделяемых библиотеках с ленивой привязкой (используется по умолчанию). При ленивой привязке первый вызов проходит через код разрешения символов в загрузчике. Этот код может предполагать, что, согласно стандартным соглашениям о вызовах, содержимое EAX, EDX и ECX может быть изменено. Это относится к Solaris 8. Системы с GNU C Library версии 2.1 или выше и FreeBSD, как считается, безопасны, поскольку их загрузчики сохраняют EAX, EDX и ECX. (При необходимости ленивую привязку можно отключить с помощью компоновщика или загрузчика, чтобы избежать этой проблемы.)

sseregparm

На целевых платформах x86-32 с поддержкой SSE атрибут sseregparm заставляет компилятор передавать до трех аргументов с плавающей точкой в регистрах SSE, а не через стек. Функции с переменным числом аргументов по-прежнему передают все аргументы с плавающей точкой через стек.

force_align_arg_pointer

На целевых платформах x86 атрибут force_align_arg_pointer можно применять к отдельным определениям функций. При необходимости он генерирует альтернативные пролог и эпилог, выравнивающие стек во время выполнения. Это позволяет сочетать старый код, работающий с выравниванием стека на 4 байта, с современным кодом, в котором для совместимости с SSE используется выравнивание стека на 16 байт.

stdcall

На целевых платформах x86-32 атрибут stdcall заставляет компилятор предполагать, что вызываемая функция удаляет из стека область, использованную для передачи аргументов, если только она не принимает переменное число аргументов.

no_callee_saved_registers

Используйте этот атрибут, чтобы указать, что у заданной функции нет регистров, сохраняемых вызываемой функцией. То есть все регистры можно использовать как временные. Например, этот атрибут можно использовать для функции, вызываемой из ассемблерной заглушки обработчика прерываний, которая сохраняет все регистры и возвращается из прерывания.

no_caller_saved_registers

Используйте этот атрибут, чтобы указать, что у заданной функции нет регистров, сохраняемых вызывающей функцией. То есть все регистры сохраняются вызываемой функцией. Например, этот атрибут можно использовать для функции, вызываемой из обработчика прерываний. Компилятор генерирует корректные последовательности входа в функцию и выхода из нее для сохранения и восстановления всех измененных регистров, кроме регистра EFLAGS. Поскольку GCC не сохраняет состояние SSE, MMX и x87, для компиляции функций с атрибутом no_caller_saved_registers следует использовать параметр GCC -mgeneral-regs-only.

interrupt

Используйте этот атрибут, чтобы указать, что заданная функция является обработчиком прерывания или обработчиком исключения (в зависимости от переданных функции параметров, которые описаны далее). При наличии этого атрибута компилятор генерирует последовательности входа в функцию и выхода из нее, подходящие для использования в обработчике прерываний. Для возврата из обработчиков прерываний используется инструкция IRET вместо инструкции RET. Компилятор сохраняет все регистры, кроме регистра EFLAGS, который восстанавливается инструкцией IRET. Поскольку GCC не сохраняет состояние SSE, MMX и x87, для компиляции обработчиков прерываний и исключений следует использовать параметр GCC -mgeneral-regs-only.

Весь код, который может быть прерван без переключения стека, необходимо компилировать с параметром -mno-red-zone, поскольку из-за особенностей аппаратной реализации обработчики прерываний могут обращаться к красной зоне и будут это делать.

Обработчик прерывания необходимо объявить с обязательным аргументом-указателем:

struct interrupt_frame;

__attribute__ ((interrupt))
void
f (struct interrupt_frame *frame)
{
}

Кроме того, необходимо определить struct interrupt_frame, как описано в руководстве по процессору.

Обработчики исключений отличаются от обработчиков прерываний тем, что система помещает в стек код ошибки. Объявление обработчика исключения аналогично объявлению обработчика прерывания, но имеет другую обязательную сигнатуру функции. Компилятор обеспечивает удаление кода ошибки из стека перед инструкцией IRET.

#ifdef __x86_64__
typedef unsigned long long int uword_t;
#else
typedef unsigned int uword_t;
#endif

struct interrupt_frame;

__attribute__ ((interrupt))
void
f (struct interrupt_frame *frame, uword_t error_code)
{
  ...
}

Обработчики исключений следует использовать только для исключений, которые помещают код ошибки в стек; во всех остальных случаях следует использовать обработчик прерывания. Если использовать обработчик неподходящего типа, произойдет сбой системы.

target (options)

Как описано в разделе Общие атрибуты функций, этот атрибут позволяет указывать параметры компиляции, специфичные для целевой платформы.

На x86 допустимы следующие параметры:

‘3dnow’
‘no-3dnow’

Включить или отключить генерацию инструкций 3DNow!.

‘3dnowa’
‘no-3dnowa’

Включить или отключить генерацию расширенных инструкций 3DNow!.

‘abm’
‘no-abm’

Включить или отключить генерацию инструкций расширенных битовых операций.

‘adx’
‘no-adx’

Включить или отключить генерацию инструкций ADX.

‘aes’
‘no-aes’

Включить или отключить генерацию инструкций AES.

‘avx’
‘no-avx’

Включить или отключить генерацию инструкций AVX.

‘avx2’
‘no-avx2’

Включить или отключить генерацию инструкций AVX2.

‘avx5124fmaps’
‘no-avx5124fmaps’

Включить или отключить генерацию инструкций AVX5124FMAPS.

‘avx5124vnniw’
‘no-avx5124vnniw’

Включить или отключить генерацию инструкций AVX5124VNNIW.

‘avx512bitalg’
‘no-avx512bitalg’

Включить или отключить генерацию инструкций AVX512BITALG.

‘avx512bw’
‘no-avx512bw’

Включить или отключить генерацию инструкций AVX512BW.

‘avx512cd’
‘no-avx512cd’

Включить или отключить генерацию инструкций AVX512CD.

‘avx512dq’
‘no-avx512dq’

Включить или отключить генерацию инструкций AVX512DQ.

‘avx512er’
‘no-avx512er’

Включить или отключить генерацию инструкций AVX512ER.

‘avx512f’
‘no-avx512f’

Включить или отключить генерацию инструкций AVX512F.

‘avx512ifma’
‘no-avx512ifma’

Включить или отключить генерацию инструкций AVX512IFMA.

‘avx512pf’
‘no-avx512pf’

Включить или отключить генерацию инструкций AVX512PF.

‘avx512vbmi’
‘no-avx512vbmi’

Включить или отключить генерацию инструкций AVX512VBMI.

‘avx512vbmi2’
‘no-avx512vbmi2’

Включить или отключить генерацию инструкций AVX512VBMI2.

‘avx512vl’
‘no-avx512vl’

Включить или отключить генерацию инструкций AVX512VL.

‘avx512vnni’
‘no-avx512vnni’

Включить или отключить генерацию инструкций AVX512VNNI.

‘avx512vpopcntdq’
‘no-avx512vpopcntdq’

Включить или отключить генерацию инструкций AVX512VPOPCNTDQ.

‘bmi’
‘no-bmi’

Включить или отключить генерацию инструкций BMI.

‘bmi2’
‘no-bmi2’

Включить или отключить генерацию инструкций BMI2.

‘cldemote’
‘no-cldemote’

Включить или отключить генерацию инструкций CLDEMOTE.

‘clflushopt’
‘no-clflushopt’

Включить или отключить генерацию инструкций CLFLUSHOPT.

‘clwb’
‘no-clwb’

Включить или отключить генерацию инструкций CLWB.

‘clzero’
‘no-clzero’

Включить или отключить генерацию инструкций CLZERO.

‘crc32’
‘no-crc32’

Включить или отключить генерацию инструкций CRC32.

‘cx16’
‘no-cx16’

Включить или отключить генерацию инструкций CMPXCHG16B.

‘default’

См. раздел Многоверсионность функций, где этот параметр используется для задания версии функции по умолчанию.

‘f16c’
‘no-f16c’

Включить или отключить генерацию инструкций F16C.

‘fma’
‘no-fma’

Включить или отключить генерацию инструкций FMA.

‘fma4’
‘no-fma4’

Включить или отключить генерацию инструкций FMA4.

‘fsgsbase’
‘no-fsgsbase’

Включить или отключить генерацию инструкций FSGSBASE.

‘fxsr’
‘no-fxsr’

Включить или отключить генерацию инструкций FXSR.

‘gfni’
‘no-gfni’

Включить или отключить генерацию инструкций GFNI.

‘hle’
‘no-hle’

Включить или отключить генерацию префиксов инструкций HLE.

‘lwp’
‘no-lwp’

Включить или отключить генерацию инструкций LWP.

‘lzcnt’
‘no-lzcnt’

Включить или отключить генерацию инструкций LZCNT.

‘mmx’
‘no-mmx’

Включить или отключить генерацию инструкций MMX.

‘movbe’
‘no-movbe’

Включить или отключить генерацию инструкций MOVBE.

‘movdir64b’
‘no-movdir64b’

Включить или отключить генерацию инструкций MOVDIR64B.

‘movdiri’
‘no-movdiri’

Включить или отключить генерацию инструкций MOVDIRI.

‘mwait’
‘no-mwait’

Включить или отключить генерацию инструкций MWAIT и MONITOR.

‘mwaitx’
‘no-mwaitx’

Включить или отключить генерацию инструкций MWAITX.

‘pclmul’
‘no-pclmul’

Включить или отключить генерацию инструкций PCLMUL.

‘pconfig’
‘no-pconfig’

Включить или отключить генерацию инструкций PCONFIG.

‘pku’
‘no-pku’

Включить или отключить генерацию инструкций PKU.

‘popcnt’
‘no-popcnt’

Включить или отключить генерацию инструкции POPCNT.

‘prefetchwt1’
‘no-prefetchwt1’

Включить или отключить генерацию инструкций PREFETCHWT1.

‘prfchw’
‘no-prfchw’

Включить или отключить генерацию инструкции PREFETCHW.

‘ptwrite’
‘no-ptwrite’

Включить или отключить генерацию инструкций PTWRITE.

‘rdpid’
‘no-rdpid’

Включить или отключить генерацию инструкций RDPID.

‘rdrnd’
‘no-rdrnd’

Включить или отключить генерацию инструкций RDRND.

‘rdseed’
‘no-rdseed’

Включить или отключить генерацию инструкций RDSEED.

‘rtm’
‘no-rtm’

Включить или отключить генерацию инструкций RTM.

‘sahf’
‘no-sahf’

Включить или отключить генерацию инструкций SAHF.

‘sgx’
‘no-sgx’

Включить или отключить генерацию инструкций SGX.

‘sha’
‘no-sha’

Включить или отключить генерацию инструкций SHA.

‘shstk’
‘no-shstk’

Включить или отключить встроенные функции теневого стека из CET.

‘sse’
‘no-sse’

Включить или отключить генерацию инструкций SSE.

‘sse2’
‘no-sse2’

Включить или отключить генерацию инструкций SSE2.

‘sse3’
‘no-sse3’

Включить или отключить генерацию инструкций SSE3.

‘sse4’
‘no-sse4’

Включить или отключить генерацию инструкций SSE4 (SSE4.1 и SSE4.2).

‘sse4.1’
‘no-sse4.1’

Включить или отключить генерацию инструкций SSE4.1.

‘sse4.2’
‘no-sse4.2’

Включить или отключить генерацию инструкций SSE4.2.

‘sse4a’
‘no-sse4a’

Включить или отключить генерацию инструкций SSE4A.

‘ssse3’
‘no-ssse3’

Включить или отключить генерацию инструкций SSSE3.

‘tbm’
‘no-tbm’

Включить или отключить генерацию инструкций TBM.

‘vaes’
‘no-vaes’

Включить или отключить генерацию инструкций VAES.

‘vpclmulqdq’
‘no-vpclmulqdq’

Включить или отключить генерацию инструкций VPCLMULQDQ.

‘waitpkg’
‘no-waitpkg’

Включить или отключить генерацию инструкций WAITPKG.

‘wbnoinvd’
‘no-wbnoinvd’

Включить или отключить генерацию инструкций WBNOINVD.

‘xop’
‘no-xop’

Включить или отключить генерацию инструкций XOP.

‘xsave’
‘no-xsave’

Включить или отключить генерацию инструкций XSAVE.

‘xsavec’
‘no-xsavec’

Включить или отключить генерацию инструкций XSAVEC.

‘xsaveopt’
‘no-xsaveopt’

Включить или отключить генерацию инструкций XSAVEOPT.

‘xsaves’
‘no-xsaves’

Включить или отключить генерацию инструкций XSAVES.

‘amx-tile’
‘no-amx-tile’

Включить или отключить генерацию инструкций AMX-TILE.

‘amx-int8’
‘no-amx-int8’

Включить или отключить генерацию инструкций AMX-INT8.

‘amx-bf16’
‘no-amx-bf16’

Включить или отключить генерацию инструкций AMX-BF16.

‘uintr’
‘no-uintr’

Включить или отключить генерацию инструкций UINTR.

‘hreset’
‘no-hreset’

Включить или отключить генерацию инструкции HRESET.

‘kl’
‘no-kl’

Включить или отключить генерацию инструкций KEYLOCKER.

‘widekl’
‘no-widekl’

Включить или отключить генерацию инструкций WIDEKL.

‘avxvnni’
‘no-avxvnni’

Включить или отключить генерацию инструкций AVXVNNI.

‘avxifma’
‘no-avxifma’

Включить или отключить генерацию инструкций AVXIFMA.

‘avxvnniint8’
‘no-avxvnniint8’

Включить или отключить генерацию инструкций AVXVNNIINT8.

‘avxneconvert’
‘no-avxneconvert’

Включить или отключить генерацию инструкций AVXNECONVERT.

‘cmpccxadd’
‘no-cmpccxadd’

Включить или отключить генерацию инструкций CMPccXADD.

‘amx-fp16’
‘no-amx-fp16’

Включить или отключить генерацию инструкций AMX-FP16.

‘prefetchi’
‘no-prefetchi’

Включить или отключить генерацию инструкций PREFETCHI.

‘raoint’
‘no-raoint’

Включить или отключить генерацию инструкций RAOINT.

‘amx-complex’
‘no-amx-complex’

Включить или отключить генерацию инструкций AMX-COMPLEX.

‘avxvnniint16’
‘no-avxvnniint16’

Включить или отключить генерацию инструкций AVXVNNIINT16.

‘sm3’
‘no-sm3’

Включить или отключить генерацию инструкций SM3.

‘sha512’
‘no-sha512’

Включить или отключить генерацию инструкций SHA512.

‘sm4’
‘no-sm4’

Включить или отключить генерацию инструкций SM4.

‘usermsr’
‘no-usermsr’

Включить или отключить генерацию инструкций USER_MSR.

‘apxf’
‘no-apxf’

Включить или отключить генерацию возможностей APX, включая EGPR, PUSH2POP2, NDD и PPX.

‘avx10.1-256’
‘no-avx10.1-256’

Включить генерацию инструкций AVX10.1 с поддержкой 256 бит. Отключить генерацию инструкций AVX10.1.

‘avx10.1-512’
‘no-avx10.1-512’

Включить генерацию инструкций AVX10.1 с поддержкой 512 бит. Отключить генерацию инструкций AVX10.1.

‘avx10.1’
‘no-avx10.1’

Включить генерацию инструкций AVX10.1 с поддержкой 512 бит. Отключить генерацию инструкций AVX10.1.

‘cld’
‘no-cld’

Включить или отключить генерацию инструкции CLD перед операциями перемещения строк.

‘fancy-math-387’
‘no-fancy-math-387’

Включить или отключить генерацию инструкций sin, cos и sqrt для блока операций с плавающей точкой 387.

‘ieee-fp’
‘no-ieee-fp’

Включить или отключить генерацию операций с плавающей точкой, зависящих от арифметики IEEE.

‘inline-all-stringops’
‘no-inline-all-stringops’

Включить или отключить встраивание операций со строками.

‘inline-stringops-dynamically’
‘no-inline-stringops-dynamically’

Включить или отключить генерацию встроенного кода для выполнения коротких операций со строками и вызовов библиотечных функций для длинных операций.

‘align-stringops’
‘no-align-stringops’

Выравнивать или не выравнивать адрес назначения для встроенных операций со строками.

‘recip’
‘no-recip’

Включить или отключить генерацию инструкций RCPSS, RCPPS, RSQRTSS и RSQRTPS с последующим дополнительным шагом Ньютона — Рафсона вместо выполнения деления с плавающей точкой.

‘general-regs-only’

Генерировать код, использующий только регистры общего назначения.

‘arch=ARCH’

Указать архитектуру, для которой следует генерировать код при компиляции функции.

‘tune=TUNE’

Указать архитектуру, под которую следует оптимизировать код при компиляции функции.

‘fpmath=FPMATH’

Указать, какое устройство для операций с плавающей точкой использовать. Параметр target("fpmath=sse,387") необходимо указать как target("fpmath=sse+387"), поскольку запятая разделяет разные параметры.

‘prefer-vector-width=OPT’

На целевых платформах x86 атрибут prefer-vector-width указывает компилятору использовать в инструкциях векторную разрядность OPT бит вместо значения по умолчанию для выбранной платформы.

Допустимые значения OPT:

‘none’

Не накладывать на GCC дополнительных ограничений сверх тех, которые заданы выбранной платформой.

‘128’

Предпочитать для инструкций векторную разрядность 128 бит.

‘256’

Предпочитать для инструкций векторную разрядность 256 бит.

‘512’

Предпочитать для инструкций векторную разрядность 512 бит.

indirect_branch("choice")

На целевых платформах x86 атрибут indirect_branch заставляет компилятор преобразовывать косвенный вызов и переход в соответствии с choice. ‘keep’ оставляет косвенный вызов и переход без изменений. ‘thunk’ преобразует косвенный вызов и переход в вызов и возврат через трамплин. ‘thunk-inline’ преобразует косвенный вызов и переход во встроенный вызов и возврат через трамплин. ‘thunk-extern’ преобразует косвенный вызов и переход во внешний вызов и возврат через трамплин, предоставленный в отдельном объектном файле.

function_return("choice")

На целевых платформах x86 атрибут function_return заставляет компилятор преобразовывать возврат из функции в соответствии с choice. ‘keep’ оставляет возврат из функции без изменений. ‘thunk’ преобразует возврат из функции в вызов и возврат через трамплин. ‘thunk-inline’ преобразует возврат из функции во встроенный вызов и возврат через трамплин. ‘thunk-extern’ преобразует возврат из функции во внешний вызов и возврат через трамплин, предоставленный в отдельном объектном файле.

nocf_check

Атрибут nocf_check функции используется для уведомления компилятора о том, что пролог функции не следует инструментировать при компиляции с параметром -fcf-protection=branch. Компилятор предполагает, что адрес функции является допустимой целью передачи управления.

Атрибут nocf_check типа указателя на функцию используется для уведомления компилятора о том, что вызов через указатель не следует инструментировать при компиляции с параметром -fcf-protection=branch. Компилятор предполагает, что адрес функции, полученный из указателя, является допустимой целью передачи управления. Предполагается, что прямой вызов функции по её имени безопасен, поэтому компилятор не инструментирует прямые вызовы.

Атрибут nocf_check применяется к типу объекта. При присваивании адреса функции или указателя на функцию другому указателю атрибут не переносится из типа объекта в правой части выражения; тип объекта в левой части остаётся неизменным. Компилятор проверяет несовпадение атрибута nocf_check и выдаёт предупреждение при несовпадении.

{
int foo (void) __attribute__(nocf_check);
void (*foo1)(void) __attribute__(nocf_check);
void (*foo2)(void);

/* foo's address is assumed to be valid.  */
int
foo (void) 

  /* This call site is not checked for control-flow 
     validity.  */
  (*foo1)();

  /* A warning is issued about attribute mismatch.  */
  foo1 = foo2; 

  /* This call site is still not checked.  */
  (*foo1)();

  /* This call site is checked.  */
  (*foo2)();

  /* A warning is issued about attribute mismatch.  */
  foo2 = foo1; 

  /* This call site is still checked.  */
  (*foo2)();

  return 0;
}
cf_check

Атрибут cf_check функции используется для уведомления компилятора о том, что при включённом параметре -fcf-protection=branch в точке входа функции следует разместить инструкцию ENDBR.

indirect_return

Атрибут indirect_return можно применять к функции, а также к переменной или типу указателя на функцию, чтобы уведомить компилятор о том, что функция может возвращать управление посредством косвенного перехода.

fentry_name("name")

На целевых платформах x86 атрибут fentry_name задаёт функцию, вызываемую при входе в функцию, когда включена инструментализация функций с параметрами -pg -mfentry. Если name равно nop, генерируется последовательность из 5 байтов nop.

fentry_section("name")

На целевых платформах x86 атрибут fentry_section задаёт имя секции, в которой записываются вызовы инструментализации при входе в функцию, если она включена параметрами -pg -mrecord-mcount

nodirect_extern_access

Этот атрибут, применяемый к глобальной переменной или функции, является аналогом параметра -mno-direct-extern-access.

  • Правила встраивания

6.33.33.1 Правила встраивания

На x86 встраиватель не встраивает функцию, у которой параметры целевой архитектуры отличаются от параметров вызывающей функции, если только вызываемая функция не использует подмножество параметров целевой архитектуры вызывающей функции. Например, функция, объявленная с target("sse3"), может встроить функцию с target("sse2"), поскольку -msse3 подразумевает -msse2.

Помимо основного правила, если функция задаёт атрибут target("arch=ARCH") или target("tune=TUNE"), правило встраивания будет иным. Оно разрешает встраивание функции с параметрами по умолчанию -march=x86-64 и -mtune=generic или функции, использующей подмножество возможностей ISA и помеченной атрибутом always_inline.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-14.4.0/gcc/x86-Function-Attributes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API