diff --git a/src/internal/bytealg/index_ppc64x.s b/src/internal/bytealg/index_ppc64x.s index 38442ce27ce..735159cd8e2 100644 --- a/src/internal/bytealg/index_ppc64x.s +++ b/src/internal/bytealg/index_ppc64x.s @@ -614,7 +614,7 @@ index4loop: next4: VSPLTISB $0, V10 // Clear MOVD $3, R9 // Number of bytes beyond 16 - LXVB16X (R7)(R9), V3 // Load 16 bytes @R7 into V2 + LXVB16X (R7)(R9), V3 // Load 16 bytes @R7 into V3 VSLDOI $13, V3, V10, V3 // Shift left last 3 bytes VSLDOI $1, V2, V3, V4 // V4=(V2:V3)<<1 VSLDOI $2, V2, V3, V9 // V9=(V2:V3)<<2 @@ -654,11 +654,11 @@ index2to16: ADD $19, R7, R9 // To check 4 indices per iteration, need at least 16+3 bytes CMP R9, LASTBYTE - BGT index2to16tail - // At least 16 bytes of string left // Mask the number of bytes in sep VSPLTISB $0, V10 // Clear + BGT index2to16tail + MOVD $3, R17 // Number of bytes beyond 16 index2to16loop: @@ -720,14 +720,15 @@ extra2: ADD $1, R7 // Not found, try next partial string CMP R7, LASTSTR // Check for end of string BGT notfound // If at end, then not found - VSLDOI $1, V1, V25, V1 // Shift string left by 1 byte + VOR V1, V1, V4 // save remaining string + VSLDOI $1, V1, V25, V1 // Shift string left by 1 byte for 17th byte VAND V1, SEPMASK, V2 // Just compare size of sep VCMPEQUBCC V0, V2, V3 // Compare sep and partial string BLT CR6, found // Found ADD $1, R7 // Not found, try next partial string CMP R7, LASTSTR // Check for end of string BGT notfound // If at end, then not found - VSLDOI $1, V1, V25, V1 // Shift string left by 1 byte + VSLDOI $2, V4, V25, V1 // Shift saved string left by 2 bytes for 18th byte BR index2to16next // Check the remaining partial string in index2to16next short: diff --git a/src/strings/strings_test.go b/src/strings/strings_test.go index 27489c2d165..3991d127511 100644 --- a/src/strings/strings_test.go +++ b/src/strings/strings_test.go @@ -54,6 +54,11 @@ var indexTests = []IndexTest{ {"foo", "", 0}, {"foo", "o", 1}, {"abcABCabc", "A", 3}, + {"jrzm6jjhorimglljrea4w3rlgosts0w2gia17hno2td4qd1jz", "jz", 47}, + {"ekkuk5oft4eq0ocpacknhwouic1uua46unx12l37nioq9wbpnocqks6", "ks6", 52}, + {"999f2xmimunbuyew5vrkla9cpwhmxan8o98ec", "98ec", 33}, + {"9lpt9r98i04k8bz6c6dsrthb96bhi", "96bhi", 24}, + {"55u558eqfaod2r2gu42xxsu631xf0zobs5840vl", "5840vl", 33}, // cases with one byte strings - test special case in Index() {"", "a", -1}, {"x", "a", -1},