@@ -2239,9 +2239,8 @@ riscv_emit_float_compare (enum rtx_code *code, rtx *op0, rtx *op1)
break;
case UNEQ:
- case LTGT:
/* ordered(a, b) > (a == b) */
- *code = fp_code == LTGT ? GTU : EQ;
+ *code = EQ;
tmp0 = riscv_force_binary (word_mode, EQ, cmp_op0, cmp_op0);
tmp1 = riscv_force_binary (word_mode, EQ, cmp_op1, cmp_op1);
*op0 = riscv_force_binary (word_mode, AND, tmp0, tmp1);
@@ -2293,6 +2292,13 @@ riscv_emit_float_compare (enum rtx_code *code, rtx *op0, rtx *op1)
*op1 = const0_rtx;
break;
+ case LTGT:
+ /* (a < b) | (a > b) */
+ *code = IOR;
+ *op0 = riscv_force_binary (word_mode, LT, cmp_op0, cmp_op1);
+ *op1 = riscv_force_binary (word_mode, GT, cmp_op0, cmp_op1);
+ break;
+
default:
gcc_unreachable ();
}