diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c7fe011936c0a7bb1ff8c8a21875980c6d8d2c65..7cf02177feb66adb2945f5c7d3a8deb09ce7fead 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 8ccbcd87210f606f284d5f2b4e8f3d74ba095559..c2ab83fa2050e4f00a5340253c7d7b05c23fa163 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 588e3fe92d438833a0a4d4b339fb820b194f5940..c8b7c252b4ef9f340797caf6139739a3804eee35 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 694b5b93818c1759a3012e1771f3bc1362d799f4..37ab3aad38367bf378d23cb62b024498cb36a96d 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 5690dffd70bc30a2d54788d76a2b961196a076a4..7ed5c5e3e87b57272f23a22fb28de399fc273d09 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"