Skip to content

Commit 33a68c9

Browse files
committed
Merge tag 'jdk-21.0.11+10' into sapmachine21
Added tag jdk-21.0.11+10 for changeset d8615be
2 parents cd227bd + d8615be commit 33a68c9

40 files changed

Lines changed: 506 additions & 296 deletions

File tree

make/conf/version-numbers.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,4 @@ DEFAULT_VERSION_CLASSFILE_MINOR=0
3939
DEFAULT_VERSION_DOCS_API_SINCE=11
4040
DEFAULT_ACCEPTABLE_BOOT_VERSIONS="20 21"
4141
DEFAULT_JDK_SOURCE_TARGET_VERSION=21
42-
DEFAULT_PROMOTED_VERSION_PRE=ea
42+
DEFAULT_PROMOTED_VERSION_PRE=

src/hotspot/cpu/aarch64/aarch64.ad

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8082,10 +8082,11 @@ instruct bytes_reverse_unsigned_short(iRegINoSp dst, iRegIorL2I src) %{
80828082
match(Set dst (ReverseBytesUS src));
80838083

80848084
ins_cost(INSN_COST);
8085-
format %{ "rev16w $dst, $src" %}
8085+
format %{ "rev16w $dst, $src\t# $dst -> unsigned short" %}
80868086

80878087
ins_encode %{
80888088
__ rev16w(as_Register($dst$$reg), as_Register($src$$reg));
8089+
__ narrow_subword_type(as_Register($dst$$reg), T_CHAR);
80898090
%}
80908091

80918092
ins_pipe(ialu_reg);

src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2425,6 +2425,17 @@ void MacroAssembler::store_sized_value(Address dst, Register src, size_t size_in
24252425
}
24262426
}
24272427

