changes in aarch64 for context variant

* Tested fibonacci with 10 and 20 seperately
* Tested fibonacci multi that are in tests/preemption with client1 and
client2 requests.
* Observed a bug in the response: The respone also includes request
headers/body in it, needs to be addressed.
main
phani 4 years ago committed by Sean McBride
parent 661b7f1e64
commit 1370c9f3e1

@ -43,8 +43,8 @@ arch_context_restore(mcontext_t *active_context, struct arch_context *sandbox_co
/* Assumption: Base Context is only ever used by arch_context_switch */ /* Assumption: Base Context is only ever used by arch_context_switch */
assert(sandbox_context != &worker_thread_base_context); assert(sandbox_context != &worker_thread_base_context);
assert(sandbox_context->sp); assert(sandbox_context->regs[ureg_rsp]);
assert(sandbox_context->pc); assert(sandbox_context->regs[ureg_rip]);
/* Transitioning from Fast -> Running */ /* Transitioning from Fast -> Running */
assert(sandbox_context->variant == arch_context_variant_fast); assert(sandbox_context->variant == arch_context_variant_fast);
@ -97,23 +97,28 @@ arch_context_switch(struct arch_context *a, struct arch_context *b)
"adr x1, reset%=\n\t" "adr x1, reset%=\n\t"
"str x1, [%[a], 8]\n\t" "str x1, [%[a], 8]\n\t"
"str x0, [%[a]]\n\t" "str x0, [%[a]]\n\t"
"ldr x2, [%[b]]\n\t" "mov x0, #1\n\t"
"cbz x2, slow%=\n\t" "str x0, [%[av]]\n\t"
"ldr x3, [%[b], 8]\n\t" "ldr x1, [%[bv]]\n\t"
"mov sp, x2\n\t" "sub x1, x1, #2\n\t"
"br x3\n\t" "cbz x1, slow%=\n\t"
"ldr x0, [%[b]]\n\t"
"ldr x1, [%[b], 8]\n\t"
"mov sp, x0\n\t"
"br x1\n\t"
"slow%=:\n\t" "slow%=:\n\t"
"br %[slowpath]\n\t" "br %[slowpath]\n\t"
".align 8\n\t" ".align 8\n\t"
"reset%=:\n\t" "reset%=:\n\t"
"mov x1, #0\n\t" "mov x1, #3\n\t"
"str x1, [%[b]]\n\t" "str x1, [%[bv]]\n\t"
".align 8\n\t" ".align 8\n\t"
"exit%=:\n\t" "exit%=:\n\t"
: :
: [ a ] "r"(a_registers), [ b ] "r"(b_registers), [ slowpath ] "r"(&arch_context_restore_preempted) : [ a ] "r"(a_registers), [ b ] "r"(b_registers), [ av ] "r"(&a->variant), [ bv ] "r"(&b->variant),
[ slowpath ] "r"(&arch_context_restore_preempted)
: "memory", "cc", "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", : "memory", "cc", "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12",
"x13", "x14", "x15", "x16", "x17", "x18", "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26", "x13", "x14", "x15", "x16", "x17", "x18", "x19", "x20", "x21", "x22", "x23", "x24",
"d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15"); "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15");
return 0; return 0;

Loading…
Cancel
Save