Skip to content
This repository was archived by the owner on Aug 27, 2022. It is now read-only.

Commit 205bae2

Browse files
author
duke
committed
Automatic merge of jdk:master into master
2 parents 3c27630 + b1d1499 commit 205bae2

File tree

196 files changed

+7864
-6088
lines changed

Some content is hidden

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

196 files changed

+7864
-6088
lines changed

.github/workflows/submit.yml

Lines changed: 91 additions & 482 deletions
Large diffs are not rendered by default.

make/hotspot/symbols/symbols-unix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ JVM_RawMonitorCreate
177177
JVM_RawMonitorDestroy
178178
JVM_RawMonitorEnter
179179
JVM_RawMonitorExit
180+
JVM_ReferenceClear
180181
JVM_ReferenceRefersTo
181182
JVM_RegisterLambdaProxyClassForArchiving
182183
JVM_RegisterSignal

make/jdk/src/classes/build/tools/depend/Depend.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -59,6 +59,7 @@
5959
import javax.lang.model.element.ModuleElement.UsesDirective;
6060
import javax.lang.model.element.PackageElement;
6161
import javax.lang.model.element.QualifiedNameable;
62+
import javax.lang.model.element.RecordComponentElement;
6263
import javax.lang.model.element.TypeElement;
6364
import javax.lang.model.element.TypeParameterElement;
6465
import javax.lang.model.element.VariableElement;
@@ -258,6 +259,13 @@ public Void visitType(TypeElement e, Void p) {
258259
return null;
259260
}
260261

