On 11/18/21 2:25 PM, Lucas Mateus Castro (alqotel) wrote:
+ if ((fpscr & FP_VXSOFT) && (fpscr_ve != 0)) {
+ error = POWERPC_EXCP_FP_VXSOFT;
+ } else if ((fpscr & FP_OX) && (fpscr & FP_OE)) {
+ error = POWERPC_EXCP_FP_OX;
+ } else if ((fpscr & FP_UX) && (fpscr & FP_UE)) {
+ error = POWERPC_EXCP_FP_UX;
+ } else if ((fpscr & FP_XX) && (fpscr & FP_XE)) {
+ error = POWERPC_EXCP_FP_XX;
+ } else if ((fpscr & FP_ZX) && (fpscr & FP_ZE)) {
+ error = POWERPC_EXCP_FP_ZX;
+ } else if ((fpscr & FP_VXSNAN) && (fpscr_ve != 0)) {
+ error = POWERPC_EXCP_FP_VXSNAN;
+ } else if ((fpscr & FP_VXISI) && (fpscr_ve != 0)) {
+ error = POWERPC_EXCP_FP_VXISI;
+ } else if ((fpscr & FP_VXIDI) && (fpscr_ve != 0)) {
+ error = POWERPC_EXCP_FP_VXIDI;
+ } else if ((fpscr & FP_VXZDZ) && (fpscr_ve != 0)) {
+ error = POWERPC_EXCP_FP_VXZDZ;
+ } else if ((fpscr & FP_VXIMZ) && (fpscr_ve != 0)) {
+ error = POWERPC_EXCP_FP_VXIMZ;
+ } else if ((fpscr & FP_VXVC) && (fpscr_ve != 0)) {
+ error = POWERPC_EXCP_FP_VXVC;
+ }
Is there a defined order for these in the manual? I couldn't find it quickly
if so. If there is no defined order, I think you should test VE only once.
Drop the use of fpscr_ve and use fpscr & FP_VE instead. (I think these hidden
uses of *env are evil and should be banished, but that's a bit of a job.)