Here is a reduced test case te.c which triggers the
problem:   

Source code te.c, stripped down from events.c.
typedef struct event_s
{
        int type;
        int code;
        int dx, dy;
        int x, y;
} event_t;

#define MAX_EVENTS 32

static event_t eventqueue[MAX_EVENTS];
static int eventhead, eventpos;


int ev_postevent(event_t *ev)
{
        int nextevent;
        nextevent = (eventhead+1)%MAX_EVENTS;
        if (nextevent == eventpos)
                return 0;
        eventqueue[eventhead] = *ev;
        eventhead = nextevent;
        return 1;
}

Compiling te.c
gcc -v -O -c te.c -fschedule-insns  -save-temps 
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.0/specs
Configured with: ../gcc/configure --enable-shared --disable-nls --enable-threads=posix 
--enable-languages=c,c++,f77,objc
Thread model: posix
gcc version 3.0 20010615 (prerelease)
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.0/cpp0 -lang-c -v -D__GNUC__=3 
-D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ 
-D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__OPTIMIZE__ 
-D__STDC_HOSTED__=1 -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ 
-D__tune_i686__ -D__tune_pentiumpro__ te.c te.i
GNU CPP version 3.0 20010615 (prerelease) (cpplib) (i386 Linux/ELF)
ignoring nonexistent directory "/usr/local/i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.0/include
 /usr/include
End of search list.
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.0/cc1 -fpreprocessed te.i -quiet -dumpbase 
te.c -O -version -fschedule-insns -o te.s
GNU CPP version 3.0 20010615 (prerelease) (cpplib) (i386 Linux/ELF)
GNU C version 3.0 20010615 (prerelease) (i686-pc-linux-gnu)
        compiled by GNU C version 3.0 20010615 (prerelease).
te.c: In function `ev_postevent':
te.c:25: Unable to find a register to spill in class `AREG'.
te.c:25: This is the insn:
(insn 4 38 13 (set (reg/v/f:SI 42)
        (mem/f:SI (reg/f:SI 16 argp) 0)) 35 {*movsi_1} (nil)
    (expr_list:REG_EQUIV (mem/f:SI (reg/f:SI 16 argp) 0)
        (nil)))
te.c:25: confused by earlier errors, bailing out

Preprocessed source te.i

# 2 "te.c"
typedef struct event_s
{
        int type;
        int code;
        int dx, dy;
        int x, y;
} event_t;



static event_t eventqueue[32];
static int eventhead, eventpos;


int ev_postevent(event_t *ev)
{
        int nextevent;
        nextevent = (eventhead+1)%32;
        if (nextevent == eventpos)
                return 0;
        eventqueue[eventhead] = *ev;
        eventhead = nextevent;
        return 1;
}

Hope this helps,

Peter Schmid

Reply via email to