Compare commits
2 commits
dev
...
gcc-14.2.0
Author | SHA1 | Date | |
---|---|---|---|
c51b4a828b | |||
7d034126c7 |
3 changed files with 67 additions and 23 deletions
|
@ -1764,7 +1764,7 @@ epiphany-*-elf | epiphany-*-rtems*)
|
|||
extra_headers="epiphany_intrinsics.h"
|
||||
;;
|
||||
*-fcx-*)
|
||||
tm_file="${tm_file} elfos.h gnu-user.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/eabialtivec.h"
|
||||
tm_file="${tm_file} elfos.h gnu-user.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/eabialtivec.h rs6000/xenon.h"
|
||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||
tmake_file="rs6000/t-fprules rs6000/t-ppcendian rs6000/t-ppccomm"
|
||||
use_gcc_stdint=wrap
|
||||
|
|
|
@ -767,7 +767,7 @@ rs6000_stack_info (void)
|
|||
RS6000_ALIGN (crtl->outgoing_args_size + info->fixed_size,
|
||||
STACK_BOUNDARY / BITS_PER_UNIT) - info->fixed_size;
|
||||
else
|
||||
info->parm_size = RS6000_ALIGN (crtl->outgoing_args_size,
|
||||
info->parm_size = RS6000_ALIGN (crtl->outgoing_args_size,
|
||||
TARGET_ALTIVEC ? 16 : 8);
|
||||
if (FRAME_GROWS_DOWNWARD)
|
||||
info->vars_size
|
||||
|
@ -826,34 +826,29 @@ rs6000_stack_info (void)
|
|||
info->lr_save_offset = 2*reg_size;
|
||||
break;
|
||||
|
||||
case ABI_V4:
|
||||
info->fp_save_offset = -info->fp_size;
|
||||
info->gp_save_offset = info->fp_save_offset - info->gp_size;
|
||||
info->cr_save_offset = info->gp_save_offset - info->cr_size;
|
||||
case ABI_V4: /* Just replacing the SV4 ABI with the Xenon one... It's hacky, but I was having trouble defining a special ABI_XENON */
|
||||
info->cr_save_p = 0; /* We don't seem to save condition registers on 360 */
|
||||
info->gp_save_offset = -0xC - info->gp_size;
|
||||
info->fp_save_offset = info->gp_save_offset - info->fp_size;
|
||||
info->vrsave_save_offset = info->fp_save_offset - info->vrsave_size;
|
||||
|
||||
if (TARGET_ALTIVEC_ABI)
|
||||
{
|
||||
info->vrsave_save_offset = info->cr_save_offset - info->vrsave_size;
|
||||
/* Align stack so vector save area is on a quadword boundary. */
|
||||
if (info->altivec_size != 0)
|
||||
info->altivec_padding_size = 16 - (-info->vrsave_save_offset % 16);
|
||||
|
||||
/* Align stack so vector save area is on a quadword boundary. */
|
||||
if (info->altivec_size != 0)
|
||||
info->altivec_padding_size = 16 - (-info->vrsave_save_offset % 16);
|
||||
|
||||
info->altivec_save_offset = info->vrsave_save_offset
|
||||
info->altivec_save_offset = info->vrsave_save_offset
|
||||
- info->altivec_padding_size
|
||||
- info->altivec_size;
|
||||
|
||||
/* Adjust for AltiVec case. */
|
||||
info->ehrd_offset = info->altivec_save_offset;
|
||||
}
|
||||
else
|
||||
info->ehrd_offset = info->cr_save_offset;
|
||||
/* Adjust for AltiVec case. */
|
||||
info->ehrd_offset = info->altivec_save_offset;
|
||||
|
||||
info->ehrd_offset -= ehrd_size;
|
||||
info->lr_save_offset = reg_size;
|
||||
info->ehrd_offset -= ehrd_size;
|
||||
info->lr_save_offset = -0x8;
|
||||
break;
|
||||
}
|
||||
|
||||
save_align = (TARGET_ALTIVEC_ABI || DEFAULT_ABI == ABI_DARWIN) ? 16 : 8;
|
||||
save_align = ((TARGET_ALTIVEC_ABI || DEFAULT_ABI == ABI_DARWIN) && DEFAULT_ABI != ABI_V4) ? 16 : 8;
|
||||
info->save_size = RS6000_ALIGN (info->fp_size
|
||||
+ info->gp_size
|
||||
+ info->altivec_size
|
||||
|
@ -947,7 +942,7 @@ debug_stack_info (rs6000_stack_t *info)
|
|||
case ABI_AIX: abi_string = "AIX"; break;
|
||||
case ABI_ELFv2: abi_string = "ELFv2"; break;
|
||||
case ABI_DARWIN: abi_string = "Darwin"; break;
|
||||
case ABI_V4: abi_string = "V.4"; break;
|
||||
case ABI_V4: abi_string = "Xenon"; break;
|
||||
}
|
||||
|
||||
fprintf (stderr, "\tABI = %5s\n", abi_string);
|
||||
|
|
49
gcc/config/rs6000/xenon.h
Normal file
49
gcc/config/rs6000/xenon.h
Normal file
|
@ -0,0 +1,49 @@
|
|||
/* Redefinitions for FreeChainXenon
|
||||
Copyright (C) 2025 Aiden Isik
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published
|
||||
by the Free Software Foundation; either version 3, or (at your
|
||||
option) any later version.
|
||||
|
||||
GCC is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GCC; see the file COPYING3. If not see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#undef TARGET_DEBUG_STACK
|
||||
#define TARGET_DEBUG_STACK 1
|
||||
|
||||
/* Force the pointer size to 32 bits (even though we run in 64-bit mode) */
|
||||
//#undef POINTER_SIZE
|
||||
//#define POINTER_SIZE 32
|
||||
|
||||
/* Change the fixed area for the 360's stack frame convention */
|
||||
#undef RS6000_SAVE_AREA
|
||||
#define RS6000_SAVE_AREA 0x10 + (RS6000_ALIGN (crtl->outgoing_args_size.to_constant (), 16) - crtl->outgoing_args_size.to_constant ()) + 0x40
|
||||
|
||||
/* Redefine the starting frame offset, since it relies on the size of the fixed area */
|
||||
#undef RS6000_STARTING_FRAME_OFFSET
|
||||
#define RS6000_STARTING_FRAME_OFFSET \
|
||||
(cfun->calls_alloca \
|
||||
? (RS6000_ALIGN (crtl->outgoing_args_size + RS6000_SAVE_AREA, 16)) \
|
||||
: (RS6000_ALIGN (crtl->outgoing_args_size, 16) + RS6000_SAVE_AREA))
|
||||
|
||||
/* Redefine the offset of the first stack argument, since it relies on the size of the fixed area */
|
||||
#undef FIRST_PARM_OFFSET
|
||||
#define FIRST_PARM_OFFSET(FNDECL) RS6000_SAVE_AREA
|
||||
|
||||
/* Redefine stack pointer offset, since it relies on the size of the fixed area */
|
||||
#undef STACK_POINTER_OFFSET
|
||||
#define STACK_POINTER_OFFSET RS6000_SAVE_AREA
|
||||
|
||||
/* Redefine the offset from the stack pointer to items allocated by alloca() and friends */
|
||||
#undef STACK_DYNAMIC_OFFSET
|
||||
#define STACK_DYNAMIC_OFFSET(FUNDECL) \
|
||||
RS6000_ALIGN (crtl->outgoing_args_size.to_constant () + STACK_POINTER_OFFSET, 16)
|
Loading…
Add table
Add a link
Reference in a new issue