From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=54791 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PavjR-0007sU-Bs for qemu-devel@nongnu.org; Thu, 06 Jan 2011 14:43:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pavem-0003Tn-Va for qemu-devel@nongnu.org; Thu, 06 Jan 2011 14:37:57 -0500 Received: from mnementh.archaic.org.uk ([81.2.115.146]:19304) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Pavem-0003TQ-ML for qemu-devel@nongnu.org; Thu, 06 Jan 2011 14:37:56 -0500 Received: from pm215 by mnementh.archaic.org.uk with local (Exim 4.69) (envelope-from ) id 1Pavel-0005NN-1k for qemu-devel@nongnu.org; Thu, 06 Jan 2011 19:37:55 +0000 From: Peter Maydell Date: Thu, 6 Jan 2011 19:37:52 +0000 Message-Id: <1294342675-20643-1-git-send-email-peter.maydell@linaro.org> Subject: [Qemu-devel] [PATCH v2 0/3] ARM/softfloat: support flushing denormals on input List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org On ARM, the FPSCR FZ bit (which controls whether denormals should be flushed to zero) is supposed to cause this flushing to occur both when the output of a calculation is a denormal (already implemented in softfloat) and also when the input to a calculation is a denormal (not implemented, as noted by a FIXME comment). This patchset adds the support to softfloat for flushing denormals on input. This is controlled using a new status flag to enable it (so that CPUs which only flush on output continue to work). There is a new exception status bit to indicate when input flushing has happened (because on ARM it is reported via a different FPSCR bit to that used when an output denormal is flushed to zero). I have deliberately only implemented this for input float32 and float64 values because that is what ARM requires (on ARM float16 inputs must not be flushed to zero and floatx80 and float128 are not used) so other changes would be totally untested code. Existing CPUs should be unaffected as there is no behaviour change unless the mode is enabled. (I suspect that MIPS should be able to use this to implement the FCSR FO bit if desired.) Tested using random instruction generation for vadd/vsub/vmul/vdiv with the FPSCR FZ bit set. The only change from v1 is that I have split the old patch 2/2 into two parts, since it accidentally included a one-liner bugfix where we were setting the softfloat cumulative exception flags wrongly if the FPSCR was written to explicitly. Peter Maydell (3): softfloat: Implement flushing input denormals to zero ARM: Set softfloat cumulative exc flags from correct FPSCR bits ARM: wire up the softfloat flush_input_to_zero flag fpu/softfloat.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++- fpu/softfloat.h | 22 ++++++++++- target-arm/helper.c | 10 ++++- 3 files changed, 131 insertions(+), 5 deletions(-)