Source code

Revision control

Copy as Markdown

Other Tools

diff --git a/js/src/ctypes/libffi/src/x86/win64.S b/js/src/ctypes/libffi/src/x86/win64.S
index 2c334c82f9b2d..a54459f077c91 100644
--- a/js/src/ctypes/libffi/src/x86/win64.S
+++ b/js/src/ctypes/libffi/src/x86/win64.S
@@ -25,17 +25,17 @@
/* This macro allows the safe creation of jump tables without an
actual table. The entry points into the table are all 8 bytes.
The use of ORG asserts that we're at the correct location. */
/* ??? The clang assembler doesn't handle .org with symbolic expressions. */
#if defined(__clang__) || defined(__APPLE__) || (defined (__sun__) && defined(__svr4__))
# define E(BASE, X) .balign 8
#else
-# define E(BASE, X) .balign 8; .org BASE + X * 8
+# define E(BASE, X) .balign 8; .org BASE + (X) * 8
#endif
.text
/* ffi_call_win64 (void *stack, struct win64_call_frame *frame, void *r10)
Bit o trickiness here -- FRAME is the base of the stack frame
for this function. This has been allocated by ffi_call. We also
@@ -102,17 +102,18 @@ E(0b, FFI_TYPE_INT)
movq %rax, (%r8)
epilogue
E(0b, FFI_TYPE_FLOAT)
movss %xmm0, (%r8)
epilogue
E(0b, FFI_TYPE_DOUBLE)
movsd %xmm0, (%r8)
epilogue
-E(0b, FFI_TYPE_LONGDOUBLE)
+// FFI_TYPE_LONGDOUBLE may be FFI_TYPE_DOUBLE but we need a different value here.
+E(0b, FFI_TYPE_DOUBLE + 1)
call PLT(C(abort))
E(0b, FFI_TYPE_UINT8)
movzbl %al, %eax
movq %rax, (%r8)
epilogue
E(0b, FFI_TYPE_SINT8)
movsbq %al, %rax
jmp 98f
diff --git a/js/src/ctypes/libffi/src/x86/win64_intel.S b/js/src/ctypes/libffi/src/x86/win64_intel.S
index 7df78b30e42c6..970a4f997a981 100644
--- a/js/src/ctypes/libffi/src/x86/win64_intel.S
+++ b/js/src/ctypes/libffi/src/x86/win64_intel.S
@@ -24,17 +24,17 @@
/* This macro allows the safe creation of jump tables without an
actual table. The entry points into the table are all 8 bytes.
The use of ORG asserts that we're at the correct location. */
/* ??? The clang assembler doesn't handle .org with symbolic expressions. */
#if defined(__clang__) || defined(__APPLE__) || (defined (__sun__) && defined(__svr4__))
# define E(BASE, X) ALIGN 8
#else
-# define E(BASE, X) ALIGN 8; ORG BASE + X * 8
+# define E(BASE, X) ALIGN 8; ORG BASE + (X) * 8
#endif
.CODE
extern PLT(C(abort)):near
extern C(ffi_closure_win64_inner):near
/* ffi_call_win64 (void *stack, struct win64_call_frame *frame, void *r10)
@@ -102,17 +102,18 @@ E(0b, FFI_TYPE_INT)
mov qword ptr [r8], rax; movq %rax, (%r8)
epilogue
E(0b, FFI_TYPE_FLOAT)
movss dword ptr [r8], xmm0 ; movss %xmm0, (%r8)
epilogue
E(0b, FFI_TYPE_DOUBLE)
movsd qword ptr[r8], xmm0; movsd %xmm0, (%r8)
epilogue
-E(0b, FFI_TYPE_LONGDOUBLE)
+// FFI_TYPE_LONGDOUBLE may be FFI_TYPE_DOUBLE but we need a different value here.
+E(0b, FFI_TYPE_DOUBLE + 1)
call PLT(C(abort))
E(0b, FFI_TYPE_UINT8)
movzx eax, al ;movzbl %al, %eax
mov qword ptr[r8], rax; movq %rax, (%r8)
epilogue
E(0b, FFI_TYPE_SINT8)
movsx rax, al ; movsbq %al, %rax
jmp L98