diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_darwin.cpp b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_darwin.cpp index 50aab3cfb18..d76e9f15b93 100644 --- a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_darwin.cpp +++ b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_darwin.cpp @@ -114,7 +114,7 @@ PrepareAndDispatch(nsXPTCStubBase * self, PRUint32 methodIndex, // The value in %xmm register is already prepared to // be retrieved as a float. Therefore, we pass the // value verbatim, as a double without conversion. - dp->val.d = *(double*) ap++; + dp->val.d = fpregs[nr_fpr++]; else dp->val.f = *(float*) ap++; continue; diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_linux.cpp b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_linux.cpp index 0b8013fb42b..d7f52b5d5fe 100644 --- a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_linux.cpp +++ b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_linux.cpp @@ -114,7 +114,7 @@ PrepareAndDispatch(nsXPTCStubBase * self, PRUint32 methodIndex, // The value in %xmm register is already prepared to // be retrieved as a float. Therefore, we pass the // value verbatim, as a double without conversion. - dp->val.d = *(double*) ap++; + dp->val.d = fpregs[nr_fpr++]; else dp->val.f = *(float*) ap++; continue; diff --git a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_solaris.cpp b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_solaris.cpp index 3ca8bd51754..af4ca423521 100644 --- a/xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_solaris.cpp +++ b/xpcom/reflect/xptcall/src/md/unix/xptcstubs_x86_64_solaris.cpp @@ -114,7 +114,7 @@ PrepareAndDispatch(nsXPTCStubBase * self, PRUint32 methodIndex, // The value in %xmm register is already prepared to // be retrieved as a float. Therefore, we pass the // value verbatim, as a double without conversion. - dp->val.d = *(double*) ap++; + dp->val.d = fpregs[nr_fpr++]; else dp->val.f = *(float*) ap++; continue;