aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPan Li <pan2.li@intel.com>2024-07-30 13:56:40 +0800
committerPan Li <pan2.li@intel.com>2024-07-30 14:39:12 +0800
commit85cff6e46d212240f9c15c2d7d614b6089be772a (patch)
treefd786fdc61f48f2a7678f391299475d8ff235fcd /gcc
parentc1d35de0d94d43b9976aff44001dadd4dd42b7ae (diff)
downloadgcc-85cff6e46d212240f9c15c2d7d614b6089be772a.zip
gcc-85cff6e46d212240f9c15c2d7d614b6089be772a.tar.gz
gcc-85cff6e46d212240f9c15c2d7d614b6089be772a.tar.bz2
RISC-V: Take Xmode instead of Pmode for ussub expanding
The Pmode is designed for pointer, thus leverage the Xmode instead for the expanding of the ussub. gcc/ChangeLog: * config/riscv/riscv.cc (riscv_expand_ussub): Promote to Xmode instead of Pmode. Signed-off-by: Pan Li <pan2.li@intel.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/riscv/riscv.cc24
1 files changed, 12 insertions, 12 deletions
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index a490b95..8ece785 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -11620,26 +11620,26 @@ void
riscv_expand_ussub (rtx dest, rtx x, rtx y)
{
machine_mode mode = GET_MODE (dest);
- rtx pmode_x = gen_lowpart (Pmode, x);
- rtx pmode_y = gen_lowpart (Pmode, y);
- rtx pmode_lt = gen_reg_rtx (Pmode);
- rtx pmode_minus = gen_reg_rtx (Pmode);
- rtx pmode_dest = gen_reg_rtx (Pmode);
+ rtx xmode_x = gen_lowpart (Xmode, x);
+ rtx xmode_y = gen_lowpart (Xmode, y);
+ rtx xmode_lt = gen_reg_rtx (Xmode);
+ rtx xmode_minus = gen_reg_rtx (Xmode);
+ rtx xmode_dest = gen_reg_rtx (Xmode);
/* Step-1: minus = x - y */
- riscv_emit_binary (MINUS, pmode_minus, pmode_x, pmode_y);
+ riscv_emit_binary (MINUS, xmode_minus, xmode_x, xmode_y);
/* Step-2: lt = x < y */
- riscv_emit_binary (LTU, pmode_lt, pmode_x, pmode_y);
+ riscv_emit_binary (LTU, xmode_lt, xmode_x, xmode_y);
/* Step-3: lt = lt - 1 (lt + (-1)) */
- riscv_emit_binary (PLUS, pmode_lt, pmode_lt, CONSTM1_RTX (Pmode));
+ riscv_emit_binary (PLUS, xmode_lt, xmode_lt, CONSTM1_RTX (Xmode));
- /* Step-4: pmode_dest = minus & lt */
- riscv_emit_binary (AND, pmode_dest, pmode_lt, pmode_minus);
+ /* Step-4: xmode_dest = minus & lt */
+ riscv_emit_binary (AND, xmode_dest, xmode_lt, xmode_minus);
- /* Step-5: dest = pmode_dest */
- emit_move_insn (dest, gen_lowpart (mode, pmode_dest));
+ /* Step-5: dest = xmode_dest */
+ emit_move_insn (dest, gen_lowpart (mode, xmode_dest));
}
/* Implement the unsigned saturation truncation for int mode.