F-18
GUIDELINES FOR WRITING SIMD FLOATING-POINT EXCEPTION
case SUBSS:
// perform the subtraction
__asm {
fnclex;
// load input operands
fld DWORD PTR opd1; // may set the denormal or invalid status flags
fld DWORD PTR opd2; // may set the denormal or invalid status flags
fsubp st(1), st(0); // may set the inexact or invalid status flags
// store result
fstp QWORD PTR dbl_res24; // exact
}
break;
case MULPS:
case MULSS:
// perform the multiplication
__asm {
fnclex;
// load input operands
fld DWORD PTR opd1; // may set the denormal or invalid status flags
fld DWORD PTR opd2; // may set the denormal or invalid status flags
fmulp st(1), st(0); // may set the inexact or invalid status flags
// store result
fstp QWORD PTR dbl_res24; // exact
}
break;
case DIVPS:
case DIVSS:
// perform the division
__asm {
fnclex;
// load input operands
fld DWORD PTR opd1; // may set the denormal or invalid status flags
fld DWORD PTR opd2; // may set the denormal or invalid status flags
fdivp st(1), st(0); // may set the inexact, divide by zero, or
// invalid status flags
// store result
fstp QWORD PTR dbl_res24; // exact
}
break;
default:
; // will never occur
}