Как отключить fpu в прерываниях?

111
15 сентября 2019, 16:40

Есть файл с обработчиками прерываний. Все функции определены с атрибутом [[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

READ ALSO
Компьютерная графика, мягкие тени, Nvidia OptiX

Компьютерная графика, мягкие тени, Nvidia OptiX

Пытаюсь реализовать мягкие тени, как y Inigo Quilez (живой пример на shadertoy)

109
Ошибка при сборке boost

Ошибка при сборке boost

Выполнил/b2 installи в конце помимо всего прочего вывелось:

130
Зачем нужна эквивалентность?

Зачем нужна эквивалентность?

Есть равенство (equality) ==

132
Почему не видно класс?

Почему не видно класс?

Вот есть ссылка

211