patch-2.3.4 linux/arch/sparc/math-emu/fcmped.c

Next file: linux/arch/sparc/math-emu/fcmpeq.c
Previous file: linux/arch/sparc/math-emu/fcmpd.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.3.3/linux/arch/sparc/math-emu/fcmped.c linux/arch/sparc/math-emu/fcmped.c
@@ -1,18 +1,33 @@
+/* $Id: fcmped.c,v 1.8 1999/05/28 13:41:38 jj Exp $
+ * arch/sparc/math-emu/fcmped.c
+ *
+ * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
+ * Copyright (C) 1998 Peter Maydell (pmaydell@chiark.greenend.org.uk)
+ *
+ */
+
+#include "sfp-util.h"
 #include "soft-fp.h"
 #include "double.h"
 
 int FCMPED(void *rd, void *rs2, void *rs1)
 {
+	FP_DECL_EX;
 	FP_DECL_D(A); FP_DECL_D(B);
 	long ret;
-	unsigned long *fsr = rd;
+	unsigned long fsr;
 	
-	__FP_UNPACK_D(A, rs1);
-	__FP_UNPACK_D(B, rs2);
-	FP_CMP_D(ret, B, A, 2);
-	if (ret == -1)
-		ret = 2;
-
-	*fsr = (*fsr & ~0xc00) | (ret << 10); 
-	return 0;
+	FP_UNPACK_RAW_DP(A, rs1);
+	FP_UNPACK_RAW_DP(B, rs2);
+	FP_CMP_D(ret, B, A, 3);
+	if (ret == 3)
+		FP_SET_EXCEPTION(FP_EX_INVALID);
+	if (!FP_INHIBIT_RESULTS) {
+		if (ret == -1) ret = 2;
+		fsr = *(long *)rd;
+		fsr &= ~0xc00;
+		fsr |= (ret << 10);
+		*(long *)rd = fsr;
+	}
+	FP_HANDLE_EXCEPTIONS;
 }

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)