Indirect calls and fixing v128 const loads.

This commit is contained in:
Ben Vanik 2014-01-26 17:52:32 -08:00
parent 0123b63aa2
commit d323e6d3ec
1 changed files with 5 additions and 5 deletions

View File

@ -81,9 +81,9 @@ void* ResolveFunctionAddress(void* raw_context, uint64_t target_address) {
Function* fn = NULL;
thread_state->runtime()->ResolveFunction(target_address, &fn);
XEASSERTNOTNULL(fn);
XEASSERTALWAYS();
//fn->Call(thread_state);
return 0;
XEASSERT(fn->type() == Function::USER_FUNCTION);
auto x64_fn = (X64Function*)fn;
return x64_fn->machine_code();
}
void IssueCall(X64Emitter& e, FunctionInfo* symbol_info, uint32_t flags) {
// If we are an extern function, we can directly insert a call.
@ -1236,8 +1236,8 @@ void alloy::backend::x64::lowering::RegisterSequences(LoweringTable* table) {
e.movaps(e.ptr[e.rcx + i->src1.offset], src);
e.EndOp(src);
} else if (i->Match(SIG_TYPE_X, SIG_TYPE_IGNORE, SIG_TYPE_V128C)) {
e.mov(e.ptr[e.rcx + i->src1.offset], i->src2.value->constant.v128.low);
e.mov(e.ptr[e.rcx + i->src1.offset + 8], i->src2.value->constant.v128.high);
e.mov(e.qword[e.rcx + i->src1.offset], i->src2.value->constant.v128.low);
e.mov(e.qword[e.rcx + i->src1.offset + 8], i->src2.value->constant.v128.high);
} else {
ASSERT_INVALID_TYPE();
}