diff --git a/src/lepton/CompiledExpression.cpp b/src/lepton/CompiledExpression.cpp index 4a26547e71ae41337f2603664d8ed7dce8f5f162..34c98ae9db50a0aa187c38dbfc9c762230dbba1c 100644 --- a/src/lepton/CompiledExpression.cpp +++ b/src/lepton/CompiledExpression.cpp @@ -226,19 +226,20 @@ static double evaluateOperation(Operation* op, double* args) { } void CompiledExpression::generateJitCode() { - X86Compiler c(&runtime); - c.addFunc(kFuncConvHost, FuncBuilder0<double>()); + X86Assembler a(&runtime); + X86Compiler c(&a); + c.addFunc(FuncBuilder0<double>(kCallConvHost)); vector<X86XmmVar> workspaceVar(workspace.size()); for (int i = 0; i < (int) workspaceVar.size(); i++) workspaceVar[i] = c.newXmmVar(kX86VarTypeXmmSd); - X86GpVar argsPointer(c); + X86GpVar argsPointer = c.newIntPtr(); c.mov(argsPointer, imm_ptr(&argValues[0])); // Load the arguments into variables. for (set<string>::const_iterator iter = variableNames.begin(); iter != variableNames.end(); ++iter) { map<string, int>::iterator index = variableIndices.find(*iter); - X86GpVar variablePointer(c); + X86GpVar variablePointer = c.newIntPtr(); c.mov(variablePointer, imm_ptr(&getVariableReference(index->first))); c.movsd(workspaceVar[index->second], x86::ptr(variablePointer, 0, 0)); } @@ -283,7 +284,7 @@ void CompiledExpression::generateJitCode() { vector<X86XmmVar> constantVar(constants.size()); if (constants.size() > 0) { - X86GpVar constantsPointer(c); + X86GpVar constantsPointer = c.newIntPtr(); c.mov(constantsPointer, imm_ptr(&constants[0])); for (int i = 0; i < (int) constants.size(); i++) { constantVar[i] = c.newXmmVar(kX86VarTypeXmmSd); @@ -410,9 +411,9 @@ void CompiledExpression::generateJitCode() { for (int i = 0; i < (int) args.size(); i++) c.movsd(x86::ptr(argsPointer, 8*i, 0), workspaceVar[args[i]]); - X86GpVar fn(c, kVarTypeIntPtr); + X86GpVar fn = c.newIntPtr(); c.mov(fn, imm_ptr((void*) evaluateOperation)); - X86CallNode* call = c.call(fn, kFuncConvHost, FuncBuilder2<double, Operation*, double*>()); + X86CallNode* call = c.call(fn, FuncBuilder2<double, Operation*, double*>(kCallConvHost)); call->setArg(0, imm_ptr(&op)); call->setArg(1, imm_ptr(&argValues[0])); call->setRet(0, workspaceVar[target[step]]); @@ -420,13 +421,14 @@ void CompiledExpression::generateJitCode() { } c.ret(workspaceVar[workspace.size()-1]); c.endFunc(); - jitCode = c.make(); + c.finalize(); + jitCode = a.make(); } void CompiledExpression::generateSingleArgCall(X86Compiler& c, X86XmmVar& dest, X86XmmVar& arg, double (*function)(double)) { - X86GpVar fn(c, kVarTypeIntPtr); + X86GpVar fn = c.newIntPtr(); c.mov(fn, imm_ptr((void*) function)); - X86CallNode* call = c.call(fn, kFuncConvHost, FuncBuilder1<double, double>()); + X86CallNode* call = c.call(fn, FuncBuilder1<double, double>(kCallConvHost)); call->setArg(0, arg); call->setRet(0, dest); }