Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1320a80d authored by Catalin Marinas's avatar Catalin Marinas Committed by Russell King
Browse files

[ARM] 3471/1: FTOSI functions should return 0 for NaN



Patch from Catalin Marinas

The NaN case was dealed with by the "exponent >= ... + 32" condition but it
was not setting the value "d" to 0.

Signed-off-by: default avatarKen'ichi Kuromusha <musha@aplix.co.jp>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent adeff422
Loading
Loading
Loading
Loading
+7 −2
Original line number Original line Diff line number Diff line
@@ -588,6 +588,7 @@ static u32 vfp_double_ftosi(int sd, int unused, int dm, u32 fpscr)
	struct vfp_double vdm;
	struct vfp_double vdm;
	u32 d, exceptions = 0;
	u32 d, exceptions = 0;
	int rmode = fpscr & FPSCR_RMODE_MASK;
	int rmode = fpscr & FPSCR_RMODE_MASK;
	int tm;


	vfp_double_unpack(&vdm, vfp_get_double(dm));
	vfp_double_unpack(&vdm, vfp_get_double(dm));
	vfp_double_dump("VDM", &vdm);
	vfp_double_dump("VDM", &vdm);
@@ -595,10 +596,14 @@ static u32 vfp_double_ftosi(int sd, int unused, int dm, u32 fpscr)
	/*
	/*
	 * Do we have denormalised number?
	 * Do we have denormalised number?
	 */
	 */
	if (vfp_double_type(&vdm) & VFP_DENORMAL)
	tm = vfp_double_type(&vdm);
	if (tm & VFP_DENORMAL)
		exceptions |= FPSCR_IDC;
		exceptions |= FPSCR_IDC;


	if (vdm.exponent >= 1023 + 32) {
	if (tm & VFP_NAN) {
		d = 0;
		exceptions |= FPSCR_IOC;
	} else if (vdm.exponent >= 1023 + 32) {
		d = 0x7fffffff;
		d = 0x7fffffff;
		if (vdm.sign)
		if (vdm.sign)
			d = ~d;
			d = ~d;
+6 −1
Original line number Original line Diff line number Diff line
@@ -632,6 +632,7 @@ static u32 vfp_single_ftosi(int sd, int unused, s32 m, u32 fpscr)
	struct vfp_single vsm;
	struct vfp_single vsm;
	u32 d, exceptions = 0;
	u32 d, exceptions = 0;
	int rmode = fpscr & FPSCR_RMODE_MASK;
	int rmode = fpscr & FPSCR_RMODE_MASK;
	int tm;


	vfp_single_unpack(&vsm, m);
	vfp_single_unpack(&vsm, m);
	vfp_single_dump("VSM", &vsm);
	vfp_single_dump("VSM", &vsm);
@@ -639,10 +640,14 @@ static u32 vfp_single_ftosi(int sd, int unused, s32 m, u32 fpscr)
	/*
	/*
	 * Do we have a denormalised number?
	 * Do we have a denormalised number?
	 */
	 */
	tm = vfp_single_type(&vsm);
	if (vfp_single_type(&vsm) & VFP_DENORMAL)
	if (vfp_single_type(&vsm) & VFP_DENORMAL)
		exceptions |= FPSCR_IDC;
		exceptions |= FPSCR_IDC;


	if (vsm.exponent >= 127 + 32) {
	if (tm & VFP_NAN) {
		d = 0;
		exceptions |= FPSCR_IOC;
	} else if (vsm.exponent >= 127 + 32) {
		/*
		/*
		 * m >= 2^31-2^7: invalid
		 * m >= 2^31-2^7: invalid
		 */
		 */