This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
c/3403: Internal compiler error in update_equiv_regs
- To: gcc-gnats at gcc dot gnu dot org
- Subject: c/3403: Internal compiler error in update_equiv_regs
- From: Eric Doenges <Eric dot Doenges at lpr dot e-technik dot tu-muenchen dot de>
- Date: Mon, 25 Jun 2001 14:20:03 +0200
>Number: 3403
>Category: c
>Synopsis: Internal compiler error in update_equiv_regs
>Confidential: no
>Severity: critical
>Priority: medium
>Responsible: unassigned
>State: open
>Class: ice-on-legal-code
>Submitter-Id: net
>Arrival-Date: Mon Jun 25 05:26:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator: Eric Dönges
>Release: 3.0
>Organization:
Institute for Real-Time Computer Systems, TU München
>Environment:
System: Linux animal 2.2.13 #2 Thu Oct 28 17:18:12 CEST 1999 i686 unknown
Architecture: i686
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: m68k-unknown-coff
configured with: ../gcc-3.0/configure --target=m68k-coff --prefix=/NET/animal/user/doenges/local --with-gnu-as --with-gnu-ld --with-newlib --with-headers=../newlib-1.9.0/newlib/libc/include --enable-languages=c++ : (reconfigured) ../gcc-3.0/configure --target=m68k-coff --prefix=/NET/animal/user/doenges/local --with-gnu-as --with-as=/usr/local/m68k-coff/bin/as --with-gnu-ld --with-ld=/usr/local/m68k-coff/bin/ld --with-newlib --with-headers=../newlib-1.9.0/newlib/libc/include --enable-languages=c++
>Description:
When compiling code that compiled flawlessly under gcc-2.95.2, I
get the following error message:
tpu_sclk.c: In function `TPU_CalcSCLKPrescale':
tpu_sclk.c:85: Internal compiler error in update_equiv_regs, at local-alloc.c:1097
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
>How-To-Repeat:
The command line that triggered the bug:
m68k-coff-gcc -c -mcpu32 -I../tools -I/home/doenges/mps -O3 -Wall \
-fno-builtin -gcoff -Wno-multichar -DDEBUG tpu_sclk.c
And the preproccessed source (tpu_sclk.i):
# 9 "tpu_sclk.c"
# 1 "/home/doenges/mps/libmps/68k.h" 1
# 17 "/home/doenges/mps/libmps/68k.h"
unsigned short GetSR(void);
void SetSR(unsigned short sr);
# 33 "/home/doenges/mps/libmps/68k.h"
void *GetSP(void);
void *GetUSP(void);
void SetSP(void *);
void SetUSP(void *);
# 59 "/home/doenges/mps/libmps/68k.h"
void (**GetVBR(void))(void);
void SetVBR(void **vbr(void));
# 83 "/home/doenges/mps/libmps/68k.h"
unsigned short IntDisable(void);
void IntEnable(unsigned short sr);
# 95 "/home/doenges/mps/libmps/68k.h"
void Stop(unsigned short stopMask);
void LPStop(unsigned short stopMask);
# 117 "/home/doenges/mps/libmps/68k.h"
void DUMMY_READB(void *addr);
void DUMMY_READW(void *addr);
void DUMMY_READL(void *addr);
# 10 "tpu_sclk.c" 2
# 1 "/home/doenges/mps/libmps/tpu.h" 1
# 18 "/home/doenges/mps/libmps/tpu.h"
# 1 "/home/doenges/mps/libmps/sim.h" 1
# 34 "/home/doenges/mps/libmps/sim.h"
struct SIM_Registers {
volatile unsigned short
SIMCR,
SIMTR,
SYNCR;
volatile unsigned char
dummy0,
RSR;
volatile unsigned short
SIMTRE,
dummy1, dummy2, dummy3;
volatile unsigned char
dummy4,
PORTE0, dummy5,
PORTE1, dummy6,
DDRE, dummy7,
PEPAR, dummy8,
PORTF0, dummy9,
PORTF1, dummy10,
DDRF, dummy11,
PFPAR, dummy12,
SYPCR;
volatile unsigned short
PICR,
PITR;
volatile unsigned char
dummy13,
SWSR;
volatile unsigned short
dummy14, dummy15, dummy16, dummy17,
TSTMSRA,
TSTMSRB,
TSTSC,
TSTRC,
CREG,
DREG,
dummy18, dummy19;
volatile unsigned char
dummy20,
PORTC;
volatile unsigned short
dummy21,
CSPAR0, CSPAR1,
CSBARBT,CSORBT,
CSBAR0, CSOR0,
CSBAR1, CSOR1,
CSBAR2, CSOR2,
CSBAR3, CSOR3,
CSBAR4, CSOR4,
CSBAR5, CSOR5,
CSBAR6, CSOR6,
CSBAR7, CSOR7,
CSBAR8, CSOR8,
CSBAR9, CSOR9,
CSBAR10,CSOR10,
dummy22, dummy23, dummy24, dummy25;
};
unsigned int GetSystemClock(void);
# 19 "/home/doenges/mps/libmps/tpu.h" 2
# 145 "/home/doenges/mps/libmps/tpu.h"
struct TPU_Registers {
volatile unsigned short
TPUMCR,
TCR,
DSCR,
DSSR,
TICR,
CIER,
CFSR0, CFSR1, CFSR2, CFSR3,
HSQR0, HSQR1,
HSRR0, HSRR1,
CPR0, CPR1,
CISR,
LR,
SGLR,
DCNR;
};
# 216 "/home/doenges/mps/libmps/tpu.h"
void TPU_Init(short vector, short priority, short TCR1_prescaler,
short TCR2_prescaler, short TCR2_mode);
void TPU_InstallHandler(unsigned short channel, void (*handler)(short));
void TPU_EnableInterrupt(unsigned short channel, short enable);
void TPU_CISRLateClear(unsigned short channel, short enable);
void TPU_Control(short enable);
void TPU_SetPriority(unsigned short channel, unsigned short priority);
void TPU_ConfigureChannel(unsigned short channel, short function,
short hsqr, short hsrr, short priority,
short num_parameters, ...);
unsigned short TPU_GetTCR1Prescale(void);
void TPU_ConfigurePPWA(unsigned short channel, short periods);
unsigned short TPU_GetPPWACount(unsigned short channel);
unsigned int TPU_GetPPWACount24(unsigned short channel);
void TPU_ConfigurePWM(unsigned short channel, unsigned short period,
unsigned short hi_time);
void TPU_SetPWM(unsigned short channel, unsigned short period,
unsigned short hi_time);
void TPU_ConfigureITC(unsigned short channel,
unsigned short edge_mode,
unsigned short max_count);
unsigned short TPU_GetTransCount(unsigned short channel);
unsigned short TPU_GetTransTime(unsigned short channel);
void TPU_ConfigureOC(unsigned short channel);
unsigned short TPU_RequestTCR1(unsigned short channel);
unsigned short TPU_GetTCR1(void);
void TPU_PulseOC(unsigned short channel, unsigned short offset, short mode);
void TPU_ConfigureDO(unsigned short channel);
void TPU_ConfigureDI(unsigned short channel);
void TPU_ConfigureDIT(unsigned short channel, unsigned short edge_mode);
void TPU_ConfigureDIM(unsigned short channel, unsigned short match_rate);
unsigned short TPU_GetPin(unsigned short channel);
void TPU_SetPin(unsigned short channel, unsigned short what);
unsigned short TPU_ReadPin(unsigned short channel);
void TPU_ConfigureUAT(unsigned short channel,
unsigned short match_rate,
unsigned short data_size,
unsigned char parity);
void TPU_ConfigureUAR(unsigned short channel,
unsigned short match_rate,
unsigned short data_size,
unsigned char parity);
int TPU_SerialOut(unsigned short channel, unsigned short data);
int TPU_SerialBusyOut(unsigned short channel, unsigned short data);
int TPU_SerialIn(unsigned short channel);
int TPU_SerialBusyIn(unsigned short channel);
# 11 "tpu_sclk.c" 2
# 1 "tpu_sclk.h" 1
# 15 "tpu_sclk.h"
void TPU_ConfigureSCLK(unsigned short channel, unsigned long clk_prescale);
void TPU_SetSCLKPrescale(unsigned short channel, unsigned long clk_prescale);
unsigned int TPU_CalcSCLKPrescale(unsigned int usec);
unsigned short TPU_GetSCLK(unsigned short channel);
unsigned short TPU_GetSCLKMatch(unsigned short channel);
void TPU_SetSCLKMatch(unsigned short channel, unsigned short match);
# 13 "tpu_sclk.c" 2
void TPU_ConfigureSCLK(unsigned short channel,
unsigned long clk_prescale)
{
TPU_ConfigureChannel(channel, 6, 0, 3, 3, 6,
0, 0x8C,
1, 0x0000,
2, (short)(clk_prescale >> 16),
3, (short)(clk_prescale & 0xFFFF),
4, 0,
5, 0);
}
void TPU_SetSCLKPrescale(unsigned short channel, unsigned long clk_prescale)
{
*((unsigned long *)0xFFFF00 + (channel << 2) + 1) = (clk_prescale);
}
static unsigned int __calc_sclk(unsigned int base_rate, unsigned int usec);
unsigned int TPU_CalcSCLKPrescale(unsigned int usec)
{
struct TPU_Registers *tpu = (struct TPU_Registers *)0xFFFE00;
short prescale;
prescale = 4 << ((tpu->TPUMCR & 0x6000) >> 13);
if (!(tpu->TPUMCR & (1<<6))) {
prescale <<= 3;
}
return __calc_sclk((32768U * 512U) / prescale, usec);
}
asm(
"__calc_sclk:\n"
" move.l %d2,-(%sp)\n"
" move.l 8(%sp),%d0\n"
" move.l 12(%sp),%d2\n"
" mulu.l %d0,%d1:%d2\n"
" swap %d1\n"
" swap %d2\n"
" move.w %d2,%d1\n"
" clr.w %d2\n"
" divu.l #1000000,%d1:%d2\n"
" move.l %d2,%d0\n"
" move.l (%sp)+,%d2\n"
" rts\n"
);
unsigned short TPU_GetSCLK(unsigned short channel)
{
return *((volatile unsigned short *)0xFFFF00 + ((channel) << 3) + (4));
}
unsigned short TPU_GetSCLKMatch(unsigned short channel)
{
return *((volatile unsigned short *)0xFFFF00 + ((channel) << 3) + (0));
}
void TPU_SetSCLKMatch(unsigned short channel, unsigned short match)
{
*((volatile unsigned short *)0xFFFF00 + ((channel) << 3) + (5)) = (match);
}
>Fix:
???
>Release-Note:
>Audit-Trail:
>Unformatted: