FMUL не очищает переполнение в регистре STATUS
У меня есть этот код Win32:
fld x
fmul y
fstsw ax
Кажется, что fmul
не очищает бит регистров состояния FPU, т.е. если переполнение уже было установлено (ax
& 8) тогда он останется установленным после fmul
, Это правильное поведение? Требуется ли очистить статус после или перед операциями FPU?
Т.е. я полагаю fmul
установит этот бит, но должен ли он сбросить его? Я не мог найти ответ в Интернете.
1 ответ
Вы держите пари, что это правильное поведение.
От 8.1.3.3 x87 FPU Floating-Point Exception Flags
из Intel® 64 and IA-32 Architectures Software Developer’s Manual
, том 1:
Флаги исключения являются "липкими" битами (после установки они остаются установленными, пока не будут явно очищены). Их можно очистить, выполнив инструкции FCLEX/FNCLEX (очистить исключения), повторно инициализировав FPU x87 с помощью команд FINIT/FNINIT или FSAVE/FNSAVE, или переписав флаги инструкцией FRSTOR или FLDENV.
Не требуется сбрасывать эти флаги, если исключения FPU отключены.