262+
@Override
263+
public Void visitRecordComponent(@SuppressWarnings("preview")RecordComponentElement e, Void p) {
264+
update(e.getSimpleName());
265+
visit(e.asType());
266+
return null;
267+
}
268+
261269
@Override
262270
public Void visitVariable(VariableElement e, Void p) {
263271
visit(e.asType());

make/jdk/src/classes/build/tools/depend/DependTest.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -51,6 +51,7 @@ public static void main(String... args) throws Exception {
5151
test.testFields();
5252
test.testModules();
5353
test.testAnnotations();
54+
test.testRecords();
5455
}
5556

5657
public void testMethods() throws Exception {
@@ -191,6 +192,36 @@ public void testModules() throws Exception {
191192
true);
192193
}
193194

195+
public void testRecords() throws Exception {
196+
doOrdinaryTest("package test; public record Test (int x, int y) { }",
197+
"package test; public record Test (int x, int y) { }", // identical
198+
false);
199+
doOrdinaryTest("package test; public record Test (int x, int y) { }",
200+
"package test; public record Test (int x, int y) {" +
201+
"public Test { } }", // compact ctr
202+
false);
203+
doOrdinaryTest("package test; public record Test (int x, int y) { }",
204+
"package test; public record Test (int x, int y) {" +
205+
"public Test (int x, int y) { this.x=x; this.y=y;} }", // canonical ctr
206+
false);
207+
doOrdinaryTest("package test; public record Test (int x, int y) { }",
208+
"package test; public record Test (int y, int x) { }", // reverse
209+
true);
210+
doOrdinaryTest("package test; public record Test (int x, int y) { }",
211+
"package test; public record Test (int x, int y, int z) { }", // additional
212+
true);
213+
doOrdinaryTest("package test; public record Test (int x, int y) { }",
214+
"package test; public record Test () { }", // empty
215+
true);
216+
doOrdinaryTest("package test; public record Test (int x, int y) { }",
217+
"package test; /*package*/ record Test (int x, int y) { }", // package
218+
true);
219+
doOrdinaryTest("package test; public record Test (int x, int y) { }",
220+
"package test; public record Test (int x, int y) {" +
221+
"public Test (int x, int y, int z) { this(x, y); } }", // additional ctr
222+
true);
223+
}
224+
194225
private final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
195226
private Path depend;
196227
private Path scratchServices;

src/hotspot/cpu/x86/assembler_x86.cpp

Lines changed: 25 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2706,34 +2706,18 @@ void Assembler::evmovdqub(XMMRegister dst, KRegister mask, Address src, bool mer
27062706
emit_operand(dst, src);
27072707
}
27082708

2709-
void Assembler::evmovdqu(XMMRegister dst, KRegister mask, Address src, int vector_len, int type) {
2710-
assert(VM_Version::supports_avx512vlbw(), "");
2711-
assert(type == T_BYTE || type == T_SHORT || type == T_CHAR || type == T_INT || type == T_LONG, "");
2712-
InstructionMark im(this);
2713-
bool wide = type == T_SHORT || type == T_CHAR || type == T_LONG;
2714-
int prefix = (type == T_BYTE || type == T_SHORT || type == T_CHAR) ? VEX_SIMD_F2 : VEX_SIMD_F3;
2715-
InstructionAttr attributes(vector_len, /* vex_w */ wide, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
2716-
attributes.set_address_attributes(/* tuple_type */ EVEX_FVM, /* input_size_in_bits */ EVEX_NObit);
2717-
attributes.set_embedded_opmask_register_specifier(mask);
2718-
attributes.set_is_evex_instruction();
2719-
vex_prefix(src, 0, dst->encoding(), (Assembler::VexSimdPrefix)prefix, VEX_OPCODE_0F, &attributes);
2720-
emit_int8(0x6F);
2721-
emit_operand(dst, src);
2722-
}
2723-
2724-
void Assembler::evmovdqu(Address dst, KRegister mask, XMMRegister src, int vector_len, int type) {
2709+
void Assembler::evmovdqub(Address dst, KRegister mask, XMMRegister src, bool merge, int vector_len) {
27252710
assert(VM_Version::supports_avx512vlbw(), "");
27262711
assert(src != xnoreg, "sanity");
2727-
assert(type == T_BYTE || type == T_SHORT || type == T_CHAR || type == T_INT || type == T_LONG, "");
27282712
InstructionMark im(this);
2729-
bool wide = type == T_SHORT || type == T_CHAR || type == T_LONG;
2730-
int prefix = (type == T_BYTE || type == T_SHORT || type == T_CHAR) ? VEX_SIMD_F2 : VEX_SIMD_F3;
2731-
InstructionAttr attributes(vector_len, /* vex_w */ wide, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
2713+
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
27322714
attributes.set_address_attributes(/* tuple_type */ EVEX_FVM, /* input_size_in_bits */ EVEX_NObit);
2733-
attributes.reset_is_clear_context();
27342715
attributes.set_embedded_opmask_register_specifier(mask);
27352716
attributes.set_is_evex_instruction();
2736-
vex_prefix(dst, 0, src->encoding(), (Assembler::VexSimdPrefix)prefix, VEX_OPCODE_0F, &attributes);
2717+
if (merge) {
2718+
attributes.reset_is_clear_context();
2719+
}
2720+
vex_prefix(dst, 0, src->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
27372721
emit_int8(0x7F);
27382722
emit_operand(src, dst);
27392723
}
@@ -8056,6 +8040,25 @@ void Assembler::vzeroupper_uncached() {
80568040
}
80578041
}
80588042

8043+
void Assembler::fld_x(Address adr) {
8044+
InstructionMark im(this);
8045+
emit_int8((unsigned char)0xDB);
8046+
emit_operand32(rbp, adr);
8047+
}
8048+
8049+
void Assembler::fstp_x(Address adr) {
8050+
InstructionMark im(this);
8051+
emit_int8((unsigned char)0xDB);
8052+
emit_operand32(rdi, adr);
8053+
}
8054+
8055+
void Assembler::emit_operand32(Register reg, Address adr) {
8056+
assert(reg->encoding() < 8, "no extended registers");
8057+
assert(!adr.base_needs_rex() && !adr.index_needs_rex(), "no extended registers");
8058+
emit_operand(reg, adr._base, adr._index, adr._scale, adr._disp,
8059+
adr._rspec);
8060+
}
8061+
80598062
#ifndef _LP64
80608063
// 32bit only pieces of the assembler
80618064

@@ -9876,25 +9879,6 @@ void Assembler::decq(Address dst) {
98769879
emit_operand(rcx, dst);
98779880
}
98789881

9879-
void Assembler::fld_x(Address adr) {
9880-
InstructionMark im(this);
9881-
emit_int8((unsigned char)0xDB);
9882-
emit_operand32(rbp, adr);
9883-
}
9884-
9885-
void Assembler::fstp_x(Address adr) {
9886-
InstructionMark im(this);
9887-
emit_int8((unsigned char)0xDB);
9888-
emit_operand32(rdi, adr);
9889-
}
9890-
9891-
void Assembler::emit_operand32(Register reg, Address adr) {
9892-
assert(reg->encoding() < 8, "no extended registers");
9893-
assert(!adr.base_needs_rex() && !adr.index_needs_rex(), "no extended registers");
9894-
emit_operand(reg, adr._base, adr._index, adr._scale, adr._disp,
9895-
adr._rspec);
9896-
}
9897-
98989882
void Assembler::fxrstor(Address src) {
98999883
emit_int24(get_prefixq(src), 0x0F, (unsigned char)0xAE);
99009884
emit_operand(as_Register(1), src);

src/hotspot/cpu/x86/assembler_x86.hpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,6 +1549,7 @@ class Assembler : public AbstractAssembler {
15491549
void evmovdqub(XMMRegister dst, Address src, bool merge, int vector_len);
15501550
void evmovdqub(XMMRegister dst, XMMRegister src, bool merge, int vector_len);
15511551
void evmovdqub(XMMRegister dst, KRegister mask, Address src, bool merge, int vector_len);
1552+
void evmovdqub(Address dst, KRegister mask, XMMRegister src, bool merge, int vector_len);
15521553
void evmovdquw(Address dst, XMMRegister src, bool merge, int vector_len);
15531554
void evmovdquw(Address dst, KRegister mask, XMMRegister src, bool merge, int vector_len);
15541555
void evmovdquw(XMMRegister dst, Address src, bool merge, int vector_len);
@@ -1566,10 +1567,6 @@ class Assembler : public AbstractAssembler {
15661567
void evmovdquq(XMMRegister dst, KRegister mask, Address src, bool merge, int vector_len);
15671568
void evmovdquq(XMMRegister dst, KRegister mask, XMMRegister src, bool merge, int vector_len);
15681569

1569-
// Generic move instructions.
1570-
void evmovdqu(Address dst, KRegister mask, XMMRegister src, int vector_len, int type);
1571-
void evmovdqu(XMMRegister dst, KRegister mask, Address src, int vector_len, int type);
1572-
15731570
// Move lower 64bit to high 64bit in 128bit register
15741571
void movlhps(XMMRegister dst, XMMRegister src);
15751572

src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1891,6 +1891,20 @@ void C2_MacroAssembler::reduce8L(int opcode, Register dst, Register src1, XMMReg
18911891
reduce_operation_256(T_LONG, opcode, vtmp2, vtmp2, src2);
18921892
reduce4L(opcode, dst, src1, vtmp2, vtmp1, vtmp2);
18931893
}
1894+
1895+
void C2_MacroAssembler::genmask(Register dst, Register len, Register temp) {
1896+
if (ArrayCopyPartialInlineSize <= 32) {
1897+
mov64(dst, 1);
1898+
shlxq(dst, dst, len);
1899+
decq(dst);
1900+
} else {
1901+
mov64(dst, -1);
1902+
movq(temp, len);
1903+
negptr(temp);
1904+
addptr(temp, 64);
1905+
shrxq(dst, dst, temp);
1906+
}
1907+
}
18941908
#endif // _LP64
18951909

18961910
void C2_MacroAssembler::reduce2F(int opcode, XMMRegister dst, XMMRegister src, XMMRegister vtmp) {
@@ -1937,6 +1951,15 @@ void C2_MacroAssembler::reduce8D(int opcode, XMMRegister dst, XMMRegister src, X
19371951
reduce4D(opcode, dst, vtmp1, vtmp1, vtmp2);
19381952
}
19391953

1954+
void C2_MacroAssembler::evmovdqu(BasicType type, KRegister kmask, XMMRegister dst, Address src, int vector_len) {
1955+
MacroAssembler::evmovdqu(type, kmask, dst, src, vector_len);
1956+
}
1957+
1958+
void C2_MacroAssembler::evmovdqu(BasicType type, KRegister kmask, Address dst, XMMRegister src, int vector_len) {
1959+
MacroAssembler::evmovdqu(type, kmask, dst, src, vector_len);
1960+
}
1961+
1962+
19401963
void C2_MacroAssembler::reduceFloatMinMax(int opcode, int vlen, bool is_dst_valid,
19411964
XMMRegister dst, XMMRegister src,
19421965
XMMRegister tmp, XMMRegister atmp, XMMRegister btmp,

src/hotspot/cpu/x86/c2_MacroAssembler_x86.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@
120120
void evgather(BasicType typ, XMMRegister dst, KRegister mask, Register base, XMMRegister idx, int vector_len);
121121
void evscatter(BasicType typ, Register base, XMMRegister idx, KRegister mask, XMMRegister src, int vector_len);
122122

123+
void evmovdqu(BasicType type, KRegister kmask, XMMRegister dst, Address src, int vector_len);
124+
void evmovdqu(BasicType type, KRegister kmask, Address dst, XMMRegister src, int vector_len);
125+
123126
// extract
124127
void extract(BasicType typ, Register dst, XMMRegister src, int idx);
125128
XMMRegister get_lane(BasicType typ, XMMRegister dst, XMMRegister src, int elemindex);
@@ -139,6 +142,7 @@
139142
void reduceI(int opcode, int vlen, Register dst, Register src1, XMMRegister src2, XMMRegister vtmp1, XMMRegister vtmp2);
140143
#ifdef _LP64
141144
void reduceL(int opcode, int vlen, Register dst, Register src1, XMMRegister src2, XMMRegister vtmp1, XMMRegister vtmp2);
145+
void genmask(Register dst, Register len, Register temp);
142146
#endif // _LP64
143147

144148
// dst = reduce(op, src2) using vtmp as temps

src/hotspot/cpu/x86/macroAssembler_x86.cpp

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -745,6 +745,10 @@ void MacroAssembler::pushptr(AddressLiteral src) {
745745
}
746746
}
747747

748+
void MacroAssembler::reset_last_Java_frame(bool clear_fp) {
749+
reset_last_Java_frame(r15_thread, clear_fp);
750+
}
751+
748752
void MacroAssembler::set_last_Java_frame(Register last_java_sp,
749753
Register last_java_fp,
750754
address last_java_pc) {
@@ -2713,25 +2717,21 @@ void MacroAssembler::push_IU_state() {
27132717
pusha();
27142718
}
27152719

2716-
void MacroAssembler::reset_last_Java_frame(bool clear_fp) {
2717-
reset_last_Java_frame(r15_thread, clear_fp);
2718-
}
2719-
27202720
void MacroAssembler::reset_last_Java_frame(Register java_thread, bool clear_fp) { // determine java_thread register
27212721
if (!java_thread->is_valid()) {
27222722
java_thread = rdi;
27232723
get_thread(java_thread);
27242724
}
27252725
// we must set sp to zero to clear frame
2726-
movslq(Address(java_thread, JavaThread::last_Java_sp_offset()), NULL_WORD);
2726+
movptr(Address(java_thread, JavaThread::last_Java_sp_offset()), NULL_WORD);
27272727
// must clear fp, so that compiled frames are not confused; it is
27282728
// possible that we need it only for debugging
27292729
if (clear_fp) {
2730-
movslq(Address(java_thread, JavaThread::last_Java_fp_offset()), NULL_WORD);
2730+
movptr(Address(java_thread, JavaThread::last_Java_fp_offset()), NULL_WORD);
27312731
}
27322732
// Always clear the pc because it could have been set by make_walkable()
2733-
movslq(Address(java_thread, JavaThread::last_Java_pc_offset()), NULL_WORD);
2734-
movslq(Address(java_thread, JavaThread::saved_rbp_address_offset()), NULL_WORD);
2733+
movptr(Address(java_thread, JavaThread::last_Java_pc_offset()), NULL_WORD);
2734+
movptr(Address(java_thread, JavaThread::saved_rbp_address_offset()), NULL_WORD);
27352735
vzeroupper();
27362736
}
27372737

@@ -8000,6 +8000,56 @@ void MacroAssembler::byte_array_inflate(Register src, Register dst, Register len
80008000
bind(done);
80018001
}
80028002

8003+
8004+
void MacroAssembler::evmovdqu(BasicType type, KRegister kmask, XMMRegister dst, Address src, int vector_len) {
8005+
switch(type) {
8006+
case T_BYTE:
8007+
case T_BOOLEAN:
8008+
evmovdqub(dst, kmask, src, false, vector_len);
8009+
break;
8010+
case T_CHAR:
8011+
case T_SHORT:
8012+
evmovdquw(dst, kmask, src, false, vector_len);
8013+
break;
8014+
case T_INT:
8015+
case T_FLOAT:
8016+
evmovdqul(dst, kmask, src, false, vector_len);
8017+
break;
8018+
case T_LONG:
8019+
case T_DOUBLE:
8020+
evmovdquq(dst, kmask, src, false, vector_len);
8021+
break;
8022+
default:
8023+
fatal("Unexpected type argument %s", type2name(type));
8024+
break;
8025+
}
8026+
}
8027+
8028+
void MacroAssembler::evmovdqu(BasicType type, KRegister kmask, Address dst, XMMRegister src, int vector_len) {
8029+
switch(type) {
8030+
case T_BYTE:
8031+
case T_BOOLEAN:
8032+
evmovdqub(dst, kmask, src, true, vector_len);
8033+
break;
8034+
case T_CHAR:
8035+
case T_SHORT:
8036+
evmovdquw(dst, kmask, src, true, vector_len);
8037+
break;
8038+
case T_INT:
8039+
case T_FLOAT:
8040+
evmovdqul(dst, kmask, src, true, vector_len);
8041+
break;
8042+
case T_LONG:
8043+
case T_DOUBLE:
8044+
evmovdquq(dst, kmask, src, true, vector_len);
8045+
break;
8046+
default:
8047+
fatal("Unexpected type argument %s", type2name(type));
8048+
break;
8049+
}
8050+
}
8051+
8052+
80038053
#ifdef _LP64
80048054
void MacroAssembler::convert_f2i(Register dst, XMMRegister src) {
80058055
Label done;

src/hotspot/cpu/x86/macroAssembler_x86.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,10 +1094,14 @@ class MacroAssembler: public Assembler {
10941094
void vmovdqu(XMMRegister dst, AddressLiteral src, Register scratch_reg = rscratch1);
10951095

10961096
// AVX512 Unaligned
1097+
void evmovdqu(BasicType type, KRegister kmask, Address dst, XMMRegister src, int vector_len);
1098+
void evmovdqu(BasicType type, KRegister kmask, XMMRegister dst, Address src, int vector_len);
1099+
10971100
void evmovdqub(Address dst, XMMRegister src, bool merge, int vector_len) { Assembler::evmovdqub(dst, src, merge, vector_len); }
10981101
void evmovdqub(XMMRegister dst, Address src, bool merge, int vector_len) { Assembler::evmovdqub(dst, src, merge, vector_len); }
10991102
void evmovdqub(XMMRegister dst, XMMRegister src, bool merge, int vector_len) { Assembler::evmovdqub(dst, src, merge, vector_len); }
11001103
void evmovdqub(XMMRegister dst, KRegister mask, Address src, bool merge, int vector_len) { Assembler::evmovdqub(dst, mask, src, merge, vector_len); }
1104+
void evmovdqub(Address dst, KRegister mask, XMMRegister src, bool merge, int vector_len) { Assembler::evmovdqub(dst, mask, src, merge, vector_len); }
11011105
void evmovdqub(XMMRegister dst, KRegister mask, AddressLiteral src, bool merge, int vector_len, Register scratch_reg);
11021106

11031107
void evmovdquw(Address dst, XMMRegister src, bool merge, int vector_len) { Assembler::evmovdquw(dst, src, merge, vector_len); }

0 commit comments

Comments
 (0)