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

это и сейчас проблема, на самом деле. если я верню помню, именно поэтому стандартный CP2 заново инициализирует FPU после каждого обращения к внешней библиотеке (что я в LC отрезал). тормоза-с адовые.

короче, красивого и правильного решения у проблемы FPU нет. можно, конечно, сменить слово инициализации (кажется, где-то в Kernel; и не забыть проверить CP2 — там, по-моему, тоже забито волшебное число) — и это проблему спрячет.

более лучший вариант решения — перестать использовать FPU, и обучить кодоген использовать SSE.

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

и в любом случае утешиться тем, что FPU — это была общая боль, не специфичная для оберона. компиляторы си тоже насильно скидывали результат в память, чтобы округлить, например.

ещё хороший вариант — последовать заветам Чака Мура: забить на floating point и использовать fixed point. но ни в коем случае не с LONGINT, потому что для лонгинтов CP2 использует FPU. floating point is overrated.