# HG changeset patch # User Shinji KONO # Date 1279268629 -32400 # Node ID bed529c55eda015cb6ef074a478ca6dcfb643b0c # Parent bfc61d38c00453c29962e51fa3c89cac6a48d05d add alignment of classes in SPU width and height are automatically set in frame buffer API diff -r bfc61d38c004 -r bed529c55eda Renderer/Engine/Makefile.def --- a/Renderer/Engine/Makefile.def Fri Jul 16 00:13:45 2010 +0900 +++ b/Renderer/Engine/Makefile.def Fri Jul 16 17:23:49 2010 +0900 @@ -5,7 +5,7 @@ ABIBIT = 32 ABI = -m$(ABIBIT) CC = g++ -OPT = -g -DSPE_CREATE_POLYGON #-O2 +OPT = -g -DSPE_CREATE_POLYGON -O9 CFLAGS = -g -Wall $(ABI) $(OPT) # -DDEBUG INCLUDE = -I$(CERIUM)/include/TaskManager -I. diff -r bfc61d38c004 -r bed529c55eda Renderer/Engine/ViewerDevice.h --- a/Renderer/Engine/ViewerDevice.h Fri Jul 16 00:13:45 2010 +0900 +++ b/Renderer/Engine/ViewerDevice.h Fri Jul 16 17:23:49 2010 +0900 @@ -11,6 +11,10 @@ ViewerDevice(TaskManager *m) {}; + int width; + int height; + int bpp; + /* override function */ virtual Uint32 *video_init(TaskManager *manager, int bpp, int width, int height) = 0; virtual void clean_pixels() = 0; diff -r bfc61d38c004 -r bed529c55eda Renderer/Engine/fb.h --- a/Renderer/Engine/fb.h Fri Jul 16 00:13:45 2010 +0900 +++ b/Renderer/Engine/fb.h Fri Jul 16 17:23:49 2010 +0900 @@ -14,8 +14,6 @@ #include using namespace std; -#define DEVICE_NAME "/dev/fb0" -#define DIV_BYTE 8 /* function prototype */ void send_current_error_msg(const char *ptr); @@ -24,78 +22,15 @@ /* Don't put real function in a header... */ - -int get_fbdev_addr(void) -{ - int fd_framebuffer ; - struct fb_var_screeninfo vinfo; - struct fb_fix_screeninfo finfo; - long int screensize ; - //long int location; - char *fbptr ; - char tmp[DIV_BYTE*10]; - - //int x , y ; +typedef struct screen_info { int xres,yres,vbpp,line_len; - //unsigned short tcolor ; - - /* 読み書き用にファイルを開く */ - fd_framebuffer = open( DEVICE_NAME , O_RDWR); - if ( !fd_framebuffer ) { - send_current_error_msg("Framebuffer device open error !"); - exit(1); - } - send_current_information("The framebuffer device was opened !"); - - /* 固定スクリーン情報取得 */ - if ( ioctl( fd_framebuffer , FBIOGET_FSCREENINFO , &finfo ) ) { - send_current_error_msg("Fixed information not gotton !"); - exit(2); - } + char *fbptr; +} ScreenInfo , *ScreenInfoPtr; - /* 変動スクリーン情報取得 */ - if ( ioctl( fd_framebuffer , FBIOGET_VSCREENINFO , &vinfo ) ) { - send_current_error_msg("Variable information not gotton !"); - exit(3); - } - xres = vinfo.xres ; - yres = vinfo.yres ; - vbpp = vinfo.bits_per_pixel ; - line_len = finfo.line_length ; - sprintf( tmp , "%d(pixel)x%d(line), %dbpp(bits per pixel)",xres,yres,vbpp); - send_current_information( tmp ); - /* バイト単位でのスクリーンのサイズを計算 */ - screensize = xres * yres * vbpp / DIV_BYTE ; - - /* デバイスをメモリにマップする */ - fbptr = (char *)mmap(0,screensize,PROT_READ | PROT_WRITE,MAP_SHARED,fd_framebuffer,0); - if ( (int)fbptr == -1 ) { - send_current_error_msg("Don't get framebuffer device to memory !"); - exit(4); - } - send_current_information("The framebuffer device was mapped !"); - - printf("fb: 0x%x \n", (unsigned int)fbptr); - return (int)fbptr; - //munmap(fbptr,screensize); - //close(fd_framebuffer); - //return 0; -} - -void send_current_error_msg(const char *ptr) -{ - fprintf( stderr , "%s\n" , ptr ); -} - -void send_current_information(const char *ptr) -{ - fprintf( stdout , "%s\n" , ptr ); -} -#else /* !defined(__linux__) */ -int get_fbdev_addr(void) {return 0;} -#endif /* defined(__linux__) */ - -extern int get_fbdev_addr(void); #endif + +extern ScreenInfo get_fbdev_addr(void); + +#endif diff -r bfc61d38c004 -r bed529c55eda Renderer/Engine/main.cc --- a/Renderer/Engine/main.cc Fri Jul 16 00:13:45 2010 +0900 +++ b/Renderer/Engine/main.cc Fri Jul 16 17:23:49 2010 +0900 @@ -17,15 +17,9 @@ /* const char *usr_help_str = "Usage: ./test_nogl [OPTION]\n\ -cpu Number of SPE (default 1)\n\ - -width, -height window size (default 640x480)\n\ - -sg Draw SceneGraph\n\ - 0: Joystick の 丸ボタン(Keyboard だとx) を押すと、キューブが二つに分かれる\n\ - 1: 0 のキューブが大きい版\n\ - 2: テクスチャテスト:576x384\n\ - 3: テクスチャテスト:1024x768\n\ - 4: テクスチャテスト:2048x1536\n\ - 5: 地球が動き、その周りを月が自転、公転する\n\ - 6 以降: キューブが跳ね返りながら、勝手にキューブが増えて行く\n"; + -width, -height window size (default 640x480), -bpp bits per pixcel\n\ + -video {sdl|fb} in case of frame buffer, width,height,bpp is automatically set\n\ + \n"; */ int @@ -94,7 +88,6 @@ void TMend(TaskManager *manager) { - printf("test_nogl end\n"); } #endif diff -r bfc61d38c004 -r bed529c55eda Renderer/Engine/task/CreatePolygonFromSceneGraph.cc --- a/Renderer/Engine/task/CreatePolygonFromSceneGraph.cc Fri Jul 16 00:13:45 2010 +0900 +++ b/Renderer/Engine/task/CreatePolygonFromSceneGraph.cc Fri Jul 16 17:23:49 2010 +0900 @@ -15,6 +15,7 @@ #define PP_LOAD 12 #define PP_STORE 13 +#if !SPE_CREATE_POLYGON /** * ベクトルに行列を乗算する * @param[out] v vector (float[4]) @@ -48,6 +49,7 @@ v[i] = t[0]*m[i] + t[1]*m[i+4] + t[2]*m[i+8]; } } +#endif /** @@ -247,8 +249,8 @@ free(pp); free(send_pp); - return 0; #endif + return 0; } diff -r bfc61d38c004 -r bed529c55eda Renderer/Engine/viewer.cc --- a/Renderer/Engine/viewer.cc Fri Jul 16 00:13:45 2010 +0900 +++ b/Renderer/Engine/viewer.cc Fri Jul 16 17:23:49 2010 +0900 @@ -45,14 +45,16 @@ Viewer::Viewer(TaskManager *m, ViewerDevice *vd, int b, int w, int h, int _num) { - bpp = b; - width = w; - height = h; spe_num = _num; manager = m; + dev = vd; pixels = dev->video_init(manager, b, w, h); + width = dev->width; + height = dev->height; + bpp = dev->bpp; + } int diff -r bfc61d38c004 -r bed529c55eda Renderer/Engine/viewerFB.cc --- a/Renderer/Engine/viewerFB.cc Fri Jul 16 00:13:45 2010 +0900 +++ b/Renderer/Engine/viewerFB.cc Fri Jul 16 17:23:49 2010 +0900 @@ -1,11 +1,101 @@ #include "viewerFB.h" #include "fb.h" +#include #define default_sdl_flag SDL_INIT_TIMER | SDL_INIT_JOYSTICK -//extern void post2runLoop(void *); + ViewerFB::ViewerFB() {} ViewerFB::~ViewerFB() {} +#if defined(__linux__) + +#define DEVICE_NAME "/dev/fb0" +#define DIV_BYTE 8 + + +ScreenInfo get_fbdev_addr(void) +{ + ScreenInfo info; + int fd_framebuffer ; + struct fb_var_screeninfo vinfo; + struct fb_fix_screeninfo finfo; + long int screensize ; + //long int location; + char *fbptr ; + char tmp[DIV_BYTE*10]; + + //int x , y ; + int xres,yres,vbpp,line_len; + //unsigned short tcolor ; + + /* 読み書き用にファイルを開く */ + fd_framebuffer = open( DEVICE_NAME , O_RDWR); + if ( !fd_framebuffer ) { + send_current_error_msg("Framebuffer device open error !"); + exit(1); + } + send_current_information("The framebuffer device was opened !"); + + /* 固定スクリーン情報取得 */ + if ( ioctl( fd_framebuffer , FBIOGET_FSCREENINFO , &finfo ) ) { + send_current_error_msg("Fixed information not gotton !"); + exit(2); + } + + /* 変動スクリーン情報取得 */ + if ( ioctl( fd_framebuffer , FBIOGET_VSCREENINFO , &vinfo ) ) { + send_current_error_msg("Variable information not gotton !"); + exit(3); + } + xres = vinfo.xres ; + yres = vinfo.yres ; + vbpp = vinfo.bits_per_pixel ; + line_len = finfo.line_length ; + sprintf( tmp , "%d(pixel)x%d(line), %dbpp(bits per pixel)",xres,yres,vbpp); + send_current_information( tmp ); + + /* バイト単位でのスクリーンのサイズを計算 */ + screensize = xres * yres * vbpp / DIV_BYTE ; + + /* デバイスをメモリにマップする */ + fbptr = (char *)mmap(0,screensize,PROT_READ | PROT_WRITE,MAP_SHARED,fd_framebuffer,0); + if ( (int)fbptr == -1 ) { + send_current_error_msg("Don't get framebuffer device to memory !"); + exit(4); + } + send_current_information("The framebuffer device was mapped !"); + + printf("fb: 0x%x \n", (unsigned int)fbptr); + info.xres = xres; + info.yres = yres; + info.vbpp = vbpp; + info.line_len = line_len; + info.fbptr = fbptr; + + return info; + //munmap(fbptr,screensize); + //close(fd_framebuffer); + //return 0; +} + +void send_current_error_msg(const char *ptr) +{ + fprintf( stderr , "%s\n" , ptr ); +} + +void send_current_information(const char *ptr) +{ + fprintf( stdout , "%s\n" , ptr ); +} + +#else /* !defined(__linux__) */ +ScreenInfo get_fbdev_addr(void) { + ScreenInfo tmp = {0,0,0,0}; + return tmp; +} +#endif /* defined(__linux__) */ + + Uint32 * ViewerFB::video_init(TaskManager *manager, int bpp, int width, int height) { @@ -16,11 +106,16 @@ exit(1); } - Uint32 *pixels = (Uint32*)get_fbdev_addr(); + screen_info = get_fbdev_addr(); + Uint32 *pixels = (Uint32*) screen_info.fbptr; if (pixels == 0) { + fprintf(stderr, "Cannot get frame buffer!\n"); pixels = (new Uint32[width*height*32/8]); } + width = screen_info.xres; + height = screen_info.yres; + bpp = screen_info.vbpp; return pixels; } @@ -28,8 +123,6 @@ void ViewerFB::clean_pixels() { - //bzero(pixels, sizeof(int)*width*height); - //memset(pixels, 0xFF, sizeof(int)*width*height); } void diff -r bfc61d38c004 -r bed529c55eda Renderer/Engine/viewerFB.h --- a/Renderer/Engine/viewerFB.h Fri Jul 16 00:13:45 2010 +0900 +++ b/Renderer/Engine/viewerFB.h Fri Jul 16 17:23:49 2010 +0900 @@ -1,6 +1,7 @@ #ifndef INCLUDED_VIEWER_FB #define INCLUDED_VIEWER_FB +#include "fb.h" #include "ViewerDevice.h" class ViewerFB : public ViewerDevice { @@ -8,6 +9,7 @@ ViewerFB(TaskManager *manager) {}; ViewerFB(); virtual ~ViewerFB(); + ScreenInfo screen_info ; /* override function */ Uint32 *video_init(TaskManager *manager, int bpp, int width, int height); diff -r bfc61d38c004 -r bed529c55eda Renderer/Engine/viewerSDL.cc --- a/Renderer/Engine/viewerSDL.cc Fri Jul 16 00:13:45 2010 +0900 +++ b/Renderer/Engine/viewerSDL.cc Fri Jul 16 17:23:49 2010 +0900 @@ -27,6 +27,9 @@ SDL_Quit(); exit(1); } + this->width = screen->w; + this->height = screen->h; + this->bpp = screen->format->BitsPerPixel; p = (Uint32*)manager->allocate(screen->pitch*height); bitmap = SDL_CreateRGBSurfaceFrom((void *)p, diff -r bfc61d38c004 -r bed529c55eda Renderer/Test/Makefile.cell --- a/Renderer/Test/Makefile.cell Fri Jul 16 00:13:45 2010 +0900 +++ b/Renderer/Test/Makefile.cell Fri Jul 16 17:23:49 2010 +0900 @@ -11,7 +11,7 @@ .cc.o: $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ -ALL = spe-main ball_bound boss1_action direction gaplant ieshoot node panel universe untitled vacuum dynamic viewer SgRootChange property_test create_task property_universe chain_old property_chain aquarium +ALL = spe-main ball_bound boss1_action direction gaplant ieshoot node panel universe untitled vacuum dynamic viewer SgRootChange property_test create_task property_universe chain_old property_chain # aquarium all: $(ALL) diff -r bfc61d38c004 -r bed529c55eda Renderer/Test/Makefile.def --- a/Renderer/Test/Makefile.def Fri Jul 16 00:13:45 2010 +0900 +++ b/Renderer/Test/Makefile.def Fri Jul 16 17:23:49 2010 +0900 @@ -4,7 +4,7 @@ ABIBIT = 32 ABI = -m$(ABIBIT) CC = g++ -CFLAGS = -g -Wall $(ABI) # -O -DDEBUG +CFLAGS = -g -Wall $(ABI) -O9 # -O -DDEBUG INCLUDE = -I$(CERIUM)/include/TaskManager -I$(CERIUM)/Renderer/Engine -I. -I$(CERIUM)/include/Cerium LIBS = -L$(CERIUM)/TaskManager -L$(CERIUM)/Renderer/Engine $(ABI) diff -r bfc61d38c004 -r bed529c55eda TaskManager/Cell/spe/CellDmaManager.h --- a/TaskManager/Cell/spe/CellDmaManager.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/Cell/spe/CellDmaManager.h Fri Jul 16 17:23:49 2010 +0900 @@ -18,7 +18,7 @@ typedef struct dma_list { uint32 addr; // should be memaddr, but in Cell's specification... uint32 size; - } DmaList, *DmaListPtr; + } __attribute__ ((aligned (DEFAULT_ALIGNMENT))) DmaList, *DmaListPtr; CellDmaManager() ; @@ -53,6 +53,6 @@ /* end */ -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); #endif diff -r bfc61d38c004 -r bed529c55eda TaskManager/Cell/spe/CellScheduler.h --- a/TaskManager/Cell/spe/CellScheduler.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/Cell/spe/CellScheduler.h Fri Jul 16 17:23:49 2010 +0900 @@ -17,6 +17,6 @@ private: int mainMemNum; -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); #endif diff -r bfc61d38c004 -r bed529c55eda TaskManager/Cell/spe/SpeTaskManagerImpl.h --- a/TaskManager/Cell/spe/SpeTaskManagerImpl.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/Cell/spe/SpeTaskManagerImpl.h Fri Jul 16 17:23:49 2010 +0900 @@ -27,7 +27,7 @@ void set_task_cpu(HTaskPtr, CPU_TYPE); void polling() {} -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); #endif /* INCLUDED_SPE_TASK_MANAGER_IMPL */ diff -r bfc61d38c004 -r bed529c55eda TaskManager/Makefile.def --- a/TaskManager/Makefile.def Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/Makefile.def Fri Jul 16 17:23:49 2010 +0900 @@ -30,7 +30,7 @@ ABIBIT = 32 #OPT = -O9 -OPT = -g -O9 -DTASK_LIST_MAIL +OPT = -g -O9 -DTASK_LIST_MAIL CC = g++ CFLAGS = -Wall `sdl-config --cflags` -m$(ABIBIT) $(OPT) diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/ppe/DmaBuffer.h --- a/TaskManager/kernel/ppe/DmaBuffer.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/ppe/DmaBuffer.h Fri Jul 16 17:23:49 2010 +0900 @@ -18,6 +18,6 @@ /* functions */ void swap_buffer(void); void get_buffer(void*); -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); #endif diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/ppe/HTask.h --- a/TaskManager/kernel/ppe/HTask.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/ppe/HTask.h Fri Jul 16 17:23:49 2010 +0900 @@ -114,7 +114,7 @@ add_outData_t((memaddr)(addr), (size)); -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); typedef HTask* HTaskPtr; diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/ppe/HTaskInfo.h --- a/TaskManager/kernel/ppe/HTaskInfo.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/ppe/HTaskInfo.h Fri Jul 16 17:23:49 2010 +0900 @@ -44,6 +44,6 @@ /* functions */ int extend_pool(int num); void destroy(); -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); #endif diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/ppe/MailManager.h --- a/TaskManager/kernel/ppe/MailManager.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/ppe/MailManager.h Fri Jul 16 17:23:49 2010 +0900 @@ -25,7 +25,7 @@ void calc_mask(unsigned int qsize); void extend(); -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); typedef MailManager *MailManagerPtr; diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/ppe/QueueInfo.h --- a/TaskManager/kernel/ppe/QueueInfo.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/ppe/QueueInfo.h Fri Jul 16 17:23:49 2010 +0900 @@ -65,7 +65,7 @@ int extend_pool(int num); void destroy(); void queueInfoInit(); -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/ppe/SimpleTask.h --- a/TaskManager/kernel/ppe/SimpleTask.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/ppe/SimpleTask.h Fri Jul 16 17:23:49 2010 +0900 @@ -32,7 +32,7 @@ void set_input(memaddr i,int size) { r_size = size; rbuf= i; } void set_output(memaddr o,int size) { w_size = size; wbuf= o; } -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); typedef SimpleTask *SimpleTaskPtr; diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/ppe/Task.h --- a/TaskManager/kernel/ppe/Task.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/ppe/Task.h Fri Jul 16 17:23:49 2010 +0900 @@ -119,7 +119,7 @@ set_inData_t(index, (memaddr)(addr), (size)); #define set_outData(index, addr, size) \ set_outData_t(index, (memaddr)(addr), (size)); -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))) ; typedef Task* TaskPtr; diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/ppe/TaskList.h --- a/TaskManager/kernel/ppe/TaskList.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/ppe/TaskList.h Fri Jul 16 17:23:49 2010 +0900 @@ -5,20 +5,21 @@ #include "Task.h" -#define TASK_MAX_SIZE 32 +#define TASK_MAX_SIZE 31 -class TaskList { // 784 byte +class TaskList { // 1024 byte public: BASE_NEW_DELETE(TaskList); - long length; // 4 byte + int length; // 4 byte TaskList *next; // 4 byte TaskList *prev; // 4 byte TaskList *waiter; // 4 byte - SimpleTask tasks[TASK_MAX_SIZE]; // 24*TASK_MAX_SIZE + int dummy[4]; // 16 byte + SimpleTask tasks[TASK_MAX_SIZE]; // 32*TASK_MAX_SIZE void init() { length = 0; waiter=this; } -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); typedef TaskList* TaskListPtr; diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/ppe/TaskManager.h --- a/TaskManager/kernel/ppe/TaskManager.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/ppe/TaskManager.h Fri Jul 16 17:23:49 2010 +0900 @@ -40,7 +40,7 @@ private: int machineNum; -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); #endif diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/ppe/TaskManagerImpl.h --- a/TaskManager/kernel/ppe/TaskManagerImpl.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/ppe/TaskManagerImpl.h Fri Jul 16 17:23:49 2010 +0900 @@ -84,6 +84,6 @@ Scheduler* get_scheduler() { return scheduler; } void set_scheduler(Scheduler *s) { scheduler = s; } -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); #endif diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/ppe/TaskQueue.h --- a/TaskManager/kernel/ppe/TaskQueue.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/ppe/TaskQueue.h Fri Jul 16 17:23:49 2010 +0900 @@ -2,6 +2,7 @@ #define INCLUDED_TASK_QUEUE #include "base.h" +#include "types.h" class HTask; @@ -21,7 +22,7 @@ TaskQueue *next; TaskQueue *prev; -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); typedef TaskQueue* TaskQueuePtr; diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/ppe/TaskQueueInfo.h --- a/TaskManager/kernel/ppe/TaskQueueInfo.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/ppe/TaskQueueInfo.h Fri Jul 16 17:23:49 2010 +0900 @@ -44,6 +44,6 @@ /* functions */ int extend_pool(int num); void destroy(); -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); #endif diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/ppe/Threads.h --- a/TaskManager/kernel/ppe/Threads.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/ppe/Threads.h Fri Jul 16 17:23:49 2010 +0900 @@ -2,10 +2,13 @@ #define INCLUDED_THREADS #include +#include class Threads { public: + BASE_NEW_DELETE(Threads); + /* constructor */ Threads(int num = 1) {}; virtual ~Threads() {}; @@ -19,6 +22,6 @@ /* variables */ pthread_t *threads; int cpu_num; -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); #endif diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/schedule/SchedTask.cc --- a/TaskManager/kernel/schedule/SchedTask.cc Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTask.cc Fri Jul 16 17:23:49 2010 +0900 @@ -86,14 +86,13 @@ void SchedTask::exec() { - __debug("[SchedTask:%s]\n", __FUNCTION__); - task_list[task->command].wait(scheduler,task->command); + TaskObjectRun run = task_list[task->command].run; if (task->w_size > 0) { writebuf = manager->allocate(task->w_size); } scheduler->dma_wait(DMA_READ); - task_list[task->command].run(this, readbuf, writebuf); + run(this, readbuf, writebuf); free(readbuf); // 書き込む領域がなければ無視 diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/schedule/SchedTask.h --- a/TaskManager/kernel/schedule/SchedTask.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTask.h Fri Jul 16 17:23:49 2010 +0900 @@ -107,7 +107,7 @@ int printf(const char * format, ...); -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); extern void loadSchedTask(Scheduler *scheduler,TaskPtr task); diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/schedule/SchedTaskArray.cc --- a/TaskManager/kernel/schedule/SchedTaskArray.cc Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArray.cc Fri Jul 16 17:23:49 2010 +0900 @@ -110,6 +110,7 @@ SchedTaskArray::exec() { task_list[atask->command].wait(scheduler,atask->command); + TaskObjectRun run = task_list[atask->command].run; if (atask->outData_count > 0) { // allocate write buffer outListData.length = atask->outData_count; @@ -125,7 +126,7 @@ //} } scheduler->dma_wait(DMA_READ); - task_list[atask->command].run(this, readbuf, writebuf); + run(this, readbuf, writebuf); free(readbuf); // 書き込む領域がなければ無視 diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/schedule/SchedTaskArray.h --- a/TaskManager/kernel/schedule/SchedTaskArray.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArray.h Fri Jul 16 17:23:49 2010 +0900 @@ -38,7 +38,7 @@ memaddr get_param(int); int read_size(); -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); #endif diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/schedule/SchedTaskArrayLoad.h --- a/TaskManager/kernel/schedule/SchedTaskArrayLoad.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArrayLoad.h Fri Jul 16 17:23:49 2010 +0900 @@ -25,7 +25,7 @@ SchedTaskBase* next(Scheduler *, SchedTaskBase *); -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); #endif diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/schedule/SchedTaskArrayNop.h --- a/TaskManager/kernel/schedule/SchedTaskArrayNop.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArrayNop.h Fri Jul 16 17:23:49 2010 +0900 @@ -26,7 +26,7 @@ void write(); SchedTaskBase* next(Scheduler *, SchedTaskBase *); -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); #endif diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/schedule/SchedTaskBase.h --- a/TaskManager/kernel/schedule/SchedTaskBase.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskBase.h Fri Jul 16 17:23:49 2010 +0900 @@ -74,6 +74,6 @@ ListData inListData; ListData outListData; -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); #endif diff -r bfc61d38c004 -r bed529c55eda TaskManager/kernel/schedule/Scheduler.h --- a/TaskManager/kernel/schedule/Scheduler.h Fri Jul 16 00:13:45 2010 +0900 +++ b/TaskManager/kernel/schedule/Scheduler.h Fri Jul 16 17:23:49 2010 +0900 @@ -39,7 +39,8 @@ MemorySegment *segment; void (*load)(Scheduler *,int); void (*wait)(Scheduler *,int); -} TaskObject, *TaskObjectPtr; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))) + TaskObject, *TaskObjectPtr; extern "C" { extern long random(); @@ -138,7 +139,7 @@ int printf(const char *format, ...); int vprintf0(const char *format, va_list ap); -}; +} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); extern void register_task(int cmd, TaskObjectRun run); extern void register_dynamic_task(int cmd, diff -r bfc61d38c004 -r bed529c55eda example/get_segment/Makefile.def --- a/example/get_segment/Makefile.def Fri Jul 16 00:13:45 2010 +0900 +++ b/example/get_segment/Makefile.def Fri Jul 16 17:23:49 2010 +0900 @@ -1,10 +1,10 @@ TARGET = mainMem # include/library path -# ex: macosx +# ex macosx #CERIUM = /Users/gongo/Source/Cerium -# ex: linux/ps3 +# ex linux/ps3 CERIUM = ../../../Cerium CC = g++ diff -r bfc61d38c004 -r bed529c55eda example/get_segment/spe/Makefile --- a/example/get_segment/spe/Makefile Fri Jul 16 00:13:45 2010 +0900 +++ b/example/get_segment/spe/Makefile Fri Jul 16 17:23:49 2010 +0900 @@ -23,11 +23,11 @@ OFFSET_H = runTask_offset.h -all: $(TARGET) +all: $(TARGET) always .SUFFIXES: .cc .o -$(OFFSET_H) $(LDSCRIPT_ED): $(OVLOBJS:.o=.cc) ovly_table.pl +$(OFFSET_H) $(LDSCRIPT_ED) always : $(OVLOBJS:.o=.cc) ovly_table.pl perl ovly_table.pl $(TARGET) $(OVLOBJS:.o=.cc) $(SPEOBJS): %.o : %.cc $(OFFSET_H)