Fix QString comparison on Aarch64
There was an off-by-one error in the while loop for aarch64: we start counting at 0 for the first position, so the last valid input position is "a+7", not 8. This wasn't covered by the tests, nor was the SSE2 version, so now there are also tests for both versions. Change-Id: I7eb8c5708e6179f45ea56885b0e66e1a37969c1d Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Lars Knoll <lars.knoll@qt.io>bb10
parent
17e672a67e
commit
fa15162700
|
|
@ -496,7 +496,7 @@ static int ucstrncmp(const QChar *a, const QChar *b, int l)
|
|||
if (l >= 8) {
|
||||
const QChar *end = a + l;
|
||||
const uint16x8_t mask = { 1, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7 };
|
||||
while (a + 8 < end) {
|
||||
while (a + 7 < end) {
|
||||
uint16x8_t da = vld1q_u16(reinterpret_cast<const uint16_t *>(a));
|
||||
uint16x8_t db = vld1q_u16(reinterpret_cast<const uint16_t *>(b));
|
||||
|
||||
|
|
|
|||
|
|
@ -6070,6 +6070,14 @@ void tst_QString::compare_data()
|
|||
lower += QChar(QChar::lowSurrogate(0x10428));
|
||||
QTest::newRow("data8") << upper << lower << -1 << 0;
|
||||
|
||||
QTest::newRow("vectorized-boundaries-7") << QString("1234567") << QString("abcdefg") << -1 << -1;
|
||||
QTest::newRow("vectorized-boundaries-8") << QString("12345678") << QString("abcdefgh") << -1 << -1;
|
||||
QTest::newRow("vectorized-boundaries-9") << QString("123456789") << QString("abcdefghi") << -1 << -1;
|
||||
|
||||
QTest::newRow("vectorized-boundaries-15") << QString("123456789012345") << QString("abcdefghiklmnop") << -1 << -1;
|
||||
QTest::newRow("vectorized-boundaries-16") << QString("1234567890123456") << QString("abcdefghiklmnopq") << -1 << -1;
|
||||
QTest::newRow("vectorized-boundaries-17") << QString("12345678901234567") << QString("abcdefghiklmnopqr") << -1 << -1;
|
||||
|
||||
// embedded nulls
|
||||
// These don't work as of now. It's OK that these don't work since \0 is not a valid unicode
|
||||
/*QTest::newRow("data10") << QString(QByteArray("\0", 1)) << QString(QByteArray("\0", 1)) << 0 << 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue