1.1 --- a/stage2/cpu.c Sun Apr 24 18:06:32 2016 +0200
1.2 +++ b/stage2/cpu.c Sun Apr 24 18:07:05 2016 +0200
1.3 @@ -144,6 +144,23 @@
1.4 base[29] = (u32) function - 0x80000000; /* store the function address as EPC (for the handler) */
1.5 }
1.6
1.7 +void invoke_task(u32 *base)
1.8 +{
1.9 + asm volatile(
1.10 + "move $t3, %0\n"
1.11 + "lw $a0, 16($t3)\n"
1.12 + "lw $a1, 20($t3)\n"
1.13 + "lw $a2, 24($t3)\n"
1.14 + "lw $a3, 28($t3)\n"
1.15 + "lw $t9, 100($t3)\n"
1.16 + "lw $gp, 104($t3)\n"
1.17 + "jr $t9\n"
1.18 + "nop"
1.19 + :
1.20 + : "r" (base)
1.21 + );
1.22 +}
1.23 +
1.24 void enter_user_mode(void)
1.25 {
1.26 asm volatile(