From a2efb8d94bb8e860d8616f56c4f40e7c41eb3810 Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Thu, 12 Jul 2018 17:44:29 +1000 Subject: wasm: fix unicode toUpper issues see https://github.com/kripken/emscripten/issues/4540 On large bitfields, emscripten creates types such as i472, which 'legalization passes don't know how to convert into legal code' Adding a dummy field every 64 bits forces alignment which in turn forces emscripten to create i64 types instead. Task-number: QTBUG-66621 Task-number: QTBUG-69421 Change-Id: I5bfd2079ac8f35ced8b59a1d2e3c657993a70986 Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/corelib/tools/qunicodetables_p.h | 6 ++++++ util/unicode/main.cpp | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/src/corelib/tools/qunicodetables_p.h b/src/corelib/tools/qunicodetables_p.h index f3fb6ec1b0..3f2e91a9b2 100644 --- a/src/corelib/tools/qunicodetables_p.h +++ b/src/corelib/tools/qunicodetables_p.h @@ -72,6 +72,9 @@ struct Properties { signed short mirrorDiff : 16; ushort lowerCaseSpecial : 1; signed short lowerCaseDiff : 15; +#ifdef Q_OS_WASM + unsigned char : 0; //wasm 64 packing trick +#endif ushort upperCaseSpecial : 1; signed short upperCaseDiff : 15; ushort titleCaseSpecial : 1; @@ -80,6 +83,9 @@ struct Properties { signed short caseFoldDiff : 15; ushort unicodeVersion : 8; /* 5 used */ ushort nfQuickCheck : 8; +#ifdef Q_OS_WASM + unsigned char : 0; //wasm 64 packing trick +#endif ushort graphemeBreakClass : 5; /* 5 used */ ushort wordBreakClass : 5; /* 5 used */ ushort sentenceBreakClass : 8; /* 4 used */ diff --git a/util/unicode/main.cpp b/util/unicode/main.cpp index 0f3c28137d..45bd53a487 100644 --- a/util/unicode/main.cpp +++ b/util/unicode/main.cpp @@ -2473,6 +2473,10 @@ static QByteArray createPropertyInfo() out += ", "; out += QByteArray::number( p.lowerCaseDiff ); out += ", "; + out += "#ifdef Q_OS_WASM \n" +// " unsigned char : 0; //wasm 64 packing trick \n" + out += "#endif \n" + out += ", "; // " ushort upperCaseSpecial : 1;\n" // " signed short upperCaseDiff : 15;\n" out += QByteArray::number( p.upperCaseSpecial ); @@ -2497,6 +2501,10 @@ static QByteArray createPropertyInfo() // " ushort nfQuickCheck : 8;\n" out += QByteArray::number( p.nfQuickCheck ); out += ", "; + out += "#ifdef Q_OS_WASM \n" +// " unsigned char : 0; //wasm 64 packing trick \n" + out += "#endif \n" + out += ", "; // " ushort graphemeBreakClass : 5; /* 5 used */\n" // " ushort wordBreakClass : 5; /* 5 used */\n" // " ushort sentenceBreakClass : 8; /* 4 used */\n" -- cgit v1.2.3