Rev. 1.50, 10/04, page 370 of 448
Operation:
void FCMP_EQ(int m,n) /* FCMP/EQ FRm,FRn */
{
pc += 2;
clear_cause();
if(fcmp_chk(m,n) == INVALID) fcmp_invalid();
else if(fcmp_chk(m,n) == EQ) T = 1;
else T = 0;
}
void FCMP_GT(int m,n) /* FCMP/GT FRm,FRn */
{
pc += 2;
clear_cause();
if ((fcmp_chk(m,n) == INVALID) ||
(fcmp_chk(m,n) == UO)) fcmp_invalid();
else if(fcmp_chk(m,n) == GT) T = 1;
else T = 0;
}
int fcmp_chk (int m,n)
{
if((data_type_of(m) == sNaN) ||
(data_type_of(n) == sNaN)) return(INVALID);
else if((data_type_of(m) == qNaN) ||
(data_type_of(n) == qNaN)) return(UO);
else switch(data_type_of(m)){
case NORM: switch(data_type_of(n)){
case PINF :return(GT); break;
case NINF :return(LT); break;
default: break;
} break;
case PZERO:
case NZERO: switch(data_type_of(n)){
case PZERO :
case NZERO :return(EQ); break;
default: break;
} break;