This patch series fixes a number of minor bugs in the ARM target where we were not correctly setting the cumulative exception flags in the FPSCR. It includes adding a new flag to softfloat indicating when a denormal result has been flushed to zero (as discussed previously on the list.)
Tested with the usual random instruction sequence testing (covering all the neon and vfp data processing instructions which can set FPSCR exception flags). These patches fix all the FPSCR flags bugs I found, with the exception of those in the VCVT float-int and float32-float16 conversion routines, which are a bit trickier to fix because they are bugs in softfloat rather than merely in the arm helper functions. v1->v2 changes: patches 1,2,3,4,5 are unchanged (v2 patches 4,5 are v1's 6 and 7) v2 patch 6 replaces the v1 patches 4,5, and makes the int-float conversion helpers take just a pointer to the correct fp_status rather than an entire CPUState pointer, as suggested by Paul Brook. Peter Maydell (6): target-arm: Don't set FP exceptions in recip, recip_sqrt estimate fns target-arm: Signal InputDenormal for VRECPE, VRSQRTE, VRECPS, VRSQRTS target-arm: Signal InvalidOp for Neon GE and GT compares of QNaN softfloat: Add new flag for when denormal result is flushed to zero target-arm: Signal Underflow when denormal flushed to zero on output target-arm: Use correct float status for Neon int-float conversions fpu/softfloat.c | 41 ++++++++++-- fpu/softfloat.h | 3 +- target-arm/helper.c | 158 +++++++++++++++++---------------------------- target-arm/helper.h | 60 +++++++++--------- target-arm/neon_helper.c | 40 +++++------- target-arm/translate.c | 148 +++++++++++++++++++++++-------------------- 6 files changed, 223 insertions(+), 227 deletions(-)