From 1cc67dda709ec3eba746666be257604201a0fde6 Mon Sep 17 00:00:00 2001 From: Maximilaino Curia Date: Tue, 19 Jul 2016 12:20:00 +0200 Subject: [PATCH] Fix engine in big endian 64 arches (s390x) This fixes https://bugreports.qt.io/browse/QTBUG-54717 Gbp-Pq: Name fix_engine_64bits_big_endian.diff --- src/qml/jsruntime/qv4value_p.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/qml/jsruntime/qv4value_p.h b/src/qml/jsruntime/qv4value_p.h index 6bd39355c..8f2c68470 100644 --- a/src/qml/jsruntime/qv4value_p.h +++ b/src/qml/jsruntime/qv4value_p.h @@ -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; } -- 2.30.2