diff example/get_segment/spe/Hello.cc @ 0:04e28d8d3c6f

first commit
author Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp>
date Mon, 08 Nov 2010 01:23:25 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/get_segment/spe/Hello.cc	Mon Nov 08 01:23:25 2010 +0900
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include "Hello.h"
+#include "Func.h"
+
+/* これは必須 */
+SchedDefineDynamicTask(Hello,0);
+
+static int
+rel_offset()
+{
+    unsigned int pc;
+    unsigned int label;
+    __asm__ __volatile__(
+"         brsl %0,____LLLL\n"
+"____LLLL:"
+"         ila  %1,____LLLL"
+        : "=r" (pc), "=r" (label));
+    return  pc-label;
+}
+
+
+static int
+run(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int task_id = (long)smanager->get_param(0);
+
+    unsigned int pc;
+    __asm__ __volatile__(
+"         brsl %0,____LLLL1\n"
+"____LLLL1:"
+        : "=r" (pc));
+
+    char *fmt = "char [%0x] offset [%0x]\n";
+    int offset = rel_offset();
+
+    //smanager->fprintf(smanager->stderr_,fmt+offset, fmt, offset);
+
+    //smanager->fprintf(smanager->stderr_,"[%d] Hello, World!! Seg1 \n"+offset, task_id);
+    //smanager->fprintf(smanager->stderr_,"pc=0x%0x 0x%0lx\n"+offset,pc, (unsigned long)&runTask_Hello);
+
+    smanager->printf(fmt+offset, fmt, offset);
+
+    smanager->printf("[%d] Hello, World!! Seg1\n"+offset, task_id);
+    smanager->printf("pc=0x%0x 0x%0lx\n"+offset,pc, (unsigned long)&runTask_Hello);
+
+    return 0;
+}
+