[LUGA] Mit freundlicher Unterstützung von:
WSR

Mail Thread Index


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [luga] gcc reg allocator



On Wednesday 15 September 2004 16:03, Clifford Wolf wrote:
>
> dafuer bekomm' ich vom compiler die meldung
>
> wrapper.c:37: error: can't find a register in class `BREG' while reloading
> `asm'
>

Welche gcc Version verwendest Du? Ich habe bekomme mit gcc version 3.2.2
keinerlei Fehlermeldungen, zuerst habe ich vermutet na gut vielleicht ist
da gerade %ebx frei, darum habe ich den Code etwas geändert in:

static int wrapper_debug_out(char *txt) {
        long len = 0;
        long a,b;

        a=5;
        b=2;

        asm volatile ("movl %[a], %[b]"
                      :[b] "=b" ((long) (b))
                      :[a] "a" ((long) (a))
                     );

        while (txt[len]) len++;

        asm volatile (
                "int $0x80"
                :
                :
                "a" ((long)(4)),        /* write  */
                "b" ((long)(2)),        /* stderr */
                "c" ((long)(txt)),      /* text   */
                "d" ((long)(len))       /* length */
        );
        return a+b;
}

was mir dann folgenden Assembler Code liefert:

wrapper_debug_out:
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ebx
        subl    $12, %esp
        movl    $0, -8(%ebp)
        movl    $5, -12(%ebp)
        movl    $2, -16(%ebp)
        movl    -12(%ebp), %eax
#APP
        movl %eax, %ebx
#NO_APP
        movl    %ebx, %eax
        movl    %eax, -16(%ebp)
.L2:
        movl    -8(%ebp), %eax
        addl    8(%ebp), %eax
        cmpb    $0, (%eax)
        jne     .L4
        jmp     .L3
.L4:
        leal    -8(%ebp), %eax
        incl    (%eax)
        jmp     .L2
.L3:
        movl    $4, %eax
        movl    $2, %ebx
        movl    8(%ebp), %ecx
        movl    -8(%ebp), %edx
#APP
        int $0x80
#NO_APP
        movl    -16(%ebp), %eax
        addl    -12(%ebp), %eax
        addl    $12, %esp
        popl    %ebx
        leave
        ret

>
> kann ich dem register allocator irgendwie sagen dass er %ebx gefaelligst
> selbst pushen soll wenn es gerade nicht frei ist?
>

Bei mir (mit gcc 3.2.2 unter FreeBSD) tut er es, wenn ich das richtig sehe.

Liebe Grüße

Alex




powered by LINUX the choice of a gnu generation
linux user group austria;
Suche
Suche
Letzte Änderung:
webmaster@luga.at
25. Juni