]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/config/pdp11/pdp11.c
Turn HARD_REGNO_NREGS into a target hook
[thirdparty/gcc.git] / gcc / config / pdp11 / pdp11.c
index eb21066964f456d5da7ef8d1846cdc756ec1c7c9..fd50e6aeec7cc4f8f6533d61612641c1f0dcfc10 100644 (file)
@@ -236,6 +236,8 @@ static bool pdp11_scalar_mode_supported_p (scalar_mode);
 #undef  TARGET_SCALAR_MODE_SUPPORTED_P
 #define TARGET_SCALAR_MODE_SUPPORTED_P pdp11_scalar_mode_supported_p
 
+#undef  TARGET_HARD_REGNO_NREGS
+#define TARGET_HARD_REGNO_NREGS pdp11_hard_regno_nregs
 #undef  TARGET_HARD_REGNO_MODE_OK
 #define TARGET_HARD_REGNO_MODE_OK pdp11_hard_regno_mode_ok
 
@@ -1931,6 +1933,16 @@ pdp11_branch_cost ()
   return (TARGET_BRANCH_CHEAP ? 0 : 1);
 }
 
+/* Implement TARGET_HARD_REGNO_NREGS.  */
+
+static unsigned int
+pdp11_hard_regno_nregs (unsigned int regno, machine_mode mode)
+{
+  if (regno <= PC_REGNUM)
+    return CEIL (GET_MODE_SIZE (mode), UNITS_PER_WORD);
+  return 1;
+}
+
 /* Implement TARGET_HARD_REGNO_MODE_OK.  On the pdp, the cpu registers
    can hold any mode other than float (because otherwise we may end up
    being asked to move from CPU to FPU register, which isn't a valid