Есть файл с обработчиками прерываний. Все функции определены с атрибутом [[gnu::interrupt]]
. Если глобально отключить генерирование fpu387 и SSE команд, то всё компилируется. Если же разрешить использование fpu387 и/или SSE, то возникает ошибка
sorry, unimplemented: MMX/3Dnow instructions aren't allowed in interrupt
.
С SSE вопрос решается прагмой: #pragma GCC target "no-mmx,no-sse"
Но это не работает в отношении 80387:
sorry, unimplemented: 80387 instructions aren't allowed in interrupt service routine
Искал в поисковиках, но не нашёл решения как указать на то, что в данном файле вообще вещественные числа не используются.
В инструкции к GCC про отключение кода fpu387 только в параметрах компилятора (-mno-80387
), то есть глобально.
Как вариант: выключил глобально. Включаю в общем заголовочном файле прагмой: #pragma GCC target("sse")
В файле указываю #pragma GCC target("no-sse")
. Результат:
sorry, unimplemented: SSE instructions aren't allowed in interrupt service routine'
То есть прагма была успешно проигнорирована.
Пример кода (это только пример!) https://godbolt.org/z/kLVdWE
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пытаюсь реализовать мягкие тени, как y Inigo Quilez (живой пример на shadertoy)