Skip to content

Commit 2f28115

Browse files
committed
TruffleString: don't store array base offset in a constant
1 parent 314be1e commit 2f28115

File tree

11 files changed

+275
-267
lines changed

11 files changed

+275
-267
lines changed

truffle/src/com.oracle.truffle.api.strings/src/com/oracle/truffle/api/strings/AbstractTruffleString.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
import static com.oracle.truffle.api.strings.TStringGuards.isUTF8;
5757
import static com.oracle.truffle.api.strings.TStringGuards.isValidFixedWidth;
5858
import static com.oracle.truffle.api.strings.TStringGuards.isValidMultiByte;
59-
import static com.oracle.truffle.api.strings.TStringUnsafe.ARRAY_BYTE_BASE_OFFSET;
59+
import static com.oracle.truffle.api.strings.TStringUnsafe.byteArrayBaseOffset;
6060

6161
import java.lang.ref.Reference;
6262

@@ -1458,18 +1458,18 @@ private static void copy(Node location, TruffleString src, byte[] dst, int dstFr
14581458
final long addOffsetA;
14591459
if (dataA instanceof byte[]) {
14601460
arrayA = (byte[]) dataA;
1461-
addOffsetA = ARRAY_BYTE_BASE_OFFSET;
1461+
addOffsetA = byteArrayBaseOffset();
14621462
} else if (dataA instanceof NativePointer) {
14631463
arrayA = null;
14641464
addOffsetA = NativePointer.unwrap(dataA);
14651465
} else {
14661466
arrayA = src.materializeLazy(location, dataA);
1467-
addOffsetA = ARRAY_BYTE_BASE_OFFSET;
1467+
addOffsetA = byteArrayBaseOffset();
14681468
}
14691469
final long offsetA = src.offset() + addOffsetA;
14701470
TStringOps.arraycopyWithStride(location,
14711471
arrayA, offsetA, src.stride(), 0,
1472-
dst, ARRAY_BYTE_BASE_OFFSET, dstStride, dstFrom, src.length());
1472+
dst, byteArrayBaseOffset(), dstStride, dstFrom, src.length());
14731473
} finally {
14741474
Reference.reachabilityFence(dataA);
14751475
}

truffle/src/com.oracle.truffle.api.strings/src/com/oracle/truffle/api/strings/FastDoubleParser.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242

4343
import static com.oracle.truffle.api.strings.NumberConversion.numberFormatException;
4444
import static com.oracle.truffle.api.strings.TStringOps.readValue;
45-
import static com.oracle.truffle.api.strings.TStringUnsafe.ARRAY_BYTE_BASE_OFFSET;
45+
import static com.oracle.truffle.api.strings.TStringUnsafe.byteArrayBaseOffset;
4646

4747
import java.nio.charset.StandardCharsets;
4848

@@ -369,7 +369,7 @@ private static double parseNaN(Node location, AbstractTruffleString a, byte[] ar
369369

370370
private static boolean regionMatches(Node location, AbstractTruffleString a, byte[] arrayA, long offsetA, int strideA, int index, TruffleString b) {
371371
assert b.isManaged() && b.isMaterialized() && b.offset() == 0;
372-
return TStringOps.regionEqualsWithOrMaskWithStride(location, a, arrayA, offsetA, strideA, index, b, (byte[]) b.data(), ARRAY_BYTE_BASE_OFFSET, b.stride(), 0, null, b.length());
372+
return TStringOps.regionEqualsWithOrMaskWithStride(location, a, arrayA, offsetA, strideA, index, b, (byte[]) b.data(), byteArrayBaseOffset(), b.stride(), 0, null, b.length());
373373
}
374374

375375
/**
@@ -512,10 +512,10 @@ private static double parseViaJavaString(Node location, byte[] arrayA, long offs
512512
final int offsetStr;
513513
if (arrayA != null && strideA == 0) {
514514
arrayStr = arrayA;
515-
offsetStr = (int) ((offsetA - ARRAY_BYTE_BASE_OFFSET) + startIndex);
515+
offsetStr = (int) ((offsetA - byteArrayBaseOffset()) + startIndex);
516516
} else {
517517
arrayStr = new byte[len];
518-
TStringOps.arraycopyWithStride(location, arrayA, offsetA, strideA, startIndex, arrayStr, ARRAY_BYTE_BASE_OFFSET, 0, 0, len);
518+
TStringOps.arraycopyWithStride(location, arrayA, offsetA, strideA, startIndex, arrayStr, byteArrayBaseOffset(), 0, 0, len);
519519
offsetStr = 0;
520520
}
521521
return callJavaStringParseDouble(len, arrayStr, offsetStr);

truffle/src/com.oracle.truffle.api.strings/src/com/oracle/truffle/api/strings/IndexOfCodePointSet.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
*/
4141
package com.oracle.truffle.api.strings;
4242

43-
import static com.oracle.truffle.api.strings.TStringUnsafe.ARRAY_BYTE_BASE_OFFSET;
43+
import static com.oracle.truffle.api.strings.TStringUnsafe.byteArrayBaseOffset;
4444

4545
import java.util.ArrayList;
4646
import java.util.Arrays;
@@ -53,7 +53,6 @@
5353
import com.oracle.truffle.api.dsl.Specialization;
5454
import com.oracle.truffle.api.nodes.Node;
5555
import com.oracle.truffle.api.profiles.InlinedBranchProfile;
56-
import com.oracle.truffle.api.strings.TruffleString.Encoding;
5756
import com.oracle.truffle.api.strings.IndexOfCodePointSetFactory.AnyMatchNodeGen;
5857
import com.oracle.truffle.api.strings.IndexOfCodePointSetFactory.IndexOfAnyRangeNodeGen;
5958
import com.oracle.truffle.api.strings.IndexOfCodePointSetFactory.IndexOfAnyValueNodeGen;
@@ -62,6 +61,7 @@
6261
import com.oracle.truffle.api.strings.IndexOfCodePointSetFactory.IndexOfStringNodeGen;
6362
import com.oracle.truffle.api.strings.IndexOfCodePointSetFactory.IndexOfTableNodeGen;
6463
import com.oracle.truffle.api.strings.IndexOfCodePointSetFactory.NoMatchNodeGen;
64+
import com.oracle.truffle.api.strings.TruffleString.Encoding;
6565

6666
final class IndexOfCodePointSet {
6767

@@ -596,7 +596,7 @@ abstract static class IndexOfStringNode extends OptimizedIndexOfNode {
596596
int runSearch(Node location, byte[] arrayA, long offsetA, int lengthA, int strideA, int codeRangeA, int fromIndex, int toIndex, Encoding encoding) {
597597
assert str.isManaged() && str.isMaterialized() && str.offset() == 0;
598598
return TStringOps.indexOfStringWithOrMaskWithStride(location, arrayA, offsetA, lengthA, strideA,
599-
(byte[]) str.data(), ARRAY_BYTE_BASE_OFFSET, str.length(), str.stride(), fromIndex, toIndex, null);
599+
(byte[]) str.data(), byteArrayBaseOffset(), str.length(), str.stride(), fromIndex, toIndex, null);
600600
}
601601

602602
@Override

truffle/src/com.oracle.truffle.api.strings/src/com/oracle/truffle/api/strings/JCodingsImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
import static com.oracle.truffle.api.strings.TStringGuards.isUTF32;
5151
import static com.oracle.truffle.api.strings.TStringGuards.isUTF8;
5252
import static com.oracle.truffle.api.strings.TStringGuards.isUnsupportedEncoding;
53-
import static com.oracle.truffle.api.strings.TStringUnsafe.ARRAY_BYTE_BASE_OFFSET;
53+
import static com.oracle.truffle.api.strings.TStringUnsafe.byteArrayBaseOffset;
5454

5555
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
5656
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
@@ -225,7 +225,7 @@ public long calcStringAttributes(Node location, AbstractTruffleString a, byte[]
225225
offsetBytes = fromIndexA;
226226
} else {
227227
bytes = arrayA;
228-
offsetBytes = (int) ((offsetA - ARRAY_BYTE_BASE_OFFSET) + fromIndexA);
228+
offsetBytes = (int) ((offsetA - byteArrayBaseOffset()) + fromIndexA);
229229
}
230230
Encoding enc = get(encodingA);
231231
int codeRange = TSCodeRange.getValid(enc.isSingleByte());

truffle/src/com.oracle.truffle.api.strings/src/com/oracle/truffle/api/strings/MutableTruffleString.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
*/
4141
package com.oracle.truffle.api.strings;
4242

43-
import static com.oracle.truffle.api.strings.TStringUnsafe.ARRAY_BYTE_BASE_OFFSET;
43+
import static com.oracle.truffle.api.strings.TStringUnsafe.byteArrayBaseOffset;
4444

4545
import java.lang.ref.Reference;
4646
import java.util.Arrays;
@@ -414,7 +414,7 @@ void writeByte(MutableTruffleString a, int byteIndex, byte value, Encoding expec
414414
final long addOffsetA;
415415
if (managedProfileA.profile(this, dataA instanceof byte[])) {
416416
arrayA = (byte[]) dataA;
417-
addOffsetA = ARRAY_BYTE_BASE_OFFSET;
417+
addOffsetA = byteArrayBaseOffset();
418418
} else {
419419
arrayA = null;
420420
addOffsetA = NativePointer.unwrap(dataA);
@@ -499,23 +499,23 @@ final MutableTruffleString concat(AbstractTruffleString a, AbstractTruffleString
499499
final long addOffsetB;
500500
if (managedProfileA.profile(this, dataA instanceof byte[])) {
501501
arrayA = (byte[]) dataA;
502-
addOffsetA = ARRAY_BYTE_BASE_OFFSET;
502+
addOffsetA = byteArrayBaseOffset();
503503
} else if (nativeProfileA.profile(this, dataA instanceof NativePointer)) {
504504
arrayA = null;
505505
addOffsetA = NativePointer.unwrap(dataA);
506506
} else {
507507
arrayA = a.materializeLazy(this, dataA);
508-
addOffsetA = ARRAY_BYTE_BASE_OFFSET;
508+
addOffsetA = byteArrayBaseOffset();
509509
}
510510
if (managedProfileB.profile(this, dataB instanceof byte[])) {
511511
arrayB = (byte[]) dataB;
512-
addOffsetB = ARRAY_BYTE_BASE_OFFSET;
512+
addOffsetB = byteArrayBaseOffset();
513513
} else if (nativeProfileB.profile(this, dataB instanceof NativePointer)) {
514514
arrayB = null;
515515
addOffsetB = NativePointer.unwrap(dataB);
516516
} else {
517517
arrayB = b.materializeLazy(this, dataB);
518-
addOffsetB = ARRAY_BYTE_BASE_OFFSET;
518+
addOffsetB = byteArrayBaseOffset();
519519
}
520520
final long offsetA = a.offset() + addOffsetA;
521521
final long offsetB = b.offset() + addOffsetB;
@@ -591,13 +591,13 @@ MutableTruffleString substring(AbstractTruffleString a, int fromIndex, int lengt
591591
final long addOffsetA;
592592
if (managedProfileA.profile(this, dataA instanceof byte[])) {
593593
arrayA = (byte[]) dataA;
594-
addOffsetA = ARRAY_BYTE_BASE_OFFSET;
594+
addOffsetA = byteArrayBaseOffset();
595595
} else if (nativeProfileA.profile(this, dataA instanceof NativePointer)) {
596596
arrayA = null;
597597
addOffsetA = NativePointer.unwrap(dataA);
598598
} else {
599599
arrayA = a.materializeLazy(this, dataA);
600-
addOffsetA = ARRAY_BYTE_BASE_OFFSET;
600+
addOffsetA = byteArrayBaseOffset();
601601
}
602602
final long offsetA = a.offset() + addOffsetA;
603603

@@ -818,13 +818,13 @@ static MutableTruffleString reinterpret(AbstractTruffleString a, Encoding expect
818818
final long addOffsetA;
819819
if (managedProfileA.profile(node, dataA instanceof byte[])) {
820820
arrayA = (byte[]) dataA;
821-
addOffsetA = ARRAY_BYTE_BASE_OFFSET;
821+
addOffsetA = byteArrayBaseOffset();
822822
} else if (nativeProfileA.profile(node, dataA instanceof NativePointer)) {
823823
arrayA = null;
824824
addOffsetA = NativePointer.unwrap(dataA);
825825
} else {
826826
arrayA = a.materializeLazy(node, dataA);
827-
addOffsetA = ARRAY_BYTE_BASE_OFFSET;
827+
addOffsetA = byteArrayBaseOffset();
828828
}
829829
final long offsetA = a.offset() + addOffsetA;
830830
final byte[] array = TStringOps.arraycopyOfWithStride(node, arrayA, offsetA, a.length(), a.stride(), byteLength >> expectedEncoding.naturalStride, expectedEncoding.naturalStride);
@@ -871,13 +871,13 @@ static MutableTruffleString createCopying(Node node, AbstractTruffleString a, En
871871
final long addOffsetA;
872872
if (managedProfileA.profile(node, dataA instanceof byte[])) {
873873
arrayA = (byte[]) dataA;
874-
addOffsetA = ARRAY_BYTE_BASE_OFFSET;
874+
addOffsetA = byteArrayBaseOffset();
875875
} else if (nativeProfileA.profile(node, dataA instanceof NativePointer)) {
876876
arrayA = null;
877877
addOffsetA = NativePointer.unwrap(dataA);
878878
} else {
879879
arrayA = a.materializeLazy(node, dataA);
880-
addOffsetA = ARRAY_BYTE_BASE_OFFSET;
880+
addOffsetA = byteArrayBaseOffset();
881881
}
882882
final long offsetA = a.offset() + addOffsetA;
883883
final byte[] array = TStringOps.arraycopyOfWithStride(node, arrayA, offsetA, a.length(), a.stride(), lengthB, strideB);

truffle/src/com.oracle.truffle.api.strings/src/com/oracle/truffle/api/strings/NumberConversion.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
package com.oracle.truffle.api.strings;
4242

4343
import static com.oracle.truffle.api.strings.TStringOps.writeToByteArray;
44-
import static com.oracle.truffle.api.strings.TStringUnsafe.ARRAY_BYTE_BASE_OFFSET;
44+
import static com.oracle.truffle.api.strings.TStringUnsafe.byteArrayBaseOffset;
4545

4646
import com.oracle.truffle.api.CompilerAsserts;
4747
import com.oracle.truffle.api.CompilerDirectives;
@@ -357,8 +357,8 @@ static int stringLengthLong(long longValue) {
357357
static void writeLongToBytes(Node location, long i, byte[] buf, int stride, int fromIndex, int length) {
358358
if (i == Long.MIN_VALUE) {
359359
TStringOps.arraycopyWithStride(location,
360-
LONG_MIN_VALUE_BYTES, ARRAY_BYTE_BASE_OFFSET, 0, 0,
361-
buf, ARRAY_BYTE_BASE_OFFSET, stride, fromIndex, LONG_MIN_VALUE_BYTES.length);
360+
LONG_MIN_VALUE_BYTES, byteArrayBaseOffset(), 0, 0,
361+
buf, byteArrayBaseOffset(), stride, fromIndex, LONG_MIN_VALUE_BYTES.length);
362362
} else {
363363
writeLongToBytesIntl(i, fromIndex + length, buf, stride);
364364
}
@@ -417,8 +417,8 @@ private static void writeLongToBytesIntl(long value, int index, byte[] buf, int
417417
static void writeIntToBytes(Node location, int i, byte[] buf, int stride, int fromIndex, int length) {
418418
if (i == Integer.MIN_VALUE) {
419419
TStringOps.arraycopyWithStride(location,
420-
INT_MIN_VALUE_BYTES, ARRAY_BYTE_BASE_OFFSET, 0, 0,
421-
buf, ARRAY_BYTE_BASE_OFFSET, stride, fromIndex, INT_MIN_VALUE_BYTES.length);
420+
INT_MIN_VALUE_BYTES, byteArrayBaseOffset(), 0, 0,
421+
buf, byteArrayBaseOffset(), stride, fromIndex, INT_MIN_VALUE_BYTES.length);
422422
} else {
423423
writeIntToBytesIntl(i, fromIndex + length, buf, stride);
424424
}

0 commit comments

Comments
 (0)