From 3aa0da2b0658145a37316fb221604b02af7fb351 Mon Sep 17 00:00:00 2001 From: Nikolay Igotti Date: Mon, 18 Feb 2019 14:15:24 +0300 Subject: [PATCH] Fix typed arrays on BE targets. --- runtime/src/main/cpp/Arrays.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/runtime/src/main/cpp/Arrays.cpp b/runtime/src/main/cpp/Arrays.cpp index 95b4598403f..70cc31bb101 100644 --- a/runtime/src/main/cpp/Arrays.cpp +++ b/runtime/src/main/cpp/Arrays.cpp @@ -248,10 +248,17 @@ KFloat Kotlin_ByteArray_getFloatAt(KConstRef thiz, KInt index) { KFloat f; uint8_t b[4]; } u; +#if __BIG_ENDIAN__ + u.b[0] = address[3]; + u.b[1] = address[2]; + u.b[2] = address[1]; + u.b[3] = address[0]; +#else u.b[0] = address[0]; u.b[1] = address[1]; u.b[2] = address[2]; u.b[3] = address[3]; +#endif // __BIG_ENDIAN__ return u.f; #else auto result = *reinterpret_cast(ByteArrayAddressOfElementAt(array, index)); @@ -270,6 +277,16 @@ KDouble Kotlin_ByteArray_getDoubleAt(KConstRef thiz, KInt index) { KDouble d; uint8_t b[8]; } u; +#if __BIG_ENDIAN__ + u.b[0] = address[7]; + u.b[1] = address[6]; + u.b[2] = address[5]; + u.b[3] = address[4]; + u.b[4] = address[3]; + u.b[5] = address[2]; + u.b[6] = address[1]; + u.b[7] = address[0]; +#else u.b[0] = address[0]; u.b[1] = address[1]; u.b[2] = address[2]; @@ -278,6 +295,7 @@ KDouble Kotlin_ByteArray_getDoubleAt(KConstRef thiz, KInt index) { u.b[5] = address[5]; u.b[6] = address[6]; u.b[7] = address[7]; +#endif // __BIG_ENDIAN__ return u.d; #else return *reinterpret_cast(ByteArrayAddressOfElementAt(array, index));