Skip to content

Commit 6fbd1d0

Browse files
[GR-69817] Merge in jdk-25.0.1+7 (25.0)
PullRequest: labsjdk-ce/208
2 parents 6dc8bf3 + 3d5a951 commit 6fbd1d0

File tree

60 files changed

+817
-795
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+817
-795
lines changed

.jcheck/conf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[general]
2-
project=jdk
2+
project=jdk-updates
33
jbs=JDK
4-
version=25
4+
version=25.0.1
55

66
[checks]
77
error=author,committer,reviewers,merge,issues,executable,symlink,message,hg-tag,whitespace,problemlists,copyright

make/conf/version-numbers.conf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@
2828

2929
DEFAULT_VERSION_FEATURE=25
3030
DEFAULT_VERSION_INTERIM=0
31-
DEFAULT_VERSION_UPDATE=0
31+
DEFAULT_VERSION_UPDATE=1
3232
DEFAULT_VERSION_PATCH=0
3333
DEFAULT_VERSION_EXTRA1=0
3434
DEFAULT_VERSION_EXTRA2=0
3535
DEFAULT_VERSION_EXTRA3=0
36-
DEFAULT_VERSION_DATE=2025-09-16
36+
DEFAULT_VERSION_DATE=2025-10-21
3737
DEFAULT_VERSION_CLASSFILE_MAJOR=69 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
3838
DEFAULT_VERSION_CLASSFILE_MINOR=0
3939
DEFAULT_VERSION_DOCS_API_SINCE=11

