По-видимому, он написан на ассемблере. В основном это делается в три этапа:
- Изменить режим округления на «округление»
- округление до целого числа (FRNDINT)
- восстановить предыдущий режим округления.
К сожалению, код для изменения режима округления довольно уродлив. Режим округления составляет несколько бит в регистре управления с плавающей запятой. Вы не можете изменить FPCR внутри FPU, поэтому вам нужно сохранить его, затем загрузить в регистр на CPU, изменить некоторые биты, сохранить их и загрузить измененную версию обратно в FPU. Затем вы выполняете одну инструкцию FP и делаете то же самое снова, но в обратном порядке.
Мне кажется, что я вспоминаю, как некоторые из литературы Intel много лет назад говорили об этом и (возможно) говорили о лучшем способе справиться с этим - но я мог бы вообразить это, и даже если это не так, я не не помню, как работала их улучшенная версия.