diff -Naru gcc-2.95.2.orig/gcc/config/h8300/h8300.c gcc-2.95.2/gcc/config/h8300/h8300.c --- gcc-2.95.2.orig/gcc/config/h8300/h8300.c Thu Apr 8 08:17:52 1999 +++ gcc-2.95.2/gcc/config/h8300/h8300.c Mon Dec 10 22:16:15 2001 @@ -1588,6 +1588,8 @@ if (from == ARG_POINTER_REGNUM && to == STACK_POINTER_REGNUM) offset += UNITS_PER_WORD; /* Skip saved PC */ } + if ((TARGET_H8300H || TARGET_H8300S) && TARGET_MODE) + offset -= 2; return offset; } diff -Naru gcc-2.95.2.orig/gcc/config/h8300/h8300.h gcc-2.95.2/gcc/config/h8300/h8300.h --- gcc-2.95.2.orig/gcc/config/h8300/h8300.h Mon Mar 22 09:08:28 1999 +++ gcc-2.95.2/gcc/config/h8300/h8300.h Tue Dec 11 00:40:27 2001 @@ -91,6 +91,8 @@ alignment. */ #define TARGET_ALIGN_300 (target_flags & 8192) +#define TARGET_MODE (target_flags & 16384) + /* Macro to define tables used to set the flags. This is a list in braces of pairs in braces, each pair being { "NAME", VALUE } @@ -110,6 +112,7 @@ {"h", 4096, "Generate H8/300H code"}, \ {"no-h", -4096, "Do not generate H8/300H code"}, \ {"align-300", 8192, "Use H8/300 alignment rules"}, \ + {"n", 16384, "Normal Mode Stackframe"}, \ { "", TARGET_DEFAULT, NULL}} /* Do things that must be done once at start up. */ diff -Naru gcc-2.95.2.orig/gcc/config/h8300/t-h8300 gcc-2.95.2/gcc/config/h8300/t-h8300 --- gcc-2.95.2.orig/gcc/config/h8300/t-h8300 Thu Dec 17 06:02:56 1998 +++ gcc-2.95.2/gcc/config/h8300/t-h8300 Mon Dec 10 22:16:15 2001 @@ -18,8 +18,8 @@ echo '#endif' >> fp-bit.c cat $(srcdir)/config/fp-bit.c >> fp-bit.c -MULTILIB_OPTIONS = mh/ms mint32 -MULTILIB_DIRNAMES = h8300h h8300s int32 +MULTILIB_OPTIONS = mh/ms mn mint32 +MULTILIB_DIRNAMES = h8300h h8300s normal int32 MULTILIB_EXCEPTIONS = mint32 LIBGCC = stmp-multilib