summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authornickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>1999-08-24 13:58:41 +0000
committernickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>1999-08-24 13:58:41 +0000
commit2b33b1573022e249f8fd39bd3229324d0de9b0b0 (patch)
tree73891c5d38a9ac86b911b35754030a4c9210e572 /gcc
parentfcf6cb17576b03d9050a88c84c97c30a10e93a51 (diff)
downloadgcc-2b33b1573022e249f8fd39bd3229324d0de9b0b0.tar.gz
Handle DFmode and DImode constant addresses.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@28823 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/config/v850/v850.c7
-rw-r--r--gcc/config/v850/v850.h61
-rwxr-xr-xgcc/configure1
-rw-r--r--gcc/configure.in1
5 files changed, 47 insertions, 35 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c7fe011936c..7cf02177feb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,15 @@
+1999-08-24 Nick Clifton <nickc@cygnus.com>
+
+ * configure.in: Define target_cpu_default for v850 targets.
+ * configure: Regenerate
+
+ * config/v850/v850.h (TARGET_CPU_generic): Define.
+ (GO_IF_LEGITIMATE_ADDRESS): Insist that SImode and larger constant
+ addresses are 4 byte aligned.
+
+ * config/v850/v850.c (print_operand): Cope with 'R' format DFmode
+ addresses.
+
Tue Aug 24 09:32:07 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* genattr.c (function_unit_desc): Constify a char*. Add prototype.
diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c
index 8ccbcd87210..c2ab83fa205 100644
--- a/gcc/config/v850/v850.c
+++ b/gcc/config/v850/v850.c
@@ -38,6 +38,7 @@ Boston, MA 02111-1307, USA. */
#include "function.h"
#include "obstack.h"
#include "toplev.h"
+#include "function.h"
#ifndef streq
#define streq(a,b) (strcmp (a, b) == 0)
@@ -509,8 +510,10 @@ print_operand (file, x, code)
fprintf (file, reg_names[REGNO (x) + 1]);
break;
case MEM:
- print_operand_address (file,
- XEXP (adj_offsettable_operand (x, 4), 0));
+ x = XEXP (adj_offsettable_operand (x, 4), 0);
+ print_operand_address (file, x);
+ if (GET_CODE (x) == CONST_INT)
+ fprintf (file, "[r0]");
break;
default:
diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h
index 588e3fe92d4..c8b7c252b4e 100644
--- a/gcc/config/v850/v850.h
+++ b/gcc/config/v850/v850.h
@@ -21,28 +21,36 @@ Boston, MA 02111-1307, USA. */
#include "svr4.h" /* Automatically does #undef CPP_PREDEFINES */
-#undef ASM_SPEC
-#define ASM_SPEC "%{mv*:-mv%*}"
-
-#ifndef CPP_SPEC
-#define CPP_SPEC "-D__v850__"
-#endif
-
+/* These are defiend in svr4.h but we want to override them. */
#undef ASM_FINAL_SPEC
#undef LIB_SPEC
#undef ENDFILE_SPEC
#undef LINK_SPEC
#undef STARTFILE_SPEC
+#undef ASM_SPEC
-/* Names to predefine in the preprocessor for this target machine. */
-#define CPP_PREDEFINES "-D__v851__ -D__v850"
-/* Print subsidiary information on the compiler version in use. */
+#define TARGET_CPU_generic 1
-#ifndef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (NEC V850)");
+#ifndef TARGET_CPU_DEFAULT
+#define TARGET_CPU_DEFAULT TARGET_CPU_generic
#endif
+#define MASK_DEFAULT MASK_V850
+#define SUBTARGET_ASM_SPEC "%{!mv*:-mv850}"
+#define SUBTARGET_CPP_SPEC "%{!mv*:-D__v850__}"
+#define TARGET_VERSION fprintf (stderr, " (NEC V850)");
+
+
+#define ASM_SPEC "%{mv*:-mv%*}"
+#define CPP_SPEC "%{mv850ea:-D__v850ea__} %{mv850e:-D__v850e__} %{mv850:-D__v850__} %(subtarget_cpp_spec)"
+
+#define EXTRA_SPECS \
+ { "subtarget_asm_spec", SUBTARGET_ASM_SPEC }, \
+ { "subtarget_cpp_spec", SUBTARGET_CPP_SPEC }
+
+/* Names to predefine in the preprocessor for this target machine. */
+#define CPP_PREDEFINES "-D__v851__ -D__v850"
/* Run-time compilation parameters selecting different hardware subsets. */
@@ -60,13 +68,6 @@ extern int target_flags;
#define MASK_BIG_SWITCH 0x00000100
-#ifndef MASK_DEFAULT
-#define MASK_DEFAULT MASK_V850
-#endif
-
-#define TARGET_V850 ((target_flags & MASK_CPU) == MASK_V850)
-
-
/* Macros used in the machine description to test the flags. */
/* The GHS calling convention support doesn't really work,
@@ -99,6 +100,8 @@ extern int target_flags;
/* Whether to call out-of-line functions to save registers or not. */
#define TARGET_PROLOG_FUNCTION (target_flags & MASK_PROLOG_FUNCTION)
+#define TARGET_V850 ((target_flags & MASK_CPU) == MASK_V850)
+
/* Whether to emit 2 byte per entry or 4 byte per entry switch tables. */
#define TARGET_BIG_SWITCH (target_flags & MASK_BIG_SWITCH)
@@ -131,16 +134,7 @@ extern int target_flags;
{ "v850", -(MASK_V850 ^ MASK_CPU), "" }, \
{ "big-switch", MASK_BIG_SWITCH, \
"Use 4 byte entries in switch tables" },\
- EXTRA_SWITCHES \
- { "", TARGET_DEFAULT, ""}}
-
-#ifndef EXTRA_SWITCHES
-#define EXTRA_SWITCHES
-#endif
-
-#ifndef TARGET_DEFAULT
-#define TARGET_DEFAULT MASK_DEFAULT
-#endif
+ { "", MASK_DEFAULT, ""}}
/* Information about the various small memory areas. */
struct small_memory_info {
@@ -301,8 +295,8 @@ extern struct small_memory_info small_memory[(int)SMALL_MEMORY_max];
/* Define this if move instructions will actually fail to work
when given unaligned data. */
-#ifndef STRICT_ALIGNMENT 1
-#define STRICT_ALIGNMENT 1
+#ifndef STRICT_ALIGNMENT
+#define STRICT_ALIGNMENT TARGET_V850
#endif
/* Define this as 1 if `char' should by default be signed; else as 0.
@@ -919,7 +913,8 @@ extern int current_function_anonymous_args;
do { \
if (RTX_OK_FOR_BASE_P (X)) goto ADDR; \
if (CONSTANT_ADDRESS_P (X) \
- && (MODE == QImode || INTVAL (X) % 2 == 0)) \
+ && (MODE == QImode || INTVAL (X) % 2 == 0) \
+ && (GET_MODE_SIZE (MODE) <= 4 || INTVAL (X) % 4 == 0)) \
goto ADDR; \
if (GET_CODE (X) == LO_SUM \
&& GET_CODE (XEXP (X, 0)) == REG \
@@ -1342,7 +1337,7 @@ do { char dstr[30]; \
#undef ASM_OUTPUT_LABELREF
#define ASM_OUTPUT_LABELREF(FILE, NAME) \
do { \
- const char* real_name; \
+ const char * real_name; \
STRIP_NAME_ENCODING (real_name, (NAME)); \
fprintf (FILE, "_%s", real_name); \
} while (0)
diff --git a/gcc/configure b/gcc/configure
index 694b5b93818..37ab3aad383 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -5668,6 +5668,7 @@ for machine in $build $host $target; do
# use_collect2=yes
# ;;
v850-*-*)
+ target_cpu_default="TARGET_CPU_generic"
cpu_type=v850
tm_file="v850/v850.h"
xm_file="v850/xm-v850.h"
diff --git a/gcc/configure.in b/gcc/configure.in
index 5690dffd70b..7ed5c5e3e87 100644
--- a/gcc/configure.in
+++ b/gcc/configure.in
@@ -3370,6 +3370,7 @@ changequote([,])dnl
# use_collect2=yes
# ;;
v850-*-*)
+ target_cpu_default="TARGET_CPU_generic"
cpu_type=v850
tm_file="v850/v850.h"
xm_file="v850/xm-v850.h"