view TaskManager/kernel/spe/main.cc @ 3:2356238ebea7

*** empty log message ***
author gongo
date Tue, 05 Feb 2008 20:22:50 +0900
parents
children
line wrap: on
line source

#include <stdio.h>
#include <unistd.h>
#include "SpeManager.h"

int add(void*, void*);
int sub(void*, void*);
int mul(void*, void*);
int div(void*, void*);
int sum(void*, void*);
int sum2(void*, void*);

int (*func_list[16])(void* wbuf, void* rbuf) = {add, sub, mul, div, sum, sum2, 0};

int
add(void *wbuf, void *rbuf)
{
    int *ret = (int*)wbuf;
    int *data = (int*)rbuf;

    *ret = data[0] + data[1];

    return sizeof(int);
}

int
sub(void *wbuf, void *rbuf)
{
    int *ret = (int*)wbuf;
    int *data = (int*)rbuf;

    *ret = data[0]-data[1];

    return sizeof(int);
}

int
mul(void *wbuf, void *rbuf)
{
    int *ret = (int*)wbuf;
    int *data = (int*)rbuf;

    *ret = data[0]*data[1];

    return sizeof(int);
}

int
div(void *wbuf, void *rbuf)
{
    int *ret = (int*)wbuf;
    int *data = (int*)rbuf;

    *ret = data[0]/data[1];

    return sizeof(int);
}

int
sum(void *wbuf, void *rbuf)
{
    int *ret = (int*)wbuf;
    int *data = (int*)rbuf;
    int i;

    *ret = 0;

    for (i = 0; i < 16; i++) {
	*ret += data[i];
    }

    return sizeof(int);
}

int
sum2(void *wbuf, void *rbuf)
{
    int *ret = (int*)wbuf;
    int *data = (int*)rbuf;
    int i;

    *ret = 0;

    for (i = 0; i < 64; i++) {
	*ret += data[i*4];
    }

    return sizeof(int);
}

#ifdef CELL

#include "dma_spe.h"

int
main(unsigned long long speid,
     unsigned long long argc, unsigned long long argv)
{
    SpeManager *manager = new SpeManager();
    DmaManager *connect = new SpeDmaManager();
    manager->set_connect(connect);
    
    printf("[SPE] start\n");

    manager->init();
    manager->run();
    manager->finish();

    return 0;
}
#else

#endif /* CELL */