Commit c383667d by Doug Evans

Replace ARM_REG_PREFIX with REGISTER_PREFIX.

Replace ARM_COMMENT_CHAR with ASM_COMMENT_START.
(REGISTER_PREFIX): Define.
(USER_LABEL_PREFIX, LOCAL_LABEL_PREFIX): Define.
(SECONDARY_OUTPUT_RELOAD_CLASS): Handle DFmodes only if TARGET_HARD_FLOAT.
(PREDICATE_CODES): Add soft_df_operand.

From-SVN: r9651
parent f6789c77
...@@ -565,7 +565,8 @@ enum reg_class ...@@ -565,7 +565,8 @@ enum reg_class
NO_REGS is returned. */ NO_REGS is returned. */
#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS,MODE,X) \ #define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS,MODE,X) \
(((MODE) == DFmode && (CLASS) == GENERAL_REGS \ (((MODE) == DFmode && (CLASS) == GENERAL_REGS \
&& true_regnum (X) == -1) ? GENERAL_REGS \ && true_regnum (X) == -1 && TARGET_HARD_FLOAT) \
? GENERAL_REGS \
: ((MODE) == HImode && true_regnum (X) == -1) ? GENERAL_REGS : NO_REGS) : ((MODE) == HImode && true_regnum (X) == -1) ? GENERAL_REGS : NO_REGS)
/* If we need to load shorts byte-at-a-time, then we need a scratch. */ /* If we need to load shorts byte-at-a-time, then we need a scratch. */
...@@ -733,7 +734,7 @@ enum reg_class ...@@ -733,7 +734,7 @@ enum reg_class
to mind about this! */ to mind about this! */
#define FUNCTION_PROFILER(STREAM,LABELNO) \ #define FUNCTION_PROFILER(STREAM,LABELNO) \
{ \ { \
fprintf(STREAM, "\tmov\t%sip, %slr\n", ARM_REG_PREFIX, ARM_REG_PREFIX); \ fprintf(STREAM, "\tmov\t%sip, %slr\n", REGISTER_PREFIX, REGISTER_PREFIX); \
fprintf(STREAM, "\tbl\tmcount\n"); \ fprintf(STREAM, "\tbl\tmcount\n"); \
fprintf(STREAM, "\t.word\tLP%d\n", (LABELNO)); \ fprintf(STREAM, "\t.word\tLP%d\n", (LABELNO)); \
} }
...@@ -832,10 +833,10 @@ enum reg_class ...@@ -832,10 +833,10 @@ enum reg_class
.word function's address */ .word function's address */
#define TRAMPOLINE_TEMPLATE(FILE) \ #define TRAMPOLINE_TEMPLATE(FILE) \
{ \ { \
fprintf ((FILE), "\tldr\t%sr8, [%spc, #0]\n", ARM_REG_PREFIX, \ fprintf ((FILE), "\tldr\t%sr8, [%spc, #0]\n", \
ARM_REG_PREFIX); \ REGISTER_PREFIX, REGISTER_PREFIX); \
fprintf ((FILE), "\tldr\t%spc, [%spc, #0]\n", ARM_REG_PREFIX, \ fprintf ((FILE), "\tldr\t%spc, [%spc, #0]\n", \
ARM_REG_PREFIX); \ REGISTER_PREFIX, REGISTER_PREFIX); \
fprintf ((FILE), "\t.word\t0\n"); \ fprintf ((FILE), "\t.word\t0\n"); \
fprintf ((FILE), "\t.word\t0\n"); \ fprintf ((FILE), "\t.word\t0\n"); \
} }
...@@ -1352,6 +1353,7 @@ extern int arm_compare_fp; ...@@ -1352,6 +1353,7 @@ extern int arm_compare_fp;
{"minmax_operator", {SMIN, SMAX, UMIN, UMAX}}, \ {"minmax_operator", {SMIN, SMAX, UMIN, UMAX}}, \
{"shift_operator", {ASHIFT, ASHIFTRT, LSHIFTRT, ROTATERT, MULT}}, \ {"shift_operator", {ASHIFT, ASHIFTRT, LSHIFTRT, ROTATERT, MULT}}, \
{"di_operand", {SUBREG, REG, CONST_INT, CONST_DOUBLE, MEM}}, \ {"di_operand", {SUBREG, REG, CONST_INT, CONST_DOUBLE, MEM}}, \
{"soft_df_operand", {SUBREG, REG, CONST_DOUBLE, MEM}}, \
{"load_multiple_operation", {PARALLEL}}, \ {"load_multiple_operation", {PARALLEL}}, \
{"store_multiple_operation", {PARALLEL}}, \ {"store_multiple_operation", {PARALLEL}}, \
{"equality_operator", {EQ, NE}}, \ {"equality_operator", {EQ, NE}}, \
...@@ -1374,15 +1376,15 @@ extern int arm_compare_fp; ...@@ -1374,15 +1376,15 @@ extern int arm_compare_fp;
#define ASM_FILE_START(STREAM) \ #define ASM_FILE_START(STREAM) \
{ \ { \
extern char *version_string; \ extern char *version_string; \
fprintf (STREAM,"%c Generated by gcc %s for ARM/%s\n", \ fprintf (STREAM,"%s Generated by gcc %s for ARM/%s\n", \
ARM_COMMENT_CHAR, version_string, ARM_OS_NAME); \ ASM_COMMENT_START, version_string, ARM_OS_NAME); \
fprintf (STREAM,"%srfp\t.req\t%sr9\n", ARM_REG_PREFIX, ARM_REG_PREFIX); \ fprintf (STREAM,"%srfp\t.req\t%sr9\n", REGISTER_PREFIX, REGISTER_PREFIX); \
fprintf (STREAM,"%ssl\t.req\t%sr10\n", ARM_REG_PREFIX, ARM_REG_PREFIX); \ fprintf (STREAM,"%ssl\t.req\t%sr10\n", REGISTER_PREFIX, REGISTER_PREFIX); \
fprintf (STREAM,"%sfp\t.req\t%sr11\n", ARM_REG_PREFIX, ARM_REG_PREFIX); \ fprintf (STREAM,"%sfp\t.req\t%sr11\n", REGISTER_PREFIX, REGISTER_PREFIX); \
fprintf (STREAM,"%sip\t.req\t%sr12\n", ARM_REG_PREFIX, ARM_REG_PREFIX); \ fprintf (STREAM,"%sip\t.req\t%sr12\n", REGISTER_PREFIX, REGISTER_PREFIX); \
fprintf (STREAM,"%ssp\t.req\t%sr13\n", ARM_REG_PREFIX, ARM_REG_PREFIX); \ fprintf (STREAM,"%ssp\t.req\t%sr13\n", REGISTER_PREFIX, REGISTER_PREFIX); \
fprintf (STREAM,"%slr\t.req\t%sr14\n", ARM_REG_PREFIX, ARM_REG_PREFIX); \ fprintf (STREAM,"%slr\t.req\t%sr14\n", REGISTER_PREFIX, REGISTER_PREFIX); \
fprintf (STREAM,"%spc\t.req\t%sr15\n", ARM_REG_PREFIX, ARM_REG_PREFIX); \ fprintf (STREAM,"%spc\t.req\t%sr15\n", REGISTER_PREFIX, REGISTER_PREFIX); \
} }
#define ASM_APP_ON "" #define ASM_APP_ON ""
...@@ -1392,6 +1394,10 @@ extern int arm_compare_fp; ...@@ -1392,6 +1394,10 @@ extern int arm_compare_fp;
#define TEXT_SECTION_ASM_OP ".text" #define TEXT_SECTION_ASM_OP ".text"
#define DATA_SECTION_ASM_OP ".data" #define DATA_SECTION_ASM_OP ".data"
#define REGISTER_PREFIX ""
#define USER_LABEL_PREFIX "_"
#define LOCAL_LABEL_PREFIX ""
/* The assembler's names for the registers. */ /* The assembler's names for the registers. */
#ifndef REGISTER_NAMES #ifndef REGISTER_NAMES
#define REGISTER_NAMES \ #define REGISTER_NAMES \
...@@ -1471,7 +1477,7 @@ do { \ ...@@ -1471,7 +1477,7 @@ do { \
/* Output a reference to a label. */ /* Output a reference to a label. */
#define ASM_OUTPUT_LABELREF(STREAM,NAME) \ #define ASM_OUTPUT_LABELREF(STREAM,NAME) \
fprintf (STREAM, "_%s", NAME) fprintf (STREAM, "%s%s", USER_LABEL_PREFIX, NAME)
/* Make an internal label into a string. */ /* Make an internal label into a string. */
#define ASM_GENERATE_INTERNAL_LABEL(STRING, PREFIX, NUM) \ #define ASM_GENERATE_INTERNAL_LABEL(STRING, PREFIX, NUM) \
...@@ -1506,13 +1512,13 @@ do { \ ...@@ -1506,13 +1512,13 @@ do { \
sprintf ((OUTVAR), "%s.%d", (NAME), (NUMBER))) sprintf ((OUTVAR), "%s.%d", (NAME), (NUMBER)))
/* Output a push or a pop instruction (only used when profiling). */ /* Output a push or a pop instruction (only used when profiling). */
#define ASM_OUTPUT_REG_PUSH(STREAM,REGNO) \ #define ASM_OUTPUT_REG_PUSH(STREAM,REGNO) \
fprintf(STREAM,"\tstmfd\t%ssp!,{%s%s}\n", ARM_REG_PREFIX, ARM_REG_PREFIX, \ fprintf(STREAM,"\tstmfd\t%ssp!,{%s%s}\n", \
reg_names[REGNO]) REGISTER_PREFIX, REGISTER_PREFIX, reg_names[REGNO])
#define ASM_OUTPUT_REG_POP(STREAM,REGNO) \ #define ASM_OUTPUT_REG_POP(STREAM,REGNO) \
fprintf(STREAM,"\tldmfd\t%ssp!,{%s%s}\n", ARM_REG_PREFIX, ARM_REG_PREFIX, \ fprintf(STREAM,"\tldmfd\t%ssp!,{%s%s}\n", \
reg_names[REGNO]) REGISTER_PREFIX, REGISTER_PREFIX, reg_names[REGNO])
/* Output a relative address. Not needed since jump tables are absolute /* Output a relative address. Not needed since jump tables are absolute
but we must define it anyway. */ but we must define it anyway. */
...@@ -1535,11 +1541,11 @@ do { char dstr[30]; \ ...@@ -1535,11 +1541,11 @@ do { char dstr[30]; \
REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \
REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \ REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \
if (sizeof (int) == sizeof (long)) \ if (sizeof (int) == sizeof (long)) \
fprintf (STREAM, "\t.long 0x%x,0x%x,0x%x\t%c long double %s\n", \ fprintf (STREAM, "\t.long 0x%x,0x%x,0x%x\t%s long double %s\n", \
l[2], l[1], l[0], ARM_COMMENT_CHAR, dstr); \ l[2], l[1], l[0], ASM_COMMENT_START, dstr); \
else \ else \
fprintf (STREAM, "\t.long 0x%lx,0x%lx,0x%lx\t%c long double %s\n",\ fprintf (STREAM, "\t.long 0x%lx,0x%lx,0x%lx\t%s long double %s\n",\
l[0], l[1], l[2], ARM_COMMENT_CHAR, dstr); \ l[0], l[1], l[2], ASM_COMMENT_START, dstr); \
} while (0) } while (0)
...@@ -1550,11 +1556,11 @@ do { char dstr[30]; \ ...@@ -1550,11 +1556,11 @@ do { char dstr[30]; \
REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \
REAL_VALUE_TO_DECIMAL (VALUE, "%.14g", dstr); \ REAL_VALUE_TO_DECIMAL (VALUE, "%.14g", dstr); \
if (sizeof (int) == sizeof (long)) \ if (sizeof (int) == sizeof (long)) \
fprintf (STREAM, "\t.long 0x%x, 0x%x\t%c double %s\n", l[0], \ fprintf (STREAM, "\t.long 0x%x, 0x%x\t%s double %s\n", l[0], \
l[1], ARM_COMMENT_CHAR, dstr); \ l[1], ASM_COMMENT_START, dstr); \
else \ else \
fprintf (STREAM, "\t.long 0x%lx, 0x%lx\t%c double %s\n", l[0], \ fprintf (STREAM, "\t.long 0x%lx, 0x%lx\t%s double %s\n", l[0], \
l[1], ARM_COMMENT_CHAR, dstr); \ l[1], ASM_COMMENT_START, dstr); \
} while (0) } while (0)
#define ASM_OUTPUT_FLOAT(STREAM, VALUE) \ #define ASM_OUTPUT_FLOAT(STREAM, VALUE) \
...@@ -1564,11 +1570,11 @@ do { char dstr[30]; \ ...@@ -1564,11 +1570,11 @@ do { char dstr[30]; \
REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \
REAL_VALUE_TO_DECIMAL (VALUE, "%.7g", dstr); \ REAL_VALUE_TO_DECIMAL (VALUE, "%.7g", dstr); \
if (sizeof (int) == sizeof (long)) \ if (sizeof (int) == sizeof (long)) \
fprintf (STREAM, "\t.word 0x%x\t%c float %s\n", l, \ fprintf (STREAM, "\t.word 0x%x\t%s float %s\n", l, \
ARM_COMMENT_CHAR, dstr); \ ASM_COMMENT_START, dstr); \
else \ else \
fprintf (STREAM, "\t.word 0x%lx\t%c float %s\n", l, \ fprintf (STREAM, "\t.word 0x%lx\t%s float %s\n", l, \
ARM_COMMENT_CHAR, dstr); \ ASM_COMMENT_START, dstr); \
} while (0); } while (0);
#define ASM_OUTPUT_INT(STREAM, EXP) \ #define ASM_OUTPUT_INT(STREAM, EXP) \
...@@ -1622,7 +1628,7 @@ do { char dstr[30]; \ ...@@ -1622,7 +1628,7 @@ do { char dstr[30]; \
#define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \ #define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \
(fprintf (STREAM, "\t.comm\t"), \ (fprintf (STREAM, "\t.comm\t"), \
assemble_name ((STREAM), (NAME)), \ assemble_name ((STREAM), (NAME)), \
fprintf(STREAM, ", %d\t%c%d\n", ROUNDED, ARM_COMMENT_CHAR, SIZE)) fprintf(STREAM, ", %d\t%s %d\n", ROUNDED, ASM_COMMENT_START, SIZE))
/* Output a local common block. /bin/as can't do this, so hack a `.space' into /* Output a local common block. /bin/as can't do this, so hack a `.space' into
the bss segment. Note that this is *bad* practice. */ the bss segment. Note that this is *bad* practice. */
...@@ -1655,13 +1661,8 @@ do { char dstr[30]; \ ...@@ -1655,13 +1661,8 @@ do { char dstr[30]; \
if (optimize) \ if (optimize) \
final_prescan_insn (INSN, OPVEC, NOPERANDS) final_prescan_insn (INSN, OPVEC, NOPERANDS)
#ifndef ARM_COMMENT_CHAR #ifndef ASM_COMMENT_START
#define ARM_COMMENT_CHAR '@' #define ASM_COMMENT_START "@"
#endif
/* Default is for register names not to have a prefix. */
#ifndef ARM_REG_PREFIX
#define ARM_REG_PREFIX ""
#endif #endif
#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
...@@ -1684,7 +1685,7 @@ do { char dstr[30]; \ ...@@ -1684,7 +1685,7 @@ do { char dstr[30]; \
int is_minus = GET_CODE (X) == MINUS; \ int is_minus = GET_CODE (X) == MINUS; \
\ \
if (GET_CODE (X) == REG) \ if (GET_CODE (X) == REG) \
fprintf (STREAM, "[%s%s, #0]", ARM_REG_PREFIX, \ fprintf (STREAM, "[%s%s, #0]", REGISTER_PREFIX, \
reg_names[REGNO (X)]); \ reg_names[REGNO (X)]); \
else if (GET_CODE (X) == PLUS || is_minus) \ else if (GET_CODE (X) == PLUS || is_minus) \
{ \ { \
...@@ -1706,14 +1707,14 @@ do { char dstr[30]; \ ...@@ -1706,14 +1707,14 @@ do { char dstr[30]; \
offset = INTVAL (index); \ offset = INTVAL (index); \
if (is_minus) \ if (is_minus) \
offset = -offset; \ offset = -offset; \
fprintf (STREAM, "[%s%s, #%d]", ARM_REG_PREFIX, \ fprintf (STREAM, "[%s%s, #%d]", REGISTER_PREFIX, \
base_reg_name, offset); \ base_reg_name, offset); \
break; \ break; \
\ \
case REG: \ case REG: \
fprintf (STREAM, "[%s%s, %s%s%s]", ARM_REG_PREFIX, \ fprintf (STREAM, "[%s%s, %s%s%s]", REGISTER_PREFIX, \
base_reg_name, is_minus ? "-" : "", \ base_reg_name, is_minus ? "-" : "", \
ARM_REG_PREFIX, reg_names[REGNO (index)] ); \ REGISTER_PREFIX, reg_names[REGNO (index)] ); \
break; \ break; \
\ \
case MULT: \ case MULT: \
...@@ -1722,8 +1723,8 @@ do { char dstr[30]; \ ...@@ -1722,8 +1723,8 @@ do { char dstr[30]; \
case ASHIFT: \ case ASHIFT: \
case ROTATERT: \ case ROTATERT: \
{ \ { \
fprintf (STREAM, "[%s%s, %s%s%s", ARM_REG_PREFIX, \ fprintf (STREAM, "[%s%s, %s%s%s", REGISTER_PREFIX, \
base_reg_name, is_minus ? "-" : "", ARM_REG_PREFIX,\ base_reg_name, is_minus ? "-" : "", REGISTER_PREFIX,\
reg_names[REGNO (XEXP (index, 0))]); \ reg_names[REGNO (XEXP (index, 0))]); \
arm_print_operand (STREAM, index, 'S'); \ arm_print_operand (STREAM, index, 'S'); \
fputs ("]", STREAM); \ fputs ("]", STREAM); \
...@@ -1743,12 +1744,12 @@ do { char dstr[30]; \ ...@@ -1743,12 +1744,12 @@ do { char dstr[30]; \
abort (); \ abort (); \
\ \
if (GET_CODE (X) == PRE_DEC || GET_CODE (X) == PRE_INC) \ if (GET_CODE (X) == PRE_DEC || GET_CODE (X) == PRE_INC) \
fprintf (STREAM, "[%s%s, #%s%d]!", ARM_REG_PREFIX, \ fprintf (STREAM, "[%s%s, #%s%d]!", REGISTER_PREFIX, \
reg_names[REGNO (XEXP (X, 0))], \ reg_names[REGNO (XEXP (X, 0))], \
GET_CODE (X) == PRE_DEC ? "-" : "", \ GET_CODE (X) == PRE_DEC ? "-" : "", \
GET_MODE_SIZE (output_memory_reference_mode)); \ GET_MODE_SIZE (output_memory_reference_mode)); \
else \ else \
fprintf (STREAM, "[%s%s], #%s%d", ARM_REG_PREFIX, \ fprintf (STREAM, "[%s%s], #%s%d", REGISTER_PREFIX, \
reg_names[REGNO (XEXP (X, 0))], \ reg_names[REGNO (XEXP (X, 0))], \
GET_CODE (X) == POST_DEC ? "-" : "", \ GET_CODE (X) == POST_DEC ? "-" : "", \
GET_MODE_SIZE (output_memory_reference_mode)); \ GET_MODE_SIZE (output_memory_reference_mode)); \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment