From cc1a4bb1e1da3f2f38bdaf1f76348c7bc9fb6adb Mon Sep 17 00:00:00 2001 From: Douglas Leung Date: Fri, 11 Jan 2013 15:00:55 -0800 Subject: [PATCH] [MIPS] Avoid unaligned load/store for 64-bit doubles. Change-Id: Iefdcac8742f23fef31f63730b48698fc4205c3ad Signed-off-by: Douglas Leung --- libs/binder/Parcel.cpp | 45 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp index 4c15913a7..8f7f7e76d 100644 --- a/libs/binder/Parcel.cpp +++ b/libs/binder/Parcel.cpp @@ -627,11 +627,27 @@ status_t Parcel::writeFloat(float val) return writeAligned(val); } +#if defined(__mips__) && defined(__mips_hard_float) + +status_t Parcel::writeDouble(double val) +{ + union { + double d; + unsigned long long ll; + } u; + u.d = val; + return writeAligned(u.ll); +} + +#else + status_t Parcel::writeDouble(double val) { return writeAligned(val); } +#endif + status_t Parcel::writeIntPtr(intptr_t val) { return writeAligned(val); @@ -962,17 +978,44 @@ float Parcel::readFloat() const return readAligned(); } +#if defined(__mips__) && defined(__mips_hard_float) + +status_t Parcel::readDouble(double *pArg) const +{ + union { + double d; + unsigned long long ll; + } u; + status_t status; + status = readAligned(&u.ll); + *pArg = u.d; + return status; +} + +double Parcel::readDouble() const +{ + union { + double d; + unsigned long long ll; + } u; + u.ll = readAligned(); + return u.d; +} + +#else + status_t Parcel::readDouble(double *pArg) const { return readAligned(pArg); } - double Parcel::readDouble() const { return readAligned(); } +#endif + status_t Parcel::readIntPtr(intptr_t *pArg) const { return readAligned(pArg);