summaryrefslogtreecommitdiff
path: root/toolchain/gcc/patches/git/riscv-preferred-mode-fix.patch
blob: ebab5bbe4f8b55190c6316c45c2b76c5b8fffead (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
diff -Nur gcc-git.orig/gcc/config/riscv/riscv.c gcc-git/gcc/config/riscv/riscv.c
--- gcc-git.orig/gcc/config/riscv/riscv.c	2017-03-11 21:53:53.000000000 +0100
+++ gcc-git/gcc/config/riscv/riscv.c	2017-03-11 22:11:38.830507954 +0100
@@ -3634,8 +3634,13 @@
 static reg_class_t
 riscv_preferred_reload_class (rtx x ATTRIBUTE_UNUSED, reg_class_t rclass)
 {
-  return reg_class_subset_p (FP_REGS, rclass) ? FP_REGS :
-	 reg_class_subset_p (GR_REGS, rclass) ? GR_REGS :
+  machine_mode mode = GET_MODE (x);
+  if ((GET_MODE_CLASS (mode) == MODE_FLOAT
+	|| GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT)
+	&& reg_class_subset_p (FP_REGS, rclass))
+    return FP_REGS;
+ 
+  return reg_class_subset_p (GR_REGS, rclass) ? GR_REGS :
 	 rclass;
 }