Revision tags: OPENBSD_5_4_BASE OPENBSD_5_5_BASE OPENBSD_5_6_BASE OPENBSD_5_7_BASE OPENBSD_5_8_BASE OPENBSD_5_9_BASE OPENBSD_6_0_BASE OPENBSD_6_1_BASE OPENBSD_6_2_BASE
|
#
1.21 |
|
20-Apr-2013 |
miod |
Define PIC_OFFSET_TABLE_REGNUM as INVALID_REGNUM when not compiling PIC. Also, when compiling PIC, do not force PIC_OFFSET_TABLE_REGNUM to be set in global_regs[], there is no reason to do this (on the other hand, forcing it to be set in fixed_regs[] and call_used_regs[] is still necessary and correct).
|
#
1.20 |
|
11-Apr-2013 |
miod |
Do not abuse -finhibit-size-directive to control tight code alignment: - turn FUNCTION_BOUNDARY into a constant, as intended, since its value is used (among other things) to decide the alignment to expect from a function pointer value. - remove LABEL_ALIGN_AFTER_BARRIER. There is no reason to align jump destinations on half a cache line, and the MI default for this value is good enough.
However, in order to preserve the intent of what FUNCTION_BOUNDARY used to be defined as, initialize align_functions to sensible values in m88k_override_options(), unless -falign-functions=... is specified.
|
Revision tags: OPENBSD_5_3_BASE
|
#
1.19 |
|
08-Feb-2013 |
miod |
Replace the dummy definition of FUNCTION_ARG_PASS_BY_REFERENCE(). The new definition forces variable-sized types to always be passed by reference.
Update the varargs code to cope with this.
gcc.c-torture/execute/20020412-1 finally passes.
|
#
1.18 |
|
08-Feb-2013 |
miod |
Stop providing our own EXPAND_BUILTIN_SAVEREGS(). Instead, do the necessary RTL generation in SETUP_INCOMING_VARARGS(...,0).
This means we no longer need to explicitely allocate room on the stack for the saved register area (which we did in EXPAND_BUILTIN_SAVEREGS). We were returning the correct size in SETUP_INCOMING_VARARGS's ``pretend_size'' argument anyway, causing this space to be allocated twice.
This change should also allow for the stack protector to be reenabled (after more testing).
|
#
1.17 |
|
24-Jan-2013 |
miod |
Fix unused local and missing initializer warnings.
|
#
1.16 |
|
05-Jan-2013 |
miod |
Remove the -mno-underscores, -msvr3 and -msvr4 options. They suppose the compiler can be built on one particular m88k system and output code for another with the proper options, but it only does half the job since there is too much knowledge of the native toolchain embedded (at compile-time) in the compiler. Building code for a different operating system and toolchain is what cross-compiler are for.
Remove support for SDB debug information (only used by SVR3) and tdesc debug information (only used by SVR4). The latter is questionable, but this helps making the code less entangled.
Tell m88k.h to not rewrite almost all ASM_WHATEVER macros gratuitously on the false pretense that `all m88k assemblers use the same syntax for pseudo-ops'. This was already not true with SVR4, and is getting worse with our ELF toolchain.
|
#
1.15 |
|
05-Jan-2013 |
miod |
Rename m88k_pound_sign to m88k_register_prefix (even though the prefix is used for more than registers). Convert all output of registers to asm_fprintf with %R. Stop altering reg_names[] at runtime depending on the selected register prefix.
|
#
1.14 |
|
04-Jan-2013 |
miod |
Remove extern declarations redundant with "flags.h"
|
#
1.13 |
|
03-Jan-2013 |
miod |
The removal of sdata support also removed the only use of SYMBOL_REF_FLAG in the m88k backend; as a result, SHORT_ADDRESS_P() will always return 0, therefore remove all code depending on it being nonzero.
|
#
1.12 |
|
02-Jan-2013 |
miod |
More dead features recycling: -mwarn-passed-struct doesn't do anything, and -m{no-,}optimize-arg-area doesn't do anything either since the arg area has been removed in gcc 2.95.
|
#
1.11 |
|
02-Jan-2013 |
miod |
Help the DWARF code to handle our prologues correctly: - add the frame pointer to EPILOGUE_USES when profiling - when the initial stack adjustement is larger than 64KB and requires a temporary register to be used, add a REG_FRAME_RELATED_EXPR of the original computation (not constrained by the adjustement size) to the REG_NOTES of the stack pointer adjustement sequence. Borrowed from alpha which has a similar issue.
|
#
1.10 |
|
02-Jan-2013 |
miod |
Remove last boolean argumont of output_function_profiler(), it is always invoked with the same value.
|
#
1.9 |
|
02-Jan-2013 |
miod |
Start removing obsolete features from the m88k backend (it's not like we'll need to sync with upstream anymore) to make things a bit simpler and get rid of unintended bitrotting.
This time: - remove the small-data feature. It was only supported for COFF binaries anyway. This allows us to stop providing TARGET_ASM_SELECT_SECTION and use the default flavour, from which this backend had derived a bit in addition to sdata support, so this is a good thing... - remove the -midentify-version option - remove the -mbig-pic option, it has been superseded by -fPIC since years and was supposed to be removed `in a future version' since a long time as well. - remove the old MONITOR_GCC debug hooks.
|
#
1.8 |
|
25-Dec-2012 |
miod |
Fix longstanding bug in FRAME_POINTER_REQUIRED; unless -fomit-frame-pointer is used, a frame pointer is required for all non-leaf functions, and for leaf functions unless -momit-leaf-frame-pointer is specified. Also, a frame pointer is mandatory when profiling. This used to be mostly harmless with gcc 2.95, but is required with gcc 3 to get profiling to work.
|
#
1.7 |
|
25-Dec-2012 |
miod |
Define INCOMING_RETURN_ADDR_RTX and DWARF_FRAME_RETURN_COLUMN to allow for DWARF debugging information to be produced, but define DWARF2_UNWIND_INFO to zero to prevent it from being output yet. This exposes dire weaknesses in the way the dwarf unwinder recognizes stack frame setup instructions, so borrow code from rs6000 to rewrite and annotate them as dwarf-edible instructions. No functional change intended - although this enables one more optimization code path in gcc.
|
#
1.6 |
|
21-Nov-2012 |
miod |
Turn OVERRIDE_OPTIONS into a function, will make it easier to extend on a per-platform basis.
|
#
1.5 |
|
16-Nov-2012 |
miod |
Rewrite the varags implementation again (third time's the charm), the upstream varagrs implementation being utterly wrong.
This is the same logic as the one I wrote for gcc 2.95, with a few more optimizations whenever possible (such as not outputting instructions to fill fields of the __va_list struct we know won't be accessed, now that we have total control of the struct in the compiler).
It should now be possible to mix varags code compiled by gcc 2.95, with code compiled with gcc 3, with the following exception: as I have finally found and fixed the buglet causing all arguments to be passed on the stack if any of the named arguments (before varargs) is a struct of 32 bytes or more passed by value, such a (pretty uncommon) case will not be interoperable. One such case can be found as va-arg-4.c in gcc's testsuite.
With these changes, all the following varargs exercizers from gcc's testsuite now pass when compiled with the in-tree gcc 3: gcc.c-torture/execute/920625-1.c gcc.c-torture/execute/931004-10.c gcc.c-torture/execute/931004-12.c gcc.c-torture/execute/931004-14.c gcc.c-torture/execute/931004-4.c gcc.c-torture/execute/931004-6.c gcc.c-torture/execute/931004-8.c gcc.c-torture/execute/strct-varg-2.c gcc.c-torture/execute/va-arg-1.c gcc.c-torture/execute/va-arg-2.c gcc.c-torture/execute/va-arg-4.c gcc.c-torture/execute/va-arg-5.c gcc.c-torture/execute/va-arg-6.c as well as the few others of my own I had been using while working on gcc 2.95 more than 8 years ago.
|
#
1.4 |
|
14-Nov-2012 |
miod |
Define EPILOGUE_USES(). And suddenly the life analysis pass doesn't decide reloading the return address register from the stack in the epilogue isn't a useless operation anymore.
|
#
1.3 |
|
11-Nov-2012 |
miod |
The next step towards a working gcc3/m88k: remove the argument area (from gcc2), and try to get the builtin varargs code to work. I have tried to mimic the gcc2 varargs logic, which is optimal in the sense that no argument gets duplicated and as many arguments as possible are passed in registers, to no avail (read: hair-pulling ICE out of nowhere in variadic functions). So I am now sticking to the original gcc 2.7 varargs, where an argument passed on the stack consumes the registers it would have been passed as, if its type would have allowed it. This spills too much memory on the stack, but on the other hand makes the expansion of va_arg() much simpler.
This means that, should gcc3 on m88k platforms be solid enough, mixing varargs objects compiled with gcc 2 and gcc 3 will not be possible. But we're not there yet.
|
#
1.2 |
|
09-Nov-2012 |
miod |
Port the gcc 2.95 m88k fixes to the gcc 3 codebase, except for the function frame setup and varargs handling, which need some more work at the moment.
|
#
1.1 |
|
29-Nov-2003 |
espie |
branches: 1.1.1; Initial revision
|