| Index: src/mips/simulator-mips.cc
|
| diff --git a/src/mips/simulator-mips.cc b/src/mips/simulator-mips.cc
|
| index d8a39ab30c764701e2d481f62c9affd3cd601f07..8771bd29f78367a7d28226de20a2525a7bd80cd9 100644
|
| --- a/src/mips/simulator-mips.cc
|
| +++ b/src/mips/simulator-mips.cc
|
| @@ -1394,6 +1394,9 @@ typedef v8::Handle<v8::Value> (*SimulatorRuntimeDirectApiCall)(int32_t arg0);
|
| // Here, we pass the first argument in a0, because this function
|
| // does not return a struct.
|
| typedef void (*SimulatorRuntimeDirectApiCallNew)(int32_t arg0);
|
| +typedef v8::Handle<v8::Value> (*SimulatorRuntimeProfilingApiCall)(
|
| + int32_t arg0, int32_t arg1);
|
| +typedef void (*SimulatorRuntimeProfilingApiCallNew)(int32_t arg0, int32_t arg1);
|
|
|
| // This signature supports direct call to accessor getter callback.
|
| // See comment at SimulatorRuntimeDirectApiCall.
|
| @@ -1402,6 +1405,10 @@ typedef v8::Handle<v8::Value> (*SimulatorRuntimeDirectGetterCall)(int32_t arg0,
|
| // See comment at SimulatorRuntimeDirectApiCallNew.
|
| typedef void (*SimulatorRuntimeDirectGetterCallNew)(int32_t arg0,
|
| int32_t arg1);
|
| +typedef v8::Handle<v8::Value> (*SimulatorRuntimeProfilingGetterCall)(
|
| + int32_t arg0, int32_t arg1, int32_t arg2);
|
| +typedef void (*SimulatorRuntimeProfilingGetterCallNew)(
|
| + int32_t arg0, int32_t arg1, int32_t arg2);
|
|
|
| // Software interrupt instructions are used by the simulator to call into the
|
| // C-based V8 runtime. They are also used for debugging with simulator.
|
| @@ -1571,6 +1578,30 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
|
| target(arg0);
|
| }
|
| } else if (
|
| + redirection->type() == ExternalReference::PROFILING_API_CALL ||
|
| + redirection->type() == ExternalReference::PROFILING_API_CALL_NEW) {
|
| + if (redirection->type() == ExternalReference::PROFILING_API_CALL) {
|
| + // See comment at type definition of SimulatorRuntimeDirectApiCall
|
| + // for explanation of register usage.
|
| + if (::v8::internal::FLAG_trace_sim) {
|
| + PrintF("Call to host function at %p args %08x %08x\n",
|
| + reinterpret_cast<void*>(external), arg1, arg2);
|
| + }
|
| + SimulatorRuntimeProfilingApiCall target =
|
| + reinterpret_cast<SimulatorRuntimeProfilingApiCall>(external);
|
| + v8::Handle<v8::Value> result = target(arg1, arg2);
|
| + *(reinterpret_cast<int*>(arg0)) = reinterpret_cast<int32_t>(*result);
|
| + set_register(v0, arg0);
|
| + } else {
|
| + if (::v8::internal::FLAG_trace_sim) {
|
| + PrintF("Call to host function at %p args %08x %08x\n",
|
| + reinterpret_cast<void*>(external), arg0, arg1);
|
| + }
|
| + SimulatorRuntimeProfilingApiCallNew target =
|
| + reinterpret_cast<SimulatorRuntimeProfilingApiCallNew>(external);
|
| + target(arg0, arg1);
|
| + }
|
| + } else if (
|
| redirection->type() == ExternalReference::DIRECT_GETTER_CALL ||
|
| redirection->type() == ExternalReference::DIRECT_GETTER_CALL_NEW) {
|
| if (redirection->type() == ExternalReference::DIRECT_GETTER_CALL) {
|
| @@ -1594,6 +1625,30 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
|
| reinterpret_cast<SimulatorRuntimeDirectGetterCallNew>(external);
|
| target(arg0, arg1);
|
| }
|
| + } else if (
|
| + redirection->type() == ExternalReference::PROFILING_GETTER_CALL ||
|
| + redirection->type() == ExternalReference::PROFILING_GETTER_CALL_NEW) {
|
| + if (redirection->type() == ExternalReference::PROFILING_GETTER_CALL) {
|
| + // See comment at type definition of SimulatorRuntimeProfilingGetterCall
|
| + // for explanation of register usage.
|
| + if (::v8::internal::FLAG_trace_sim) {
|
| + PrintF("Call to host function at %p args %08x %08x %08x\n",
|
| + reinterpret_cast<void*>(external), arg1, arg2, arg3);
|
| + }
|
| + SimulatorRuntimeProfilingGetterCall target =
|
| + reinterpret_cast<SimulatorRuntimeProfilingGetterCall>(external);
|
| + v8::Handle<v8::Value> result = target(arg1, arg2, arg3);
|
| + *(reinterpret_cast<int*>(arg0)) = reinterpret_cast<int32_t>(*result);
|
| + set_register(v0, arg0);
|
| + } else {
|
| + if (::v8::internal::FLAG_trace_sim) {
|
| + PrintF("Call to host function at %p args %08x %08x %08x\n",
|
| + reinterpret_cast<void*>(external), arg0, arg1, arg2);
|
| + }
|
| + SimulatorRuntimeProfilingGetterCallNew target =
|
| + reinterpret_cast<SimulatorRuntimeProfilingGetterCallNew>(external);
|
| + target(arg0, arg1, arg2);
|
| + }
|
| } else {
|
| SimulatorRuntimeCall target =
|
| reinterpret_cast<SimulatorRuntimeCall>(external);
|
|
|