aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJames Van Artsdalen <jrv@gnu.org>1993-01-06 07:47:31 +0000
committerJames Van Artsdalen <jrv@gnu.org>1993-01-06 07:47:31 +0000
commit7488be4e12f74057f78d0452881f4b9cfa228d18 (patch)
tree30aa87864456273cc54c8353a95184114a125d30 /gcc
parentb491172aeef9ed48101efe6be43fe82a4a031072 (diff)
downloadgcc-7488be4e12f74057f78d0452881f4b9cfa228d18.zip
gcc-7488be4e12f74057f78d0452881f4b9cfa228d18.tar.gz
gcc-7488be4e12f74057f78d0452881f4b9cfa228d18.tar.bz2
(DEBUG_PRINT_REG): Print regno along with printable name.
(CONST_COSTS): Handle integer CONST_DOUBLE correctly. (PREFERRED_RELOAD_CLASS): Allow integer CONST_DOUBLE into int regs. From-SVN: r3117
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/i386/i386.h21
1 files changed, 13 insertions, 8 deletions
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index d8d4cc0..73b6f25 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -524,16 +524,18 @@ extern enum reg_class regclass_map[FIRST_PSEUDO_REGISTER];
reloaded into floating registers (since no move-insn can do that)
and we ensure that QImodes aren't reloaded into the esi or edi reg. */
-/* Don't put CONST_DOUBLE into FLOAT_REGS.
+/* Don't put float CONST_DOUBLE into any regs.
QImode must go into class Q_REGS.
MODE_INT must not go into FLOAT_REGS. */
-#define PREFERRED_RELOAD_CLASS(X,CLASS) \
- (GET_CODE (X) == CONST_DOUBLE \
- ? NO_REGS \
- : GET_MODE (X) == QImode \
+#define PREFERRED_RELOAD_CLASS(X,CLASS) \
+ (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) != VOIDmode \
+ ? NO_REGS \
+ : GET_MODE (X) == QImode \
? (! reg_class_subset_p ((CLASS), Q_REGS) ? Q_REGS : (CLASS)) \
- : (GET_MODE_CLASS (GET_MODE (X)) == MODE_INT && (CLASS) == FLOAT_REGS ? \
+ : ((CLASS) == FLOAT_REGS \
+ && (GET_MODE (X) == VOIDmode \
+ || GET_MODE_CLASS (GET_MODE (X)) == MODE_INT) ? \
GENERAL_REGS : (CLASS)))
/* Return the maximum number of consecutive registers
@@ -1180,7 +1182,10 @@ while (0)
return flag_pic && SYMBOLIC_CONST (RTX) ? 2 : 0; \
case CONST_DOUBLE: \
{ \
- int code = standard_80387_constant_p (RTX); \
+ int code; \
+ if (GET_MODE (RTX) == VOIDmode) \
+ return 2; \
+ code = standard_80387_constant_p (RTX); \
return code == 1 ? 0 : \
code == 2 ? 1 : \
2; \
@@ -1510,7 +1515,7 @@ extern char *qi_high_reg_name[];
#define DEBUG_PRINT_REG(X, CODE, FILE) \
do { static char *hi_name[] = HI_REGISTER_NAMES; \
static char *qi_name[] = QI_REGISTER_NAMES; \
- fprintf (FILE, "%s", RP); \
+ fprintf (FILE, "%d %s", REGNO (X), RP); \
if (REGNO (X) == ARG_POINTER_REGNUM) \
{ fputs ("argp", FILE); break; } \
if (STACK_TOP_P (X)) \