This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

c/3403: Internal compiler error in update_equiv_regs



>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:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]