2428+
void MacroAssembler::narrow_subword_type(Register reg, BasicType bt) {
2429+
assert(is_subword_type(bt), "required");
2430+
switch (bt) {
2431+
case T_BOOLEAN: andw(reg, reg, 1); break;
2432+
case T_BYTE: sxtbw(reg, reg); break;
2433+
case T_CHAR: uxthw(reg, reg); break;
2434+
case T_SHORT: sxthw(reg, reg); break;
2435+
default: ShouldNotReachHere();
2436+
}
2437+
}
2438+
24282439
void MacroAssembler::decrementw(Register reg, int value)
24292440
{
24302441
if (value < 0) { incrementw(reg, -value); return; }

src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "metaprogramming/enableIf.hpp"
3232
#include "oops/compressedOops.hpp"
3333
#include "runtime/vm_version.hpp"
34+
#include "utilities/globalDefinitions.hpp"
3435
#include "utilities/powerOfTwo.hpp"
3536

3637
class OopMap;
@@ -678,6 +679,9 @@ class MacroAssembler: public Assembler {
678679
// Support for sign-extension (hi:lo = extend_sign(lo))
679680
void extend_sign(Register hi, Register lo);
680681

682+
// Clean up a subword typed value to the representation in compliance with JVMS §2.3
683+
void narrow_subword_type(Register reg, BasicType bt);
684+
681685
// Load and store values by size and signed-ness
682686
void load_sized_value(Register dst, Address src, size_t size_in_bytes, bool is_signed);
683687
void store_sized_value(Address dst, Register src, size_t size_in_bytes);

src/hotspot/cpu/arm/arm.ad

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9387,10 +9387,12 @@ instruct bytes_reverse_long(iRegL dst, iRegL src) %{
93879387

93889388
instruct bytes_reverse_unsigned_short(iRegI dst, iRegI src) %{
93899389
match(Set dst (ReverseBytesUS src));
9390-
size(4);
9391-
format %{ "REV16 $dst,$src" %}
9390+
size(8);
9391+
format %{ "REV32 $dst,$src\n\t"
9392+
"LSR $dst,$dst,#16" %}
93929393
ins_encode %{
9393-
__ rev16($dst$$Register, $src$$Register);
9394+
__ rev($dst$$Register, $src$$Register);
9395+
__ mov($dst$$Register, AsmOperand($dst$$Register, lsr, 16));
93949396
%}
93959397
ins_pipe( iload_mem ); // FIXME
93969398
%}

src/hotspot/cpu/ppc/ppc.ad

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13072,6 +13072,19 @@ instruct countTrailingZerosL_cnttzd(iRegIdst dst, iRegLsrc src) %{
1307213072
ins_pipe(pipe_class_default);
1307313073
%}
1307413074

13075+
// Expand nodes for byte_reverse_int/ushort/short.
13076+
instruct rlwinm(iRegIdst dst, iRegIsrc src, immI16 shift, immI16 mb, immI16 me) %{
13077+
effect(DEF dst, USE src, USE shift, USE mb, USE me);
13078+
predicate(false);
13079+
13080+
format %{ "RLWINM $dst, $src, $shift, $mb, $me" %}
13081+
size(4);
13082+
ins_encode %{
13083+
__ rlwinm($dst$$Register, $src$$Register, $shift$$constant, $mb$$constant, $me$$constant);
13084+
%}
13085+
ins_pipe(pipe_class_default);
13086+
%}
13087+
1307513088
// Expand nodes for byte_reverse_int.
1307613089
instruct insrwi_a(iRegIdst dst, iRegIsrc src, immI16 n, immI16 b) %{
1307713090
effect(DEF dst, USE src, USE n, USE b);
@@ -13228,34 +13241,22 @@ instruct bytes_reverse_long(iRegLdst dst, iRegLsrc src) %{
1322813241
ins_pipe(pipe_class_default);
1322913242
%}
1323013243

13244+
// Need zero extend. Must not use brh only.
1323113245
instruct bytes_reverse_ushort_Ex(iRegIdst dst, iRegIsrc src) %{
1323213246
match(Set dst (ReverseBytesUS src));
13233-
predicate(!UseByteReverseInstructions);
1323413247
ins_cost(2*DEFAULT_COST);
1323513248

1323613249
expand %{
13250+
immI16 imm31 %{ (int) 31 %}
13251+
immI16 imm24 %{ (int) 24 %}
1323713252
immI16 imm16 %{ (int) 16 %}
1323813253
immI16 imm8 %{ (int) 8 %}
1323913254

13240-
urShiftI_reg_imm(dst, src, imm8);
13255+
rlwinm(dst, src, imm24, imm24, imm31);
1324113256
insrwi(dst, src, imm8, imm16);
1324213257
%}
1324313258
%}
1324413259

13245-
instruct bytes_reverse_ushort(iRegIdst dst, iRegIsrc src) %{
13246-
match(Set dst (ReverseBytesUS src));
13247-
predicate(UseByteReverseInstructions);
13248-
ins_cost(DEFAULT_COST);
13249-
size(4);
13250-
13251-
format %{ "BRH $dst, $src" %}
13252-
13253-
ins_encode %{
13254-
__ brh($dst$$Register, $src$$Register);
13255-
%}
13256-
ins_pipe(pipe_class_default);
13257-
%}
13258-
1325913260
instruct bytes_reverse_short_Ex(iRegIdst dst, iRegIsrc src) %{
1326013261
match(Set dst (ReverseBytesS src));
1326113262
predicate(!UseByteReverseInstructions);

src/hotspot/cpu/x86/macroAssembler_x86.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
#include "runtime/safepointMechanism.hpp"
5252
#include "runtime/sharedRuntime.hpp"
5353
#include "runtime/stubRoutines.hpp"
54+
#include "utilities/globalDefinitions.hpp"
5455
#include "utilities/macros.hpp"
5556

5657
#ifdef PRODUCT
@@ -3151,6 +3152,17 @@ void MacroAssembler::sign_extend_short(Register reg) {
31513152
}
31523153
}
31533154

3155+
void MacroAssembler::narrow_subword_type(Register reg, BasicType bt) {
3156+
assert(is_subword_type(bt), "required");
3157+
switch (bt) {
3158+
case T_BOOLEAN: andl(reg, 1); break;
3159+
case T_BYTE: movsbl(reg, reg); break;
3160+
case T_CHAR: movzwl(reg, reg); break;
3161+
case T_SHORT: movswl(reg, reg); break;
3162+
default: ShouldNotReachHere();
3163+
}
3164+
}
3165+
31543166
void MacroAssembler::testl(Address dst, int32_t imm32) {
31553167
if (imm32 >= 0 && is8bit(imm32)) {
31563168
testb(dst, imm32);

src/hotspot/cpu/x86/macroAssembler_x86.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,9 @@ class MacroAssembler: public Assembler {
455455
void sign_extend_short(Register reg);
456456
void sign_extend_byte(Register reg);
457457

458+
// Clean up a subword typed value to the representation in compliance with JVMS §2.3
459+
void narrow_subword_type(Register reg, BasicType bt);
460+
458461
// Division by power of 2, rounding towards 0
459462
void division_with_shift(Register reg, int shift_value);
460463

src/hotspot/cpu/x86/x86_32.ad

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7406,10 +7406,11 @@ instruct xaddB_no_res( memory mem, Universe dummy, immI add, eFlagsReg cr) %{
74067406
instruct xaddB( memory mem, xRegI newval, eFlagsReg cr) %{
74077407
match(Set newval (GetAndAddB mem newval));
74087408
effect(KILL cr);
7409-
format %{ "XADDB [$mem],$newval" %}
7409+
format %{ "XADDB [$mem],$newval\t# $newval -> byte" %}
74107410
ins_encode %{
74117411
__ lock();
74127412
__ xaddb($mem$$Address, $newval$$Register);
7413+
__ narrow_subword_type($newval$$Register, T_BYTE);
74137414
%}
74147415
ins_pipe( pipe_cmpxchg );
74157416
%}
@@ -7429,10 +7430,11 @@ instruct xaddS_no_res( memory mem, Universe dummy, immI add, eFlagsReg cr) %{
74297430
instruct xaddS( memory mem, rRegI newval, eFlagsReg cr) %{
74307431
match(Set newval (GetAndAddS mem newval));
74317432
effect(KILL cr);
7432-
format %{ "XADDS [$mem],$newval" %}
7433+
format %{ "XADDS [$mem],$newval\t# $newval -> short" %}
74337434
ins_encode %{
74347435
__ lock();
74357436
__ xaddw($mem$$Address, $newval$$Register);
7437+
__ narrow_subword_type($newval$$Register, T_SHORT);
74367438
%}
74377439
ins_pipe( pipe_cmpxchg );
74387440
%}
@@ -7463,18 +7465,20 @@ instruct xaddI( memory mem, rRegI newval, eFlagsReg cr) %{
74637465
// Important to match to xRegI: only 8-bit regs.
74647466
instruct xchgB( memory mem, xRegI newval) %{
74657467
match(Set newval (GetAndSetB mem newval));
7466-
format %{ "XCHGB $newval,[$mem]" %}
7468+
format %{ "XCHGB $newval,[$mem]\t# $newval -> byte" %}
74677469
ins_encode %{
74687470
__ xchgb($newval$$Register, $mem$$Address);
7471+
__ narrow_subword_type($newval$$Register, T_BYTE);
74697472
%}
74707473
ins_pipe( pipe_cmpxchg );
74717474
%}
74727475

74737476
instruct xchgS( memory mem, rRegI newval) %{
74747477
match(Set newval (GetAndSetS mem newval));
7475-
format %{ "XCHGW $newval,[$mem]" %}
7478+
format %{ "XCHGW $newval,[$mem]\t# $newval -> short" %}
74767479
ins_encode %{
74777480
__ xchgw($newval$$Register, $mem$$Address);
7481+
__ narrow_subword_type($newval$$Register, T_SHORT);
74787482
%}
74797483
ins_pipe( pipe_cmpxchg );
74807484
%}

src/hotspot/cpu/x86/x86_64.ad

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8340,10 +8340,11 @@ instruct xaddB_no_res( memory mem, Universe dummy, immI add, rFlagsReg cr) %{
83408340
instruct xaddB( memory mem, rRegI newval, rFlagsReg cr) %{
83418341
match(Set newval (GetAndAddB mem newval));
83428342
effect(KILL cr);
8343-
format %{ "XADDB [$mem],$newval" %}
8343+
format %{ "XADDB [$mem],$newval\t# $newval -> byte" %}
83448344
ins_encode %{
83458345
__ lock();
83468346
__ xaddb($mem$$Address, $newval$$Register);
8347+
__ narrow_subword_type($newval$$Register, T_BYTE);
83478348
%}
83488349
ins_pipe( pipe_cmpxchg );
83498350
%}
@@ -8363,10 +8364,11 @@ instruct xaddS_no_res( memory mem, Universe dummy, immI add, rFlagsReg cr) %{
83638364
instruct xaddS( memory mem, rRegI newval, rFlagsReg cr) %{
83648365
match(Set newval (GetAndAddS mem newval));
83658366
effect(KILL cr);
8366-
format %{ "XADDW [$mem],$newval" %}
8367+
format %{ "XADDW [$mem],$newval\t# $newval -> short" %}
83678368
ins_encode %{
83688369
__ lock();
83698370
__ xaddw($mem$$Address, $newval$$Register);
8371+
__ narrow_subword_type($newval$$Register, T_SHORT);
83708372
%}
83718373
ins_pipe( pipe_cmpxchg );
83728374
%}
@@ -8419,18 +8421,20 @@ instruct xaddL( memory mem, rRegL newval, rFlagsReg cr) %{
84198421

84208422
instruct xchgB( memory mem, rRegI newval) %{
84218423
match(Set newval (GetAndSetB mem newval));
8422-
format %{ "XCHGB $newval,[$mem]" %}
8424+
format %{ "XCHGB $newval,[$mem]\t# $newval -> byte" %}
84238425
ins_encode %{
84248426
__ xchgb($newval$$Register, $mem$$Address);
8427+
__ narrow_subword_type($newval$$Register, T_BYTE);
84258428
%}
84268429
ins_pipe( pipe_cmpxchg );
84278430
%}
84288431

84298432
instruct xchgS( memory mem, rRegI newval) %{
84308433
match(Set newval (GetAndSetS mem newval));
8431-
format %{ "XCHGW $newval,[$mem]" %}
8434+
format %{ "XCHGW $newval,[$mem]\t# $newval -> short" %}
84328435
ins_encode %{
84338436
__ xchgw($newval$$Register, $mem$$Address);
8437+
__ narrow_subword_type($newval$$Register, T_SHORT);
84348438
%}
84358439
ins_pipe( pipe_cmpxchg );
84368440
%}

0 commit comments

Comments
 (0)