Revision: 5958
Author: [email protected]
Date: Fri Dec 10 02:02:42 2010
Log: Use correct calling convention for API calls on MinGW

BUG=v8:950

Review URL: http://codereview.chromium.org/5699003
http://code.google.com/p/v8/source/detail?r=5958

Modified:
 /branches/bleeding_edge/src/ia32/macro-assembler-ia32.cc

=======================================
--- /branches/bleeding_edge/src/ia32/macro-assembler-ia32.cc Tue Dec 7 03:31:57 2010 +++ /branches/bleeding_edge/src/ia32/macro-assembler-ia32.cc Fri Dec 10 02:02:42 2010
@@ -1216,25 +1216,28 @@
 }


-// If true, a Handle<T> passed by value is passed and returned by
-// using the location_ field directly.  If false, it is passed and
-// returned as a pointer to a handle.
-#ifdef USING_BSD_ABI
-static const bool kPassHandlesDirectly = true;
+// If true, a Handle<T> returned by value from a function with cdecl calling
+// convention will be returned directly as a value of location_ field in a
+// register eax.
+// If false, it is returned as a pointer to a preallocated by caller memory
+// region. Pointer to this region should be passed to a function as an
+// implicit first argument.
+#if defined(USING_BSD_ABI) || defined(__MINGW32__)
+static const bool kReturnHandlesDirectly = true;
 #else
-static const bool kPassHandlesDirectly = false;
+static const bool kReturnHandlesDirectly = false;
 #endif


 Operand ApiParameterOperand(int index) {
- return Operand(esp, (index + (kPassHandlesDirectly ? 0 : 1)) * kPointerSize); + return Operand(esp, (index + (kReturnHandlesDirectly ? 0 : 1)) * kPointerSize);
 }


 void MacroAssembler::PrepareCallApiFunction(int argc, Register scratch) {
-  if (kPassHandlesDirectly) {
+  if (kReturnHandlesDirectly) {
     EnterApiExitFrame(argc);
-    // When handles as passed directly we don't have to allocate extra
+    // When handles are returned directly we don't have to allocate extra
     // space for and pass an out parameter.
   } else {
     // We allocate two additional slots: return value and pointer to it.
@@ -1279,7 +1282,7 @@
   // Call the api function!
   call(function->address(), RelocInfo::RUNTIME_ENTRY);

-  if (!kPassHandlesDirectly) {
+  if (!kReturnHandlesDirectly) {
     // The returned value is a pointer to the handle holding the result.
     // Dereference this to get to the location.
     mov(eax, Operand(eax, 0));

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to