Mercurial > hg > Members > kono > Cerium
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 */