38 #include "sys/cooja_mt.h" 46 #define ON_64BIT_ARCH 1 48 #define ON_64BIT_ARCH 0 71 unsigned long retaddr;
72 unsigned long retaddr2;
78 cooja_mtarch_start(
struct cooja_mtarch_thread *t,
79 void (*
function)(
void *),
void *data)
81 struct frame *f = (
struct frame *)&t->stack[COOJA_MTARCH_STACKSIZE -
sizeof(
struct frame)/
sizeof(
unsigned long)];
84 for(i = 0; i < COOJA_MTARCH_STACKSIZE; ++i) {
88 memset(f, 0,
sizeof(
struct frame));
89 f->retaddr = (
unsigned long)
function;
90 f->data = (
unsigned long)data;
91 t->sp = (
unsigned long)&f->flags;
93 f->rbp = (
unsigned long)&f->rax;
95 f->ebp = (
unsigned long)&f->eax;
99 static struct cooja_mtarch_thread *cooja_running_thread;
128 __asm__ (
"movq %0, %%rax\n\t" : :
"m" (cooja_running_thread));
130 "movq (%rax), %rbx\n\t" 131 "movq %rsp, (%rax)\n\t" 132 "movq %rbx, %rsp\n\t" 135 __asm__ (
"movl %0, %%eax\n\t" : :
"m" (cooja_running_thread));
137 "movl (%eax), %ebx\n\t" 138 "movl %esp, (%eax)\n\t" 139 "movl %ebx, %esp\n\t" 178 cooja_mtarch_exec(
struct cooja_mtarch_thread *t)
180 cooja_running_thread = t;
182 cooja_running_thread = NULL;
186 cooja_mtarch_yield(
void)