Fix engine in big endian 64 arches (s390x)
authorMaximilaino Curia <maxy@debian.org>
Tue, 19 Jul 2016 10:20:00 +0000 (12:20 +0200)
committerLisandro Damián Nicanor Pérez Meyer <lisandro@debian.org>
Sun, 11 Sep 2016 12:30:31 +0000 (12:30 +0000)
This fixes https://bugreports.qt.io/browse/QTBUG-54717

Gbp-Pq: Name fix_engine_64bits_big_endian.diff

src/qml/jsruntime/qv4value_p.h

index 6bd39355c593ab0985edb148584612b7f37a37fb..8f2c68470040bc713678aa9461e111598de48208 100644 (file)
@@ -92,10 +92,16 @@ struct Q_QML_PRIVATE_EXPORT Value
 
     Q_ALWAYS_INLINE quint64 val() const { return _val; }
     Q_ALWAYS_INLINE void setVal(quint64 v) { _val = v; }
+
+#if defined(QV4_USE_64_BIT_VALUE_ENCODING) && Q_BYTE_ORDER == Q_BIG_ENDIAN
+    Q_ALWAYS_INLINE void setValue(quint32 t) { memcpy(4 + (quint8 *)&_val, &t, 4); }
+    Q_ALWAYS_INLINE void setTag(quint32 v) { memcpy(&_val, &v, 4); }
+#else
     Q_ALWAYS_INLINE void setValue(quint32 v) { memcpy(&_val, &v, 4); }
     Q_ALWAYS_INLINE void setTag(quint32 t) { memcpy(4 + (quint8 *)&_val, &t, 4); }
+#endif
 
-#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
+#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN || defined(QV4_USE_64_BIT_VALUE_ENCODING)
     static inline int valueOffset() { return 0; }
     static inline int tagOffset() { return 4; }
     Q_ALWAYS_INLINE void setTagValue(quint32 tag, quint32 value) { _val = quint64(tag) << 32 | value; }