From: Maximilaino Curia Date: Tue, 19 Jul 2016 10:20:00 +0000 (+0200) Subject: Fix engine in big endian 64 arches (s390x) X-Git-Tag: archive/raspbian/5.7.1-2+rpi1~1^2^2^2^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=1cc67dda709ec3eba746666be257604201a0fde6;p=qtdeclarative-opensource-src.git 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 --- 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; }