crt: arm: Make nearbyint* just call rint*, with backup/restore of float environment flags

Signed-off-by: Martin Storsjö <martin@martin.st>
diff --git a/mingw-w64-crt/math/arm/nearbyint.S b/mingw-w64-crt/math/arm/nearbyint.S
index dc66a97..4754d9d 100644
--- a/mingw-w64-crt/math/arm/nearbyint.S
+++ b/mingw-w64-crt/math/arm/nearbyint.S
@@ -11,15 +11,8 @@
 	.globl __MINGW_USYMBOL(nearbyint)
 	.def	__MINGW_USYMBOL(nearbyint);	.scl	2;	.type	32;	.endef
 __MINGW_USYMBOL(nearbyint):
-	vmov	r2, r3, d0
-	lsr		r3, r3, #20
-	bic		r3, r3, #0x800
-	movw	r2, #0x7ff
-	cmp		r2, r3 /* Check for INF/NAN, just return the input in those cases */
-	it		eq
-	bxeq	lr
-	vmrs	r1, fpscr
-	vcvtr.s32.f64	s0, d0
-	vcvt.f64.s32	d0, s0
-	vmsr	fpscr, r1
-	bx	lr
+	push	{r4, lr}
+	vmrs	r4, fpscr
+	bl	rint
+	vmsr	fpscr, r4
+	pop	{r4, pc}
diff --git a/mingw-w64-crt/math/arm/nearbyintf.S b/mingw-w64-crt/math/arm/nearbyintf.S
index b880c71..00236ce 100644
--- a/mingw-w64-crt/math/arm/nearbyintf.S
+++ b/mingw-w64-crt/math/arm/nearbyintf.S
@@ -11,15 +11,8 @@
 	.globl __MINGW_USYMBOL(nearbyintf)
 	.def	__MINGW_USYMBOL(nearbyintf);	.scl	2;	.type	32;	.endef
 __MINGW_USYMBOL(nearbyintf):
-	vmov	r2, r3, d0
-	lsr		r3, r3, #20
-	bic		r3, r3, #0x800
-	movw	r2, #0x7ff
-	cmp		r2, r3 /* Check for INF/NAN, just return the input in those cases */
-	it		eq
-	bxeq	lr
-	vmrs	r1, fpscr
-	vcvtr.s32.f32	s0, s0
-	vcvt.f32.s32	s0, s0
-	vmsr	fpscr, r1
-	bx	lr
+	push	{r4, lr}
+	vmrs	r4, fpscr
+	bl	rintf
+	vmsr	fpscr, r4
+	pop	{r4, pc}
diff --git a/mingw-w64-crt/math/arm/nearbyintl.S b/mingw-w64-crt/math/arm/nearbyintl.S
index bceda5e..a552d14 100644
--- a/mingw-w64-crt/math/arm/nearbyintl.S
+++ b/mingw-w64-crt/math/arm/nearbyintl.S
@@ -11,15 +11,8 @@
 	.globl __MINGW_USYMBOL(nearbyintl)
 	.def	__MINGW_USYMBOL(nearbyintl);	.scl	2;	.type	32;	.endef
 __MINGW_USYMBOL(nearbyintl):
-	vmov	r2, r3, d0
-	lsr		r3, r3, #20
-	bic		r3, r3, #0x800
-	movw	r2, #0x7ff
-	cmp		r2, r3 /* Check for INF/NAN, just return the input in those cases */
-	it		eq
-	bxeq	lr
-	vmrs	r1, fpscr
-	vcvtr.s32.f64	s0, d0
-	vcvt.f64.s32	d0, s0
-	vmsr	fpscr, r1
-	bx	lr
+	push	{r4, lr}
+	vmrs	r4, fpscr
+	bl	rintl
+	vmsr	fpscr, r4
+	pop	{r4, pc}