Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cc1a4bb1 authored by Douglas Leung's avatar Douglas Leung
Browse files

[MIPS] Avoid unaligned load/store for 64-bit doubles.



Change-Id: Iefdcac8742f23fef31f63730b48698fc4205c3ad
Signed-off-by: default avatarDouglas Leung <douglas@mips.com>
parent 845ed8fd
Loading
Loading
Loading
Loading
+44 −1
Original line number Original line Diff line number Diff line
@@ -627,11 +627,27 @@ status_t Parcel::writeFloat(float val)
    return writeAligned(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)
status_t Parcel::writeDouble(double val)
{
{
    return writeAligned(val);
    return writeAligned(val);
}
}


#endif

status_t Parcel::writeIntPtr(intptr_t val)
status_t Parcel::writeIntPtr(intptr_t val)
{
{
    return writeAligned(val);
    return writeAligned(val);
@@ -962,17 +978,44 @@ float Parcel::readFloat() const
    return readAligned<float>();
    return readAligned<float>();
}
}


#if defined(__mips__) && defined(__mips_hard_float)

status_t Parcel::readDouble(double *pArg) const
status_t Parcel::readDouble(double *pArg) const
{
{
    return readAligned(pArg);
    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<unsigned long long>();
    return u.d;
}

#else

status_t Parcel::readDouble(double *pArg) const
{
    return readAligned(pArg);
}


double Parcel::readDouble() const
double Parcel::readDouble() const
{
{
    return readAligned<double>();
    return readAligned<double>();
}
}


#endif

status_t Parcel::readIntPtr(intptr_t *pArg) const
status_t Parcel::readIntPtr(intptr_t *pArg) const
{
{
    return readAligned(pArg);
    return readAligned(pArg);