Import 2.3.16pre1
[davej-history.git] / arch / sparc / math-emu / fcmpd.c
blob05a460eeeaf651236e3a2998ab08dad1a78ef1f8
1 /* $Id: fcmpd.c,v 1.8 1999/05/28 13:41:36 jj Exp $
2 * arch/sparc/math-emu/fcmpd.c
4 * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
5 * Copyright (C) 1998 Peter Maydell (pmaydell@chiark.greenend.org.uk)
7 */
9 #include "sfp-util.h"
10 #include "soft-fp.h"
11 #include "double.h"
13 int FCMPD(void *rd, void *rs2, void *rs1)
15 FP_DECL_EX;
16 FP_DECL_D(A); FP_DECL_D(B);
17 long ret;
18 unsigned long fsr;
20 FP_UNPACK_RAW_DP(A, rs1);
21 FP_UNPACK_RAW_DP(B, rs2);
22 FP_CMP_D(ret, B, A, 3);
23 if (ret == 3 && (FP_ISSIGNAN_D(A) || FP_ISSIGNAN_D(B)))
24 FP_SET_EXCEPTION(FP_EX_INVALID);
25 if (!FP_INHIBIT_RESULTS) {
26 if (ret == -1) ret = 2;
27 fsr = *(long *)rd;
28 fsr &= ~0xc00;
29 fsr |= (ret << 10);
30 *(long *)rd = fsr;
32 FP_HANDLE_EXCEPTIONS;