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