m68k.c (m68k_output_function_prologue, [...]): Delete versions for DPX2/MOTOROLA and NEWS/MOTOROLA.
* m68k.c (m68k_output_function_prologue, m68k_output_function_epilogue): Delete versions for DPX2/MOTOROLA and NEWS/MOTOROLA. * genattrtab.c: Remove dpx2 comment. * libgcc2.c (__enable_execute_stack): Delete versions for NeXT/__MACH__, __convex__, __sysV88__, __pyr__ and sony_news/SYSTYPE_BSD. * longlong.h: Delete code for __a29k__, _AM29K, __clipper__, __gmicro__, __i860__, __NeXT__ and __pyr__. * rtl.h: Remove convex comment. * varasm.c: Likewise. From-SVN: r56272
This commit is contained in:
parent
d3969c3407
commit
cbf2f4797d
@ -1,3 +1,17 @@
|
||||
2002-08-13 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||
|
||||
* m68k.c (m68k_output_function_prologue,
|
||||
m68k_output_function_epilogue): Delete versions for DPX2/MOTOROLA
|
||||
and NEWS/MOTOROLA.
|
||||
* genattrtab.c: Remove dpx2 comment.
|
||||
* libgcc2.c (__enable_execute_stack): Delete versions for
|
||||
NeXT/__MACH__, __convex__, __sysV88__, __pyr__ and
|
||||
sony_news/SYSTYPE_BSD.
|
||||
* longlong.h: Delete code for __a29k__, _AM29K, __clipper__,
|
||||
__gmicro__, __i860__, __NeXT__ and __pyr__.
|
||||
* rtl.h: Remove convex comment.
|
||||
* varasm.c: Likewise.
|
||||
|
||||
2002-08-13 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
|
||||
|
||||
* c-opts.c (lang_flags): Const-ify.
|
||||
|
@ -245,163 +245,7 @@ m68k_output_function_prologue (stream, size)
|
||||
fprintf (stream, "\tmovem $0x%x,-(sp)\n", mask);
|
||||
}
|
||||
|
||||
#else
|
||||
#if defined (DPX2) && defined (MOTOROLA)
|
||||
|
||||
static void
|
||||
m68k_output_function_prologue (stream, size)
|
||||
FILE *stream;
|
||||
HOST_WIDE_INT size;
|
||||
{
|
||||
register int regno;
|
||||
register int mask = 0;
|
||||
int num_saved_regs = 0, first = 1;
|
||||
HOST_WIDE_INT fsize = ((size) + 3) & -4;
|
||||
|
||||
if (frame_pointer_needed)
|
||||
{
|
||||
/* Adding negative number is faster on the 68040. */
|
||||
if (fsize < 0x8000 && !TARGET_68040)
|
||||
fprintf (stream, "\tlink %s,#%d\n",
|
||||
reg_names[FRAME_POINTER_REGNUM], -fsize);
|
||||
else if (TARGET_68020)
|
||||
fprintf (stream, "\tlink %s,#%d\n",
|
||||
reg_names[FRAME_POINTER_REGNUM], -fsize);
|
||||
else
|
||||
fprintf (stream, "\tlink %s,#0\n\tadd.l #%d,sp\n",
|
||||
reg_names[FRAME_POINTER_REGNUM], -fsize);
|
||||
}
|
||||
else if (fsize)
|
||||
{
|
||||
/* Adding negative number is faster on the 68040. */
|
||||
if (fsize + 4 < 0x8000)
|
||||
fprintf (stream, "\tadd.w #%d,sp\n", - (fsize + 4));
|
||||
else
|
||||
fprintf (stream, "\tadd.l #%d,sp\n", - (fsize + 4));
|
||||
}
|
||||
|
||||
for (regno = 23; regno >= 16; regno--)
|
||||
if (regs_ever_live[regno] && ! call_used_regs[regno])
|
||||
{
|
||||
if (first)
|
||||
{
|
||||
fprintf (stream, "\tfmovem.x %s", reg_names[regno]);
|
||||
first = 0;
|
||||
}
|
||||
else
|
||||
fprintf (stream, "/%s", reg_names[regno]);
|
||||
}
|
||||
if (!first)
|
||||
fprintf (stream, ",-(sp)\n");
|
||||
|
||||
mask = 0;
|
||||
for (regno = 0; regno < 16; regno++)
|
||||
if (regs_ever_live[regno] && ! call_used_regs[regno])
|
||||
{
|
||||
mask |= 1 << (15 - regno);
|
||||
num_saved_regs++;
|
||||
}
|
||||
|
||||
if (frame_pointer_needed)
|
||||
{
|
||||
mask &= ~ (1 << (15 - FRAME_POINTER_REGNUM));
|
||||
num_saved_regs--;
|
||||
}
|
||||
|
||||
if (num_saved_regs <= 2)
|
||||
{
|
||||
/* Store each separately in the same order moveml uses.
|
||||
Using two movel instructions instead of a single moveml
|
||||
is about 15% faster for the 68020 and 68030 at no expense
|
||||
in code size */
|
||||
|
||||
int i;
|
||||
|
||||
/* Undo the work from above. */
|
||||
for (i = 0; i< 16; i++)
|
||||
if (mask & (1 << i))
|
||||
fprintf (stream, "\tmove.l %s,-(sp)\n", reg_names[15 - i]);
|
||||
}
|
||||
else if (mask)
|
||||
{
|
||||
first = 1;
|
||||
for (regno = 0; regno < 16; regno++)
|
||||
if (mask & (1 << regno))
|
||||
{
|
||||
if (first)
|
||||
{
|
||||
fprintf (stream, "\tmovem.l %s", reg_names[15 - regno]);
|
||||
first = 0;
|
||||
}
|
||||
else
|
||||
fprintf (stream, "/%s", reg_names[15 - regno]);
|
||||
}
|
||||
fprintf (stream, ",-(sp)\n");
|
||||
}
|
||||
|
||||
if (flag_pic && current_function_uses_pic_offset_table)
|
||||
{
|
||||
fprintf (stream, "\tmove.l #__GLOBAL_OFFSET_TABLE_, %s\n",
|
||||
reg_names[PIC_OFFSET_TABLE_REGNUM]);
|
||||
fprintf (stream, "\tlea.l (pc,%s.l),%s\n",
|
||||
reg_names[PIC_OFFSET_TABLE_REGNUM],
|
||||
reg_names[PIC_OFFSET_TABLE_REGNUM]);
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
#if defined (NEWS) && defined (MOTOROLA)
|
||||
|
||||
static void
|
||||
m68k_output_function_prologue (stream, size)
|
||||
FILE *stream;
|
||||
HOST_WIDE_INT size;
|
||||
{
|
||||
register int regno;
|
||||
register int mask = 0;
|
||||
HOST_WIDE_INT fsize = ((size) + 3) & -4;
|
||||
|
||||
if (frame_pointer_needed)
|
||||
{
|
||||
if (fsize < 0x8000)
|
||||
fprintf (stream, "\tlink fp,#%d\n", -fsize);
|
||||
else if (TARGET_68020)
|
||||
fprintf (stream, "\tlink.l fp,#%d\n", -fsize);
|
||||
else
|
||||
fprintf (stream, "\tlink fp,#0\n\tsub.l #%d,sp\n", fsize);
|
||||
}
|
||||
else if (fsize)
|
||||
{
|
||||
int amt = fsize + 4;
|
||||
/* Adding negative number is faster on the 68040. */
|
||||
if (fsize + 4 < 0x8000)
|
||||
asm_fprintf (stream, "\tadd.w %0I%d,%Rsp\n", - amt);
|
||||
else
|
||||
asm_fprintf (stream, "\tadd.l %0I%d,%Rsp\n", - amt);
|
||||
}
|
||||
|
||||
for (regno = 16; regno < FIRST_PSEUDO_REGISTER; regno++)
|
||||
if (regs_ever_live[regno] && ! call_used_regs[regno])
|
||||
mask |= 1 << (regno - 16);
|
||||
|
||||
if (mask != 0)
|
||||
fprintf (stream, "\tfmovem.x #0x%x,-(sp)\n", mask & 0xff);
|
||||
|
||||
mask = 0;
|
||||
for (regno = 0; regno < 16; regno++)
|
||||
if (regs_ever_live[regno] && ! call_used_regs[regno])
|
||||
mask |= 1 << (15 - regno);
|
||||
|
||||
if (frame_pointer_needed)
|
||||
mask &= ~ (1 << (15-FRAME_POINTER_REGNUM));
|
||||
|
||||
if (exact_log2 (mask) >= 0)
|
||||
fprintf (stream, "\tmove.l %s,-(sp)\n", reg_names[15 - exact_log2 (mask)]);
|
||||
else
|
||||
if (mask) fprintf (stream, "\tmovem.l #0x%x,-(sp)\n", mask);
|
||||
}
|
||||
|
||||
#else /* !CRDS && ! (NEWS && MOTOROLA) && ! (DPX2 && MOTOROLA) */
|
||||
#else /* !CRDS */
|
||||
|
||||
static void
|
||||
m68k_output_function_prologue (stream, size)
|
||||
@ -767,8 +611,6 @@ m68k_output_function_prologue (stream, size)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif /* ! (DPX2 && MOTOROLA) */
|
||||
#endif /* ! (NEWS && MOTOROLA) */
|
||||
#endif /* !CRDS */
|
||||
|
||||
/* Return true if this function's epilogue can be output as RTL. */
|
||||
@ -913,273 +755,7 @@ m68k_output_function_epilogue (stream, size)
|
||||
fprintf (stream, "\trts\n");
|
||||
}
|
||||
|
||||
#else
|
||||
#if defined (DPX2) && defined (MOTOROLA)
|
||||
|
||||
static void
|
||||
m68k_output_function_epilogue (stream, size)
|
||||
FILE *stream;
|
||||
HOST_WIDE_INT size;
|
||||
{
|
||||
register int regno;
|
||||
register int mask, fmask;
|
||||
register int nregs;
|
||||
HOST_WIDE_INT offset, foffset, fpoffset, first = 1;
|
||||
HOST_WIDE_INT fsize = ((size) + 3) & -4;
|
||||
int big = 0;
|
||||
rtx insn = get_last_insn ();
|
||||
|
||||
/* If the last insn was a BARRIER, we don't have to write any code. */
|
||||
if (GET_CODE (insn) == NOTE)
|
||||
insn = prev_nonnote_insn (insn);
|
||||
if (insn && GET_CODE (insn) == BARRIER)
|
||||
{
|
||||
/* Output just a no-op so that debuggers don't get confused
|
||||
about which function the pc is in at this address. */
|
||||
fprintf (stream, "\tnop\n");
|
||||
return;
|
||||
}
|
||||
|
||||
nregs = 0; fmask = 0; fpoffset = 0;
|
||||
for (regno = 16; regno < 24; regno++)
|
||||
if (regs_ever_live[regno] && ! call_used_regs[regno])
|
||||
{
|
||||
nregs++;
|
||||
fmask |= 1 << (23 - regno);
|
||||
}
|
||||
|
||||
foffset = fpoffset + nregs * 12;
|
||||
nregs = 0; mask = 0;
|
||||
if (frame_pointer_needed)
|
||||
regs_ever_live[FRAME_POINTER_REGNUM] = 0;
|
||||
|
||||
for (regno = 0; regno < 16; regno++)
|
||||
if (regs_ever_live[regno] && ! call_used_regs[regno])
|
||||
{
|
||||
nregs++;
|
||||
mask |= 1 << regno;
|
||||
}
|
||||
|
||||
offset = foffset + nregs * 4;
|
||||
if (offset + fsize >= 0x8000
|
||||
&& frame_pointer_needed
|
||||
&& (mask || fmask || fpoffset))
|
||||
{
|
||||
fprintf (stream, "\tmove.l #%d,a0\n", -fsize);
|
||||
fsize = 0, big = 1;
|
||||
}
|
||||
|
||||
if (nregs <= 2)
|
||||
{
|
||||
/* Restore each separately in the same order moveml does.
|
||||
Using two movel instructions instead of a single moveml
|
||||
is about 15% faster for the 68020 and 68030 at no expense
|
||||
in code size. */
|
||||
|
||||
int i;
|
||||
|
||||
/* Undo the work from above. */
|
||||
for (i = 0; i< 16; i++)
|
||||
if (mask & (1 << i))
|
||||
{
|
||||
if (big)
|
||||
fprintf (stream, "\tmove.l -%d(%s,a0.l),%s\n",
|
||||
offset + fsize,
|
||||
reg_names[FRAME_POINTER_REGNUM],
|
||||
reg_names[i]);
|
||||
else if (! frame_pointer_needed)
|
||||
fprintf (stream, "\tmove.l (sp)+,%s\n",
|
||||
reg_names[i]);
|
||||
else
|
||||
fprintf (stream, "\tmove.l -%d(%s),%s\n",
|
||||
offset + fsize,
|
||||
reg_names[FRAME_POINTER_REGNUM],
|
||||
reg_names[i]);
|
||||
offset = offset - 4;
|
||||
}
|
||||
}
|
||||
else if (mask)
|
||||
{
|
||||
first = 1;
|
||||
for (regno = 0; regno < 16; regno++)
|
||||
if (mask & (1 << regno))
|
||||
{
|
||||
if (first && big)
|
||||
{
|
||||
fprintf (stream, "\tmovem.l -%d(%s,a0.l),%s",
|
||||
offset + fsize,
|
||||
reg_names[FRAME_POINTER_REGNUM],
|
||||
reg_names[regno]);
|
||||
first = 0;
|
||||
}
|
||||
else if (first && ! frame_pointer_needed)
|
||||
{
|
||||
fprintf (stream, "\tmovem.l (sp)+,%s",
|
||||
reg_names[regno]);
|
||||
first = 0;
|
||||
}
|
||||
else if (first)
|
||||
{
|
||||
fprintf (stream, "\tmovem.l -%d(%s),%s",
|
||||
offset + fsize,
|
||||
reg_names[FRAME_POINTER_REGNUM],
|
||||
reg_names[regno]);
|
||||
first = 0;
|
||||
}
|
||||
else
|
||||
fprintf (stream, "/%s", reg_names[regno]);
|
||||
}
|
||||
fprintf (stream, "\n");
|
||||
}
|
||||
|
||||
if (fmask)
|
||||
{
|
||||
first = 1;
|
||||
for (regno = 16; regno < 24; regno++)
|
||||
if (fmask & (1 << (23 - regno)))
|
||||
{
|
||||
if (first && big)
|
||||
{
|
||||
fprintf (stream, "\tfmovem.x -%d(%s,a0.l),%s",
|
||||
foffset + fsize,
|
||||
reg_names[FRAME_POINTER_REGNUM],
|
||||
reg_names[regno]);
|
||||
first = 0;
|
||||
}
|
||||
else if (first && ! frame_pointer_needed)
|
||||
{
|
||||
fprintf (stream, "\tfmovem.x (sp)+,%s",
|
||||
reg_names[regno]);
|
||||
first = 0;
|
||||
}
|
||||
else if (first)
|
||||
{
|
||||
fprintf (stream, "\tfmovem.x -%d(%s),%s",
|
||||
foffset + fsize,
|
||||
reg_names[FRAME_POINTER_REGNUM],
|
||||
reg_names[regno]);
|
||||
first = 0;
|
||||
}
|
||||
else
|
||||
fprintf (stream, "/%s", reg_names[regno]);
|
||||
}
|
||||
fprintf (stream, "\n");
|
||||
}
|
||||
|
||||
if (frame_pointer_needed)
|
||||
fprintf (stream, "\tunlk %s\n",
|
||||
reg_names[FRAME_POINTER_REGNUM]);
|
||||
else if (fsize)
|
||||
{
|
||||
if (fsize + 4 < 0x8000)
|
||||
fprintf (stream, "\tadd.w #%d,sp\n", fsize + 4);
|
||||
else
|
||||
fprintf (stream, "\tadd.l #%d,sp\n", fsize + 4);
|
||||
}
|
||||
|
||||
if (current_function_pops_args)
|
||||
fprintf (stream, "\trtd #%d\n", current_function_pops_args);
|
||||
else
|
||||
fprintf (stream, "\trts\n");
|
||||
}
|
||||
|
||||
#else
|
||||
#if defined (NEWS) && defined (MOTOROLA)
|
||||
|
||||
static void
|
||||
m68k_output_function_epilogue (stream, size)
|
||||
FILE *stream;
|
||||
HOST_WIDE_INT size;
|
||||
{
|
||||
register int regno;
|
||||
register int mask, fmask;
|
||||
register int nregs;
|
||||
HOST_WIDE_INT offset, foffset;
|
||||
HOST_WIDE_INT fsize = ((size) + 3) & -4;
|
||||
int big = 0;
|
||||
|
||||
nregs = 0; fmask = 0;
|
||||
for (regno = 16; regno < FIRST_PSEUDO_REGISTER; regno++)
|
||||
if (regs_ever_live[regno] && ! call_used_regs[regno])
|
||||
{
|
||||
nregs++;
|
||||
fmask |= 1 << (23 - regno);
|
||||
}
|
||||
|
||||
foffset = nregs * 12;
|
||||
nregs = 0; mask = 0;
|
||||
if (frame_pointer_needed)
|
||||
regs_ever_live[FRAME_POINTER_REGNUM] = 0;
|
||||
|
||||
for (regno = 0; regno < 16; regno++)
|
||||
if (regs_ever_live[regno] && ! call_used_regs[regno])
|
||||
{
|
||||
nregs++;
|
||||
mask |= 1 << regno;
|
||||
}
|
||||
|
||||
offset = foffset + nregs * 4;
|
||||
if (offset + fsize >= 0x8000
|
||||
&& frame_pointer_needed
|
||||
&& (mask || fmask))
|
||||
{
|
||||
fprintf (stream, "\tmove.l #%d,a0\n", -fsize);
|
||||
fsize = 0, big = 1;
|
||||
}
|
||||
|
||||
if (exact_log2 (mask) >= 0)
|
||||
{
|
||||
if (big)
|
||||
fprintf (stream, "\tmove.l (-%d,fp,a0.l),%s\n",
|
||||
offset + fsize, reg_names[exact_log2 (mask)]);
|
||||
else if (! frame_pointer_needed)
|
||||
fprintf (stream, "\tmove.l (sp)+,%s\n",
|
||||
reg_names[exact_log2 (mask)]);
|
||||
else
|
||||
fprintf (stream, "\tmove.l (-%d,fp),%s\n",
|
||||
offset + fsize, reg_names[exact_log2 (mask)]);
|
||||
}
|
||||
else if (mask)
|
||||
{
|
||||
if (big)
|
||||
fprintf (stream, "\tmovem.l (-%d,fp,a0.l),#0x%x\n",
|
||||
offset + fsize, mask);
|
||||
else if (! frame_pointer_needed)
|
||||
fprintf (stream, "\tmovem.l (sp)+,#0x%x\n", mask);
|
||||
else
|
||||
fprintf (stream, "\tmovem.l (-%d,fp),#0x%x\n",
|
||||
offset + fsize, mask);
|
||||
}
|
||||
|
||||
if (fmask)
|
||||
{
|
||||
if (big)
|
||||
fprintf (stream, "\tfmovem.x (-%d,fp,a0.l),#0x%x\n",
|
||||
foffset + fsize, fmask);
|
||||
else if (! frame_pointer_needed)
|
||||
fprintf (stream, "\tfmovem.x (sp)+,#0x%x\n", fmask);
|
||||
else
|
||||
fprintf (stream, "\tfmovem.x (-%d,fp),#0x%x\n",
|
||||
foffset + fsize, fmask);
|
||||
}
|
||||
|
||||
if (frame_pointer_needed)
|
||||
fprintf (stream, "\tunlk fp\n");
|
||||
else if (fsize)
|
||||
{
|
||||
if (fsize + 4 < 0x8000)
|
||||
fprintf (stream, "\tadd.w #%d,sp\n", fsize + 4);
|
||||
else
|
||||
fprintf (stream, "\tadd.l #%d,sp\n", fsize + 4);
|
||||
}
|
||||
|
||||
if (current_function_pops_args)
|
||||
fprintf (stream, "\trtd #%d\n", current_function_pops_args);
|
||||
else
|
||||
fprintf (stream, "\trts\n");
|
||||
}
|
||||
|
||||
#else /* !CRDS && ! (NEWS && MOTOROLA) && ! (DPX2 && MOTOROLA) */
|
||||
#else /* !CRDS */
|
||||
|
||||
static void
|
||||
m68k_output_function_epilogue (stream, size)
|
||||
@ -1501,9 +1077,6 @@ m68k_output_function_epilogue (stream, size)
|
||||
else
|
||||
fprintf (stream, "\trts\n");
|
||||
}
|
||||
|
||||
#endif /* ! (DPX2 && MOTOROLA) */
|
||||
#endif /* ! (NEWS && MOTOROLA) */
|
||||
#endif /* !CRDS */
|
||||
|
||||
/* Similar to general_operand, but exclude stack_pointer_rtx. */
|
||||
|
@ -390,7 +390,6 @@ static void expand_units PARAMS ((void));
|
||||
static rtx simplify_knowing PARAMS ((rtx, rtx));
|
||||
static rtx encode_units_mask PARAMS ((rtx));
|
||||
static void fill_attr PARAMS ((struct attr_desc *));
|
||||
/* dpx2 compiler chokes if we specify the arg types of the args. */
|
||||
static rtx substitute_address PARAMS ((rtx, rtx (*) (rtx), rtx (*) (rtx)));
|
||||
static void make_length_attrs PARAMS ((void));
|
||||
static rtx identity_fn PARAMS ((rtx));
|
||||
|
147
gcc/libgcc2.c
147
gcc/libgcc2.c
@ -1732,102 +1732,6 @@ mprotect (char *addr, int len, int prot)
|
||||
TRANSFER_FROM_TRAMPOLINE
|
||||
#endif
|
||||
|
||||
#if defined (NeXT) && defined (__MACH__)
|
||||
|
||||
/* Make stack executable so we can call trampolines on stack.
|
||||
This is called from INITIALIZE_TRAMPOLINE in next.h. */
|
||||
#ifdef NeXTStep21
|
||||
#include <mach.h>
|
||||
#else
|
||||
#include <mach/mach.h>
|
||||
#endif
|
||||
|
||||
void
|
||||
__enable_execute_stack (char *addr)
|
||||
{
|
||||
kern_return_t r;
|
||||
char *eaddr = addr + TRAMPOLINE_SIZE;
|
||||
vm_address_t a = (vm_address_t) addr;
|
||||
|
||||
/* turn on execute access on stack */
|
||||
r = vm_protect (task_self (), a, TRAMPOLINE_SIZE, FALSE, VM_PROT_ALL);
|
||||
if (r != KERN_SUCCESS)
|
||||
{
|
||||
mach_error("vm_protect VM_PROT_ALL", r);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* We inline the i-cache invalidation for speed */
|
||||
|
||||
#ifdef CLEAR_INSN_CACHE
|
||||
CLEAR_INSN_CACHE (addr, eaddr);
|
||||
#else
|
||||
__clear_cache ((int) addr, (int) eaddr);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* defined (NeXT) && defined (__MACH__) */
|
||||
|
||||
#ifdef __convex__
|
||||
|
||||
/* Make stack executable so we can call trampolines on stack.
|
||||
This is called from INITIALIZE_TRAMPOLINE in convex.h. */
|
||||
|
||||
#include <sys/mman.h>
|
||||
#include <sys/vmparam.h>
|
||||
#include <machine/machparam.h>
|
||||
|
||||
void
|
||||
__enable_execute_stack (void)
|
||||
{
|
||||
int fp;
|
||||
static unsigned lowest = USRSTACK;
|
||||
unsigned current = (unsigned) &fp & -NBPG;
|
||||
|
||||
if (lowest > current)
|
||||
{
|
||||
unsigned len = lowest - current;
|
||||
mremap (current, &len, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE);
|
||||
lowest = current;
|
||||
}
|
||||
|
||||
/* Clear instruction cache in case an old trampoline is in it. */
|
||||
asm ("pich");
|
||||
}
|
||||
#endif /* __convex__ */
|
||||
|
||||
#ifdef __sysV88__
|
||||
|
||||
/* Modified from the convex -code above. */
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <errno.h>
|
||||
#include <sys/m88kbcs.h>
|
||||
|
||||
void
|
||||
__enable_execute_stack (void)
|
||||
{
|
||||
int save_errno;
|
||||
static unsigned long lowest = USRSTACK;
|
||||
unsigned long current = (unsigned long) &save_errno & -NBPC;
|
||||
|
||||
/* Ignore errno being set. memctl sets errno to EINVAL whenever the
|
||||
address is seen as 'negative'. That is the case with the stack. */
|
||||
|
||||
save_errno=errno;
|
||||
if (lowest > current)
|
||||
{
|
||||
unsigned len=lowest-current;
|
||||
memctl(current,len,MCT_TEXT);
|
||||
lowest = current;
|
||||
}
|
||||
else
|
||||
memctl(current,NBPC,MCT_TEXT);
|
||||
errno=save_errno;
|
||||
}
|
||||
|
||||
#endif /* __sysV88__ */
|
||||
|
||||
#ifdef __sysV68__
|
||||
|
||||
#include <sys/signal.h>
|
||||
@ -1872,57 +1776,6 @@ __clear_insn_cache (void)
|
||||
}
|
||||
|
||||
#endif /* __sysV68__ */
|
||||
|
||||
#ifdef __pyr__
|
||||
|
||||
#undef NULL /* Avoid errors if stdio.h and our stddef.h mismatch. */
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/vmmac.h>
|
||||
|
||||
/* Modified from the convex -code above.
|
||||
mremap promises to clear the i-cache. */
|
||||
|
||||
void
|
||||
__enable_execute_stack (void)
|
||||
{
|
||||
int fp;
|
||||
if (mprotect (((unsigned int)&fp/PAGSIZ)*PAGSIZ, PAGSIZ,
|
||||
PROT_READ|PROT_WRITE|PROT_EXEC))
|
||||
{
|
||||
perror ("mprotect in __enable_execute_stack");
|
||||
fflush (stderr);
|
||||
abort ();
|
||||
}
|
||||
}
|
||||
#endif /* __pyr__ */
|
||||
|
||||
#if defined (sony_news) && defined (SYSTYPE_BSD)
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#include <syscall.h>
|
||||
#include <machine/sysnews.h>
|
||||
|
||||
/* cacheflush function for NEWS-OS 4.2.
|
||||
This function is called from trampoline-initialize code
|
||||
defined in config/mips/mips.h. */
|
||||
|
||||
void
|
||||
cacheflush (char *beg, int size, int flag)
|
||||
{
|
||||
if (syscall (SYS_sysnews, NEWS_CACHEFLUSH, beg, size, FLUSH_BCACHE))
|
||||
{
|
||||
perror ("cache_flush");
|
||||
fflush (stderr);
|
||||
abort ();
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* sony_news */
|
||||
#endif /* L_trampoline */
|
||||
|
||||
#ifndef __CYGWIN__
|
||||
|
184
gcc/longlong.h
184
gcc/longlong.h
@ -107,49 +107,6 @@
|
||||
#define __AND_CLOBBER_CC , "cc"
|
||||
#endif /* __GNUC__ < 2 */
|
||||
|
||||
#if (defined (__a29k__) || defined (_AM29K)) && W_TYPE_SIZE == 32
|
||||
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
|
||||
__asm__ ("add %1,%4,%5\n\taddc %0,%2,%3" \
|
||||
: "=r" ((USItype) (sh)), \
|
||||
"=&r" ((USItype) (sl)) \
|
||||
: "%r" ((USItype) (ah)), \
|
||||
"rI" ((USItype) (bh)), \
|
||||
"%r" ((USItype) (al)), \
|
||||
"rI" ((USItype) (bl)))
|
||||
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
|
||||
__asm__ ("sub %1,%4,%5\n\tsubc %0,%2,%3" \
|
||||
: "=r" ((USItype) (sh)), \
|
||||
"=&r" ((USItype) (sl)) \
|
||||
: "r" ((USItype) (ah)), \
|
||||
"rI" ((USItype) (bh)), \
|
||||
"r" ((USItype) (al)), \
|
||||
"rI" ((USItype) (bl)))
|
||||
#define umul_ppmm(xh, xl, m0, m1) \
|
||||
do { \
|
||||
USItype __m0 = (m0), __m1 = (m1); \
|
||||
__asm__ ("multiplu %0,%1,%2" \
|
||||
: "=r" ((USItype) (xl)) \
|
||||
: "r" (__m0), \
|
||||
"r" (__m1)); \
|
||||
__asm__ ("multmu %0,%1,%2" \
|
||||
: "=r" ((USItype) (xh)) \
|
||||
: "r" (__m0), \
|
||||
"r" (__m1)); \
|
||||
} while (0)
|
||||
#define udiv_qrnnd(q, r, n1, n0, d) \
|
||||
__asm__ ("dividu %0,%3,%4" \
|
||||
: "=r" ((USItype) (q)), \
|
||||
"=q" ((USItype) (r)) \
|
||||
: "1" ((USItype) (n1)), \
|
||||
"r" ((USItype) (n0)), \
|
||||
"r" ((USItype) (d)))
|
||||
#define count_leading_zeros(count, x) \
|
||||
__asm__ ("clz %0,%1" \
|
||||
: "=r" ((USItype) (count)) \
|
||||
: "r" ((USItype) (x)))
|
||||
#define COUNT_LEADING_ZEROS_0 32
|
||||
#endif /* __a29k__ */
|
||||
|
||||
#if defined (__alpha) && W_TYPE_SIZE == 64
|
||||
#define umul_ppmm(ph, pl, m0, m1) \
|
||||
do { \
|
||||
@ -275,71 +232,6 @@ UDItype __umulsidi3 (USItype, USItype);
|
||||
#define UDIV_TIME 100
|
||||
#endif /* __arm__ */
|
||||
|
||||
#if defined (__clipper__) && W_TYPE_SIZE == 32
|
||||
#define umul_ppmm(w1, w0, u, v) \
|
||||
({union {UDItype __ll; \
|
||||
struct {USItype __l, __h;} __i; \
|
||||
} __xx; \
|
||||
__asm__ ("mulwux %2,%0" \
|
||||
: "=r" (__xx.__ll) \
|
||||
: "%0" ((USItype) (u)), \
|
||||
"r" ((USItype) (v))); \
|
||||
(w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
|
||||
#define smul_ppmm(w1, w0, u, v) \
|
||||
({union {DItype __ll; \
|
||||
struct {SItype __l, __h;} __i; \
|
||||
} __xx; \
|
||||
__asm__ ("mulwx %2,%0" \
|
||||
: "=r" (__xx.__ll) \
|
||||
: "%0" ((SItype) (u)), \
|
||||
"r" ((SItype) (v))); \
|
||||
(w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
|
||||
#define __umulsidi3(u, v) \
|
||||
({UDItype __w; \
|
||||
__asm__ ("mulwux %2,%0" \
|
||||
: "=r" (__w) \
|
||||
: "%0" ((USItype) (u)), \
|
||||
"r" ((USItype) (v))); \
|
||||
__w; })
|
||||
#endif /* __clipper__ */
|
||||
|
||||
#if defined (__gmicro__) && W_TYPE_SIZE == 32
|
||||
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
|
||||
__asm__ ("add.w %5,%1\n\taddx %3,%0" \
|
||||
: "=g" ((USItype) (sh)), \
|
||||
"=&g" ((USItype) (sl)) \
|
||||
: "%0" ((USItype) (ah)), \
|
||||
"g" ((USItype) (bh)), \
|
||||
"%1" ((USItype) (al)), \
|
||||
"g" ((USItype) (bl)))
|
||||
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
|
||||
__asm__ ("sub.w %5,%1\n\tsubx %3,%0" \
|
||||
: "=g" ((USItype) (sh)), \
|
||||
"=&g" ((USItype) (sl)) \
|
||||
: "0" ((USItype) (ah)), \
|
||||
"g" ((USItype) (bh)), \
|
||||
"1" ((USItype) (al)), \
|
||||
"g" ((USItype) (bl)))
|
||||
#define umul_ppmm(ph, pl, m0, m1) \
|
||||
__asm__ ("mulx %3,%0,%1" \
|
||||
: "=g" ((USItype) (ph)), \
|
||||
"=r" ((USItype) (pl)) \
|
||||
: "%0" ((USItype) (m0)), \
|
||||
"g" ((USItype) (m1)))
|
||||
#define udiv_qrnnd(q, r, nh, nl, d) \
|
||||
__asm__ ("divx %4,%0,%1" \
|
||||
: "=g" ((USItype) (q)), \
|
||||
"=r" ((USItype) (r)) \
|
||||
: "1" ((USItype) (nh)), \
|
||||
"0" ((USItype) (nl)), \
|
||||
"g" ((USItype) (d)))
|
||||
#define count_leading_zeros(count, x) \
|
||||
__asm__ ("bsch/1 %1,%0" \
|
||||
: "=g" (count) \
|
||||
: "g" ((USItype) (x)), \
|
||||
"0" ((USItype) 0))
|
||||
#endif
|
||||
|
||||
#if defined (__hppa) && W_TYPE_SIZE == 32
|
||||
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
|
||||
__asm__ ("add %4,%5,%1\n\taddc %2,%3,%0" \
|
||||
@ -484,47 +376,6 @@ UDItype __umulsidi3 (USItype, USItype);
|
||||
#define UDIV_TIME 40
|
||||
#endif /* 80x86 */
|
||||
|
||||
#if defined (__i860__) && W_TYPE_SIZE == 32
|
||||
#if 0
|
||||
/* Make sure these patterns really improve the code before
|
||||
switching them on. */
|
||||
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
|
||||
do { \
|
||||
union \
|
||||
{ \
|
||||
DItype __ll; \
|
||||
struct {USItype __l, __h;} __i; \
|
||||
} __a, __b, __s; \
|
||||
__a.__i.__l = (al); \
|
||||
__a.__i.__h = (ah); \
|
||||
__b.__i.__l = (bl); \
|
||||
__b.__i.__h = (bh); \
|
||||
__asm__ ("fiadd.dd %1,%2,%0" \
|
||||
: "=f" (__s.__ll) \
|
||||
: "%f" (__a.__ll), "f" (__b.__ll)); \
|
||||
(sh) = __s.__i.__h; \
|
||||
(sl) = __s.__i.__l; \
|
||||
} while (0)
|
||||
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
|
||||
do { \
|
||||
union \
|
||||
{ \
|
||||
DItype __ll; \
|
||||
struct {USItype __l, __h;} __i; \
|
||||
} __a, __b, __s; \
|
||||
__a.__i.__l = (al); \
|
||||
__a.__i.__h = (ah); \
|
||||
__b.__i.__l = (bl); \
|
||||
__b.__i.__h = (bh); \
|
||||
__asm__ ("fisub.dd %1,%2,%0" \
|
||||
: "=f" (__s.__ll) \
|
||||
: "%f" (__a.__ll), "f" (__b.__ll)); \
|
||||
(sh) = __s.__i.__h; \
|
||||
(sl) = __s.__i.__l; \
|
||||
} while (0)
|
||||
#endif
|
||||
#endif /* __i860__ */
|
||||
|
||||
#if defined (__i960__) && W_TYPE_SIZE == 32
|
||||
#define umul_ppmm(w1, w0, u, v) \
|
||||
({union {UDItype __ll; \
|
||||
@ -589,8 +440,7 @@ UDItype __umulsidi3 (USItype, USItype);
|
||||
#if defined (__mc68020__) || defined(mc68020) \
|
||||
|| defined(__mc68030__) || defined(mc68030) \
|
||||
|| defined(__mc68040__) || defined(mc68040) \
|
||||
|| defined(__mcpu32__) || defined(mcpu32) \
|
||||
|| defined(__NeXT__)
|
||||
|| defined(__mcpu32__) || defined(mcpu32)
|
||||
#define umul_ppmm(w1, w0, u, v) \
|
||||
__asm__ ("mulu%.l %3,%1:%0" \
|
||||
: "=d" ((USItype) (w0)), \
|
||||
@ -658,8 +508,7 @@ UDItype __umulsidi3 (USItype, USItype);
|
||||
#if defined (__mc68020__) || defined(mc68020) \
|
||||
|| defined(__mc68030__) || defined(mc68030) \
|
||||
|| defined(__mc68040__) || defined(mc68040) \
|
||||
|| defined(__mc68060__) || defined(mc68060) \
|
||||
|| defined(__NeXT__)
|
||||
|| defined(__mc68060__) || defined(mc68060)
|
||||
#define count_leading_zeros(count, x) \
|
||||
__asm__ ("bfffo %1{%b2:%b2},%0" \
|
||||
: "=d" ((USItype) (count)) \
|
||||
@ -894,35 +743,6 @@ UDItype __umulsidi3 (USItype, USItype);
|
||||
#endif
|
||||
#endif /* Power architecture variants. */
|
||||
|
||||
#if defined (__pyr__) && W_TYPE_SIZE == 32
|
||||
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
|
||||
__asm__ ("addw %5,%1\n\taddwc %3,%0" \
|
||||
: "=r" ((USItype) (sh)), \
|
||||
"=&r" ((USItype) (sl)) \
|
||||
: "%0" ((USItype) (ah)), \
|
||||
"g" ((USItype) (bh)), \
|
||||
"%1" ((USItype) (al)), \
|
||||
"g" ((USItype) (bl)))
|
||||
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
|
||||
__asm__ ("subw %5,%1\n\tsubwb %3,%0" \
|
||||
: "=r" ((USItype) (sh)), \
|
||||
"=&r" ((USItype) (sl)) \
|
||||
: "0" ((USItype) (ah)), \
|
||||
"g" ((USItype) (bh)), \
|
||||
"1" ((USItype) (al)), \
|
||||
"g" ((USItype) (bl)))
|
||||
/* This insn works on Pyramids with AP, XP, or MI CPUs, but not with SP. */
|
||||
#define umul_ppmm(w1, w0, u, v) \
|
||||
({union {UDItype __ll; \
|
||||
struct {USItype __h, __l;} __i; \
|
||||
} __xx; \
|
||||
__asm__ ("movw %1,%R0\n\tuemul %2,%0" \
|
||||
: "=&r" (__xx.__ll) \
|
||||
: "g" ((USItype) (u)), \
|
||||
"g" ((USItype) (v))); \
|
||||
(w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
|
||||
#endif /* __pyr__ */
|
||||
|
||||
#if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32
|
||||
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
|
||||
__asm__ ("a %1,%5\n\tae %0,%3" \
|
||||
|
@ -1213,7 +1213,6 @@ do { \
|
||||
/* Define a macro to look for REG_INC notes,
|
||||
but save time on machines where they never exist. */
|
||||
|
||||
/* Don't continue this line--convex cc version 4.1 would lose. */
|
||||
#if (defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT) || defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT))
|
||||
#define FIND_REG_INC_NOTE(INSN, REG) \
|
||||
((REG) != NULL_RTX && REG_P ((REG)) \
|
||||
@ -1226,7 +1225,6 @@ do { \
|
||||
/* Indicate whether the machine has any sort of auto increment addressing.
|
||||
If not, we can avoid checking for REG_INC notes. */
|
||||
|
||||
/* Don't continue this line--convex cc version 4.1 would lose. */
|
||||
#if (defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT) || defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT))
|
||||
#define AUTO_INC_DEC
|
||||
#endif
|
||||
|
@ -1614,7 +1614,6 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
|
||||
rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
|
||||
* (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
|
||||
|
||||
/* Don't continue this line--convex cc version 4.1 would lose. */
|
||||
#if !defined(ASM_OUTPUT_ALIGNED_COMMON) && !defined(ASM_OUTPUT_ALIGNED_DECL_COMMON) && !defined(ASM_OUTPUT_ALIGNED_BSS)
|
||||
if ((unsigned HOST_WIDE_INT) DECL_ALIGN (decl) / BITS_PER_UNIT > rounded)
|
||||
warning_with_decl
|
||||
|
Loading…
Reference in New Issue
Block a user