fpcmp 操作 字型慣例
if (PR[qp]) {
fp_check_target_register;
if (tmp_isrcode = fp_reg_disabled(f1, f2,f3, 0))
disabled_fp_register_fault(tmp_isrcode, 0);
if (fp_is_natval([f2]) || fp_is_natval(FR[f3])) {
FR[f1] = NATVAL;
} else {
fpcmp_exception_fault_check(f2, f3, frel, sf, &tmp_fp_env);
if (fp_raise_fault(tmp_fp_env))
fp_exception_fault(fp_decode_fault(tmp_fp_env));
tmp_fr2 = fp_reg_read_hi(f2);
tmp_fr3 = fp_reg_read_hi(f3);
if (frel == ‘eq') tmp_rel = fp_equal(tmp_fr2, tmp_fr3);
else if (frel == ‘lt') tmp_rel = fp_less_than(tmp_fr2, tmp_fr3);
else if (frel == ‘le') tmp_rel = fp_lesser_or_equal(tmp_fr2, tmp_fr3);
else if (frel == ‘gt') tmp_rel = fp_less_than(tmp_fr3, tmp_fr2);
else if (frel == ‘ge') tmp_rel = fp_lesser_or_equal(tmp_fr3, tmp_fr2);
else if (frel == ‘unord') tmp_rel = fp_unordered(tmp_fr2, tmp_fr3);
else if (frel == ‘neq') tmp_rel = !fp_equal(tmp_fr2, tmp_fr3);
else if (frel == ‘nlt') tmp_rel = !fp_less_than(tmp_fr2, tmp_fr3);
else if (frel == ‘nle') tmp_rel = !fp_lesser_or_equal(tmp_fr2, tmp_fr3);
else if (frel == ‘ngt') tmp_rel = !fp_less_than(tmp_fr3, tmp_fr2);
else if (frel == ‘nge') tmp_rel = !fp_lesser_or_equal(tmp_fr3, tmp_fr2);
else tmp_rel = !fp_unordered(tmp_fr2, tmp_fr3); //‘ord'
tmp_res_hi = (tmp_rel ?0xFFFFFFFF : 0x00000000);
tmp_fr2 = fp_reg_read_lo(f2);
tmp_fr3 = fp_reg_read_lo(f3);
if (frel == ‘eq') tmp_rel = fp_equal(tmp_fr2, tmp_fr3);
else if (frel == ‘lt') tmp_rel = fp_less_than(tmp_fr2, tmp_fr3);
else if (frel == ‘le') tmp_rel = fp_lesser_or_equal(tmp_fr2, tmp_fr3);
else if (frel == ‘gt') tmp_rel = fp_less_than(tmp_fr3, tmp_fr2);
else if (frel == ‘ge') tmp_rel = fp_lesser_or_equal(tmp_fr3, tmp_fr2);
else if (frel == ‘unord') tmp_rel = fp_unordered(tmp_fr2, tmp_fr3);
else if (frel == ‘neq') tmp_rel = !fp_equal(tmp_fr2, tmp_fr3);
else if (frel == ‘nlt') tmp_rel = !fp_less_than(tmp_fr2, tmp_fr3);
else if (frel == ‘nle') tmp_rel = !fp_lesser_or_equal(tmp_fr2, tmp_fr3);
else if (frel == ‘ngt') tmp_rel = !fp_less_than(tmp_fr3, tmp_fr2);
else if (frel == ‘nge') tmp_rel = !fp_lesser_or_equal(tmp_fr3, tmp_fr2);
else tmp_rel = !fp_unordered(tmp_fr2, tmp_fr3); //‘ord'
tmp_res_lo = (tmp_rel ?0xFFFFFFFF : 0x00000000);
FR[f1].significand = fp_concatenate(tmp_res_hi, tmp_res_lo);
FR[f1].exponent = FP_INTEGER_EXP;
FR[f1].sign = FP_SIGN_POSITIVE;
fp_update_fpsr(sf, tmp_fp_env);
}
fp_update_psr(f1);
}