na builderze Th dzieja sie dziwne rzeczy.

processor    : 0
cpu       : 7450
clock      : 700MHz
revision    Â: 2.1 (pvr 8000 0201)
bogomips    Â: 696.32
machine     : PowerMac4,4
motherboard   : PowerMac4,4 MacRISC2 MacRISC Power Macintosh
detected as   : 80 (eMac)
pmac flags   Â: 00000001
L2 cache    Â: 256K unified
memory     Â: 384MB
pmac-generation : NewWorld

Linux anduril 2.6.8 #1 Tue Oct 19 18:04:24 UTC 2004 ppc
          PowerMac4,4 unknown PLD Linux

ten procek ma na pewno altivec-a, a program testujacy
sypie sie na instrukcji `vand` z SIGSEGV. no naprawde cudownie.

Dump of assembler code for function arch_accel:
0x10000520 <arch_accel+0>:   Âmflr  Âr0
0x10000524 <arch_accel+4>:   Âlis   r4,4096
0x10000528 <arch_accel+8>:   Âstwu  Âr1,-16(r1)
0x1000052c <arch_accel+12>:   addi  Âr4,r4,1228
0x10000530 <arch_accel+16>:   li   Âr3,4
0x10000534 <arch_accel+20>:   stw   r0,20(r1)
0x10000538 <arch_accel+24>:   bl   Â0x10010a48 <signal>
0x1000053c <arch_accel+28>:   lis   r3,4097
0x10000540 <arch_accel+32>:   li   Âr4,1
0x10000544 <arch_accel+36>:   addi  Âr3,r3,2704
0x10000548 <arch_accel+40>:   bl   Â0x10010a40 <__sigsetjmp>
0x1000054c <arch_accel+44>:   cmpwi  cr7,r3,0
0x10000550 <arch_accel+48>:   li   Âr4,0
0x10000554 <arch_accel+52>:   li   Âr3,4
0x10000558 <arch_accel+56>:   li   Âr11,-1
0x1000055c <arch_accel+60>: Â Â beq- Â Âcr7,0x10000578 <arch_accel+88>
0x10000560 <arch_accel+64>:   bl   Â0x10010a48 <signal>
0x10000564 <arch_accel+68>:   lwz   r0,20(r1)
0x10000568 <arch_accel+72>:   li   Âr3,0
0x1000056c <arch_accel+76>:   addi  Âr1,r1,16
0x10000570 <arch_accel+80>:   mtlr  Âr0
0x10000574 <arch_accel+84>: Â Â blr
0x10000578 <arch_accel+88>:   li   Âr0,1
0x1000057c <arch_accel+92>:   lis   r9,4097
0x10000580 <arch_accel+96>:   stw   r0,2540(r9)
0x10000584 <arch_accel+100>: Â Âmtvrsave r11
0x10000588 <arch_accel+104>:  Âvand  Âv0,v0,v0   <= segmentation fault
0x1000058c <arch_accel+108>:  Âli   Âr3,4
0x10000590 <arch_accel+112>:  Âli   Âr4,0
0x10000594 <arch_accel+116>:  Âbl   Â0x10010a48 <signal>
0x10000598 <arch_accel+120>:  Âlwz   r0,20(r1)
0x1000059c <arch_accel+124>:  Âli   Âr3,1
0x100005a0 <arch_accel+128>:  Âaddi  Âr1,r1,16
0x100005a4 <arch_accel+132>:  Âmtlr  Âr0
0x100005a8 <arch_accel+136>: Â Âblr

-- 
The only thing necessary for the triumph of evil
  is for good men to do nothing.
                                           - Edmund Burke
#include <setjmp.h>
#include <signal.h>

static sigjmp_buf jmpbuf;
static volatile sig_atomic_t canjump = 0;

void sigill_handler(int sig)
{
        if (!canjump)
        {
                signal(sig, SIG_DFL);
                raise(sig);
        }
        canjump = 0;
        siglongjmp(jmpbuf, 1);
}

int arch_accel()
{
        signal(SIGILL, sigill_handler);
        if (sigsetjmp(jmpbuf, 1))
        {
                signal(SIGILL, SIG_DFL);
                return 0;
        }
        canjump = 1;
        asm volatile
        (
                "mtspr 256, %0          \n\t"
                "vand %%v0, %%v0, %%v0  \n\t"
                :
                : "r" (-1)
        );
        signal(SIGILL, SIG_DFL);
        return 1;
}

int main(int argc, char** argv)
{
        return arch_accel();
}
_______________________________________________
pld-devel-pl mailing list
pld-devel-pl@pld-linux.org
http://lists.pld-linux.org/mailman/listinfo/pld-devel-pl

Odpowiedź listem elektroniczym