make/jdk/src/classes/build/tools/cldrconverter/Bundle.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -542,10 +542,10 @@ private void handleDateTimeFormatPatterns(String[] patternKeys, Map<String, Obje
542542
if (pattern != null) {
543543
// Perform date-time format pattern conversion which is
544544
// applicable to both SimpleDateFormat and j.t.f.DateTimeFormatter.
545-
String transPattern = translateDateFormatLetters(calendarType, pattern, this::convertDateTimePatternLetter);
545+
String transPattern = translateDateFormatLetters(calendarType, key, pattern, this::convertDateTimePatternLetter);
546546
dateTimePatterns.add(i, transPattern);
547547
// Additionally, perform SDF specific date-time format pattern conversion
548-
sdfPatterns.add(i, translateDateFormatLetters(calendarType, transPattern, this::convertSDFLetter));
548+
sdfPatterns.add(i, translateDateFormatLetters(calendarType, key, transPattern, this::convertSDFLetter));
549549
} else {
550550
dateTimePatterns.add(i, null);
551551
sdfPatterns.add(i, null);
@@ -568,7 +568,7 @@ private void handleDateTimeFormatPatterns(String[] patternKeys, Map<String, Obje
568568
}
569569
}
570570

571-
private String translateDateFormatLetters(CalendarType calendarType, String cldrFormat, ConvertDateTimeLetters converter) {
571+
private String translateDateFormatLetters(CalendarType calendarType, String patternKey, String cldrFormat, ConvertDateTimeLetters converter) {
572572
String pattern = cldrFormat;
573573
int length = pattern.length();
574574
boolean inQuote = false;
@@ -587,7 +587,7 @@ private String translateDateFormatLetters(CalendarType calendarType, String cldr
587587
if (nextc == '\'') {
588588
i++;
589589
if (count != 0) {
590-
converter.convert(calendarType, lastLetter, count, jrePattern);
590+
converter.convert(calendarType, patternKey, lastLetter, count, jrePattern);
591591
lastLetter = 0;
592592
count = 0;
593593
}
@@ -597,7 +597,7 @@ private String translateDateFormatLetters(CalendarType calendarType, String cldr
597597
}
598598
if (!inQuote) {
599599
if (count != 0) {
600-
converter.convert(calendarType, lastLetter, count, jrePattern);
600+
converter.convert(calendarType, patternKey, lastLetter, count, jrePattern);
601601
lastLetter = 0;
602602
count = 0;
603603
}
@@ -614,7 +614,7 @@ private String translateDateFormatLetters(CalendarType calendarType, String cldr
614614
}
615615
if (!(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')) {
616616
if (count != 0) {
617-
converter.convert(calendarType, lastLetter, count, jrePattern);
617+
converter.convert(calendarType, patternKey, lastLetter, count, jrePattern);
618618
lastLetter = 0;
619619
count = 0;
620620
}
@@ -627,7 +627,7 @@ private String translateDateFormatLetters(CalendarType calendarType, String cldr
627627
count++;
628628
continue;
629629
}
630-
converter.convert(calendarType, lastLetter, count, jrePattern);
630+
converter.convert(calendarType, patternKey, lastLetter, count, jrePattern);
631631
lastLetter = c;
632632
count = 1;
633633
}
@@ -637,7 +637,7 @@ private String translateDateFormatLetters(CalendarType calendarType, String cldr
637637
}
638638

639639
if (count != 0) {
640-
converter.convert(calendarType, lastLetter, count, jrePattern);
640+
converter.convert(calendarType, patternKey, lastLetter, count, jrePattern);
641641
}
642642
if (cldrFormat.contentEquals(jrePattern)) {
643643
return cldrFormat;
@@ -661,7 +661,7 @@ private String toMetaZoneKey(String tzKey) {
661661
* on the support given by the SimpleDateFormat and the j.t.f.DateTimeFormatter
662662
* for date-time formatting.
663663
*/
664-
private void convertDateTimePatternLetter(CalendarType calendarType, char cldrLetter, int count, StringBuilder sb) {
664+
private void convertDateTimePatternLetter(CalendarType calendarType, String patternKey, char cldrLetter, int count, StringBuilder sb) {
665665
switch (cldrLetter) {
666666
case 'u':
667667
case 'U':
@@ -683,7 +683,7 @@ private void convertDateTimePatternLetter(CalendarType calendarType, char cldrLe
683683
* Perform a conversion of CLDR date-time format pattern letter which is
684684
* specific to the SimpleDateFormat.
685685
*/
686-
private void convertSDFLetter(CalendarType calendarType, char cldrLetter, int count, StringBuilder sb) {
686+
private void convertSDFLetter(CalendarType calendarType, String patternKey, char cldrLetter, int count, StringBuilder sb) {
687687
switch (cldrLetter) {
688688
case 'G':
689689
if (calendarType != CalendarType.GREGORIAN) {
@@ -722,6 +722,17 @@ private void convertSDFLetter(CalendarType calendarType, char cldrLetter, int co
722722
appendN('z', count, sb);
723723
break;
724724

725+
case 'y':
726+
// If the style is FULL/LONG for a Japanese Calendar, make the
727+
// count == 4 for Gan-nen
728+
if (calendarType == CalendarType.JAPANESE &&
729+
(patternKey.contains("full-") ||
730+
patternKey.contains("long-"))) {
731+
count = 4;
732+
}
733+
appendN(cldrLetter, count, sb);
734+
break;
735+
725736
case 'Z':
726737
if (count == 4 || count == 5) {
727738
sb.append("XXX");
@@ -767,6 +778,7 @@ private void handleSkeletonPatterns(Map<String, Object> myMap, CalendarType cale
767778
.collect(Collectors.toMap(
768779
e -> calendarPrefix + e.getKey(),
769780
e -> translateDateFormatLetters(calendarType,
781+
e.getKey(),
770782
(String)e.getValue(),
771783
this::convertDateTimePatternLetter)
772784
))
@@ -775,7 +787,7 @@ private void handleSkeletonPatterns(Map<String, Object> myMap, CalendarType cale
775787

776788
@FunctionalInterface
777789
private interface ConvertDateTimeLetters {
778-
void convert(CalendarType calendarType, char cldrLetter, int count, StringBuilder sb);
790+
void convert(CalendarType calendarType, String patternKey, char cldrLetter, int count, StringBuilder sb);
779791
}
780792

781793
/**

src/hotspot/cpu/riscv/macroAssembler_riscv.cpp

Lines changed: 2 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -5344,42 +5344,6 @@ void MacroAssembler::add2_with_carry(Register final_dest_hi, Register dest_hi, R
53445344
add(final_dest_hi, dest_hi, carry);
53455345
}
53465346

5347-
/**
5348-
* Multiply 32 bit by 32 bit first loop.
5349-
*/
5350-
void MacroAssembler::multiply_32_x_32_loop(Register x, Register xstart, Register x_xstart,
5351-
Register y, Register y_idx, Register z,
5352-
Register carry, Register product,
5353-
Register idx, Register kdx) {
5354-
// jlong carry, x[], y[], z[];
5355-
// for (int idx=ystart, kdx=ystart+1+xstart; idx >= 0; idx--, kdx--) {
5356-
// long product = y[idx] * x[xstart] + carry;
5357-
// z[kdx] = (int)product;
5358-
// carry = product >>> 32;
5359-
// }
5360-
// z[xstart] = (int)carry;
5361-
5362-
Label L_first_loop, L_first_loop_exit;
5363-
blez(idx, L_first_loop_exit);
5364-
5365-
shadd(t0, xstart, x, t0, LogBytesPerInt);
5366-
lwu(x_xstart, Address(t0, 0));
5367-
5368-
bind(L_first_loop);
5369-
subiw(idx, idx, 1);
5370-
shadd(t0, idx, y, t0, LogBytesPerInt);
5371-
lwu(y_idx, Address(t0, 0));
5372-
mul(product, x_xstart, y_idx);
5373-
add(product, product, carry);
5374-
srli(carry, product, 32);
5375-
subiw(kdx, kdx, 1);
5376-
shadd(t0, kdx, z, t0, LogBytesPerInt);
5377-
sw(product, Address(t0, 0));
5378-
bgtz(idx, L_first_loop);
5379-
5380-
bind(L_first_loop_exit);
5381-
}
5382-
53835347
/**
53845348
* Multiply 64 bit by 64 bit first loop.
53855349
*/
@@ -5596,77 +5560,16 @@ void MacroAssembler::multiply_to_len(Register x, Register xlen, Register y, Regi
55965560
const Register carry = tmp5;
55975561
const Register product = xlen;
55985562
const Register x_xstart = tmp0;
5563+
const Register jdx = tmp1;
55995564

56005565
mv(idx, ylen); // idx = ylen;
56015566
addw(kdx, xlen, ylen); // kdx = xlen+ylen;
56025567
mv(carry, zr); // carry = 0;
56035568

5604-
Label L_multiply_64_x_64_loop, L_done;
5605-
5569+
Label L_done;
56065570
subiw(xstart, xlen, 1);
56075571
bltz(xstart, L_done);
56085572

5609-
const Register jdx = tmp1;
5610-
5611-
if (AvoidUnalignedAccesses) {
5612-
int base_offset = arrayOopDesc::base_offset_in_bytes(T_INT);
5613-
assert((base_offset % (UseCompactObjectHeaders ? 4 :
5614-
(UseCompressedClassPointers ? 8 : 4))) == 0, "Must be");
5615-
5616-
if ((base_offset % 8) == 0) {
5617-
// multiply_64_x_64_loop emits 8-byte load/store to access two elements
5618-
// at a time from int arrays x and y. When base_offset is 8 bytes, these
5619-
// accesses are naturally aligned if both xlen and ylen are even numbers.
5620-
orr(t0, xlen, ylen);
5621-
test_bit(t0, t0, 0);
5622-
beqz(t0, L_multiply_64_x_64_loop);
5623-
}
5624-
5625-
Label L_second_loop_unaligned, L_third_loop, L_third_loop_exit;
5626-
5627-
multiply_32_x_32_loop(x, xstart, x_xstart, y, y_idx, z, carry, product, idx, kdx);
5628-
shadd(t0, xstart, z, t0, LogBytesPerInt);
5629-
sw(carry, Address(t0, 0));
5630-
5631-
bind(L_second_loop_unaligned);
5632-
mv(carry, zr);
5633-
mv(jdx, ylen);
5634-
subiw(xstart, xstart, 1);
5635-
bltz(xstart, L_done);
5636-
5637-
subi(sp, sp, 2 * wordSize);
5638-
sd(z, Address(sp, 0));
5639-
sd(zr, Address(sp, wordSize));
5640-
shadd(t0, xstart, z, t0, LogBytesPerInt);
5641-
addi(z, t0, 4);
5642-
shadd(t0, xstart, x, t0, LogBytesPerInt);
5643-
lwu(product, Address(t0, 0));
5644-
5645-
blez(jdx, L_third_loop_exit);
5646-
5647-
bind(L_third_loop);
5648-
subiw(jdx, jdx, 1);
5649-
shadd(t0, jdx, y, t0, LogBytesPerInt);
5650-
lwu(t0, Address(t0, 0));
5651-
mul(t1, t0, product);
5652-
add(t0, t1, carry);
5653-
shadd(tmp6, jdx, z, t1, LogBytesPerInt);
5654-
lwu(t1, Address(tmp6, 0));
5655-
add(t0, t0, t1);
5656-
sw(t0, Address(tmp6, 0));
5657-
srli(carry, t0, 32);
5658-
bgtz(jdx, L_third_loop);
5659-
5660-
bind(L_third_loop_exit);
5661-
ld(z, Address(sp, 0));
5662-
addi(sp, sp, 2 * wordSize);
5663-
shadd(t0, xstart, z, t0, LogBytesPerInt);
5664-
sw(carry, Address(t0, 0));
5665-
5666-
j(L_second_loop_unaligned);
5667-
}
5668-
5669-
bind(L_multiply_64_x_64_loop);
56705573
multiply_64_x_64_loop(x, xstart, x_xstart, y, y_idx, z, carry, product, idx, kdx);
56715574

56725575
Label L_second_loop_aligned;

src/hotspot/cpu/riscv/macroAssembler_riscv.hpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1384,10 +1384,6 @@ class MacroAssembler: public Assembler {
13841384
void adc(Register dst, Register src1, Register src2, Register carry);
13851385
void add2_with_carry(Register final_dest_hi, Register dest_hi, Register dest_lo,
13861386
Register src1, Register src2, Register carry);
1387-
void multiply_32_x_32_loop(Register x, Register xstart, Register x_xstart,
1388-
Register y, Register y_idx, Register z,
1389-
Register carry, Register product,
1390-
Register idx, Register kdx);
13911387
void multiply_64_x_64_loop(Register x, Register xstart, Register x_xstart,
13921388
Register y, Register y_idx, Register z,
13931389
Register carry, Register product,

src/hotspot/cpu/riscv/riscv.ad

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8431,6 +8431,17 @@ instruct castVV(vReg dst)
84318431
ins_pipe(pipe_class_empty);
84328432
%}
84338433

8434+
instruct castVVMask(vRegMask dst)
8435+
%{
8436+
match(Set dst (CastVV dst));
8437+
8438+
size(0);
8439+
format %{ "# castVV of $dst" %}
8440+
ins_encode(/* empty encoding */);
8441+
ins_cost(0);
8442+
ins_pipe(pipe_class_empty);
8443+
%}
8444+
84348445
// ============================================================================
84358446
// Convert Instructions
84368447

src/hotspot/cpu/riscv/vm_version_riscv.cpp

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -203,15 +203,15 @@ void VM_Version::common_initialize() {
203203
}
204204
}
205205

206-
// Misc Intrinsics could depend on RVV
206+
// Misc Intrinsics that could depend on RVV.
207207

208-
if (UseZba || UseRVV) {
208+
if (!AvoidUnalignedAccesses && (UseZba || UseRVV)) {
209209
if (FLAG_IS_DEFAULT(UseCRC32Intrinsics)) {
210210
FLAG_SET_DEFAULT(UseCRC32Intrinsics, true);
211211
}
212212
} else {
213213
if (!FLAG_IS_DEFAULT(UseCRC32Intrinsics)) {
214-
warning("CRC32 intrinsic requires Zba or RVV instructions (not available on this CPU)");
214+
warning("CRC32 intrinsic are not available on this CPU.");
215215
}
216216
FLAG_SET_DEFAULT(UseCRC32Intrinsics, false);
217217
}
@@ -325,20 +325,40 @@ void VM_Version::c2_initialize() {
325325
FLAG_SET_DEFAULT(UseMulAddIntrinsic, true);
326326
}
327327

328-
if (FLAG_IS_DEFAULT(UseMultiplyToLenIntrinsic)) {
329-
FLAG_SET_DEFAULT(UseMultiplyToLenIntrinsic, true);
328+
if (!AvoidUnalignedAccesses) {
329+
if (FLAG_IS_DEFAULT(UseMultiplyToLenIntrinsic)) {
330+
FLAG_SET_DEFAULT(UseMultiplyToLenIntrinsic, true);
331+
}
332+
} else if (UseMultiplyToLenIntrinsic) {
333+
warning("Intrinsics for BigInteger.multiplyToLen() not available on this CPU.");
334+
FLAG_SET_DEFAULT(UseMultiplyToLenIntrinsic, false);
330335
}
331336

332-
if (FLAG_IS_DEFAULT(UseSquareToLenIntrinsic)) {
333-
FLAG_SET_DEFAULT(UseSquareToLenIntrinsic, true);
337+
if (!AvoidUnalignedAccesses) {
338+
if (FLAG_IS_DEFAULT(UseSquareToLenIntrinsic)) {
339+
FLAG_SET_DEFAULT(UseSquareToLenIntrinsic, true);
340+
}
341+
} else if (UseSquareToLenIntrinsic) {
342+
warning("Intrinsics for BigInteger.squareToLen() not available on this CPU.");
343+
FLAG_SET_DEFAULT(UseSquareToLenIntrinsic, false);
334344
}
335345

336-
if (FLAG_IS_DEFAULT(UseMontgomeryMultiplyIntrinsic)) {
337-
FLAG_SET_DEFAULT(UseMontgomeryMultiplyIntrinsic, true);
346+
if (!AvoidUnalignedAccesses) {
347+
if (FLAG_IS_DEFAULT(UseMontgomeryMultiplyIntrinsic)) {
348+
FLAG_SET_DEFAULT(UseMontgomeryMultiplyIntrinsic, true);
349+
}
350+
} else if (UseMontgomeryMultiplyIntrinsic) {
351+
warning("Intrinsics for BigInteger.montgomeryMultiply() not available on this CPU.");
352+
FLAG_SET_DEFAULT(UseMontgomeryMultiplyIntrinsic, false);
338353
}
339354

340-
if (FLAG_IS_DEFAULT(UseMontgomerySquareIntrinsic)) {
341-
FLAG_SET_DEFAULT(UseMontgomerySquareIntrinsic, true);
355+
if (!AvoidUnalignedAccesses) {
356+
if (FLAG_IS_DEFAULT(UseMontgomerySquareIntrinsic)) {
357+
FLAG_SET_DEFAULT(UseMontgomerySquareIntrinsic, true);
358+
}
359+
} else if (UseMontgomerySquareIntrinsic) {
360+
warning("Intrinsics for BigInteger.montgomerySquare() not available on this CPU.");
361+
FLAG_SET_DEFAULT(UseMontgomerySquareIntrinsic, false);
342362
}
343363

344364
// Adler32

src/hotspot/share/classfile/stackMapTable.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,16 @@ bool StackMapTable::match_stackmap(
132132
}
133133

134134
void StackMapTable::check_jump_target(
135-
StackMapFrame* frame, int32_t target, TRAPS) const {
135+
StackMapFrame* frame, int bci, int offset, TRAPS) const {
136136
ErrorContext ctx;
137+
// Jump targets must be within the method and the method size is limited. See JVMS 4.11
138+
int min_offset = -1 * max_method_code_size;
139+
if (offset < min_offset || offset > max_method_code_size) {
140+
frame->verifier()->verify_error(ErrorContext::bad_stackmap(bci, frame),
141+
"Illegal target of jump or branch (bci %d + offset %d)", bci, offset);
142+
return;
143+
}
144+
int target = bci + offset;
137145
bool match = match_stackmap(
138146
frame, target, true, false, &ctx, CHECK_VERIFY(frame->verifier()));
139147
if (!match || (target < 0 || target >= _code_length)) {

src/hotspot/share/classfile/stackMapTable.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class StackMapTable : public StackObj {
6767

6868
// Check jump instructions. Make sure there are no uninitialized
6969
// instances on backward branch.
70-
void check_jump_target(StackMapFrame* frame, int32_t target, TRAPS) const;
70+
void check_jump_target(StackMapFrame* frame, int bci, int offset, TRAPS) const;
7171

7272
// The following methods are only used inside this class.
7373

0 commit comments

Comments
 (0)