1 /* $Id: fcmpq.c,v 1.5 1999/05/28 13:43:33 jj Exp $
2 * arch/sparc64/math-emu/fcmpq.c
4 * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
5 * Copyright (C) 1999 David S. Miller (davem@redhat.com)
13 int FCMPQ(void *rd
, void *rs2
, void *rs1
)
16 FP_DECL_Q(A
); FP_DECL_Q(B
);
18 long fccno
= (long)rd
;
21 FP_UNPACK_RAW_QP(A
, rs1
);
22 FP_UNPACK_RAW_QP(B
, rs2
);
23 FP_CMP_Q(ret
, B
, A
, 3);
24 if (ret
== 3 && (FP_ISSIGNAN_Q(A
) || FP_ISSIGNAN_Q(B
)))
25 FP_SET_EXCEPTION(FP_EX_INVALID
);
26 if (!FP_INHIBIT_RESULTS
) {
27 rd
= (void *)(((long)rd
)&~3);
28 if (ret
== -1) ret
= 2;
29 fsr
= current
->tss
.xfsr
[0];
31 case 0: fsr
&= ~0xc00; fsr
|= (ret
<< 10); break;
32 case 1: fsr
&= ~0x300000000UL
; fsr
|= (ret
<< 32); break;
33 case 2: fsr
&= ~0xc00000000UL
; fsr
|= (ret
<< 34); break;
34 case 3: fsr
&= ~0x3000000000UL
; fsr
|= (ret
<< 36); break;
36 current
->tss
.xfsr
[0] = fsr
;