Compare commits

...

745 Commits

Author SHA1 Message Date
Thomas Schatzl
02fe095d29 8364934: G1: Rename members of G1CollectionSet
Reviewed-by: ayang, kbarrett
2025-08-21 11:53:57 +00:00
Thomas Schatzl
a3fd4248b7 8365115: G1: Refactor rem set statistics gather code for group
Reviewed-by: kbarrett, ayang
2025-08-21 09:46:02 +00:00
Thomas Schatzl
f61b247fe3 8364962: G1: Inline G1CollectionSet::finalize_incremental_building
Reviewed-by: ayang, kbarrett
2025-08-21 09:44:41 +00:00
Thomas Schatzl
ed260e8cae 8365026: G1: Initialization should start a "full" new collection set
Reviewed-by: ayang, kbarrett
2025-08-21 09:37:34 +00:00
Thomas Schatzl
f0e706698d 8364414: G1: Use simpler data structure for holding collection set candidates during calculation
Reviewed-by: ayang, iwalulya
2025-08-21 09:36:16 +00:00
Thomas Schatzl
9439d76309 8364532: G1: In liveness tracing, print more significant digits for the liveness value
Reviewed-by: ayang, iwalulya
2025-08-21 09:35:57 +00:00
Thomas Schatzl
b735ef99b2 8364925: G1: Improve program flow around incremental collection set building
Reviewed-by: ayang, iwalulya
2025-08-21 09:19:14 +00:00
Thomas Schatzl
5ede5b47d4 8364650: G1: Use InvalidCSetIndex instead of UINT_MAX for "invalid" sentinel value of young_index_in_cset
Reviewed-by: ayang, iwalulya
2025-08-21 09:18:58 +00:00
Manuel Hässig
5febc4e3bb 8365910: [BACKOUT] Add a compilation timeout flag to catch long running compilations
Reviewed-by: chagedorn, dholmes
2025-08-21 08:23:32 +00:00
Fredrik Bredberg
a7c0f4b845 8365146: Remove LockingMode related code from ppc64
Reviewed-by: aboldtch, mdoerr
2025-08-21 07:47:26 +00:00
Manuel Hässig
c74c60fb8b 8308094: Add a compilation timeout flag to catch long running compilations
Co-authored-by: Dean Long <dlong@openjdk.org>
Reviewed-by: dlong, chagedorn
2025-08-21 07:09:25 +00:00
Amit Kumar
78d50c0215 8358756: [s390x] Test StartupOutput.java crash due to CodeCache size
Reviewed-by: lucy, dfenacci
2025-08-21 03:53:30 +00:00
Dingli Zhang
2e06a91765 8365841: RISC-V: Several IR verification tests fail after JDK-8350960 without Zvfh
Reviewed-by: fyang, fjiang, mli
2025-08-21 01:20:16 +00:00
Francesco Andreuzzi
ecab52c09b 8365610: Sort share/jfr includes
Reviewed-by: shade, mgronlun
2025-08-20 17:21:22 +00:00
Francesco Andreuzzi
ed7d5fe840 8360304: Redundant condition in LibraryCallKit::inline_vector_nary_operation
Reviewed-by: shade, vlivanov
2025-08-20 17:16:38 +00:00
Alan Bateman
be6c15ecb4 8365671: Typo in Joiner.allUntil example
Reviewed-by: liach
2025-08-20 16:07:38 +00:00
Chris Plummer
9041f4c47f 8309400: JDI spec needs to clarify when OpaqueFrameException and NativeMethodException are thrown
Reviewed-by: sspitsyn, alanb, amenkov
2025-08-20 15:32:17 +00:00
Archie Cobbs
3e60ab51fe 8348611: Eliminate DeferredLintHandler and emit warnings after attribution
8224228: No way to locally suppress lint warnings in parser/tokenizer or preview features
8353758: Missing calls to Log.useSource() in JavacTrees

Reviewed-by: mcimadamore, vromero, jlahoda
2025-08-20 15:04:48 +00:00
Hannes Wallnöfer
5ca8d7c2a7 8284499: Add the ability to right-click and open in new tab JavaDoc Search results
Reviewed-by: liach
2025-08-20 14:52:04 +00:00
Patricio Chilano Mateo
ebf5ae8435 8359222: [asan] jvmti/vthread/ToggleNotifyJvmtiTest/ToggleNotifyJvmtiTest triggers stack-buffer-overflow error
Reviewed-by: dholmes, fbredberg, coleenp
2025-08-20 14:49:16 +00:00
Afshin Zafari
e912977a66 8353444: NMT: rename 'category' to 'MemTag' in malloc tracker
Reviewed-by: jsjolen
2025-08-20 13:40:13 +00:00
Volkan Yazici
1383b8ef87 8362243: Devkit creation for Fedora base OS is broken
Reviewed-by: ihse, erikj, shade
2025-08-20 13:14:04 +00:00
Fei Gao
51d710e3cc 8364184: [REDO] AArch64: [VectorAPI] sve vector math operations are not supported after JDK-8353217
Reviewed-by: ihse, aph
2025-08-20 11:35:31 +00:00
Hannes Wallnöfer
908f3c9697 8356411: Comment tree not reporting correct position for label
Reviewed-by: liach
2025-08-20 08:38:06 +00:00
Fredrik Bredberg
169d145e99 8365188: Remove LockingMode related code from s390
Reviewed-by: ayang, aboldtch, amitkumar
2025-08-20 08:25:01 +00:00
Anton Artemov
70f3469310 8365556: ObjectMonitor::try_lock_or_add_to_entry_list() returns true with the wrong state of the node
Reviewed-by: pchilanomate, dholmes, fbredberg
2025-08-20 08:13:07 +00:00
Ivan Walulya
9c338f6f87 8365780: G1: Remset for young regions are cleared too early during Full GC
Reviewed-by: sjohanss, ayang
2025-08-20 07:51:47 +00:00
Anton Artemov
4ffd2a8aa4 8364819: Post-integration cleanups for JDK-8359820
Reviewed-by: dholmes, ayang, shade
2025-08-20 07:28:36 +00:00
Daniel Gredler
c220a6c7bb 8359955: Regressions ~7% in several J2DBench in 25-b26
Reviewed-by: prr, serb
2025-08-20 07:26:02 +00:00
Yagmur Eren
40bc083267 8358748: Large page size initialization fails with assert "page_size must be a power of 2"
Reviewed-by: ayang, dholmes
2025-08-20 07:16:36 +00:00
Matthias Baesken
320235ccb8 8365700: Jar --validate without any --file option leaves around a temporary file /tmp/tmpJar<number>.jar
Reviewed-by: jpai, asteiner
2025-08-20 06:47:36 +00:00
Jaikiran Pai
b453eb63c6 8365811: test/jdk/java/net/CookieHandler/B6644726.java failure - "Should have 5 cookies. Got only 4, expires probably didn't parse correctly"
Reviewed-by: syan, alanb
2025-08-20 06:07:20 +00:00
Koichi Sakata
506625b768 8356324: JVM crash (SIGSEGV at ClassListParser::resolve_indy_impl) during -Xshare:dump starting from 21.0.5
Reviewed-by: coleenp, matsaave
2025-08-20 04:47:04 +00:00
Valerie Peng
640b71da48 8365168: Use 64-bit aligned addresses for CK_ULONG access in PKCS11 native key code
Reviewed-by: coffeys
2025-08-20 04:20:22 +00:00
Weijun Wang
eca2032c06 8365559: jarsigner shows files non-existent if signed with a weak algorithm
Reviewed-by: abarashev, wetmore
2025-08-20 00:04:38 +00:00
Samuel Chee
95577ca97f 8361890: Aarch64: Removal of redundant dmb from C1 AtomicLong methods
Reviewed-by: aph, dlong
2025-08-19 23:48:57 +00:00
Roger Riggs
55e7494dee 8365703: Refactor ZipCoder to use common JLA.uncheckedNewStringNoRepl
Reviewed-by: lancea, vyazici
2025-08-19 23:33:40 +00:00
Brett Okken
3bbaa772b0 8364320: String encodeUTF8 latin1 with negatives
Reviewed-by: liach, rriggs
2025-08-19 20:31:17 +00:00
Phil Race
0858743dee 8277585: Remove the terminally deprecated finalize() method from javax.imageio.stream APIs
Reviewed-by: achung, azvegint, serb
2025-08-19 20:03:52 +00:00
Roger Riggs
884076f6e2 8365719: Refactor uses of JLA.uncheckedNewStringNoRepl
Reviewed-by: liach, vyazici
2025-08-19 19:06:20 +00:00
Erik Gahlin
024292ac4d 8365614: JFR: Improve PrettyWriter::printValue
Reviewed-by: mgronlun
2025-08-19 16:08:12 +00:00
Hannes Wallnöfer
0755477c9a 8342705: Add dark mode for docs
Reviewed-by: liach
2025-08-19 16:01:12 +00:00
Chris Plummer
4ed268ff9a 8362304: Fix JDWP spec w.r.t. OPAQUE_FRAME and INVALID_SLOT errors
Reviewed-by: sspitsyn, alanb, amenkov
2025-08-19 15:05:25 +00:00
Erik Gahlin
0b2d0817f1 8365636: JFR: Minor cleanup
Reviewed-by: shade
2025-08-19 14:45:37 +00:00
Fei Gao
999761d0f6 8365312: GCC 12 cannot compile SVE on aarch64 with auto-var-init pattern
Reviewed-by: kbarrett, ihse, erikj
2025-08-19 08:22:40 +00:00
Manjunath Matti
812434c420 8359114: [s390x] Add z17 detection code
Reviewed-by: amitkumar, aph
2025-08-19 07:57:00 +00:00
Manuel Hässig
626bea80ab 8356176: C2 MemorySegment: missing RCE with byteSize() in Loop Exit Check inside the for Expression
Co-authored-by: Quan Anh Mai <qamai@openjdk.org>
Co-authored-by: Emanuel Peter <epeter@openjdk.org>
Co-authored-by: Christian Hagedorn <chagedorn@openjdk.org>
Co-authored-by: Tobias Hartmann <thartmann@openjdk.org>
Reviewed-by: epeter, qamai
2025-08-19 06:37:52 +00:00
Sergey Bylokhov
4c80780f6a 8359380: Rework deferral profile logic after JDK-8346465
Reviewed-by: prr
2025-08-19 06:33:12 +00:00
Volkan Yazici
655dc516c2 8361842: Move input validation checks to Java for java.lang.StringCoding intrinsics
Reviewed-by: rriggs, liach, dfenacci, thartmann, redestad, jrose
2025-08-19 05:06:50 +00:00
Boris Ulasevich
f2f7a490c0 8365071: ARM32: JFR intrinsic jvm_commit triggers C2 regalloc assert
Reviewed-by: mgronlun
2025-08-19 04:40:45 +00:00
Shawn M Emery
e04a310375 8364806: Test sun/security/krb5/config/IncludeRandom.java times out on Windows
Reviewed-by: mbaesken
2025-08-18 23:54:06 +00:00
Mikhail Yankelevich
ec7361e082 8365660: test/jdk/sun/security/pkcs11/KeyAgreement/ tests skipped without SkipExceprion
Reviewed-by: rhalade
2025-08-18 23:07:57 +00:00
Justin Lu
a0053012a4 8364780: Unicode extension clarifications for NumberFormat/DecimalFormatSymbols
Reviewed-by: naoto
2025-08-18 22:10:20 +00:00
David Alayachew
bad38a0f92 8365643: JShell EditPad out of bounds on Windows
Reviewed-by: liach, aivanov, cstein, jlahoda
2025-08-18 20:47:02 +00:00
Raffaello Giulietti
285adff24e 8362448: Make use of the Double.toString(double) algorithm in java.text.DecimalFormat
Reviewed-by: naoto, jlu
2025-08-18 16:12:34 +00:00
Aleksey Shipilev
c9ecedd226 8365594: Strengthen Universe klasses asserts to catch bootstrapping errors earlier
Reviewed-by: coleenp, ayang
2025-08-18 15:51:08 +00:00
Erik Gahlin
2a16cc890b 8365550: JFR: The active-settings view should not use LAST_BATCH
Reviewed-by: shade, mgronlun
2025-08-18 15:42:31 +00:00
Jaikiran Pai
81c6ed3882 8365533: Remove outdated jdk.internal.javac package export to several modules from java.base
Reviewed-by: alanb, liach
2025-08-18 13:40:42 +00:00
Matthew Donovan
c1198bba0e 8357277: Update OpenSSL library for interop tests
Reviewed-by: rhalade
2025-08-18 11:08:36 +00:00
Erik Gahlin
a42ba1ff1a 8365638: JFR: Add --exact for debugging out-of-order events
Reviewed-by: shade
2025-08-18 10:36:35 +00:00
Pasam Soujanya
6e91ccd1c3 8365305: The ARIA role ‘contentinfo’ is not valid for the element <footer>
Reviewed-by: hannesw
2025-08-18 09:37:58 +00:00
Saranya Natarajan
2b756ab1e8 8358781: C2 fails with assert "bad profile data type" when TypeProfileCasts is disabled
Reviewed-by: mhaessig, kvn, dfenacci
2025-08-18 08:16:32 +00:00
Aleksey Shipilev
ca753ebad6 8365165: Zap C-heap memory at delete/free
Reviewed-by: kvn, kbarrett
2025-08-18 08:12:20 +00:00
Volkan Yazici
190e113031 8364263: HttpClient: Improve encapsulation of ProxyServer
Reviewed-by: dfuchs, jpai
2025-08-18 08:11:19 +00:00
Matthias Baesken
166ea12d73 8365543: UnixNativeDispatcher.init should lookup open64at and stat64at on AIX
Co-authored-by: Joachim Kern <jkern@openjdk.org>
Reviewed-by: jkern, stuefe, goetz, alanb
2025-08-18 07:14:09 +00:00
David Beaumont
e7ca8c7d55 8365436: ImageReaderTest fails when jmods directory not present
Reviewed-by: sgehwolf, alanb
2025-08-18 07:08:19 +00:00
Per Minborg
f364fcab79 8359119: Change Charset to use StableValue
Reviewed-by: alanb, rriggs
2025-08-18 05:32:03 +00:00
Kim Barrett
bd65d483df 8365245: Move size reducing operations to GrowableArrayWithAllocator
Reviewed-by: jsjolen, stefank
2025-08-17 12:56:42 +00:00
Alexey Semenyuk
57210af9bc 8365555: Cleanup redundancies in jpackage implementation
Reviewed-by: almatvee
2025-08-16 04:41:25 +00:00
Leonid Mesnik
a70521c62e 8364973: Add JVMTI stress testing mode
Reviewed-by: erikj, ihse, sspitsyn
2025-08-15 22:45:01 +00:00
Andrew Dinn
b023fea062 8365558: Fix stub entry init and blob creation on Zero
Reviewed-by: asmehra, kvn
2025-08-15 22:12:57 +00:00
Phil Race
b69a3849b2 8365198: Remove unnecessary mention of finalize in ImageIO reader/writer docs
Reviewed-by: bchristi, azvegint
2025-08-15 20:02:43 +00:00
William Kemper
6e760b9b74 8365622: Shenandoah: Fix Shenandoah simple bit map test
Reviewed-by: ysr
2025-08-15 20:00:01 +00:00
Dean Long
39a3652968 8278874: tighten VerifyStack constraints
Co-authored-by: Tom Rodriguez <never@openjdk.org>
Reviewed-by: mhaessig, never
2025-08-15 18:52:45 +00:00
William Kemper
08db4b9962 8365571: GenShen: PLAB promotions may remain disabled for evacuation threads
Reviewed-by: kdnilsen, ysr, shade
2025-08-15 17:56:47 +00:00
Francesco Andreuzzi
dbae90c950 8364723: Sort share/interpreter includes
Reviewed-by: shade, ayang
2025-08-15 10:45:00 +00:00
Volkan Yazici
059b49b955 8365244: Some test control variables are undocumented in doc/testing.md
Reviewed-by: erikj
2025-08-15 10:37:26 +00:00
Guanqiang Han
b6d5f49b8d 8365296: Build failure with Clang due to -Wformat warning after JDK-8364611
Reviewed-by: ayang, mbaesken
2025-08-15 09:41:17 +00:00
Markus Grönlund
5856dc34c8 8365199: Use a set instead of a list as the intermediary Klass* storage to reduce typeset processing
Reviewed-by: egahlin
2025-08-15 09:32:51 +00:00
Manuel Hässig
fa2eb61648 8365491: VSCode IDE: add basic configuration for the Oracle Java extension
Reviewed-by: ihse, jlahoda
2025-08-15 08:55:11 +00:00
Doug Simon
e3aeebec17 8365468: EagerJVMCI should only apply to the CompilerBroker JVMCI runtime
Reviewed-by: never
2025-08-15 07:35:52 +00:00
Chen Liang
6fb6f3d39b 8361638: java.lang.classfile.CodeBuilder.CatchBuilder should not throw IllegalArgumentException for representable exception handlers
Reviewed-by: asotona
2025-08-15 04:25:37 +00:00
David Beaumont
44b19c01ac 8365532: java/lang/module/ModuleReader/ModuleReaderTest.testImage fails
Reviewed-by: alanb
2025-08-15 02:53:42 +00:00
Vladimir Kozlov
a65f200220 8365512: Replace -Xcomp with -Xmixed for AOT assembly phase
Reviewed-by: shade
2025-08-14 23:59:34 +00:00
Chen Liang
8c363b3e3e 8364319: Move java.lang.constant.AsTypeMethodHandleDesc to jdk.internal
Reviewed-by: redestad
2025-08-14 21:41:14 +00:00
Chen Liang
c5cbcac828 8361730: The CodeBuilder.trying(BlockCodeBuilder,CatchBuilder) method generates corrupted bytecode in certain cases
Reviewed-by: asotona
2025-08-14 20:27:08 +00:00
William Kemper
dccca0fb7a 8365572: Shenandoah: Remove unused thread local _paced_time field
Reviewed-by: shade
2025-08-14 19:58:54 +00:00
David Beaumont
ba23105231 8365048: idea.sh script does not correctly detect/handle git worktrees
Reviewed-by: shade, vyazici, erikj, mcimadamore, ihse
2025-08-14 17:02:05 +00:00
Igor Veresov
26ccb3cef1 8362530: VM crash with -XX:+PrintTieredEvents when collecting AOT profiling
Reviewed-by: chagedorn, kvn
2025-08-14 16:59:05 +00:00
Phil Race
b0f98df75a 8365416: java.desktop no longer needs preview feature access
Reviewed-by: alanb, jpai
2025-08-14 15:20:47 +00:00
Albert Mingkun Yang
dd113c8df0 8364628: Serial: Refactor SerialHeap::mem_allocate_work
Reviewed-by: phh, kbarrett
2025-08-14 14:50:56 +00:00
Roman Marchenko
41520998aa 8365098: make/RunTests.gmk generates a wrong path to test artifacts on Alpine
Reviewed-by: erikj, ihse
2025-08-14 12:31:20 +00:00
Matthias Baesken
98f54d90ea 8365487: [asan] some oops (mode) related tests fail
Reviewed-by: kbarrett, syan
2025-08-14 11:11:47 +00:00
Erik Gahlin
7698c373a6 8364556: JFR: Disable SymbolTableStatistics and StringTableStatistics in default.jfc
Reviewed-by: mgronlun
2025-08-14 10:43:21 +00:00
Yudi Zheng
e320162815 8365218: [JVMCI] AArch64 CPU features are not computed correctly after 8364128
Reviewed-by: dnsimon
2025-08-14 07:39:49 +00:00
Joel Sikström
3e3298509f 8365317: ZGC: Setting ZYoungGCThreads lower than ZOldGCThreads may result in a crash
Reviewed-by: tschatzl, eosterlund
2025-08-14 07:37:10 +00:00
Jan Lahoda
a6be228642 8365314: javac fails with an exception for erroneous source
Reviewed-by: vromero
2025-08-14 07:04:40 +00:00
Jan Lahoda
c22e01d776 8341342: Elements.getAllModuleElements() does not work properly before JavacTask.analyze()
Reviewed-by: vromero, liach
2025-08-14 07:02:08 +00:00
Prasanta Sadhukhan
9dcc502cc8 8365375: Method SU3.setAcceleratorSelectionForeground assigns to acceleratorForeground
Reviewed-by: aivanov, prr, kizune
2025-08-14 04:55:02 +00:00
Aleksey Shipilev
9c266ae83c 8365229: ARM32: c2i_no_clinit_check_entry assert failed after JDK-8364269
Reviewed-by: kvn, adinn, bulasevich, phh
2025-08-13 20:49:16 +00:00
Justin Lu
9660320041 8364781: Re-examine DigitList digits resizing during parsing
Reviewed-by: liach, naoto
2025-08-13 20:43:46 +00:00
Johan Sjölen
4680dc9831 8365264: Rename ResourceHashtable to HashTable
Reviewed-by: iklam, ayang
2025-08-13 18:41:57 +00:00
Alex Menkov
ecbdd3405a 8361103: java_lang_Thread::async_get_stack_trace does not properly protect JavaThread
Reviewed-by: sspitsyn, dholmes
2025-08-13 18:24:56 +00:00
Srinivas Vamsi Parasa
38a261415d 8365265: x86 short forward jump exceeds 8-bit offset in methodHandles_x86.cpp when using Intel APX
Reviewed-by: shade, jbhateja, aph
2025-08-13 17:53:05 +00:00
Nikita Gubarkov
899e13f40a 8364434: Inconsistent BufferedContext state after GC
Reviewed-by: jdv, azvegint, avu
2025-08-13 17:36:07 +00:00
Boris Ulasevich
001aaa1e49 8365166: ARM32: missing os::fetch_bcp_from_context implementation
Reviewed-by: shade
2025-08-13 12:45:48 +00:00
Guanqiang Han
f3b34d32d6 8359235: C1 compilation fails with "assert(is_single_stack() && !is_virtual()) failed: type check"
Reviewed-by: thartmann, dlong
2025-08-13 10:52:54 +00:00
Fredrik Bredberg
e77cdd93ea 8364570: Remove LockingMode related code from riscv64
Reviewed-by: fyang, fjiang
2025-08-13 08:47:08 +00:00
Jan Lahoda
72e22b4de5 8362885: A more formal way to mark javac's Flags that belong to a specific Symbol type only
Reviewed-by: ihse, liach, vromero, mcimadamore, erikj
2025-08-13 08:07:45 +00:00
Ramkumar Sunderbabu
25480f0011 8365184: sun/tools/jhsdb/HeapDumpTestWithActiveProcess.java Re-enable SerialGC flag on debuggee process
Reviewed-by: lmesnik, cjplummer, sspitsyn
2025-08-13 01:45:49 +00:00
Dingli Zhang
636c61a386 8365302: RISC-V: compiler/loopopts/superword/TestAlignVector.java fails when vlen=128
Reviewed-by: fyang, fjiang
2025-08-13 01:24:39 +00:00
Erik Gahlin
87d734012e 8364756: JFR: Improve slow tests
Reviewed-by: mgronlun
2025-08-12 17:44:34 +00:00
Brian Burkhalter
d023982600 8361209: (bf) Use CharSequence::getChars for StringCharBuffer bulk get methods
Reviewed-by: rriggs, alanb
2025-08-12 17:39:14 +00:00
Coleen Phillimore
4c03e5938d 8364750: Remove unused declaration in jvm.h
Reviewed-by: shade
2025-08-12 16:30:09 +00:00
Ioi Lam
ad0fd13f20 8364454: ProblemList runtime/cds/DeterministicDump.java on macos for JDK-8363986
Reviewed-by: ccheung
2025-08-12 16:20:00 +00:00
Erik Gahlin
a382996bb4 8364993: JFR: Disable jdk.ModuleExport in default.jfc
Reviewed-by: mgronlun
2025-08-12 13:42:53 +00:00
Matthias Baesken
391ea15118 8365307: AIX make fails after JDK-8364611
Reviewed-by: clanger, asteiner
2025-08-12 13:16:54 +00:00
Albert Mingkun Yang
19a76a45e9 8365316: Remove unnecessary default arg value in gcVMOperations
Reviewed-by: tschatzl
2025-08-12 11:58:37 +00:00
Albert Mingkun Yang
95b7a8b3e3 8365237: Remove unused SoftRefPolicy::_all_soft_refs_clear
Reviewed-by: tschatzl, kbarrett
2025-08-12 11:29:43 +00:00
Thomas Schatzl
16e461ef31 8365122: G1: Minor clean up of G1SurvivorRegions
Reviewed-by: sangheki, kbarrett
2025-08-12 08:52:37 +00:00
Fredrik Bredberg
3c0eed8e47 8364406: Remove LockingMode related code from aarch64
Reviewed-by: aph, dholmes
2025-08-12 08:45:36 +00:00
Fredrik Bredberg
f155f7d6e5 8364141: Remove LockingMode related code from x86
Reviewed-by: aboldtch, dholmes, coleenp
2025-08-12 08:45:02 +00:00
David Beaumont
b81f4faed7 8360037: Refactor ImageReader in preparation for Valhalla support
Reviewed-by: alanb, rriggs, jpai
2025-08-12 08:34:26 +00:00
Johny Jose
5a442197d2 7191877: TEST_BUG: java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java failing intermittently
Reviewed-by: smarks, coffeys
2025-08-12 08:26:42 +00:00
Afshin Zafari
db12f1934a 8364280: NMTCommittedVirtualMemoryTracker.test_committed_virtualmemory_region_vm fails with assertion "negative distance"
Reviewed-by: gziemski, jsjolen
2025-08-12 08:03:18 +00:00
Matthias Baesken
d78fa5a9f6 8365240: [asan] exclude some tests when using asan enabled binaries
Reviewed-by: lmesnik, sspitsyn
2025-08-12 07:16:57 +00:00
Alexey Semenyuk
72d3a2a977 8308349: missing working directory option for launcher when invoked from shortcuts
Reviewed-by: almatvee
2025-08-12 03:15:49 +00:00
Dingli Zhang
6927fc3904 8365200: RISC-V: compiler/loopopts/superword/TestGeneralizedReductions.java fails with Zvbb and vlen=128
Reviewed-by: fyang, fjiang
2025-08-12 01:25:35 +00:00
Joe Darcy
9593730a23 8362376: Use @Stable annotation in Java FDLIBM implementation
Reviewed-by: liach, rgiulietti
2025-08-11 23:45:24 +00:00
Brian Burkhalter
8cd79752c6 8364761: (aio) AsynchronousChannelGroup.execute doesn't check null command
Reviewed-by: alanb, vyazici
2025-08-11 18:50:39 +00:00
Aleksey Shipilev
958383d69c 8364501: Compiler shutdown crashes on access to deleted CompileTask
Reviewed-by: kvn, mhaessig
2025-08-11 18:49:37 +00:00
Francesco Andreuzzi
e9e331b2a9 8365238: 'jfr' feature requires 'services' with 'custom' build variant
Reviewed-by: erikj, shade, ihse
2025-08-11 17:10:10 +00:00
Thomas Stuefe
bdb1646a1e 8364611: (process) Child process SIGPIPE signal disposition should be default
Reviewed-by: erikj, rriggs
2025-08-11 15:37:31 +00:00
Magnus Ihse Bursie
23985c29b4 8357979: Compile jdk.internal.vm.ci targeting the Boot JDK version
Reviewed-by: erikj, dnsimon
2025-08-11 14:12:55 +00:00
Casper Norrbin
0ad919c1e5 8352067: Remove the NMT treap and replace its uses with the utilities red-black tree
Reviewed-by: jsjolen, ayang
2025-08-11 12:22:52 +00:00
Darragh Clarke
43cfd80c1c 8352502: Response message is null if expect 100 assertion fails with non 100
Reviewed-by: dfuchs
2025-08-11 11:57:08 +00:00
Benoît Maillard
a60e523f88 8349191: Test compiler/ciReplay/TestIncrementalInlining.java failed
Reviewed-by: mhaessig, dfenacci, chagedorn
2025-08-11 11:15:34 +00:00
Albert Mingkun Yang
fd766b27b9 8364541: Parallel: Support allocation in old generation when heap is almost full
Reviewed-by: phh, tschatzl
2025-08-11 10:49:47 +00:00
Jan Lahoda
8b5bb01355 8364987: javac fails with an exception when looking for diamond creation
Reviewed-by: vromero
2025-08-11 10:28:59 +00:00
Magnus Ihse Bursie
1fc0b01601 8361142: Improve custom hooks for makefiles
Reviewed-by: erikj
2025-08-11 09:44:49 +00:00
Albert Mingkun Yang
0c39228ec1 8364767: G1: Remove use of CollectedHeap::_soft_ref_policy
Reviewed-by: tschatzl, sangheki
2025-08-11 09:42:12 +00:00
Dmitry Cherepanov
10762d408b 8365044: Missing copyright header in Contextual.java
Reviewed-by: egahlin
2025-08-11 08:19:02 +00:00
Joel Sikström
f28126ebc2 8365050: Too verbose warning in os::commit_memory_limit() on Windows
Reviewed-by: dholmes, mbaesken
2025-08-11 08:18:28 +00:00
Volkan Yazici
c31f4861fb 8364365: HKSCS encoder does not properly set the replacement character
Reviewed-by: sherman
2025-08-11 07:10:38 +00:00
Matthias Baesken
15e8609a2c 8364996: java/awt/font/FontNames/LocaleFamilyNames.java times out on Windows
Reviewed-by: clanger, prr, asteiner
2025-08-11 07:08:03 +00:00
Jaikiran Pai
022e29a775 8365086: CookieStore.getURIs() and get(URI) should return an immutable List
Reviewed-by: liach, vyazici, dfuchs
2025-08-10 04:22:10 +00:00
Chen Liang
e13b4c8de9 8358535: Changes in ClassValue (JDK-8351996) caused a 1-9% regression in Renaissance-PageRank
Reviewed-by: jrose, shade
2025-08-09 23:44:21 +00:00
Jaikiran Pai
f83454cd61 8364786: Test java/net/vthread/HttpALot.java intermittently fails - 24999 handled, expected 25000
Reviewed-by: dfuchs, alanb, vyazici
2025-08-09 02:00:58 +00:00
Alexey Semenyuk
8ad1fcc48a 8364564: Shortcut configuration is not recorded in .jpackage.xml file
Reviewed-by: almatvee
2025-08-08 22:11:52 +00:00
Alexey Semenyuk
c1c0155604 8364129: Rename libwixhelper
Reviewed-by: erikj, almatvee
2025-08-08 21:41:44 +00:00
Chen Liang
cd50d78d44 8361300: Document exceptions for Unsafe offset methods
Reviewed-by: jrose, vyazici
2025-08-08 17:17:21 +00:00
Andrew Dinn
241808e13f 8364269: Simplify code cache API by storing adapter entry offsets in blob
Reviewed-by: kvn, shade, asmehra
2025-08-08 09:12:08 +00:00
Afshin Zafari
1b3e23110b 8360048: NMT crash in gtest/NMTGtests.java: fatal error: NMT corruption: Block at 0x0000017748307120: header canary broken
Reviewed-by: jsjolen, gziemski
2025-08-08 09:06:43 +00:00
Thomas Schatzl
a26a6f3152 8364649: G1: Move collection set related full gc reset code into abandon_collection_set() method
Reviewed-by: ayang, sangheki
2025-08-08 08:06:56 +00:00
Thomas Schatzl
47017e3864 8364760: G1: Remove obsolete code in G1MergeCardSetClosure
Reviewed-by: ayang, sangheki
2025-08-08 07:57:06 +00:00
Thomas Schatzl
bcca5cee2d 8364642: G1: Remove parameter in G1CollectedHeap::abandon_collection_set()
Reviewed-by: ayang
2025-08-08 07:56:29 +00:00
Thomas Schatzl
198782c957 8364877: G1: Inline G1CollectedHeap::set_region_short_lived_locked
Reviewed-by: ayang, sangheki
2025-08-08 07:54:23 +00:00
Andrey Turbanov
d0624f8b62 8364808: Make BasicDesktopPaneUI.Actions.MOVE_RESIZE_INCREMENT static
Reviewed-by: tr, azvegint, kizune, aivanov
2025-08-08 05:03:55 +00:00
John Jiang
4c9eaddaef 8364597: Replace THL A29 Limited with Tencent
Reviewed-by: jiefu
2025-08-08 02:27:30 +00:00
Harshitha Onkar
c71be802b5 8361748: Enforce limits on the size of an XBM image
Reviewed-by: prr, jdv
2025-08-07 21:19:47 +00:00
Ayush Rigal
b8acbc3ed8 8364315: Remove unused xml files from test/jaxp/javax/xml/jaxp/functional/javax/xml/transform/xmlfiles
Reviewed-by: jpai, joehw
2025-08-07 21:11:26 +00:00
Alexey Semenyuk
244e6293c3 8364984: Many jpackage tests are failing on Linux after JDK-8334238
Reviewed-by: almatvee
2025-08-07 19:55:41 +00:00
Liam Miller-Cushon
c0e6ffabc2 8364954: (bf) CleaningThread should be InnocuousThread
Reviewed-by: rriggs, alanb
2025-08-07 19:43:45 +00:00
Brett Okken
5116d9e5fe 8364213: (bf) Improve java/nio/Buffer/CharBufferAsCharSequenceTest test comments
8364345: Test java/nio/Buffer/CharBufferAsCharSequenceTest.java failed

Reviewed-by: bpb, rriggs
2025-08-07 19:27:28 +00:00
Phil Race
78117eff56 8364230: javax/swing/text/StringContent can be migrated away from using finalize
Reviewed-by: psadhukhan, abhiscxk, kizune
2025-08-07 18:58:28 +00:00
Brian Burkhalter
02e187119d 8364277: (fs) BasicFileAttributes.isDirectory and isOther return true for NTFS directory junctions when links not followed
Reviewed-by: alanb
2025-08-07 18:24:22 +00:00
Andrew Dinn
90ea42f716 8364558: Failure to generate compiler stubs from compiler thread should not crash VM when compilation disabled due to full CodeCache
Reviewed-by: kvn, shade
2025-08-07 16:23:32 +00:00
Prasanta Sadhukhan
e29346dbd6 8348760: RadioButton is not shown if JRadioButtonMenuItem is rendered with ImageIcon in WindowsLookAndFeel
Reviewed-by: prr, kizune, abhiscxk
2025-08-07 16:03:12 +00:00
Francesco Andreuzzi
e606278fc8 8358598: PhaseIterGVN::PhaseIterGVN(PhaseGVN* gvn) doesn't use its parameter
Reviewed-by: galder, mhaessig, shade
2025-08-07 15:43:36 +00:00
Guanqiang Han
83953c458e 8364822: Comment cleanup, stale references to closeDescriptors and UNIXProcess.c
Reviewed-by: kevinw, rriggs
2025-08-07 14:11:46 +00:00
Ashutosh Mehra
bc3d865640 8364128: Improve gathering of cpu feature names using stringStream
Co-authored-by: Johan Sjölen <jsjolen@openjdk.org>
Reviewed-by: kvn, jsjolen
2025-08-07 13:26:33 +00:00
Jeremy Wood
8d73fe91bc 8358813: JPasswordField identifies spaces in password via delete shortcuts
Reviewed-by: aivanov, dnguyen
2025-08-07 10:21:54 +00:00
Thomas Schatzl
c56fb0b6ef 8364503: gc/g1/TestCodeCacheUnloadDuringConcCycle.java fails because of race printing to stdout
Reviewed-by: ayang, dholmes
2025-08-07 08:40:42 +00:00
Johannes Bechberger
487cc3c5be 8359690: New test TestCPUTimeSampleThrottling still fails intermittently
Reviewed-by: mbaesken
2025-08-07 07:52:48 +00:00
David Holmes
078d0d4968 8364235: Fix for JDK-8361447 breaks the alignment requirements for GuardedMemory
Co-authored-by: Johan Sjölen <jsjolen@openjdk.org>
Reviewed-by: dcubed, jsjolen, aboldtch
2025-08-07 04:37:21 +00:00
Alexey Semenyuk
7e484e2a63 8334238: Enhance AddLShortcutTest jpackage test
Reviewed-by: almatvee
2025-08-07 02:02:36 +00:00
Guanqiang Han
f95af744b0 8364312: debug agent should set FD_CLOEXEC flag rather than explicitly closing every open file
Reviewed-by: cjplummer, kevinw
2025-08-06 15:37:31 +00:00
Albert Mingkun Yang
72d1066ae3 8364722: Parallel: Move CLDG mark clearing to the end of full GC
Reviewed-by: tschatzl, zgu
2025-08-06 12:21:16 +00:00
David Beaumont
0ceb366dc2 8356645: Javac should utilize new ZIP file system read-only access mode
Reviewed-by: jlahoda
2025-08-06 08:55:47 +00:00
Per Minborg
9dffbc9c4c 8364540: Apply @Stable to Shared Secrets
Reviewed-by: rriggs
2025-08-06 08:52:14 +00:00
Aleksey Shipilev
e304d37996 8361211: C2: Final graph reshaping generates unencodeable klass constants
Reviewed-by: kvn, qamai, thartmann, mdoerr
2025-08-06 08:32:25 +00:00
Joel Sikström
8d529bc4f3 8364518: Support for Job Objects in os::commit_memory_limit() on Windows
Reviewed-by: ayang, dholmes
2025-08-06 07:54:44 +00:00
Koushik Thirupattur
ca41644538 8355379: Annotate lazy fields in java.security @Stable
Reviewed-by: pminborg
2025-08-06 06:40:40 +00:00
Anton Artemov
6656e767db 8359820: Improve handshake/safepoint timeout diagnostic messages
Reviewed-by: dholmes, stuefe
2025-08-06 04:45:35 +00:00
Aleksey Shipilev
68a35511eb 8364212: Shenandoah: Rework archived objects loading
Reviewed-by: wkemper, kdnilsen
2025-08-05 18:34:07 +00:00
Thomas Schatzl
d906e45026 8364531: G1: Factor out liveness tracing code
Reviewed-by: ayang, sangheki
2025-08-05 16:13:53 +00:00
Erik Gahlin
8a571ee7f2 8364667: JFR: Throttle doesn't work with dynamic events
Reviewed-by: mgronlun
2025-08-05 14:33:30 +00:00
Albert Mingkun Yang
ba0ae4cb28 8364254: Serial: Remove soft ref policy update in WhiteBox FullGC
Reviewed-by: tschatzl, sangheki
2025-08-05 10:43:30 +00:00
Francesco Andreuzzi
df736eb582 8364618: Sort share/code includes
Reviewed-by: shade, mhaessig
2025-08-05 10:23:54 +00:00
Saranya Natarajan
d25b9befe0 8325482: Test that distinct seeds produce distinct traces for compiler stress flags
Reviewed-by: chagedorn, dfenacci
2025-08-05 08:39:47 +00:00
Matthias Baesken
67ba8b45dd 8364514: [asan] runtime/jni/checked/TestCharArrayReleasing.java heap-buffer-overflow
Reviewed-by: dholmes
2025-08-05 08:02:54 +00:00
Joel Sikström
febd4b26b2 8360515: PROPERFMTARGS should always use size_t template specialization for unit
Reviewed-by: dholmes, stuefe
2025-08-05 07:41:11 +00:00
Alexey Semenyuk
c0c7d39b59 8364587: Update jpackage internal javadoc
Reviewed-by: almatvee
2025-08-05 01:42:45 +00:00
Alexey Semenyuk
6b360ac99a 8359756: Bug in RuntimePackageTest.testName test
Reviewed-by: almatvee
2025-08-05 01:09:56 +00:00
Alexey Semenyuk
0f4c3dc944 8362352: Fix references to non-existing resource strings
Reviewed-by: almatvee
2025-08-05 01:04:38 +00:00
David Holmes
84a4a3647c 8364314: java_lang_Thread::get_thread_status fails assert(base != nullptr) failed: Invalid base
Reviewed-by: amenkov, shade, dcubed, pchilanomate, sspitsyn
2025-08-04 21:48:38 +00:00
Mohamed Issa
f96b6bcd4d 8364666: Tier1 builds broken by JDK-8360559
Reviewed-by: sviswanathan
2025-08-04 21:31:35 +00:00
Phil Race
dc4d9b4849 8362898: Remove finalize() methods from javax.imageio TIFF classes
Reviewed-by: azvegint, jdv
2025-08-04 20:25:41 +00:00
Coleen Phillimore
da3a5da81b 8343218: Add option to disable allocating interface and abstract classes in non-class metaspace
Reviewed-by: shade, kvn, yzheng, stuefe, dholmes
2025-08-04 20:13:03 +00:00
Phil Race
0d0d93e8f6 8210765: Remove finalize method in CStrike.java
Reviewed-by: psadhukhan, achung, azvegint
2025-08-04 19:29:03 +00:00
Phil Race
d1e362e9a8 8363889: Update sun.print.PrintJob2D to use Disposer
Reviewed-by: azvegint, psadhukhan
2025-08-04 19:27:23 +00:00
Mohamed Issa
05f8a6fca8 8360559: Optimize Math.sinh for x86 64 bit platforms
Reviewed-by: sviswanathan, sparasa
2025-08-04 18:47:57 +00:00
Kevin Driver
b5f450a599 8364226: Better ECDSASignature Memory Management
Reviewed-by: ascarpino, hchao
2025-08-04 15:59:57 +00:00
Artur Barashev
6c52b73465 8209992: Align SSLSocket and SSLEngine Javadocs
Reviewed-by: wetmore
2025-08-04 13:55:58 +00:00
Galder Zamarreño
567c0c9335 8354244: Use random data in MinMaxRed_Long data arrays
Reviewed-by: chagedorn, mhaessig
2025-08-04 13:51:14 +00:00
Albert Mingkun Yang
fc4755535d 8364516: Serial: Move class unloading logic inside SerialFullGC::invoke_at_safepoint
Reviewed-by: tschatzl, sangheki
2025-08-04 12:59:26 +00:00
Ao Qi
a9f3d3a290 8364177: JDK fails to build due to undefined symbol in libpng on LoongArch64
Reviewed-by: prr, aivanov, erikj
2025-08-04 12:37:11 +00:00
Jasmine Karthikeyan
500462fb69 8364580: Test compiler/vectorization/TestSubwordTruncation.java fails on platforms without RoundF/RoundD
Reviewed-by: chagedorn, shade
2025-08-04 12:11:10 +00:00
Erik Gahlin
68a4396dbc 8364316: JFR: Incorrect validation of mirror fields
Reviewed-by: shade, mgronlun
2025-08-04 10:53:40 +00:00
Erik Gahlin
da0d9598d0 8364190: JFR: RemoteRecordingStream withers don't work
Reviewed-by: mgronlun
2025-08-04 10:41:21 +00:00
Erik Gahlin
b96b9c3d5b 8364461: JFR: Default constructor may not be first in setting control
Reviewed-by: mgronlun
2025-08-04 10:25:14 +00:00
Markus Grönlund
3bc449797e 8364258: ThreadGroup constant pool serialization is not normalized
Reviewed-by: egahlin
2025-08-04 09:42:05 +00:00
Erik Gahlin
cf5a25538e 8364427: JFR: Possible resource leak in Recording::getStream
Reviewed-by: mgronlun
2025-08-04 09:12:12 +00:00
Erik Gahlin
ea7e943874 8364257: JFR: User-defined events and settings with a one-letter name cannot be configured
Reviewed-by: mgronlun
2025-08-04 08:50:35 +00:00
Francesco Andreuzzi
3387b3195c 8364519: Sort share/classfile includes
Reviewed-by: shade, ayang
2025-08-04 08:20:22 +00:00
Andrey Turbanov
8269fdc78e 8362067: Remove unnecessary List.contains key from SpringLayout.Constraints.pushConstraint
Reviewed-by: aivanov
2025-08-04 08:15:09 +00:00
Abhishek Kumar
57553ca1db 8361298: SwingUtilities/bug4967768.java fails where character P is not underline
Reviewed-by: dnguyen, psadhukhan, achung, azvegint
2025-08-04 04:17:16 +00:00
David Holmes
158e59ab91 8364106: Include java.runtime.version in thread dump output
Reviewed-by: alanb, coffeys
2025-08-03 22:28:12 +00:00
Chen Liang
1a206d2a6c 8364545: tools/javac/launcher/SourceLauncherTest.java fails frequently
Reviewed-by: cstein, jpai
2025-08-03 13:23:43 +00:00
DarraghConway
a5e0c9d0c5 8363720: Follow up to JDK-8360411 with post review comments
Reviewed-by: bpb, rriggs
2025-08-03 11:03:15 +00:00
Thomas Stuefe
819de07117 8363998: Implement Compressed Class Pointers for 32-bit
Reviewed-by: rkennke, coleenp
2025-08-03 06:43:31 +00:00
erfang
f40381e41d 8356760: VectorAPI: Optimize VectorMask.fromLong for all-true/all-false cases
Reviewed-by: xgong, jbhateja
2025-08-02 07:54:42 +00:00
Serguei Spitsyn
e801e51311 8306324: StopThread results in thread being marked as interrupted, leading to unexpected InterruptedException
Reviewed-by: pchilanomate, alanb
2025-08-02 04:21:42 +00:00
Volkan Yazici
7ea08d3928 8362244: Devkit's Oracle Linux base OS keyword is incorrectly documented
Reviewed-by: erikj
2025-08-01 20:36:17 +00:00
Justin Lu
8e921aee5a 8364370: java.text.DecimalFormat specification indentation correction
Reviewed-by: liach, naoto
2025-08-01 18:43:02 +00:00
Mikhail Yankelevich
6d0bbc8a18 8357470: src/java.base/share/classes/sun/security/util/Debug.java implement the test for args.toLowerCase
Reviewed-by: coffeys
2025-08-01 18:42:41 +00:00
Coleen Phillimore
ee3665bca0 8364187: Make getClassAccessFlagsRaw non-native
Reviewed-by: thartmann, rriggs, liach
2025-08-01 15:21:45 +00:00
Bhavana Kilambi
2ba8a06f0c 8348868: AArch64: Add backend support for SelectFromTwoVector
Co-authored-by: Jatin Bhateja <jbhateja@openjdk.org>
Reviewed-by: haosun, aph, sviswanathan, xgong
2025-08-01 13:11:21 +00:00
Christian Stein
8ac4a88f3c 8362237: IllegalArgumentException in the launcher when exception without stack trace is thrown
Reviewed-by: kcr, vromero
2025-08-01 11:01:56 +00:00
Oli Gillespie
6c5804722b 8364296: Set IntelJccErratumMitigation flag ergonomically
Reviewed-by: shade, jbhateja
2025-08-01 10:27:08 +00:00
Matthias Baesken
812bd8e94d 8364199: Enhance list of environment variables printed in hserr/hsinfo file
Reviewed-by: lucy, clanger
2025-08-01 10:24:11 +00:00
Prasanta Sadhukhan
7fbeede14c 4938801: The popup does not go when the component is removed
Co-authored-by: Alexey Ivanov <aivanov@openjdk.org>
Reviewed-by: dnguyen, abhiscxk
2025-08-01 09:15:52 +00:00
Hannes Wallnöfer
d80b5c8728 8361316: javadoc tool fails with an exception for an inheritdoc on throws clause of a constructor
Reviewed-by: nbenalla, liach
2025-08-01 08:39:29 +00:00
Hannes Wallnöfer
7d63c9fa4d 8294074: Make other specs more discoverable from the API docs
Reviewed-by: mr
2025-08-01 08:35:10 +00:00
Thomas Schatzl
beda14e3cb 8364423: G1: Refactor G1UpdateRegionLivenessAndSelectForRebuildTask
Reviewed-by: sangheki, ayang
2025-08-01 08:22:04 +00:00
Joel Sikström
ae11d8f446 8364248: Separate commit and reservation limit detection
Reviewed-by: stuefe, ayang
2025-08-01 07:42:45 +00:00
Joel Sikström
e82d7f5810 8364351: ZGC: Replace usages of ZPageAgeRange() with ZPageAgeRangeAll
Reviewed-by: stefank, aboldtch
2025-08-01 07:11:11 +00:00
Aleksey Shipilev
577ac0610a 8358340: Support CDS heap archive with Generational Shenandoah
Reviewed-by: xpeng, wkemper
2025-08-01 06:28:29 +00:00
Francesco Andreuzzi
c9b8bd6ff4 8364359: Sort share/cds includes
Reviewed-by: shade, iklam
2025-08-01 06:27:02 +00:00
Albert Mingkun Yang
913d318c97 8364504: [BACKOUT] JDK-8364176 Serial: Group all class unloading logic at the end of marking phase
Reviewed-by: dholmes
2025-08-01 05:59:33 +00:00
Artur Barashev
724e8c076e 8364484: misc tests fail with Received fatal alert: handshake_failure
Reviewed-by: ascarpino
2025-07-31 21:24:09 +00:00
Albert Mingkun Yang
e0e82066fe 8364166: Parallel: Remove the use of soft_ref_policy in Full GC
Reviewed-by: tschatzl, sangheki
2025-07-31 18:53:07 +00:00
Albert Mingkun Yang
443afdc77f 8364176: Serial: Group all class unloading logic at the end of marking phase
Reviewed-by: tschatzl, sangheki
2025-07-31 18:52:44 +00:00
Chen Liang
fe09e93b8f 8364317: Explicitly document some assumptions of StringUTF16
Reviewed-by: rgiulietti, rriggs, vyazici
2025-07-31 18:26:28 +00:00
Johannes Graham
d19442399c 8358880: Performance of parsing with DecimalFormat can be improved
Reviewed-by: jlu, liach, rgiulietti
2025-07-31 17:50:18 +00:00
Anton Artemov
c4fbfa2103 8363949: Incorrect jtreg header in MonitorWithDeadObjectTest.java
Reviewed-by: stefank, coleenp, ayang
2025-07-31 15:39:38 +00:00
Aleksey Shipilev
1b9efaa11e 8364183: Shenandoah: Improve commit/uncommit handling
Reviewed-by: wkemper, xpeng
2025-07-31 15:17:51 +00:00
Weijun Wang
b2b56cfc00 8359395: XML signature generation does not support user provided SecureRandom
Reviewed-by: mullan
2025-07-31 14:45:31 +00:00
Francesco Andreuzzi
53d152e7db 8364087: Amend comment in globalDefinitions.hpp on "classfile_constants.h" include
Reviewed-by: stefank, ayang
2025-07-31 14:43:10 +00:00
DarraghConway
d4705947d8 8360408: [TEST] Use @requires tag instead of exiting based on "os.name" property value for sun/net/www/protocol/file/FileURLTest.java
Reviewed-by: vyazici, rriggs
2025-07-31 14:41:13 +00:00
Thomas Schatzl
5f357fa27d 8364197: G1: Sort G1 mutex locks by name and group them together
Reviewed-by: coleenp, ayang
2025-07-31 14:08:40 +00:00
Artur Barashev
e544cd9920 8359956: Support algorithm constraints and certificate checks in SunX509 key manager
Reviewed-by: mullan
2025-07-31 13:57:19 +00:00
Lei Zhu
458f033d4d 8362533: Tests sun/management/jmxremote/bootstrap/* duplicate VM flags
Reviewed-by: lmesnik, sspitsyn, kevinw
2025-07-31 13:11:59 +00:00
Axel Boldt-Christmas
3f21c8bd1f 8361897: gc/z/TestUncommit.java fails with Uncommitted too slow
Reviewed-by: stefank, jsikstro
2025-07-31 13:08:29 +00:00
Manuel Hässig
ddb64836e5 8364409: [BACKOUT] Consolidate Identity of self-inverse operations
Reviewed-by: thartmann, bmaillard, hgreule
2025-07-31 12:12:15 +00:00
Yasumasa Suenaga
8ed214f3b1 8364090: Dump JFR recording on CrashOnOutOfMemoryError
Reviewed-by: egahlin, stuefe
2025-07-31 12:10:43 +00:00
Joel Sikström
b9f7caed77 8364282: ZGC: Improve ZPageAllocation JFR event sending
Reviewed-by: stefank, aboldtch
2025-07-31 07:40:22 +00:00
Aleksey Shipilev
ebb7f5d39b 8364111: InstanceMirrorKlass iterators should handle CDS and hidden classes consistently
Reviewed-by: stuefe, ayang, coleenp
2025-07-31 06:07:17 +00:00
Alexander Zvegintsev
05c63e8009 8361524: [XWayland] possible JavaFX interop hang
Reviewed-by: psadhukhan, serb, prr, kizune, kcr
2025-07-31 06:04:22 +00:00
SendaoYan
559795b0eb 8362501: Update test/hotspot/jtreg/applications/jcstress/README
Reviewed-by: shade, lmesnik
2025-07-31 01:38:25 +00:00
Koushik Thirupattur
413ac74ecc 8357682: sun.security.provider.certpath.Builder#getMatchingPolicies always returns null
Reviewed-by: mullan
2025-07-30 19:56:38 +00:00
Rajan Halade
3bdac53178 8361212: Remove AffirmTrust root CAs
Reviewed-by: mullan
2025-07-30 17:56:00 +00:00
Ian Graves
57d02d9ac5 8362279: [vectorapi] VECTOR_OP_SUADD needs reduction support
Reviewed-by: jbhateja, qamai
2025-07-30 15:51:53 +00:00
Francesco Andreuzzi
a2e86ff3c5 8364037: Sort share includes: adlc, libadt, metaprogramming
Reviewed-by: ayang, chagedorn
2025-07-30 13:43:47 +00:00
Shaojin Wen
e2feff8599 8355177: Speed up StringBuilder::append(char[]) via Unsafe::copyMemory
Reviewed-by: rriggs, rgiulietti
2025-07-30 13:16:27 +00:00
Matthias Baesken
16da81eb43 8360817: [ubsan] zDirector select_worker_threads - outside the range of representable values issue
Reviewed-by: aboldtch, lucy
2025-07-30 12:28:14 +00:00
Francesco Andreuzzi
c851735631 8364115: Sort share/services includes
Reviewed-by: sspitsyn, ayang, shade
2025-07-30 10:28:38 +00:00
Thomas Stuefe
317dacc308 8364159: Shenandoah assertions after JDK-8361712
Reviewed-by: mbaesken, shade
2025-07-30 10:11:49 +00:00
Andrew Dinn
a6fb87dbe8 8364042: UnsafeMemoryAccess will not work with AOT cached code stubs
Reviewed-by: asmehra, kvn
2025-07-30 10:08:33 +00:00
Thomas Schatzl
7af3cd9558 8156755: [TESTBUG] Fix gc/g1/humongousObjects/objectGraphTest/TestObjectGraphAfterGC.java
Reviewed-by: ayang
2025-07-30 08:11:46 +00:00
Thomas Schatzl
4da1c9df52 8364196: G1: Fix typo in "cset_groud_gid" local variable in G1FlushHumongousCandidateRemSets
Reviewed-by: ayang
2025-07-30 08:11:27 +00:00
Thomas Schatzl
302508df9e 8364249: G1: Fix some comments about "maximum_collection"
Reviewed-by: shade, sangheki
2025-07-30 07:45:10 +00:00
David Holmes
c6d64edfbe 8364325: ProblemList com/sun/management/HotSpotDiagnosticMXBean/DumpThreads.java
Reviewed-by: kbarrett
2025-07-30 06:09:37 +00:00
Lei Zhu
1be412dca0 8363920: JVMTI Documentation for GetLocalDouble is wrong: refers to long
Reviewed-by: alanb, amenkov, sspitsyn
2025-07-30 05:18:32 +00:00
Thomas Stuefe
164d0368f6 8364202: CDS without G1 gives build error in slowdebug, asserts in fastdebug
Reviewed-by: ccheung, iklam
2025-07-30 04:55:03 +00:00
Alisen Chung
c671089d6e 8364089: JDK 25 RDP2 L10n resource files update
Reviewed-by: jlu, naoto, dnguyen, asemenyuk
2025-07-30 01:54:50 +00:00
Fei Yang
3488f53d2c 8364150: RISC-V: Leftover for JDK-8343430 removing old trampoline call
Reviewed-by: mli, fjiang
2025-07-30 01:02:31 +00:00
Chen Liang
330ee87131 8360163: Replace hard-coded checks with AOTRuntimeSetup and AOTSafeClassInitializer
Reviewed-by: jrose, iklam
2025-07-29 20:42:57 +00:00
Chris Plummer
d5d311f026 8361873: [GCC static analyzer] exec_md.c forkedChildProcess potential double 'close' of file descriptor '3'
Reviewed-by: jpai, stuefe, mbaesken
2025-07-29 19:43:13 +00:00
Calvin Cheung
ea754316fd 8363928: Specifying AOTCacheOutput with a blank path causes the JVM to crash
Reviewed-by: kvn, iklam
2025-07-29 17:41:30 +00:00
Jiangli Zhou
c239c0ab00 8362564: hotspot/jtreg/compiler/c2/TestLWLockingCodeGen.java fails on static JDK on x86_64 with AVX instruction extensions
Reviewed-by: rasbold
2025-07-29 14:48:52 +00:00
Thomas Stuefe
0226c0298f 8364004: Expose VMError::controlledCrash via Whitebox
Reviewed-by: kbarrett, mbaesken, dholmes
2025-07-29 12:35:17 +00:00
Joel Sikström
965b68107f 8358586: ZGC: Combine ZAllocator and ZObjectAllocator
Reviewed-by: aboldtch, stefank
2025-07-29 10:21:54 +00:00
Markus Grönlund
a34994476e 8356587: Missing object ID X in pool jdk.types.Method
Reviewed-by: egahlin
2025-07-29 09:51:24 +00:00
Johan Sjölen
2202156acc 8364198: NMT should have a better corruption message
Reviewed-by: kvn, stuefe
2025-07-29 08:37:35 +00:00
Aleksey Shipilev
3fe0d29ec3 8363965: GHA: Switch cross-compiling sysroots to Debian bookworm
Reviewed-by: clanger, jwaters
2025-07-29 08:11:37 +00:00
Benoît Maillard
28297411b1 8359603: Missed optimization in PhaseIterGVN for redundant ConvX2Y->ConvY2X->ConvX2Y sequences due to missing notification in PhaseIterGVN::add_users_of_use_to_worklist
Reviewed-by: chagedorn, thartmann
2025-07-29 07:32:52 +00:00
David Holmes
4669005123 8361912: ThreadsListHandle::cv_internal_thread_to_JavaThread does not deal with a virtual thread's carrier thread
Reviewed-by: pchilanomate, dcubed, amenkov, sspitsyn
2025-07-28 23:47:51 +00:00
Rui Li
3e4e5dd06f 8364081: Shenandoah & GenShen logging improvement
Reviewed-by: ysr, wkemper
2025-07-28 23:26:53 +00:00
Jasmine Karthikeyan
ea0b49c36d 8362979: C2 fails with unexpected node in SuperWord truncation: CmpLTMask, RoundF
Reviewed-by: chagedorn, thartmann
2025-07-28 17:14:02 +00:00
Alexander Matveev
fe4d7f8c1b 8360507: JPKG002-006: SigningPackageTest: appOutput.txt cannot be found in user home directory and output doesn't contain: origin=Developer ID Application: jpackage.openjdk.java.net
Reviewed-by: asemenyuk
2025-07-28 17:05:15 +00:00
Sean Coffey
f53d0519b9 8340312: sun.security.ssl.SSLLogger uses incorrect log level ALL for finest log events
Reviewed-by: wetmore
2025-07-28 16:32:58 +00:00
Albert Mingkun Yang
70ebb5e8c9 8364019: Add alignment precondition to Universe::reserve_heap
Reviewed-by: tschatzl, jsikstro
2025-07-28 14:18:47 +00:00
Richard Reingruber
b4028c91d5 8362482: [TESTBUG] serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java: System.gc() does not provide full GC
Reviewed-by: sspitsyn, clanger
2025-07-28 13:16:34 +00:00
Brett Okken
08b0b34623 8361715: (bf) Improve java/nio/Buffer/GetChars.java and migrate to JUnit
Reviewed-by: bpb, rriggs
2025-07-28 13:05:33 +00:00
Hamlin Li
7bf4c608e7 8364120: RISC-V: unify the usage of MacroAssembler::instruction_size
Reviewed-by: fyang
2025-07-28 12:59:50 +00:00
Jaikiran Pai
b7703f7948 8364185: [BACKOUT] AArch64: [VectorAPI] sve vector math operations are not supported after JDK-8353217
Reviewed-by: ayang
2025-07-28 11:50:42 +00:00
Matthias Baesken
d25ad881eb 8363676: [GCC static analyzer] missing return value check of malloc in OGLContext_SetTransform
Reviewed-by: psadhukhan
2025-07-28 11:33:27 +00:00
Fei Gao
011de4c894 8363063: AArch64: [VectorAPI] sve vector math operations are not supported after JDK-8353217
Reviewed-by: shade, aph
2025-07-28 08:44:01 +00:00
Hamlin Li
3e2d12d85a 8362515: RISC-V: cleanup NativeFarCall
Reviewed-by: fyang, fjiang
2025-07-28 08:40:58 +00:00
Thomas Schatzl
bdc1ef2021 8363929: G1: Add G1 prefix to various G1 specific global locks
Reviewed-by: shade, ayang
2025-07-28 07:57:28 +00:00
Albert Mingkun Yang
af5932efb5 8361055: Serial: Inline SerialHeap::process_roots
Reviewed-by: tschatzl, kbarrett, stefank
2025-07-28 07:15:40 +00:00
SendaoYan
3b0da29879 8364114: Test TestHugePageDecisionsAtVMStartup.java#LP_enabled fails when no free hugepage
Reviewed-by: stuefe, dholmes
2025-07-28 06:54:42 +00:00
Francesco Andreuzzi
e307b5cca8 8363584: Sort share/utilities includes
Reviewed-by: kbarrett, dholmes, shade
2025-07-28 05:17:52 +00:00
Yuri Gaevsky
4189fcbac4 8362596: RISC-V: Improve _vectorizedHashCode intrinsic
Reviewed-by: fyang, fjiang
2025-07-27 14:54:52 +00:00
Jaikiran Pai
3263361a28 8360981: Remove use of Thread.stop in test/jdk/java/net/Socket/DeadlockTest.java
Reviewed-by: alanb
2025-07-27 06:44:09 +00:00
SendaoYan
8fcbb110e9 8362855: Test java/net/ipv6tests/TcpTest.java should report SkippedException when there no ia4addr or ia6addr
Reviewed-by: jpai
2025-07-27 01:19:06 +00:00
Michael McMahon
de59da27a6 8362581: Timeouts in java/nio/channels/SocketChannel/OpenLeak.java on UNIX
Reviewed-by: jpai, alanb, djelinski
2025-07-26 22:22:36 +00:00
Jaikiran Pai
d288ca28be 8358048: java/net/httpclient/HttpsTunnelAuthTest.java incorrectly calls Thread::stop
Reviewed-by: djelinski, alanb, vyazici
2025-07-26 02:17:13 +00:00
William Kemper
e756c0dbbb 8361726: Shenandoah: More detailed evacuation instrumentation
Reviewed-by: ysr, kdnilsen
2025-07-25 17:59:46 +00:00
Vladimir Kozlov
89fe586edd 8363837: Make StubRoutines::crc_table_adr() into platform-specific method
Reviewed-by: adinn, yzheng
2025-07-25 16:47:09 +00:00
Albert Mingkun Yang
9e209fef86 8364110: Remove unused methods in GCCause
Reviewed-by: kbarrett
2025-07-25 14:50:55 +00:00
Thomas Stuefe
75ff7e15fe 8361712: Improve ShenandoahAsserts printing
Reviewed-by: rkennke, asmehra
2025-07-25 13:34:30 +00:00
Sean Mullan
06fdb61e1c 8361964: Remove outdated algorithms from requirements and add PBES2 algorithms
Reviewed-by: hchao
2025-07-25 12:55:39 +00:00
Matthias Baesken
41c94eed37 8363910: Avoid tuning for Power10 CPUs on Linux ppc64le when gcc < 10 is used
Reviewed-by: stuefe
2025-07-25 11:34:37 +00:00
Matthias Baesken
518d5f4bbb 8361871: [GCC static analyzer] complains about use of uninitialized value ckpObject in p11_util.c
Reviewed-by: lucy
2025-07-25 08:26:57 +00:00
Alan Bateman
f79bd54bbb 8362882: Update SubmissionPublisher() specification to reflect use of ForkJoinPool.asyncCommonPool()
Reviewed-by: jpai, dl
2025-07-25 08:11:55 +00:00
Albert Mingkun Yang
52155dbbb0 8364082: jdk/jfr/event/gc/heapsummary/TestHeapSummaryEventPSParOld.java Eden should be placed first in young
Reviewed-by: dholmes
2025-07-25 07:22:34 +00:00
Thomas Stuefe
ac9e51023f 8320836: jtreg gtest runs should limit heap size
Reviewed-by: dholmes, cslucas
2025-07-25 06:40:37 +00:00
Phil Race
971ea23c95 8362289: [macOS] Remove finalize method in JRSUIControls.java
Reviewed-by: bchristi, serb
2025-07-24 20:53:22 +00:00
Rui Li
4e53a9d9df 8357818: Shenandoah doesn't use shared API for printing heap before/after GC
Reviewed-by: wkemper, kdnilsen
2025-07-24 18:34:26 +00:00
Aleksey Shipilev
8477630970 8360679: Shenandoah: AOT saved adapter calls into broken GC barrier stub
Reviewed-by: kvn, adinn, aph
2025-07-24 15:53:29 +00:00
Ayush Rigal
2f1aed2a16 8361423: Add IPSupport::printPlatformSupport to java/net/NetworkInterface/IPv4Only.java
Reviewed-by: jpai
2025-07-24 14:57:33 +00:00
Marc Chevalier
67e93281a4 8363357: Remove unused flag VerifyAdapterCalls
Reviewed-by: chagedorn, thartmann
2025-07-24 09:21:57 +00:00
Aleksey Shipilev
ed9066bdf4 8361478: GHA: Use MSYS2 from GHA runners
Reviewed-by: jwaters, ihse
2025-07-24 05:59:24 +00:00
Thomas Stuefe
7a22b76b73 8362591: Wrong argument warning when heap size larger than coops threshold
Reviewed-by: dholmes
2025-07-24 05:09:31 +00:00
Feilong Jiang
0ba2942c6e 8362838: RISC-V: Incorrect matching rule leading to improper oop instruction encoding
Reviewed-by: fyang, yadongwang
2025-07-24 02:21:53 +00:00
SendaoYan
fc8038441d 8359827: Test runtime/Thread/ThreadCountLimit.java need loop increasing the limit
Co-authored-by: David Holmes <dholmes@openjdk.org>
Reviewed-by: dholmes
2025-07-24 01:47:58 +00:00
Dingli Zhang
b746701e57 8363898: RISC-V: TestRangeCheckHoistingScaledIV.java fails after JDK-8355293 when running without RVV
Reviewed-by: fyang, mli, syan
2025-07-24 01:37:33 +00:00
Ao Qi
2da0cdadb8 8363895: Minimal build fails with slowdebug builds after JDK-8354887
Reviewed-by: kvn, shade
2025-07-24 01:33:38 +00:00
Albert Mingkun Yang
ad510fb25e 8338977: Parallel: Improve heap resizing heuristics
Reviewed-by: zgu, gli, iwalulya
2025-07-23 20:09:36 +00:00
Thomas Schatzl
2292246f8c 8350621: Code cache stops scheduling GC
Co-authored-by: Thomas Schatzl <tschatzl@openjdk.org>
Co-authored-by: Alexandre Jacob <alexandre.jacob@mirakl.com>
Reviewed-by: kbarrett, ayang
2025-07-23 17:02:31 +00:00
Edoardo Patti
03e9ea169b 8358530: Properties#list should warn against non-String values
Reviewed-by: jlu, liach
2025-07-23 16:31:14 +00:00
Kevin Rushforth
594c080b2b 8359760: Remove the jdk.jsobject module
Reviewed-by: rriggs, iris, alanb
2025-07-23 15:46:47 +00:00
Anthony Scarpino
e6ebefaa40 8333857: Test sun/security/ssl/SSLSessionImpl/ResumeChecksServer.java failed: Existing session was used
Reviewed-by: hchao
2025-07-23 15:24:38 +00:00
Coleen Phillimore
38cd860daa 8363816: Refactor array name creation
Reviewed-by: shade, ccheung, dholmes
2025-07-23 14:48:49 +00:00
Evgeny Astigeevich
743c821289 8362193: Re-work MacOS/AArch64 SpinPause to handle SB
Reviewed-by: shade, aph
2025-07-23 13:51:49 +00:00
Jatin Bhateja
b02c125676 8350896: Integer/Long.compress gets wrong type from CompressBitsNode::Value
Co-authored-by: Emanuel Peter <epeter@openjdk.org>
Reviewed-by: thartmann
2025-07-23 13:31:15 +00:00
Weijun Wang
06f9ff047f 8356997: /etc/krb5.conf parser should not forbid include/includedir directives after sections
Reviewed-by: valeriep
2025-07-23 12:24:28 +00:00
Feilong Jiang
e6ac956a7a 8360520: RISC-V: C1: Fix primitive array clone intrinsic regression after JDK-8333154
Reviewed-by: fyang, galder, dlong
2025-07-23 09:35:26 +00:00
Wang Haomin
9f796da377 8362972: C2 fails with unexpected node in SuperWord truncation: IsFiniteF, IsFiniteD
Reviewed-by: thartmann, jkarthikeyan
2025-07-23 08:08:05 +00:00
Matthias Baesken
ceb0c0fc39 8360941: [ubsan] MemRegion::end() shows runtime error: applying non-zero offset 8388608 to null pointer
Co-authored-by: Kim Barrett <kbarrett@openjdk.org>
Co-authored-by: Thomas Stuefe <stuefe@openjdk.org>
Reviewed-by: kbarrett, lucy
2025-07-23 07:49:11 +00:00
Matthias Baesken
5160cfb496 8362889: [GCC static analyzer] leak in libstringPlatformChars.c
Reviewed-by: rriggs, dholmes
2025-07-23 07:12:12 +00:00
David Holmes
0735dc27c7 8362846: Windows error reporting for dll_load doesn't check for a null buffer
8362954: Missing error buffer null check in os::dll_load on Linux/BSD

Reviewed-by: mgronlun, kbarrett
2025-07-23 00:36:35 +00:00
Y. Srinivas Ramakrishna
79f9d8d832 8350050: Shenandoah: Disable and purge allocation pacing support
Reviewed-by: wkemper, shade, kdnilsen
2025-07-23 00:23:20 +00:00
Srinivas Vamsi Parasa
4994bd5942 8359965: Enable paired pushp and popp instruction usage for APX enabled CPUs
Reviewed-by: sviswanathan, vpaprotski
2025-07-22 22:37:45 +00:00
DarraghConway
016694bf74 8360411: [TEST] open/test/jdk/java/io/File/MaxPathLength.java Refactor extract method to encapsulate Windows specific test logic
Reviewed-by: msheppar
2025-07-22 21:59:11 +00:00
Justin Lu
5540a7859b 8360416: Incorrect l10n test case in sun/security/tools/keytool/i18n.java
Reviewed-by: weijun, rhalade
2025-07-22 20:23:20 +00:00
Ioi Lam
aae9902234 8360555: Archive all unnamed modules in CDS full module graph
Reviewed-by: coleenp, vlivanov
2025-07-22 20:17:31 +00:00
Chen Liang
ea6674fec8 8315131: Clarify VarHandle set/get access on 32-bit platforms
Reviewed-by: rgiulietti, mcimadamore, jrose, shade, psandoz
2025-07-22 17:25:00 +00:00
Sean Mullan
d714b5d3da 8356557: Update CodeSource::implies API documentation and deprecate java.net.SocketPermission class for removal
Reviewed-by: jpai
2025-07-22 15:13:06 +00:00
Albert Mingkun Yang
ce02836232 8363229: Parallel: Remove develop flag GCExpandToAllocateDelayMillis
Reviewed-by: shade, tschatzl
2025-07-22 13:29:07 +00:00
Xiaohong Gong
ac141c2fa1 8359419: AArch64: Relax min vector length to 32-bit for short vectors
Reviewed-by: aph, fgao, bkilambi, dlunden
2025-07-22 09:06:02 +00:00
Marc Chevalier
ed70910b0f 8347901: C2 should remove unused leaf / pure runtime calls
Reviewed-by: thartmann, vlivanov
2025-07-22 08:48:07 +00:00
Roland Westrelin
f155661151 8342692: C2: long counted loop/long range checks: don't create loop-nest for short running loops
Co-authored-by: Maurizio Cimadamore <mcimadamore@openjdk.org>
Co-authored-by: Christian Hagedorn <chagedorn@openjdk.org>
Reviewed-by: chagedorn, thartmann
2025-07-22 08:35:36 +00:00
Koushik Thirupattur
c68697e178 8362957: Fix jdk/javadoc/doccheck/checks/jdkCheckHtml.java (docs) failure
Reviewed-by: ascarpino
2025-07-22 02:48:11 +00:00
Yadong Wang
dccb1782ec 8361892: AArch64: Incorrect matching rule leading to improper oop instruction encoding
Reviewed-by: shade, adinn
2025-07-22 01:23:37 +00:00
SendaoYan
699b8112f8 8362834: Several runtime/Thread tests should mark as /native
Reviewed-by: dholmes
2025-07-22 01:05:35 +00:00
David Holmes
0385975f44 8356941: AbstractMethodError in HotSpot Due to Incorrect Handling of Private Method
Reviewed-by: coleenp, heidinga
2025-07-22 00:39:01 +00:00
Sergey Bylokhov
7d7d308d9a 8362572: Delete the usage of "sun.java2d.reftype" from the sun.java2d.Disposer
Reviewed-by: prr, aivanov
2025-07-22 00:38:28 +00:00
Phil Race
eceb3bbc80 8362452: [macOS] Remove CPrinterJob.finalize()
Reviewed-by: serb, psadhukhan, kizune
2025-07-21 21:03:17 +00:00
Phil Race
3acdba38ce 8362557: [macOS] Remove CFont.finalize()
Reviewed-by: serb, psadhukhan, kizune
2025-07-21 21:02:47 +00:00
Phil Race
523993e9e8 8362291: [macOS] Remove finalize method in CGraphicsEnvironment.java
Reviewed-by: bchristi, serb, kizune
2025-07-21 21:00:43 +00:00
Phil Race
b8da9695f0 8362659: Remove sun.print.PrintJob2D.finalize()
Reviewed-by: serb
2025-07-21 19:51:56 +00:00
Koushik Thirupattur
48ba9d415f 8349946: Cipher javadoc could describe AEAD reuse better
Reviewed-by: ascarpino
2025-07-21 19:30:03 +00:00
Andrew Haley
9dd93c6a2c 8361497: Scoped Values: orElse and orElseThrow do not access the cache
Reviewed-by: alanb
2025-07-21 17:05:50 +00:00
David Briemann
f8c8bcf4fd 8362602: Add test.timeout.factor to CompileFactory to avoid test timeouts
Reviewed-by: mhaessig, mbaesken, clanger
2025-07-21 15:48:06 +00:00
Dingli Zhang
15b5b54ac7 8357694: RISC-V: Several IR verification tests fail when vlen=128
Reviewed-by: mhaessig, fyang, mli
2025-07-21 13:34:24 +00:00
Lei Zhu
644e400cd1 8362611: [GCC static analyzer] memory leak in ps_core.c core_handle_note
Reviewed-by: dholmes, mbaesken
2025-07-21 12:24:49 +00:00
Hamlin Li
fd7f78a535 8362493: Cleanup CodeBuffer::copy_relocations_to
Reviewed-by: mhaessig, kvn
2025-07-21 11:10:20 +00:00
Erik Gahlin
1b94a3466e 8362836: JFR: Broken pipe in jdk/jfr/event/io/TestIOTopFrame.java
Reviewed-by: mgronlun
2025-07-21 10:35:43 +00:00
Lei Zhu
13bab09bff 8362532: Test gc/g1/plab/* duplicate command-line options
Reviewed-by: tschatzl, ayang
2025-07-21 09:59:52 +00:00
Shaojin Wen
8f1bb59e1a 8357913: Add @Stable to BigInteger and BigDecimal
Reviewed-by: rgiulietti, liach
2025-07-21 09:37:56 +00:00
Aleksey Shipilev
1bd683b588 8362582: GHA: Increase bundle retention time to deal with infra overload better
Reviewed-by: goetz, jwaters, clanger
2025-07-21 09:21:48 +00:00
Francesco Andreuzzi
37b70707bd 8362587: Sort share/oops includes
Reviewed-by: shade, dholmes
2025-07-21 08:43:30 +00:00
Benoît Maillard
62a58062e5 8361700: Missed optimization in PhaseIterGVN for mask and shift patterns due to missing notification in PhaseIterGVN::add_users_of_use_to_worklist
Reviewed-by: thartmann, mchevalier, mhaessig, jkarthikeyan
2025-07-21 07:37:31 +00:00
Aleksey Shipilev
9609f57cef 8361752: Double free in CompileQueue::delete_all after JDK-8357473
Reviewed-by: kvn, vlivanov
2025-07-21 06:04:17 +00:00
Erik Gahlin
441dbde2c3 8362556: New test jdk/jfr/event/io/TestIOTopFrame.java is failing on all platforms
Reviewed-by: mgronlun, shade
2025-07-19 15:09:28 +00:00
SendaoYan
ee0bcc5526 8362379: Test serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java should mark as /native
Reviewed-by: sspitsyn, cjplummer
2025-07-19 13:26:37 +00:00
Ioi Lam
ceb51d4444 8362829: Exclude CDS test cases after JDK-8361725
Reviewed-by: ccheung
2025-07-19 02:05:17 +00:00
John R Rose
d83346dcff 8345836: Stable annotation documentation is incomplete
Reviewed-by: liach
2025-07-18 21:31:42 +00:00
Ioi Lam
9334fe2eca 8361725: Do not load Java agent with "-Xshare:dump -XX:+AOTClassLinking"
Reviewed-by: matsaave, ccheung
2025-07-18 21:30:21 +00:00
Alexander Matveev
03230f8565 8351073: [macos] jpackage produces invalid Java runtime DMG bundles
Reviewed-by: asemenyuk
2025-07-18 20:44:20 +00:00
Alex Menkov
a3843e8e6e 8361751: Test sun/tools/jcmd/TestJcmdSanity.java timed out on Windows
Reviewed-by: cjplummer, dholmes, sspitsyn
2025-07-18 18:38:26 +00:00
Jan Kratochvil
60c29ff57b 8362524: Fix confusing but harmless typos in x86 CPU Features
Reviewed-by: kbarrett, kvn
2025-07-18 17:13:25 +00:00
Roger Riggs
30d2003698 8357380: java/lang/StringBuilder/RacingSBThreads.java times out with C1
Reviewed-by: jpai
2025-07-18 16:40:28 +00:00
Jorn Vernee
9dc62825b5 8362169: Pointer passed to upcall may get wrong scope
Reviewed-by: mcimadamore
2025-07-18 14:54:10 +00:00
Albert Mingkun Yang
6949e34575 8362592: Remove unused argument in nmethod::oops_do
Reviewed-by: zgu
2025-07-18 13:48:44 +00:00
Shawn M Emery
7da274ded4 8361961: Typo in ProtectionDomain.implies
Reviewed-by: mullan, jpai, hchao
2025-07-18 10:02:25 +00:00
Abhishek Kumar
4e0b03580d 8338282: javax/swing/JMenuBar/TestMenuMnemonicLinuxAndMac.java test failed on macOS and Ubuntu
Reviewed-by: tr, dnguyen, serb
2025-07-18 06:13:26 +00:00
Abhishek Kumar
a23987fecb 8361283: [Accessibility,macOS,VoiceOver] VoiceOver announced Tab items of JTabbedPane as RadioButton on macOS
Reviewed-by: asemenov, kizune
2025-07-18 06:13:06 +00:00
David Holmes
04c0b130f0 8362565: ProblemList jdk/jfr/event/io/TestIOTopFrame.java
Reviewed-by: egahlin
2025-07-18 02:35:09 +00:00
Archie Cobbs
cab515962b 8361424: Eliminate Log methods mandatoryWarning() and mandatoryNote()
Reviewed-by: mcimadamore
2025-07-18 01:43:49 +00:00
Leonid Mesnik
bd55d7a495 8362203: assert(state == nullptr || state->get_thread_oop() != nullptr) failed: incomplete state
Reviewed-by: sspitsyn, amenkov
2025-07-17 16:25:40 +00:00
Doug Simon
2b11a28997 8362306: HotSpotJVMCIRuntime.getMirror can crash
Reviewed-by: gdub, never, cslucas
2025-07-17 16:19:52 +00:00
Albert Mingkun Yang
5ed72775a7 8361404: Parallel: Group all class unloading logc at the end of marking phase
Reviewed-by: tschatzl, iwalulya
2025-07-17 13:55:47 +00:00
Pooja-DP
dc08cf016e 8361697: Remove duplicate message in MainResources.properties
Reviewed-by: rriggs, asemenyuk
2025-07-17 13:53:01 +00:00
Thomas Schatzl
ea774b74e8 8347052: Update java man page documentation to reflect current state of the UseNUMA flag
Reviewed-by: drwhite, ayang
2025-07-17 13:47:57 +00:00
Hannes Wallnöfer
365660e667 8356975: Provide alternative way to generate preview API docs
8355933: Change section title for permanent APIs affected by preview features

Reviewed-by: liach
2025-07-17 13:45:24 +00:00
Benoît Maillard
1d73f8842a 8358573: Remove the -XX:-InstallMethods debug flag
Reviewed-by: dlong, thartmann, shade
2025-07-17 12:39:46 +00:00
Ivan Walulya
cb9358b561 8362278: G1: Consolidate functions for recording pause start time
Reviewed-by: tschatzl, ayang
2025-07-17 12:22:55 +00:00
Albert Mingkun Yang
bc9ece9698 8361204: Parallel: Skip visiting per-thread nmethods during young GC
Reviewed-by: tschatzl, iwalulya
2025-07-17 12:12:16 +00:00
Matthias Baesken
1cde536b98 8361868: [GCC static analyzer] complains about missing calloc - NULL checks in p11_util.c
Reviewed-by: lucy, stuefe
2025-07-17 11:24:40 +00:00
Erik Gahlin
1a6cbe421f 8361639: JFR: Incorrect top frame for I/O events
Reviewed-by: mgronlun
2025-07-17 11:21:00 +00:00
Hamlin Li
3fd89be6d1 8362284: RISC-V: cleanup NativeMovRegMem
Reviewed-by: fyang, luhenry
2025-07-17 10:45:46 +00:00
Matthias Baesken
18190519e7 8362390: AIX make fails in awt_GraphicsEnv.c
Reviewed-by: prr, serb, clanger
2025-07-17 07:11:03 +00:00
Brian Burkhalter
be0161a8e6 8362429: AssertionError in File.listFiles(FileFilter | FilenameFilter)
Reviewed-by: alanb
2025-07-17 06:31:34 +00:00
Thomas Stuefe
bc72f476d1 8362088: CompressedKlassPointers::encode should be const correct
Reviewed-by: dholmes
2025-07-17 04:01:24 +00:00
Serguei Spitsyn
a65d9532ed 8309399: JVMTI spec needs to clarify when OPAQUE_FRAME is thrown for reasons other than a native method
Reviewed-by: cjplummer
2025-07-17 01:29:40 +00:00
Andrey Turbanov
20b5f09777 8357226: Remove unnecessary List.indexOf from RepaintManager.removeInvalidComponent
Reviewed-by: azvegint, serb
2025-07-16 21:04:24 +00:00
William Kemper
3b44d7bfa4 8360288: Shenandoah crash at size_given_klass in op_degenerated
Reviewed-by: shade
2025-07-16 17:30:42 +00:00
Calvin Cheung
8193856af8 8362336: Revert changes in metaspaceShared.cpp done via JDK-8356807
Reviewed-by: iklam
2025-07-16 16:02:44 +00:00
Gerard Ziemski
10ae602944 8362276: NMT tests should have locks for the entire tests
Reviewed-by: shade, coleenp
2025-07-16 15:27:29 +00:00
David Beaumont
770d2b41d1 8361076: Add benchmark for ImageReader in preparation for Valhalla changes
Reviewed-by: rriggs, liach, ihse
2025-07-16 14:31:53 +00:00
Jasmine Karthikeyan
70c1ff7e15 8362171: C2 fails with unexpected node in SuperWord truncation: ModI
Reviewed-by: thartmann, chagedorn
2025-07-16 12:59:55 +00:00
Boris Ulasevich
6ed81641b1 8362250: ARM32: forward_exception_entry missing return address
Reviewed-by: shade
2025-07-16 11:58:34 +00:00
Aggelos Biboudis
5e4a2ead71 8357653: Inner classes of type parameters emitted as raw types in signatures
8357472: NPE in Types.containsType for type variable used as a qualifier

Co-authored-by: Maurizio Cimadamore <mcimadamore@openjdk.org>
Reviewed-by: mcimadamore, vromero, liach
2025-07-16 10:52:26 +00:00
Maurizio Cimadamore
b787ad6f69 8361401: Warnings for use of Sun APIs should not be mandatory
Reviewed-by: jlahoda, vromero
2025-07-16 09:55:08 +00:00
Saranya Natarajan
6b4a5ef105 8358641: C1 option -XX:+TimeEachLinearScan is broken
Reviewed-by: chagedorn, thartmann
2025-07-16 07:57:21 +00:00
Saranya Natarajan
9f7dc19ffd 8353276: C2: simplify PhaseMacroExpand::opt_bits_test
Reviewed-by: chagedorn, thartmann
2025-07-16 07:48:21 +00:00
Saranya Natarajan
805f1deebc 8342941: IGV: Add various new graph dumps during loop opts
Reviewed-by: chagedorn, dlunden
2025-07-16 07:44:57 +00:00
Matthias Baesken
b85440d085 8361888: [GCC static analyzer] ProcessImpl_md.c Java_java_lang_ProcessImpl_forkAndExec error: use of uninitialized value '*(ChildStuff *)p.mode
Reviewed-by: rriggs, syan
2025-07-16 07:21:52 +00:00
Thomas Schatzl
fd2ee0844a 8361705: Clean up KlassCleaningTask
Reviewed-by: shade, ayang
2025-07-16 07:20:15 +00:00
Thomas Schatzl
27c58c06cf 8362271: G1: Improve G1CollectorState::clearing_bitmap name
Reviewed-by: sangheki
2025-07-16 07:01:16 +00:00
Richard Reingruber
cbb3d23e19 8361827: [TESTBUG] serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java throws OutOfMemoryError
Reviewed-by: clanger, syan
2025-07-16 06:12:07 +00:00
Joe Darcy
6e368e0c69 8362207: Add more test cases for possible double-rounding in fma
Reviewed-by: rgiulietti, syan
2025-07-16 05:48:19 +00:00
Guanqiang Han
e1b2229b0b 8358592: Assert in Assembler::ptest due to missing SSE42 support
Reviewed-by: kvn
2025-07-16 05:44:24 +00:00
Dingli Zhang
bdd37b0e5e 8361836: RISC-V: Relax min vector length to 32-bit for short vectors
Reviewed-by: fyang, fjiang
2025-07-16 05:36:12 +00:00
Brent Christian
5ddeb56759 Merge
Reviewed-by: jpai, liach
2025-07-16 03:57:54 +00:00
Leonid Mesnik
a5c9bc7032 8358004: Delete applications/scimark/Scimark.java test
Reviewed-by: syan, coleenp
2025-07-16 00:29:15 +00:00
Bradford Wetmore
5fd2b7d61a 8353925: Remove Sun Microsystems JCE Code Signing Root CA
Reviewed-by: mullan, valeriep
2025-07-15 22:45:43 +00:00
Erik Gahlin
9bef2d1610 8361640: JFR: RandomAccessFile::readLine emits events for each character
Reviewed-by: rriggs, alanb, mgronlun
2025-07-15 20:33:24 +00:00
Sergey Bylokhov
6fc032de2c 8358468: Enhance code consistency: java.desktop/macos
Reviewed-by: prr, azvegint
2025-07-15 20:28:19 +00:00
Phil Race
413c6bd040 8360147: Better Glyph drawing redux
Reviewed-by: rhalade, ahgross, psadhukhan, jdv
2025-07-15 12:02:14 -07:00
Phil Race
2eaddd5b0a 8355884: [macos] java/awt/Frame/I18NTitle.java fails on MacOS
Reviewed-by: kcr, dmarkov, aivanov, honkar, kizune
2025-07-15 12:02:14 -07:00
Darragh Clarke
7db8bff9e1 8350991: Improve HTTP client header handling
Reviewed-by: rhalade, dfuchs, michaelm
2025-07-15 12:02:14 -07:00
Kevin Driver
5ad102ca3f 8349594: Enhance TLS protocol support
Reviewed-by: rhalade, ahgross, wetmore, jnimeh
2025-07-15 12:02:14 -07:00
Christian Hagedorn
a56cd371a2 8349584: Improve compiler processing
Reviewed-by: rhalade, ahgross, epeter, thartmann
2025-07-15 12:02:14 -07:00
Prasanta Sadhukhan
d3429ada8f 8349111: Enhance Swing supports
Reviewed-by: rhalade, jdv, prr
2025-07-15 12:02:14 -07:00
Phil Race
db3f6eabb5 8348989: Better Glyph drawing
Reviewed-by: mschoene, psadhukhan, jdv, rhalade
2025-07-15 12:02:14 -07:00
Volkan Yazici
017dc093ac 8349551: Failures in tests after JDK-8345625
Reviewed-by: jpai, dfuchs
2025-07-15 12:02:14 -07:00
Volkan Yazici
1d8cca2b84 8345625: Better HTTP connections
Reviewed-by: skoivu, rhalade, ahgross, dfuchs, jpai, aefimov
2025-07-15 12:02:14 -07:00
Brian Burkhalter
eefbfdce31 8361587: AssertionError in File.listFiles() when path is empty and -esa is enabled
Reviewed-by: alanb
2025-07-15 18:15:16 +00:00
Xueming Shen
401af27b9d 8360459: UNICODE_CASE and character class with non-ASCII range does not match ASCII char
Reviewed-by: naoto
2025-07-15 17:57:13 +00:00
Calvin Cheung
38af17d078 8356807: Change log_info(cds) to MetaspaceShared::report_loading_error()
Reviewed-by: matsaave, iklam
2025-07-15 17:27:17 +00:00
Daniel Lundén
820263e48a 8360701: Add bailout when the register allocator interference graph grows unreasonably large
Reviewed-by: mhaessig, thartmann
2025-07-15 15:37:27 +00:00
Ian Graves
b65fdf5af0 8358768: [vectorapi] Make VectorOperators.SUADD an Associative
Reviewed-by: psandoz
2025-07-15 14:33:37 +00:00
Johannes Bechberger
d2082c58ff 8358621: Reduce busy waiting in worse case at the synchronization point returning from native in CPU Time Profiler
Reviewed-by: shade, jbachorik, egahlin
2025-07-15 14:23:11 +00:00
Raffaello Giulietti
563e876246 8358540: Enhance MathUtils in view of FloatingDecimal enhancements
Reviewed-by: darcy
2025-07-15 13:21:35 +00:00
Johannes Bechberger
c70258ca1c 8358619: Fix interval recomputation in CPU Time Profiler
Reviewed-by: jbachorik, mgronlun
2025-07-15 10:58:02 +00:00
Thomas Schatzl
9697e5bf74 8362151: Remove unnecessary ClassLoaderDataGraph friend classes
Reviewed-by: coleenp, shade
2025-07-15 09:03:56 +00:00
Albert Mingkun Yang
c9ecc82666 8362162: Use bool for caller of os::must_commit_stack_guard_pages()
Reviewed-by: shade, kbarrett
2025-07-15 07:51:45 +00:00
Matthias Baesken
bf225c201f 8361959: [GCC static analyzer] java_props_md.c leak of 'temp' variable is reported
Reviewed-by: shade, kbarrett, rriggs
2025-07-15 07:18:15 +00:00
Hannes Greule
e5ab210713 8359678: C2: assert(static_cast<T1>(result) == thing) caused by ReverseBytesNode::Value()
Reviewed-by: mhaessig, dlong, thartmann
2025-07-15 06:28:03 +00:00
Alexander Zvegintsev
18c2e40de7 8354415: [Ubuntu25.04] api/java_awt/GraphicsDevice/indexTGF.html#SetDisplayMode - setDisplayMode_REFRESH_RATE_UNKNOWN fails: Height is different on vnc
Reviewed-by: honkar, kizune
2025-07-15 06:21:48 +00:00
Jan Lahoda
40d159d4a9 8362116: System.in.read() etc. don't accept input once immediate Ctrl+D pressed in JShell
Reviewed-by: liach, cstein
2025-07-15 06:13:45 +00:00
Erik Gahlin
25e509b0db 8362097: JFR: Active Settings view broken
Reviewed-by: mgronlun
2025-07-15 05:14:44 +00:00
Chen Liang
0acd065bf5 8361909: ConstantPoolBuilder::loadableConstantEntry and constantValueEntry should throw NPE
Reviewed-by: asotona
2025-07-14 23:35:05 +00:00
David Holmes
f36147b326 8356942: invokeinterface Throws AbstractMethodError Instead of IncompatibleClassChangeError
Reviewed-by: coleenp, iklam
2025-07-14 22:53:45 +00:00
Phil Race
5cf672e778 8359053: Implement JEP 504 - Remove the Applet API
Reviewed-by: aivanov, kizune, kcr, achung, serb
2025-07-14 20:23:38 +00:00
Alexander Matveev
a10ee46e6d 8361224: [macos] MacSignTest.testMultipleCertificates failed
Reviewed-by: asemenyuk
2025-07-14 15:07:43 +00:00
Aleksey Shipilev
6cff49c0fe 8361380: ARM32: Atomic stubs should be in pre-universe
Co-authored-by: Andrew Dinn <adinn@openjdk.org>
Reviewed-by: kvn, adinn
2025-07-14 14:30:02 +00:00
Marc Chevalier
ebb1095805 8361492: [IR Framework] Has too restrictive regex for load and store
Reviewed-by: chagedorn, dfenacci
2025-07-14 13:37:19 +00:00
Nizar Benalla
bcd86d575f 8358627: tools/sincechecker/modules/java.base/JavaBaseCheckSince.java fails with JDK 26
Reviewed-by: liach, syan
2025-07-14 12:36:37 +00:00
Dingli Zhang
5edd546585 8361449: RISC-V: Code cleanup for native call
Reviewed-by: fyang, fjiang
2025-07-14 11:56:07 +00:00
Benoît Maillard
a531c9aece 8361144: Strenghten the Ideal Verification in PhaseIterGVN::verify_Ideal_for by comparing the hash of a node before and after Ideal
Co-authored-by: Emanuel Peter <epeter@openjdk.org>
Reviewed-by: galder, dfenacci, epeter
2025-07-14 11:40:00 +00:00
Thomas Schatzl
99c299f098 8361706: Parallel weak klass link cleaning does not clean out previous klasses
Reviewed-by: eosterlund, coleenp
2025-07-14 09:39:06 +00:00
Thomas Schatzl
272e66d017 8361952: Installation of MethodData::extra_data_lock() misses synchronization on reader side
Reviewed-by: shade, coleenp, dholmes
2025-07-14 08:59:35 +00:00
han gq
14c79be161 8361140: Missing OptimizePtrCompare check in ConnectionGraph::reduce_phi_on_cmp
Reviewed-by: chagedorn, cslucas
2025-07-14 07:39:04 +00:00
Tobias Hartmann
7c34bdf73c 8362122: Problem list TestStressBailout until JDK-8361752 is fixed
Reviewed-by: chagedorn
2025-07-14 07:27:12 +00:00
Alexander Zvegintsev
0029554d20 8360647: [XWayland] [OL10] NumPad keys are not triggered
Reviewed-by: honkar, serb
2025-07-14 03:43:54 +00:00
Jasmine Karthikeyan
77bd417c99 8350177: C2 SuperWord: Integer.numberOfLeadingZeros, numberOfTrailingZeros, reverse and bitCount have input types wrongly truncated for byte and short
Reviewed-by: epeter, thartmann
2025-07-13 21:28:39 +00:00
Prasanta Sadhukhan
bc828c8fb6 6955128: Spec for javax.swing.plaf.basic.BasicTextUI.getVisibleEditorRect contains inappropriate wording
Reviewed-by: aivanov, prr, dnguyen, abhiscxk, tr
2025-07-13 11:02:19 +00:00
Richard Reingruber
917d0182cb 8361602: [TESTBUG] serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java deadlocks on exception
Reviewed-by: cjplummer, clanger, dholmes
2025-07-12 05:40:51 +00:00
SendaoYan
3bacf7ea85 8361869: Tests which call ThreadController should mark as /native
Reviewed-by: sspitsyn, lmesnik
2025-07-12 01:50:40 +00:00
Calvin Cheung
4a351e3e57 8361328: cds/appcds/dynamicArchive/TestAutoCreateSharedArchive.java archive timestamps comparison failed
Reviewed-by: iklam, matsaave
2025-07-12 00:18:51 +00:00
Chen Liang
189017f750 8361908: Mix and match of dead and valid exception handler leads to malformed class file
Reviewed-by: asotona
2025-07-11 22:52:26 +00:00
Chen Liang
3f59eae3d0 8361102: java.lang.classfile.CodeBuilder.branch(Opcode op, Label target) doesn't throw IllegalArgumentException - if op is not of Opcode.Kind.BRANCH
Reviewed-by: asotona
2025-07-11 22:52:10 +00:00
Xiaolong Peng
46988e1073 8361948: Shenandoah: region free capacity unit mismatch
Reviewed-by: shade, wkemper
2025-07-11 20:09:50 +00:00
Chris Plummer
f7e8d255cc 8361905: Problem list serviceability/sa/ClhsdbThreadContext.java on Windows due to JDK-8356704
Reviewed-by: amenkov, sspitsyn
2025-07-11 19:29:07 +00:00
Srinivas Vamsi Parasa
26b002805a 8360776: Disable Intel APX by default and enable it with -XX:+UnlockExperimentalVMOptions -XX:+UseAPX in all builds
Reviewed-by: sviswanathan, dholmes, jbhateja
2025-07-11 18:55:11 +00:00
Alex Menkov
8c00c374ec 8361314: Test serviceability/jvmti/VMEvent/MyPackage/VMEventRecursionTest.java FATAL ERROR in native method: Failed during the GetClassSignature call
Reviewed-by: cjplummer, sspitsyn
2025-07-11 18:33:03 +00:00
Igor Veresov
59bec29c35 8358580: Rethink how classes are kept alive in training data
Reviewed-by: coleenp, shade
2025-07-11 18:07:13 +00:00
Evgeny Astigeevich
a86dd56de3 8360936: Test compiler/onSpinWait/TestOnSpinWaitAArch64.java fails after JDK-8359435
Reviewed-by: shade, aph
2025-07-11 15:25:22 +00:00
Marc Chevalier
76442f39b9 8361494: [IR Framework] Escape too much in replacement of placeholder
Reviewed-by: mhaessig, chagedorn
2025-07-11 10:41:31 +00:00
Thomas Stuefe
445e5ecd98 8361342: Shenandoah: Evacuation may assert on invalid mirror object after JDK-8340297
Co-authored-by: Aleksey Shipilev <shade@openjdk.org>
Reviewed-by: shade, rkennke
2025-07-11 08:02:52 +00:00
Marc Chevalier
3ffc5b9ef7 8359344: C2: Malformed control flow after intrinsic bailout
Reviewed-by: thartmann, kvn
2025-07-11 07:07:27 +00:00
jeremy
529049be6b 8356137: GifImageDecode can produce opaque image when disposal method changes
Reviewed-by: jdv, prr
2025-07-11 05:47:29 +00:00
Kim Barrett
eddfc6449f 8361383: LogFileStreamOutput::write_decorations uses wrong type for format precisions
Reviewed-by: dholmes, iklam
2025-07-11 05:30:29 +00:00
Dingli Zhang
2e7e272d7b 8361829: [TESTBUG] RISC-V: compiler/vectorization/runner/BasicIntOpTest.java fails with RVV but not Zvbb
Reviewed-by: fyang, fjiang
2025-07-11 02:40:33 +00:00
Ioi Lam
ee0d309bbd 8313395: LotsUnloadTest.java fails with OOME transiently with libgraal
Reviewed-by: dnsimon
2025-07-10 21:40:11 +00:00
Alex Menkov
2300a212dd 8358679: [asan] vmTestbase/nsk/jvmti tests show memory issues
Reviewed-by: cjplummer, sspitsyn
2025-07-10 19:57:27 +00:00
Andrew Dinn
3d74cbe0ac 8361844: Build without C1 or C2 fails after 8360707
Reviewed-by: kvn
2025-07-10 17:23:10 +00:00
Naoto Sato
f5afbbd32a 8361717: Refactor Collections.emptyList() in Locale related classes
Reviewed-by: bpb, jlu, liach, cstein
2025-07-10 16:08:05 +00:00
Kevin Walls
cbc7090b91 8359809: AttributeList, RoleList and UnresolvedRoleList should never accept other types of Object
Reviewed-by: sspitsyn
2025-07-10 15:21:04 +00:00
Anass Baya
f735275021 8361839: Problemlist BogusFocusableWindowState due to failures in the CI pipeline
Reviewed-by: aivanov
2025-07-10 13:07:13 +00:00
Thomas Schatzl
3d37c4e37a 8361693: Remove Klass::clean_subklass_tree()
Reviewed-by: zgu, kbarrett
2025-07-10 13:00:48 +00:00
Nizar Benalla
73ab54e4c3 8360302: Update --release 25 symbol information for JDK 25 build 29
Reviewed-by: darcy, iris
2025-07-10 11:25:41 +00:00
Vicente Romero
80662a485a 8361499: Intersection type cast causes javac crash with -Xjcov
Reviewed-by: mcimadamore
2025-07-10 10:38:31 +00:00
Albert Mingkun Yang
c118543efe 8361704: Parallel: Simplify logic condition in MutableNUMASpace::initialize
Reviewed-by: tschatzl
2025-07-10 09:18:35 +00:00
Kevin Walls
13e0f99626 8351413: Remove XML interchange in java.management/javax/management/modelmbean/DescriptorSupport
Reviewed-by: dfuchs, sspitsyn
2025-07-10 08:19:06 +00:00
Matthias Baesken
bf3cfbeff4 8351487: [ubsan] jvmti.h runtime error: load of value which is not a valid value
Reviewed-by: cjplummer, amenkov, sspitsyn
2025-07-10 07:08:26 +00:00
David Holmes
2a53f5a5c2 8361754: New test runtime/jni/checked/TestCharArrayReleasing.java can cause disk full errors
Reviewed-by: jpai, darcy
2025-07-10 05:07:33 +00:00
David Holmes
f67e435431 8361447: [REDO] Checked version of JNI Release<type>ArrayElements needs to filter out known wrapped arrays
Co-authored-by: Thomas Stuefe <stuefe@openjdk.org>
Reviewed-by: mdoerr, stuefe, coleenp
2025-07-10 01:59:49 +00:00
David Holmes
c28bb8bf7a 8361647: Report the error reason on failed semaphore calls on macOS
Reviewed-by: shade, ayang, jwaters
2025-07-10 01:54:39 +00:00
Matias Saavedra Silva
518536c607 8344073: Test runtime/cds/appcds/TestParallelGCWithCDS.java#id0 failed
Reviewed-by: ccheung, iklam
2025-07-09 20:45:13 +00:00
Gustavo Simon
0f7808f333 8360122: Fix java.sql\Connection.java indentation
Reviewed-by: liach, lancea
2025-07-09 19:55:20 +00:00
Chen Liang
c9bea77342 8361615: CodeBuilder::parameterSlot throws undocumented IOOBE
Reviewed-by: asotona
2025-07-09 19:29:25 +00:00
Yudi Zheng
6681fc72d3 8361569: [JVMCI] Further refine JVMCI-compiled nmethod that should not collect deoptimization profile
Reviewed-by: dnsimon, gdub
2025-07-09 19:12:37 +00:00
Eric Caspole
7282f68cee 8361216: Do not fork javac in J2DBench ant build
Reviewed-by: prr
2025-07-09 18:47:38 +00:00
Brian Burkhalter
6e203384f8 8358533: Improve performance of java.io.Reader.readAllLines
Reviewed-by: rriggs, sherman
2025-07-09 16:15:36 +00:00
Brian Burkhalter
6249259c80 8361299: (bf) CharBuffer.getChars(int,int,char[],int) violates pre-existing specification
Reviewed-by: alanb, liach
2025-07-09 16:15:21 +00:00
Aleksey Shipilev
a41d35073e 8357473: Compilation spike leaves many CompileTasks in free list
Reviewed-by: kvn, chagedorn
2025-07-09 14:49:20 +00:00
Nizar Benalla
7daf9813c0 8346884: Add since checker test to jdk.editpad
Reviewed-by: jpai
2025-07-09 13:49:15 +00:00
Aleksey Shipilev
a201be8555 8361255: CTW: Tolerate more NCDFE problems
Reviewed-by: kvn, thartmann
2025-07-09 12:42:25 +00:00
Manuel Hässig
db4b4a5b35 8360175: C2 crash: assert(edge_from_to(prior_use,n)) failed: before block local scheduling
Reviewed-by: kvn, chagedorn
2025-07-09 12:34:10 +00:00
Chen Liang
d886ae12a2 8357185: Redundant local variables with unconditionally matching primitive patterns
Reviewed-by: jlahoda, abimpoudis
2025-07-09 12:14:14 +00:00
Albert Mingkun Yang
eec04dd010 8361680: Use correct enum Claim value in VM_HeapWalkOperation::collect_simple_roots
Reviewed-by: shade
2025-07-09 12:00:51 +00:00
Aleksey Shipilev
a9bd1ad40c 8361520: Stabilize SystemGC benchmarks
Reviewed-by: tschatzl, ayang
2025-07-09 08:56:44 +00:00
Andrew Dinn
b1fa1ecc98 8360707: Globally enumerate all blobs, stubs and entries
Reviewed-by: kvn, fyang, asmehra
2025-07-09 08:48:07 +00:00
David Briemann
83feb7a238 8361599: [PPC64] enable missing tests via jtreg requires
Reviewed-by: mdoerr
2025-07-09 08:27:55 +00:00
Andrej Pecimuth
963b83fcf1 8357689: Refactor JVMCI to enable replay compilation in Graal
Reviewed-by: dnsimon
2025-07-09 08:19:49 +00:00
Thomas Schatzl
68b27b88b5 8361349: Fix visibility of CollectedHeap::stop() and ::print_tracing_info()
Reviewed-by: iwalulya, ayang
2025-07-09 08:10:43 +00:00
Dingli Zhang
e0245682c8 8361532: RISC-V: Several vector tests fail after JDK-8354383
Reviewed-by: fyang, fjiang, gcao
2025-07-09 05:57:38 +00:00
Ivan Walulya
4761479608 8238687: Investigate memory uncommit during young collections in G1
8247843: Reconsider G1 default GCTimeRatio value
8248324: G1: Remove resizing during Remark

Co-authored-by: Thomas Schatzl <tschatzl@openjdk.org>
Reviewed-by: kbarrett, tschatzl
2025-07-09 05:44:42 +00:00
Thomas Stuefe
fe26467633 8361363: ShenandoahAsserts::print_obj() does not work for forwarded objects and UseCompactObjectHeaders
Reviewed-by: rkennke, shade
2025-07-09 05:17:05 +00:00
Chen Liang
e2c5d03546 8361526: Synchronize ClassFile API verifier with hotspot
Reviewed-by: asotona
2025-07-09 03:34:44 +00:00
Ravi-Patel8
19bb6ebfaf 8361484: Remove duplicate font filename mappings in fontconfig.properties for AIX
Reviewed-by: serb, azvegint
2025-07-09 03:12:43 +00:00
Feilong Jiang
54e37629f6 8361504: RISC-V: Make C1 clone intrinsic platform guard more specific
Reviewed-by: fyang, gcao
2025-07-09 01:20:18 +00:00
Rui Li
974ad4e8cd 8359868: Shenandoah: Free threshold heuristic does not use SoftMaxHeapSize
Reviewed-by: wkemper
2025-07-08 21:58:22 +00:00
Kim Barrett
117f0b4051 8361426: (ref) Remove jdk.internal.ref.Cleaner
Reviewed-by: jpai, vklang
2025-07-08 19:48:54 +00:00
Vladimir Kozlov
dedcce0450 8360942: [ubsan] aotCache tests trigger runtime error: applying non-zero offset 16 to null pointer in CodeBlob::relocation_end()
Reviewed-by: adinn, mbaesken
2025-07-08 19:34:39 +00:00
Alex Menkov
03526e250d 8355960: JvmtiAgentList::Iterator dtor double free with -fno-elide-constructors
Reviewed-by: dholmes, sspitsyn
2025-07-08 19:30:07 +00:00
Kelvin Nilsen
1de2acea77 8361529: GenShen: Fix bad assert in swap card tables
Reviewed-by: wkemper
2025-07-08 18:59:11 +00:00
Rui Li
fa32bfe113 8358529: GenShen: Heuristics do not respond to changes in SoftMaxHeapSize
Reviewed-by: wkemper
2025-07-08 18:34:18 +00:00
Koushik Thirupattur
91df797879 8357915: SecureRandom nextLong memory usage
Reviewed-by: wetmore
2025-07-08 18:24:26 +00:00
Ioi Lam
92712ef45d 8361367: AOT ExcludedClasses.java test failed with missing constant pool logs
Reviewed-by: dholmes, kvn
2025-07-08 17:34:58 +00:00
Naoto Sato
5850bf4488 8361519: Obsolete Unicode Scalar Value link in Character class
Reviewed-by: iris
2025-07-08 17:13:59 +00:00
Jan Lahoda
853319439e 8361570: Incorrect 'sealed is not allowed here' compile-time error
Reviewed-by: mcimadamore, vromero
2025-07-08 14:33:14 +00:00
Erik Gahlin
63e08d4af7 8361175: JFR: Document differences between method sample events
Reviewed-by: mgronlun
2025-07-08 14:04:17 +00:00
David Briemann
5c67e3d6e5 8361353: [PPC64] C2: Add nodes UMulHiL, CmpUL3, UMinV, UMaxV, NegVI
Reviewed-by: mdoerr, rrich
2025-07-08 12:58:44 +00:00
Manuel Hässig
2349304bb1 8361040: compiler/codegen/TestRedundantLea.java#StringInflate fails with failed IR rules
Co-authored-by: Matthias Baesken <mbaesken@openjdk.org>
Reviewed-by: chagedorn, mbaesken
2025-07-08 12:44:36 +00:00
Jan Lahoda
0bd2f9cba2 8361445: javac crashes on unresolvable constant in @SuppressWarnings
Reviewed-by: asotona, liach
2025-07-08 12:04:08 +00:00
han gq
27e6a4d2f7 8344548: Incorrect StartAggressiveSweepingAt doc for segmented code cache
Reviewed-by: kvn, eastigeevich
2025-07-08 11:50:09 +00:00
Maurizio Cimadamore
1934bd8d2c 8361481: Flexible Constructor Bodies generates a compilation error when compiling a user supplied java.lang.Object class
Reviewed-by: vromero, liach, jlahoda
2025-07-08 10:38:59 +00:00
Aleksey Shipilev
7b255b8a62 8361397: Rework CompileLog list synchronization
Reviewed-by: kvn, chagedorn
2025-07-08 08:23:11 +00:00
Kevin Walls
310ef85667 8305567: serviceability/tmtools/jstat/GcTest01.java failed utils.JstatGcResults.assertConsistency
Reviewed-by: cjplummer, lmesnik
2025-07-08 06:38:16 +00:00
Prasanta Sadhukhan
5205eae6ff 8346753: Test javax/swing/JMenuItem/RightLeftOrientation/RightLeftOrientation.java fails on Windows Server 2025 x64 because the icons of RBMenuItem and CBMenuItem are not visible in Nimbus LookAndFeel
Reviewed-by: abhiscxk
2025-07-08 03:12:37 +00:00
Julian Waters
bbc5c98b14 8342868: Errors related to unused code on Windows after 8339120 in core libs
Reviewed-by: naoto, jlu
2025-07-08 01:29:20 +00:00
Julian Waters
563a3358f6 8342682: Errors related to unused code on Windows after 8339120 in dt_shmem jdwp security and jpackage
Reviewed-by: cjplummer, asemenyuk, almatvee
2025-07-08 01:27:11 +00:00
Valerie Peng
ec7c6be6a9 8359388: Stricter checking for cipher transformations
Reviewed-by: mullan
2025-07-07 23:36:19 +00:00
Justin Lu
197fde5363 8361303: L10n comment for javac.opt.Xlint.desc.synchronization in javac.properties
Reviewed-by: naoto, liach
2025-07-07 21:55:10 +00:00
Sergey Bylokhov
ec3bb93d79 8358623: Avoid unnecessary data copying in ICC_Profile
Reviewed-by: honkar, prr
2025-07-07 19:32:17 +00:00
Chris Plummer
39c9de2ace 8359958: Cleanup "local" debuggee references after JDK-8333117 removed support for non-local debuggees
Reviewed-by: lmesnik, sspitsyn, amenkov
2025-07-07 18:50:00 +00:00
Vicente Romero
05c9eec8d0 8361214: An anonymous class is erroneously being classify as an abstract class
Reviewed-by: liach, mcimadamore
2025-07-07 14:56:53 +00:00
Richard Reingruber
fea73c1d40 8360599: [TESTBUG] DumpThreadsWithEliminatedLock.java fails because of unstable inlining
Reviewed-by: alanb, mdoerr, lmesnik
2025-07-07 13:21:11 +00:00
Roger Riggs
afb4a1be9e 8354872: Clarify java.lang.Process resource cleanup
Reviewed-by: jpai
2025-07-07 12:43:28 +00:00
ANUPAM DEV
7c13a2cd9a 8361463: Render method of javax.swing.text.AbstractDocument uses 'currency' instead of 'concurrency'
Reviewed-by: psadhukhan, tr, abhiscxk, aivanov
2025-07-07 12:15:44 +00:00
Andrew Haley
4df9c87345 8360884: Better scoped values
Reviewed-by: liach, alanb
2025-07-07 09:16:39 +00:00
Christian Stein
9449fea2cd 8358552: EndOfFileException in System.in.read() and IO.readln() etc. in JShell
Reviewed-by: jlahoda
2025-07-07 08:59:50 +00:00
Aleksey Shipilev
1fa772e814 8343546: GHA: Cache required dependencies in master-branch workflow
Reviewed-by: ihse
2025-07-07 08:24:24 +00:00
Daniel Fuchs
8ad4836883 8361249: PlainHttpConnection connection logic can be simplified
Reviewed-by: djelinski, vyazici, michaelm, jpai
2025-07-07 08:22:05 +00:00
Xiaohong Gong
d75ea7e679 8355563: VectorAPI: Refactor current implementation of subword gather load API
Reviewed-by: epeter, psandoz, sviswanathan, jbhateja
2025-07-07 06:52:29 +00:00
Artem Semenov
e9a434165a 8360664: Null pointer dereference in src/hotspot/share/prims/jvmtiTagMap.cpp in IterateOverHeapObjectClosure::do_object()
Found by Linux Verification Center (linuxtesting.org) with SVACE.
Signed-off-by: Artem Semenov <savoptik@altlinux.org>.

Reviewed-by: sspitsyn, amenkov, cjplummer
2025-07-07 06:11:50 +00:00
hanguanqiang
45300dd123 8358568: Purge obsolete/broken GenerateSynchronizationCode flag
Reviewed-by: thartmann, shade
2025-07-07 05:22:44 +00:00
Anass Baya
44cff9d6ab 8346952: GetGraphicsStressTest.java fails: Native resources unavailable
Reviewed-by: serb
2025-07-07 04:58:17 +00:00
David Holmes
3bcbcc5747 8361439: [BACKOUT] 8357601: Checked version of JNI Release<type>ArrayElements needs to filter out known wrapped arrays
Reviewed-by: lmesnik
2025-07-06 21:45:03 +00:00
Erik Gahlin
f3e0588d0b 8361338: JFR: Min and max time in MethodTime event is confusing
Reviewed-by: mgronlun
2025-07-06 15:21:35 +00:00
Nizar Benalla
f2d2eef988 8177100: APIs duplicated in JavaDoc
Reviewed-by: liach, hannesw
2025-07-04 15:10:22 +00:00
Srinivas Vamsi Parasa
1c560727b8 8360775: Fix Shenandoah GC test failures when APX is enabled
Reviewed-by: sviswanathan, jbhateja, epeter
2025-07-04 15:08:57 +00:00
Manuel Hässig
f153e415d7 8361253: CommandLineOptionTest library should report observed values on failure
Reviewed-by: dholmes, shade
2025-07-04 13:06:36 +00:00
Magnus Ihse Bursie
fba74f796e 8361306: jdk.compiler-gendata needs to depend on java.base-launchers
Reviewed-by: shade
2025-07-04 12:19:24 +00:00
Jonas Norlinder
56ebb8c1b9 8359110: Log accumulated GC and process CPU time upon VM exit
Co-authored-by: Erik Österlund <eosterlund@openjdk.org>
Co-authored-by: Jonas Norlinder <jnorlinder@openjdk.org>
Reviewed-by: tschatzl, ayang
2025-07-04 10:16:55 +00:00
Doug Simon
5cf349c3b0 8361355: Negative cases of Annotated.getAnnotationData implementations are broken
Reviewed-by: never
2025-07-04 07:37:20 +00:00
Kim Barrett
21f2e9a71c 8344332: (bf) Migrate DirectByteBuffer away from jdk.internal.ref.Cleaner
Reviewed-by: rriggs, bchristi
2025-07-04 04:08:42 +00:00
Ioi Lam
854de8c9c6 8336147: Clarify CDS documentation about static vs dynamic archive
Reviewed-by: ccheung, shade
2025-07-03 23:54:05 +00:00
Manukumar V S
16af473397 8361115: javax/swing/JComboBox/bug4276920.java unnecessarily throws Error instead of RuntimeException
Reviewed-by: prr
2025-07-03 22:32:23 +00:00
David Holmes
da0a51ce97 8357601: Checked version of JNI Release<type>ArrayElements needs to filter out known wrapped arrays
Reviewed-by: coleenp, jsjolen
2025-07-03 21:02:28 +00:00
Chen Liang
566279af49 8360022: ClassRefDupInConstantPoolTest.java fails when running in repeat
Reviewed-by: vromero
2025-07-03 20:49:05 +00:00
Erik Gahlin
77e69e02eb 8358750: JFR: EventInstrumentation MASK_THROTTLE* constants should be computed in longs
Reviewed-by: mgronlun
2025-07-03 20:01:33 +00:00
Eric Caspole
dcc7254a38 8361213: J2DAnalyzer should emit the score as a decimal
Reviewed-by: prr
2025-07-03 19:43:30 +00:00
Calvin Cheung
003be0dee2 8361325: Refactor ClassLoaderExt
Reviewed-by: coleenp, sspitsyn
2025-07-03 19:40:22 +00:00
Brian Burkhalter
2d9f0324ba 8360028: (fs) Path.relativize throws StringIndexOutOfBoundsException (win)
Reviewed-by: alanb
2025-07-03 18:53:59 +00:00
Archie Cobbs
25ed36f3ef 8359493: Refactor how aggregated mandatory warnings are handled in the compiler
8350514: Refactor MandatoryWarningHandler to support dynamic verbosity

Reviewed-by: mcimadamore
2025-07-03 18:13:07 +00:00
Evgeny Nikitin
a2315ddd2a 8357739: [jittester] disable the hashCode method
Reviewed-by: lmesnik
2025-07-03 16:58:30 +00:00
Ioi Lam
66836d40b8 8361292: Rename ModuleEntry::module() to module_oop()
Reviewed-by: coleenp, ccheung, sspitsyn
2025-07-03 16:52:19 +00:00
Ioi Lam
3daa03c30f 8358680: AOT cache creation fails: no strings should have been added
Co-authored-by: Aleksey Shipilev <shade@openjdk.org>
Reviewed-by: coleenp, shade
2025-07-03 15:31:34 +00:00
Rajat Mahajan
24117c6e9a 8349188: LineBorder does not scale correctly
Co-authored-by: Alexey Ivanov <aivanov@openjdk.org>
Reviewed-by: aivanov, serb
2025-07-03 14:24:52 +00:00
Thomas Schatzl
5e40fb6bda 8277394: Remove the use of safepoint_workers in reference processor
Co-authored-by: Albert Mingkun Yang <ayang@openjdk.org>
Reviewed-by: ayang, iwalulya
2025-07-03 11:43:35 +00:00
Matthias Baesken
2528c620a6 8361198: [AIX] fix misleading error output in thread_cpu_time_unchecked
Reviewed-by: mdoerr, azeller
2025-07-03 11:35:54 +00:00
Jaikiran Pai
1be29bd725 8361060: Keep track of the origin server against which a jdk.internal.net.http.HttpConnection was constructed
Reviewed-by: dfuchs
2025-07-03 09:32:09 +00:00
Jatin Bhateja
2f683fdc4a 8361037: [ubsan] compiler/c2/irTests/TestFloat16ScalarOperations division by 0
Reviewed-by: mhaessig, sviswanathan
2025-07-03 08:03:55 +00:00
Benoît Maillard
c75df634be 8359602: Ideal optimizations depending on input type are missed because of missing notification mechanism from CCP
Reviewed-by: epeter, thartmann
2025-07-03 07:28:11 +00:00
Jan Lahoda
fd13e1ce98 8358801: javac produces class that does not pass verifier.
Reviewed-by: mcimadamore, liach
2025-07-03 07:17:59 +00:00
Thomas Schatzl
6c9236c80c 8361238: G1 tries to get CPU info from terminated threads at shutdown
Reviewed-by: kbarrett, sangheki
2025-07-03 06:59:00 +00:00
Takuya Kiriyama
1926aeb1a3 8352016: Improve java/lang/RuntimeTests/RuntimeExitLogTest.java
Reviewed-by: rriggs
2025-07-03 06:47:11 +00:00
Boris Ulasevich
74822ce12a 8358183: [JVMCI] crash accessing nmethod::jvmci_name in CodeCache::aggregate
Reviewed-by: eastigeevich, phh
2025-07-02 21:15:46 +00:00
Yudi Zheng
ea86a20e6d 8357424: [JVMCI] Avoid incrementing decompilation count for hosted compiled nmethod
Reviewed-by: dnsimon, never, cslucas
2025-07-02 18:38:31 +00:00
Jatin Bhateja
5e30bf6835 8360116: Add support for AVX10 floating point minmax instruction
Reviewed-by: mhaessig, sviswanathan
2025-07-02 17:47:20 +00:00
Hamlin Li
c50370599e 8360090: [TEST] RISC-V: disable some cds tests on qemu
Reviewed-by: lmesnik, rehn
2025-07-02 17:16:12 +00:00
Martin Doerr
c460f842bf 8361183: JDK-8360887 needs fixes to avoid cycles and better tests (aix)
Co-authored-by: Alan Bateman <alanb@openjdk.org>
Reviewed-by: alanb, jkern
2025-07-02 15:31:29 +00:00
Joe Darcy
549b875866 8361112: Use exact float -> Float16 conversion method in Float16 tests
Reviewed-by: liach, rgiulietti
2025-07-02 15:24:29 +00:00
Albert Mingkun Yang
832bfbc0dd 8338474: Parallel: Deprecate and obsolete PSChunkLargeArrays
Reviewed-by: tschatzl, kbarrett
2025-07-02 13:39:16 +00:00
Ashutosh Mehra
3066a67e62 8361101: AOTCodeAddressTable::_stubs_addr not initialized/freed properly
Reviewed-by: kvn, shade
2025-07-02 13:25:00 +00:00
Taizo Kurashige
ce9986991d 8359120: Improve warning message when fail to load hsdis library
Reviewed-by: mhaessig, thartmann
2025-07-02 09:21:57 +00:00
Saranya Natarajan
eac8f5d2c9 8325478: Restructure the macro expansion compiler phase to not include macro elimination
Reviewed-by: kvn, dlunden
2025-07-02 08:38:31 +00:00
Manuel Hässig
2304044ab2 8360641: TestCompilerCounts fails after 8354727
Reviewed-by: kvn, dfenacci, mdoerr
2025-07-02 08:35:51 +00:00
Anton Artemov
0f1cd987b3 8284016: Normalize handshake closure names
Reviewed-by: coleenp, sspitsyn
2025-07-02 06:49:36 +00:00
Aleksey Shipilev
1ac7489874 8361180: Disable CompiledDirectCall verification with -VerifyInlineCaches
Reviewed-by: kvn, thartmann
2025-07-02 05:38:28 +00:00
Ioi Lam
055d2ffa69 8361215: Add AOT test case: verification constraint classes are excluded
Reviewed-by: ccheung
2025-07-02 04:24:55 +00:00
Prasanta Sadhukhan
2bff8e0a13 8360462: [macosx] row selection not working with Ctrl+Shift+Down/Up in AquaL&F
Reviewed-by: dnguyen, abhiscxk
2025-07-02 03:07:07 +00:00
Kim Barrett
c6448dc3af 8361086: JVMCIGlobals::check_jvmci_flags_are_consistent has incorrect format string
Reviewed-by: kvn, mhaessig, yzheng
2025-07-02 00:28:24 +00:00
Kim Barrett
1703915d3f 8361085: MemoryReserver log_on_large_pages_failure has incorrect format usage
Reviewed-by: stefank, dholmes
2025-07-02 00:25:26 +00:00
Kim Barrett
a910b20b51 8346914: UB issue in scalbnA
Reviewed-by: aph, tschatzl
2025-07-02 00:17:19 +00:00
Ioi Lam
7d7e60c8ae 8360164: AOT cache creation crashes in ~ThreadTotalCPUTimeClosure()
Reviewed-by: ccheung, kvn, dholmes
2025-07-01 20:22:13 +00:00
Calvin Cheung
534d2b33dc 8357064: cds/appcds/ArchiveRelocationTest.java failed with missing expected output
Reviewed-by: shade, iklam
2025-07-01 19:52:06 +00:00
Daniel Jeliński
e9a62d79cd 8361125: Fix typo in onTradAbsence
Reviewed-by: hchao, mullan, shade
2025-07-01 19:19:25 +00:00
Kevin Walls
13a3927855 8359870: JVM crashes in AccessInternal::PostRuntimeDispatch
Reviewed-by: amenkov, dholmes, sspitsyn
2025-07-01 19:07:49 +00:00
Leonid Mesnik
282ee40a56 8359366: RunThese30M.java EXCEPTION_ACCESS_VIOLATION in JvmtiBreakpoints::clearall_in_class_at_safepoint
Reviewed-by: coleenp, dholmes, sspitsyn
2025-07-01 17:22:33 +00:00
Coleen Phillimore
e7a450038a 8359707: Add classfile modification code to RedefineClassHelper
Reviewed-by: lmesnik, dholmes, sspitsyn
2025-07-01 17:14:36 +00:00
Mohamed Issa
38f59f84c9 8358179: Performance regression in Math.cbrt
Reviewed-by: sviswanathan, sparasa, epeter
2025-07-01 15:34:37 +00:00
Jaikiran Pai
e1681c4828 8359477: com/sun/net/httpserver/Test12.java appears to have a temp file race
Reviewed-by: dfuchs, vyazici
2025-07-01 15:32:26 +00:00
Aleksey Shipilev
e138297323 8359436: AOTCompileEagerly should not be diagnostic
Reviewed-by: kvn, syan, dholmes
2025-07-01 14:30:20 +00:00
Jaikiran Pai
7583a7b857 8359337: XML/JAXP tests that make network connections should ensure that no proxy is selected
Reviewed-by: lancea, iris, joehw
2025-07-01 11:39:20 +00:00
Thomas Schatzl
e85c7d09df 8360790: G1: Improve HRRSStatsIter name
Reviewed-by: kbarrett, ayang
2025-07-01 10:40:33 +00:00
Albert Mingkun Yang
eec1153993 8361056: Parallel: Use correct is_par argument in ScavengeRootsTask
Reviewed-by: tschatzl
2025-07-01 10:14:25 +00:00
Albert Mingkun Yang
fc739fee53 8360206: Refactor ReferenceProcessor::balance_queues
Reviewed-by: sangheki, kbarrett, tschatzl
2025-07-01 10:13:17 +00:00
Matthias Baesken
aeca49e43f 8360791: [ubsan] Adjust signal handling
Reviewed-by: ihse, lucy
2025-07-01 09:56:42 +00:00
Matthias Baesken
54c95cf226 8361043: [ubsan] os::print_hex_dump runtime error: applying non-zero offset 8 to null pointer
Reviewed-by: mdoerr, lucy
2025-07-01 09:19:35 +00:00
Aleksey Shipilev
cd6caedd0a 8360783: CTW: Skip deoptimization between tiers
Reviewed-by: thartmann, mhaessig, dfenacci
2025-07-01 07:58:12 +00:00
Manuel Hässig
b32ccf2cb2 8361092: Remove trailing spaces in x86 ad files
Reviewed-by: kvn, sviswanathan
2025-07-01 06:47:48 +00:00
Martin Doerr
0572b6ece7 8360887: (fs) Files.getFileAttributeView returns unusable FileAttributeView if UserDefinedFileAttributeView unavailable (aix)
Co-authored-by: Joachim Kern <jkern@openjdk.org>
Reviewed-by: bpb, mbaesken
2025-07-01 06:09:50 +00:00
Anass Baya
d1052c70cb 8355478: DoubleActionESC.java fails intermittently
Reviewed-by: aivanov, abhiscxk
2025-07-01 04:40:43 +00:00
Xueming Shen
61a590e9be 8354490: Pattern.CANON_EQ causes a pattern to not match a string with a UNICODE variation
Reviewed-by: rriggs, naoto
2025-07-01 00:58:43 +00:00
Calvin Cheung
9d518b3213 8310831: Some methods are missing from CDS regenerated JLI holder class
Reviewed-by: iklam, liach
2025-06-30 17:52:28 +00:00
Calvin Cheung
1dda79cfab 8360743: Enables regeneration of JLI holder classes for CDS static dump
Reviewed-by: iklam, liach
2025-06-30 17:51:20 +00:00
Aleksey Shipilev
aa1911191c 8360867: CTW: Disable inline cache verification
Reviewed-by: kvn, thartmann
2025-06-30 12:55:36 +00:00
Thomas Schatzl
00adbbe553 8274051: Remove supports_vtime()/elapsedVTime()
Reviewed-by: kbarrett, iwalulya
2025-06-30 11:22:46 +00:00
Tobias Hartmann
c2d76f9844 8361032: Problem list TestOnSpinWaitAArch64 until JDK-8360936 is fixed
Reviewed-by: alanb
2025-06-30 05:41:37 +00:00
Jaikiran Pai
4dd1b3a610 8330940: Impossible to create a socket backlog greater than 200 on Windows 8+
Reviewed-by: michaelm, dfuchs, alanb
2025-06-30 01:58:54 +00:00
Sergey Bylokhov
240541e1c1 8359266: Delete the usage of AppContext in the GraphicsDevice
Reviewed-by: aivanov, azvegint
2025-06-29 19:44:01 +00:00
Matthias Baesken
a23de2ec09 8360478: libjsig related tier3 jtreg tests fail when asan is configured
Reviewed-by: dholmes, ihse
2025-06-27 19:10:02 +00:00
Archie Cobbs
3525a40f39 8359596: Behavior change when both -Xlint:options and -Xlint:-options flags are given
Reviewed-by: mcimadamore, uschindler
2025-06-27 18:25:27 +00:00
Chris Plummer
712d866b72 8360312: Serviceability Agent tests fail with JFR enabled due to unknown thread type JfrRecorderThread
Reviewed-by: sspitsyn, kevinw, dholmes
2025-06-27 17:19:22 +00:00
Alisen Chung
da7080fffb 8359761: JDK 25 RDP1 L10n resource files update
Reviewed-by: aivanov, almatvee, nbenalla, jlu, dnguyen, cstein, naoto
2025-06-27 16:13:03 +00:00
Coleen Phillimore
4edf791aec 8295851: Do not use ttyLock in BytecodeTracer::trace
Reviewed-by: dholmes, matsaave
2025-06-27 16:11:41 +00:00
Kevin Walls
12196baf67 8358624: ImmutableDescriptor violates equals/hashCode contract after deserialization
Reviewed-by: cjplummer, sspitsyn
2025-06-27 14:54:12 +00:00
Artur Barashev
a471fe992f 8360539: DTLS handshakes fails due to improper cookie validation logic
Reviewed-by: ascarpino, hchao
2025-06-27 14:15:55 +00:00
Shaojin Wen
839cede1a4 8357289: Break down the String constructor into smaller methods
Reviewed-by: liach, rriggs
2025-06-27 14:06:12 +00:00
Evgeny Astigeevich
ecd2d83096 8359435: AArch64: add support for SB instruction to MacroAssembler::spin_wait
Reviewed-by: shade, aph
2025-06-27 12:49:20 +00:00
Coleen Phillimore
d8f9b188fa 8268406: Deallocate jmethodID native memory
Reviewed-by: dholmes, sspitsyn, dcubed, eosterlund, aboldtch
2025-06-27 11:20:49 +00:00
Qizheng Xing
aa26cede63 8360474: Add missing include guards for some HotSpot headers
Reviewed-by: mhaessig, stefank, dholmes
2025-06-27 08:17:13 +00:00
Andrey Turbanov
20e983a97c 8360487: Remove unnecessary List.indexOf key from AbstractMidiDevice.TransmitterList.remove
Reviewed-by: azvegint, serb, aivanov
2025-06-27 07:53:49 +00:00
Matthias Baesken
97ec9d3e0a 8360533: ContainerRuntimeVersionTestUtils fromVersionString fails with some docker versions
Reviewed-by: lucy, mdoerr, dholmes
2025-06-27 07:37:44 +00:00
Matthias Baesken
01b15bc1f9 8360518: Docker tests do not work when asan is configured
Reviewed-by: sgehwolf
2025-06-27 06:43:50 +00:00
Luigi Montoya
6d05a1d3f4 8357079: Fix Windows AArch64 DevKit Creation
Reviewed-by: erikj, ihse
2025-06-27 06:11:33 +00:00
Erik Gahlin
8ea544c33f 8360287: JFR: PlatformTracer class should be loaded lazily
Reviewed-by: mgronlun
2025-06-26 22:18:56 +00:00
David Holmes
334683e634 8358645: Access violation in ThreadsSMRSupport::print_info_on during thread dump
Reviewed-by: fbredberg, shade, dcubed
2025-06-26 21:48:46 +00:00
Ioi Lam
20e0055e20 8344165: Trace exceptions with a complete call-stack
Reviewed-by: coleenp, dholmes
2025-06-26 17:23:55 +00:00
Naoto Sato
83fe688d80 8360554: Use the title from the JSON RFC for the @spec tag
Reviewed-by: alanb, kevinw
2025-06-26 16:35:43 +00:00
Jatin Bhateja
a49ecb26c5 8352635: Improve inferencing of Float16 operations with constant inputs
Reviewed-by: epeter, sviswanathan
2025-06-26 15:42:43 +00:00
Kim Barrett
7f702cf483 8360458: Rename Deferred<> to DeferredStatic<> and improve usage description
Reviewed-by: jsikstro, jsjolen, stefank
2025-06-26 15:12:35 +00:00
Ivan Walulya
bd666f90eb 8360522: G1: Flag constraint functions for G1SATBBufferSize and G1UpdateBufferSize are skipped during argument validation
Reviewed-by: tschatzl, ayang
2025-06-26 15:01:56 +00:00
Kelvin Nilsen
a0c3efa6a8 8359947: GenShen: use smaller TLABs by default
Reviewed-by: phh, xpeng
2025-06-26 14:36:33 +00:00
Damon Nguyen
7576064a10 8359061: Update and ProblemList manual test java/awt/Cursor/CursorDragTest/ListDragCursor.java
Reviewed-by: honkar, aivanov
2025-06-26 14:09:27 +00:00
Jaikiran Pai
8df6b2c4a3 8359830: Incorrect os.version reported on macOS Tahoe 26 (Beta)
Reviewed-by: rriggs, lancea, kcr
2025-06-26 13:37:13 +00:00
Doug Lea
ff24088c86 8359919: Minor java.util.concurrent doc improvements
8187775: AtomicReferenceFieldUpdater does not support static fields
8254060: SubmissionPublisher close hangs if a publication is pending
8210149: Example in JavaDoc for java.util.concurrent.Flow violates Reactive Streams spec
8199501: Improve documentation of CompletableFuture, CompletionStage
8233050: CompletableFuture `whenComplete` and `thenApply` change exceptional result
8210312: JavaDoc example in SubmissionPublisher will potentially crash
8292365: CompletableFuture and CompletionStage should document Memory Model guarantees
8356304: Define "enabled" in ScheduledExecutorService
8353155: FutureTask#run(): doc implies synchronous, implementation is async
8186959: Clarify that Executors.newScheduledThreadPool() is fixed-size
8190889: TimeUnit.wait should document IllegalMonitorStateException
6351533: CyclicBarrier reset() should return the number of awaiters
6317534: CyclicBarrier should have a cancel() method
8195628: Documentation for lock(), trylock(), lockInterruptibly​()  of ReentrantReadWriteLock.WriteLock needs to be corrected
8333172: Document a recommendation to use VarHandles instead of java.util.concurrent.atomic.*FieldUpdater
6374942: Improve thread safety of collection .equals() methods
7176957: ExecutorService submit method javaDoc enhancement
8172177: Improve documentation for CompletionException handling
6714849: ReentrantReadWriteLock: Abnormal behavior in non-fair mode
6625724: Allow ReentrantReadWriteLock to not track per-thread read holds
6526284: Improve AbstractExecutorService javadoc
8137156: Javadoc for Future is misleading with respect to cancellation
6663476: FutureTask.get() may return null if set() is not called from run()
8311131: ConcurrentHashMap.forEachKey parallelismThreshold description could be clearer

Reviewed-by: alanb
2025-06-26 12:04:42 +00:00
Albert Mingkun Yang
5a1301df19 8360548: Parallel: Remove outdated comments in MutableNUMASpace::bias_region
Reviewed-by: tschatzl
2025-06-26 09:15:32 +00:00
Anton Artemov
5039b42de1 8359437: Make users and test suite not able to set LockingMode flag
8358542: Remove RTM test VMProps

Co-authored-by: Fredrik Bredberg <fbredberg@openjdk.org>
Reviewed-by: coleenp, lmesnik, fbredberg, alanb, dholmes
2025-06-26 07:41:22 +00:00
David Holmes
1ca008fd02 8360255: runtime/jni/checked/TestLargeUTF8Length.java fails with -XX:-CompactStrings
Reviewed-by: shade, kbarrett
2025-06-26 01:02:03 +00:00
Dean Long
cf75f1f9c6 8358821: patch_verified_entry causes problems, use nmethod entry barriers instead
Co-authored-by: Martin Doerr <mdoerr@openjdk.org>
Co-authored-by: Amit Kumar <amitkumar@openjdk.org>
Reviewed-by: mdoerr, eosterlund
2025-06-25 19:25:34 +00:00
Serguei Spitsyn
52526080ba 8225354: serviceability/jvmti/ModuleAwareAgents/ThreadStart failed with Didn't get ThreadStart events in VM early start phase!
Reviewed-by: amenkov, cjplummer
2025-06-25 19:21:14 +00:00
Chen Liang
f799cf180a 8360303: Remove two unused invoke files
Reviewed-by: rriggs, jrose
2025-06-25 18:48:47 +00:00
Kim Barrett
56c75453cd 8352565: Add native method implementation of Reference.get()
Reviewed-by: vlivanov, tschatzl, lmesnik
2025-06-25 18:22:06 +00:00
Naoto Sato
7447276475 8360045: StringTokenizer.hasMoreTokens() throws NPE after nextToken(null)
Reviewed-by: liach, alanb
2025-06-25 16:02:47 +00:00
Paul Hohensee
c90c31b07e 8279005: sun/tools/jstat tests do not check for test case exit codes after JDK-8245129
Reviewed-by: cjplummer, rkennke
2025-06-25 15:52:30 +00:00
Suchismith Roy
52c6044fe4 8349077: Rename GenerationCounters::update_all
Reviewed-by: ayang, stefank
2025-06-25 15:39:57 +00:00
Albert Mingkun Yang
4e1bf31368 8360523: Parallel: Remove unused local variable in MutableNUMASpace::initialize
Reviewed-by: stefank, kbarrett
2025-06-25 15:36:02 +00:00
Kim Barrett
878497fb85 8360178: TestArguments.atojulong gtest has incorrect format string
Reviewed-by: dholmes
2025-06-25 15:16:44 +00:00
Manuel Hässig
f2ef809719 8354727: CompilationPolicy creates too many compiler threads when code cache space is scarce
Co-authored-by: Aleksey Shipilev <shade@openjdk.org>
Reviewed-by: kvn, shade
2025-06-25 13:00:08 +00:00
Michael McMahon
1fa090524a 8359268: 3 JNI exception pending defect groups in 2 files
Reviewed-by: djelinski
2025-06-25 09:45:57 +00:00
Martin Doerr
f71d64fbeb 8360405: [PPC64] some environments don't support mfdscr instruction
Reviewed-by: haosun, rrich
2025-06-25 08:59:46 +00:00
Casper Norrbin
850bc20306 8356868: Not all cgroup parameters are made available
Reviewed-by: sgehwolf, gziemski
2025-06-25 08:32:51 +00:00
Roman Kennke
75ce44aa84 8355319: Update Manpage for Compact Object Headers (Production)
Reviewed-by: coleenp, dholmes, phh
2025-06-25 08:09:03 +00:00
Igor Veresov
5c4f92ba9a 8359788: Internal Error: assert(get_instanceKlass()->is_loaded()) failed: must be at least loaded
Reviewed-by: kvn, thartmann
2025-06-25 06:45:32 +00:00
Amit Kumar
263e32bb85 8358694: VM asserts if CodeCacheSegmentSize is not a power of 2
Reviewed-by: shade, dfenacci
2025-06-25 04:39:07 +00:00
Xiaohong Gong
7d6c902ce8 8357726: Improve C2 to recognize counted loops with multiple casts in trip counter
Reviewed-by: chagedorn, epeter, galder
2025-06-25 01:16:08 +00:00
Brian Burkhalter
5091057614 8351010: Test java/io/File/GetXSpace.java failed: / usable space 56380809216 > free space 14912244940
Reviewed-by: lancea, rriggs
2025-06-24 23:50:35 +00:00
David Beaumont
ba0c12231b 8359808: JavaRuntimeURLConnection should only connect to non-directory resources
Reviewed-by: alanb, rriggs
2025-06-24 18:40:24 +00:00
Markus Grönlund
cbcf401170 8360403: Disable constant pool ID assert during troubleshooting
Reviewed-by: egahlin
2025-06-24 16:11:40 +00:00
Hannes Wallnöfer
f8de5bc582 8328848: Inaccuracy in the documentation of the -group option
Reviewed-by: liach
2025-06-24 15:50:51 +00:00
Hannes Wallnöfer
9a726df373 8359024: Accessibility bugs in API documentation
Reviewed-by: vyazici, liach
2025-06-24 15:48:31 +00:00
Artur Barashev
2af869b193 8156715: TrustStoreManager does not buffer keystore input stream
Reviewed-by: ascarpino
2025-06-24 15:32:13 +00:00
Aleksey Shipilev
5c1f77fab1 8360201: JFR: Initialize JfrThreadLocal::_sampling_critical_section
Reviewed-by: zgu, mgronlun
2025-06-24 15:05:40 +00:00
Gautham Krishnan
54acadbe66 8294226: Document missing UnsupportedTemporalTypeException
Reviewed-by: rriggs, naoto
2025-06-24 14:53:14 +00:00
Kim Barrett
0514cee6c8 8360177: ParallelArguments::initialize has incorrect format string
Reviewed-by: tschatzl, sangheki
2025-06-24 14:27:47 +00:00
Coleen Phillimore
28e96e333b 8359920: Use names for frame types in stackmaps
Reviewed-by: dholmes, jsjolen, matsaave, sspitsyn
2025-06-24 12:31:04 +00:00
Afshin Zafari
f5201ac117 8359959: Test runtime/NMT/VirtualAllocTestType.java failed: '\\[0x[0]*7f7dc4043000 - 0x[0]*7f7dc4083000\\] reserved 256KB for Test' missing from stdout/stderr
Reviewed-by: jsjolen, dholmes
2025-06-24 11:17:48 +00:00
Albert Mingkun Yang
a3609ba5ac 8360324: Parallel: Remove unused local variable in MutableNUMASpace::set_top
Reviewed-by: tschatzl
2025-06-24 10:34:14 +00:00
Michael McMahon
116b8543b0 8351983: HttpCookie Parser Incorrectly Handles Cookies with Expires Attribute
Reviewed-by: dfuchs, vyazici
2025-06-24 09:15:58 +00:00
David Beaumont
fdfc557878 8360131: Remove use of soon-to-be-removed APIs by CTW framework
Reviewed-by: liach, thartmann
2025-06-24 08:09:53 +00:00
Albert Mingkun Yang
54fec2b98b 8360220: Deprecate and obsolete ParallelRefProcBalancingEnabled
Reviewed-by: kbarrett, tschatzl
2025-06-24 07:34:15 +00:00
Manuel Hässig
03d66d9ee2 8358572: C1 hits "need debug information" assert with -XX:-DeoptC1
Reviewed-by: shade, aph
2025-06-24 07:00:45 +00:00
Manuel Hässig
f6ff38ab42 8353815: [ubsan] compilationPolicy.cpp: division by zero related to tiered compilation flags
Reviewed-by: mbaesken, kvn
2025-06-24 06:55:05 +00:00
Daniel Jeliński
dbbfa76b73 8131136: java/awt/font/JNICheck/JNICheck.sh issue warning on core-libs code
Reviewed-by: aivanov, prr, serb
2025-06-24 06:09:17 +00:00
Jaikiran Pai
9af36b13c5 8360307: Problemlist tools/sincechecker/modules/jdk.management.jfr/JdkManagementJfrCheckSince.java
Reviewed-by: dholmes, liach
2025-06-24 05:19:18 +00:00
Anjian Wen
34412da52b 8360179: RISC-V: Only enable BigInteger intrinsics when AvoidUnalignedAccess == false
Reviewed-by: fjiang, fyang
2025-06-24 03:08:50 +00:00
Chad Rakoczy
a350a1115a 8358655: AArch64: Simplify Interpreter::profile_taken_branch
Reviewed-by: shade, aph
2025-06-24 02:34:53 +00:00
Manukumar V S
bcad87eacb 8358697: TextLayout/MyanmarTextTest.java passes if no Myanmar font is found
Reviewed-by: aivanov
2025-06-24 02:20:49 +00:00
Nizar Benalla
2a70a6dc58 8346886: Add since checker test to jdk.management.jfr
Reviewed-by: egahlin
2025-06-23 22:24:57 +00:00
Kim Barrett
6df0f5e390 8360281: VMError::error_string has incorrect format usage
Reviewed-by: coleenp
2025-06-23 18:19:01 +00:00
Naoto Sato
9c3eaa49f7 8359732: Make standard i/o encoding related system properties StaticProperty
Reviewed-by: rriggs, alanb, vyazici
2025-06-23 16:16:28 +00:00
Justin Lu
dfcea0547e 8358729: jdk/internal/loader/URLClassPath/ClassnameCharTest.java depends on Applet
Reviewed-by: jpai, lancea
2025-06-23 14:26:02 +00:00
Jonas Norlinder
c748d358b2 8360024: Reorganize GC VM operations and implement is_gc_operation
Reviewed-by: tschatzl, dholmes
2025-06-23 12:49:59 +00:00
Aleksey Shipilev
72679c94ee 8360042: GHA: Bump MSVC to 14.44
Reviewed-by: erikj, ihse
2025-06-23 12:46:32 +00:00
Erik Gahlin
10e6eec9e6 8360039: JFR: Improve parser logging of constants
Reviewed-by: mgronlun
2025-06-23 11:09:11 +00:00
Nikita Gubarkov
251f2ac785 8355904: Use variadic macros for J2dTrace
Reviewed-by: aivanov, serb, prr, avu
2025-06-23 10:52:07 +00:00
Andrey Turbanov
fe7ec31259 8359996: Remove unnecessary List.indexOf key from Track.remove
Reviewed-by: aivanov, liach, azvegint
2025-06-23 08:32:02 +00:00
Albert Mingkun Yang
516197f50b 8359924: Deprecate and obsolete ParallelRefProcEnabled
Reviewed-by: tschatzl, kbarrett, dholmes
2025-06-23 08:27:13 +00:00
Dingli Zhang
ad1033d68f 8360169: Problem list CodeInvalidationReasonTest.java on linux-riscv64 until JDK-8360168 is fixed
Reviewed-by: fyang, fjiang, syan, dnsimon
2025-06-23 08:02:40 +00:00
Benoît Maillard
c220b1358c 8356865: C2: Unreasonable values for debug flag FastAllocateSizeLimit can lead to left-shift-overflow, which is UB
Reviewed-by: epeter, mhaessig
2025-06-23 07:52:02 +00:00
Manuel Hässig
9ae39b62b9 8355276: Sort C2 includes
Reviewed-by: kvn, thartmann
2025-06-23 07:47:17 +00:00
Johan Sjölen
3d35b408e1 8357220: Introduce a BSMAttributeEntry struct
Co-authored-by: John R Rose <jrose@openjdk.org>
Reviewed-by: sspitsyn, coleenp, matsaave
2025-06-23 07:05:33 +00:00
Srinivas Mandalika
de34bb8e66 8359687: Use PassFailJFrame for java/awt/print/Dialog/DialogType.java
Reviewed-by: abhiscxk, aivanov
2025-06-23 04:54:43 +00:00
Anjian Wen
620df7ec34 8359801: RISC-V: Simplify Interpreter::profile_taken_branch
Reviewed-by: fyang, fjiang
2025-06-23 02:31:53 +00:00
Fei Yang
6b4393917a 8359270: C2: alignment check should consider base offset when emitting arraycopy runtime call
Reviewed-by: thartmann, kvn
2025-06-23 00:33:34 +00:00
Phil Race
81985d422d 8358526: Clarify behavior of java.awt.HeadlessException constructed with no-args
Reviewed-by: aivanov, honkar
2025-06-20 22:22:41 +00:00
Daniel D. Daugherty
d627282f0c 8360143: ProblemList runtime/NMT/VirtualAllocTestType.java
Reviewed-by: rriggs
2025-06-20 19:53:17 +00:00
Kim Barrett
96f71a9a6b 8255082: HotSpot Style Guide should permit noexcept
Reviewed-by: kvn, dholmes, dcubed
2025-06-20 19:48:41 +00:00
William Kemper
17cf49746d 8357550: GenShen crashes during freeze: assert(!chunk->requires_barriers()) failed
Reviewed-by: kdnilsen, shade
2025-06-20 17:08:08 +00:00
Vladimir Petko
c6ab63d306 8359735: [Ubuntu 25.10] java/lang/ProcessBuilder/Basic.java, java/lang/ProcessHandle/InfoTest.java fail due to rust-coreutils
Reviewed-by: rriggs
2025-06-20 13:51:55 +00:00
Doug Simon
ff54a6493a 8360049: CodeInvalidationReasonTest.java fails with ZGC on AArch64
Reviewed-by: aph, shade
2025-06-20 13:25:38 +00:00
Roland Westrelin
c11f36e620 8356708: C2: loop strip mining expansion doesn't take sunk stores into account
Reviewed-by: rcastanedalo, epeter
2025-06-20 11:24:17 +00:00
Shruthi
8f121a173c 8317801: java/net/Socket/asyncClose/Race.java fails intermittently (aix)
Reviewed-by: alanb, jkern
2025-06-20 10:13:01 +00:00
Tobias Hartmann
33970629ac 8360069: Problem list CodeInvalidationReasonTest.java until JDK-8360049 is fixed
Reviewed-by: dholmes
2025-06-20 05:35:10 +00:00
Prasanta Sadhukhan
c51bed739d 8335986: Test javax/swing/JCheckBox/4449413/bug4449413.java fails on Windows 11 x64 because RBMenuItem's and CBMenuItem's checkmark on the left side are not visible
Reviewed-by: tr
2025-06-20 03:09:57 +00:00
Manuel Hässig
a6464b74a8 8358578: Small -XX:NMethodSizeLimit triggers "not in CodeBuffer memory" assert in C1
Reviewed-by: kvn, syan, thartmann
2025-06-20 01:33:54 +00:00
Albert Mingkun Yang
0dd50dbb3e 8359825: Parallel: Simplify MutableNUMASpace::ensure_parsability
Reviewed-by: tschatzl, sangheki
2025-06-19 19:43:24 +00:00
William Kemper
dec42bebb8 8359394: GC cause cleanup
Reviewed-by: shade, ysr, stefank
2025-06-19 18:40:32 +00:00
Cesar Soares Lucas
2fe1298447 8359064: Expose reason for marking nmethod non-entrant to JVMCI client
Reviewed-by: dnsimon, never
2025-06-19 18:02:41 +00:00
Yudi Zheng
2e3bdec985 8358686: CDS and AOT can cause buffer truncation warning even when logging is disabled
Reviewed-by: dnsimon, iklam
2025-06-19 15:49:49 +00:00
Nizar Benalla
c4fb00a7be 8358769: Update --release 25 symbol information for JDK 25 build 26
Reviewed-by: darcy, iris
2025-06-19 10:38:24 +00:00
Kim Barrett
01d4b772de 8319242: HotSpot Style Guide should discourage non-local variables with non-trivial initialization or destruction
Reviewed-by: stefank, dcubed, dholmes
2025-06-19 10:20:49 +00:00
Manuel Hässig
c7125aa2af 8020282: Generated code quality: redundant LEAs in the chained dereferences
Co-authored-by: Roberto Castañeda Lozano <rcastanedalo@openjdk.org>
Reviewed-by: kvn, rcastanedalo
2025-06-19 09:36:29 +00:00
Ana Maria Mihalceanu
0dce98b716 8359123: Misleading examples in jmod man page
Reviewed-by: cstein, alanb, iris
2025-06-19 07:45:04 +00:00
2736 changed files with 75210 additions and 43719 deletions

View File

@@ -65,4 +65,4 @@ runs:
with:
name: bundles-jtreg-${{ steps.version.outputs.value }}
path: jtreg/installed
retention-days: 1
retention-days: 5

View File

@@ -30,15 +30,15 @@ runs:
using: composite
steps:
- name: 'Install MSYS2'
uses: msys2/setup-msys2@v2.22.0
id: msys2
uses: msys2/setup-msys2@v2.28.0
with:
install: 'autoconf tar unzip zip make'
path-type: minimal
location: ${{ runner.tool_cache }}/msys2
release: false
# We can't run bash until this is completed, so stick with pwsh
- name: 'Set MSYS2 path'
run: |
# Prepend msys2/msys64/usr/bin to the PATH
echo "$env:RUNNER_TOOL_CACHE/msys2/msys64/usr/bin" >> $env:GITHUB_PATH
echo "${{ steps.msys2.outputs.msys2-location }}/usr/bin" >> $env:GITHUB_PATH
shell: pwsh

View File

@@ -91,5 +91,5 @@ runs:
with:
name: bundles-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}${{ inputs.bundle-suffix }}
path: bundles
retention-days: 1
retention-days: 5
if: steps.bundles.outputs.bundles-found == 'true'

View File

@@ -51,6 +51,10 @@ on:
make-arguments:
required: false
type: string
dry-run:
required: false
type: boolean
default: false
jobs:
build-linux:
@@ -104,9 +108,11 @@ jobs:
make-target: '${{ inputs.make-target }} ${{ inputs.make-arguments }}'
platform: ${{ inputs.platform }}
debug-suffix: '${{ matrix.suffix }}'
if: ${{ inputs.dry-run == false }}
- name: 'Upload bundles'
uses: ./.github/actions/upload-bundles
with:
platform: ${{ inputs.platform }}
debug-suffix: '${{ matrix.suffix }}'
if: ${{ inputs.dry-run == false }}

View File

@@ -40,6 +40,10 @@ on:
make-arguments:
required: false
type: string
dry-run:
required: false
type: boolean
default: false
jobs:
build-cross-compile:
@@ -60,26 +64,26 @@ jobs:
gnu-arch: aarch64
debian-arch: arm64
debian-repository: https://httpredir.debian.org/debian/
debian-version: bullseye
debian-version: bookworm
tolerate-sysroot-errors: false
- target-cpu: arm
gnu-arch: arm
debian-arch: armhf
debian-repository: https://httpredir.debian.org/debian/
debian-version: bullseye
debian-version: bookworm
tolerate-sysroot-errors: false
gnu-abi: eabihf
- target-cpu: s390x
gnu-arch: s390x
debian-arch: s390x
debian-repository: https://httpredir.debian.org/debian/
debian-version: bullseye
debian-version: bookworm
tolerate-sysroot-errors: false
- target-cpu: ppc64le
gnu-arch: powerpc64le
debian-arch: ppc64el
debian-repository: https://httpredir.debian.org/debian/
debian-version: bullseye
debian-version: bookworm
tolerate-sysroot-errors: false
- target-cpu: riscv64
gnu-arch: riscv64
@@ -189,4 +193,4 @@ jobs:
with:
make-target: 'hotspot ${{ inputs.make-arguments }}'
platform: linux-${{ matrix.target-cpu }}
if: steps.create-sysroot.outcome == 'success' || steps.get-cached-sysroot.outputs.cache-hit == 'true'
if: ((steps.create-sysroot.outcome == 'success' || steps.get-cached-sysroot.outputs.cache-hit == 'true') && inputs.dry-run == false)

View File

@@ -61,6 +61,10 @@ on:
make-arguments:
required: false
type: string
dry-run:
required: false
type: boolean
default: false
bundle-suffix:
required: false
type: string
@@ -139,6 +143,7 @@ jobs:
make-target: '${{ inputs.make-target }} ${{ inputs.make-arguments }}'
platform: ${{ inputs.platform }}
debug-suffix: "${{ matrix.debug-level == 'debug' && '-debug' || '' }}"
if: ${{ inputs.dry-run == false }}
- name: 'Upload bundles'
uses: ./.github/actions/upload-bundles
@@ -147,3 +152,4 @@ jobs:
debug-suffix: "${{ matrix.debug-level == 'debug' && '-debug' || '' }}"
bundle-suffix: ${{ inputs.bundle-suffix }}
static-suffix: ${{ inputs.static-suffix }}
if: ${{ inputs.dry-run == false }}

View File

@@ -54,6 +54,10 @@ on:
make-arguments:
required: false
type: string
dry-run:
required: false
type: boolean
default: false
jobs:
build-macos:
@@ -118,9 +122,11 @@ jobs:
make-target: '${{ inputs.make-target }} ${{ inputs.make-arguments }}'
platform: ${{ inputs.platform }}
debug-suffix: '${{ matrix.suffix }}'
if: ${{ inputs.dry-run == false }}
- name: 'Upload bundles'
uses: ./.github/actions/upload-bundles
with:
platform: ${{ inputs.platform }}
debug-suffix: '${{ matrix.suffix }}'
if: ${{ inputs.dry-run == false }}

View File

@@ -54,6 +54,10 @@ on:
make-arguments:
required: false
type: string
dry-run:
required: false
type: boolean
default: false
env:
# These are needed to make the MSYS2 bash work properly
@@ -139,6 +143,7 @@ jobs:
# Set PATH to "", so just GITHUB_PATH is included
PATH: ''
shell: env /usr/bin/bash --login -eo pipefail {0}
if: ${{ inputs.dry-run == false }}
- name: 'Build'
id: build
@@ -147,9 +152,11 @@ jobs:
make-target: '${{ inputs.make-target }} ${{ inputs.make-arguments }}'
platform: ${{ inputs.platform }}
debug-suffix: '${{ matrix.suffix }}'
if: ${{ inputs.dry-run == false }}
- name: 'Upload bundles'
uses: ./.github/actions/upload-bundles
with:
platform: ${{ inputs.platform }}
debug-suffix: '${{ matrix.suffix }}'
if: ${{ inputs.dry-run == false }}

View File

@@ -28,9 +28,7 @@ name: 'OpenJDK GHA Sanity Checks'
on:
push:
branches-ignore:
- master
- pr/*
- jdk*
workflow_dispatch:
inputs:
platforms:
@@ -43,6 +41,9 @@ on:
make-arguments:
description: 'Additional make arguments'
required: false
dry-run:
description: 'Dry run: skip actual builds and tests'
required: false
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@@ -70,6 +71,7 @@ jobs:
windows-x64: ${{ steps.include.outputs.windows-x64 }}
windows-aarch64: ${{ steps.include.outputs.windows-aarch64 }}
docs: ${{ steps.include.outputs.docs }}
dry-run: ${{ steps.include.outputs.dry-run }}
steps:
- name: 'Checkout the scripts'
@@ -143,6 +145,35 @@ jobs:
echo 'false'
}
function check_dry_run() {
if [[ $GITHUB_EVENT_NAME == workflow_dispatch ]]; then
# Take the user-specified one.
echo '${{ github.event.inputs.dry-run }}'
return
elif [[ $GITHUB_EVENT_NAME == push ]]; then
# Cut out the real branch name
BRANCH=${GITHUB_REF##*/}
# Dry run rebuilds the caches in current branch, so they can be reused
# for any child PR branches. Because of this, we want to trigger this
# workflow in master branch, so that actual PR branches can use the cache.
# This workflow would trigger every time contributors sync their master
# branches in their personal forks.
if [[ $BRANCH == "master" ]]; then
echo 'true'
return
fi
# ...same for stabilization branches
if [[ $BRANCH =~ "jdk(.*)" ]]; then
echo 'true'
return
fi
fi
echo 'false'
}
echo "linux-x64=$(check_platform linux-x64 linux x64)" >> $GITHUB_OUTPUT
echo "linux-x64-variants=$(check_platform linux-x64-variants variants)" >> $GITHUB_OUTPUT
echo "linux-cross-compile=$(check_platform linux-cross-compile cross-compile)" >> $GITHUB_OUTPUT
@@ -152,6 +183,7 @@ jobs:
echo "windows-x64=$(check_platform windows-x64 windows x64)" >> $GITHUB_OUTPUT
echo "windows-aarch64=$(check_platform windows-aarch64 windows aarch64)" >> $GITHUB_OUTPUT
echo "docs=$(check_platform docs)" >> $GITHUB_OUTPUT
echo "dry-run=$(check_dry_run)" >> $GITHUB_OUTPUT
###
### Build jobs
@@ -166,6 +198,7 @@ jobs:
gcc-major-version: '10'
configure-arguments: ${{ github.event.inputs.configure-arguments }}
make-arguments: ${{ github.event.inputs.make-arguments }}
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
if: needs.prepare.outputs.linux-x64 == 'true'
build-linux-x64-hs-nopch:
@@ -180,6 +213,7 @@ jobs:
extra-conf-options: '--disable-precompiled-headers'
configure-arguments: ${{ github.event.inputs.configure-arguments }}
make-arguments: ${{ github.event.inputs.make-arguments }}
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
if: needs.prepare.outputs.linux-x64-variants == 'true'
build-linux-x64-hs-zero:
@@ -194,6 +228,7 @@ jobs:
extra-conf-options: '--with-jvm-variants=zero --disable-precompiled-headers'
configure-arguments: ${{ github.event.inputs.configure-arguments }}
make-arguments: ${{ github.event.inputs.make-arguments }}
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
if: needs.prepare.outputs.linux-x64-variants == 'true'
build-linux-x64-hs-minimal:
@@ -208,6 +243,7 @@ jobs:
extra-conf-options: '--with-jvm-variants=minimal --disable-precompiled-headers'
configure-arguments: ${{ github.event.inputs.configure-arguments }}
make-arguments: ${{ github.event.inputs.make-arguments }}
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
if: needs.prepare.outputs.linux-x64-variants == 'true'
build-linux-x64-hs-optimized:
@@ -223,6 +259,7 @@ jobs:
extra-conf-options: '--with-debug-level=optimized --disable-precompiled-headers'
configure-arguments: ${{ github.event.inputs.configure-arguments }}
make-arguments: ${{ github.event.inputs.make-arguments }}
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
if: needs.prepare.outputs.linux-x64-variants == 'true'
build-linux-x64-static:
@@ -238,6 +275,7 @@ jobs:
gcc-major-version: '10'
configure-arguments: ${{ github.event.inputs.configure-arguments }}
make-arguments: ${{ github.event.inputs.make-arguments }}
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
static-suffix: "-static"
if: needs.prepare.outputs.linux-x64 == 'true'
@@ -254,6 +292,7 @@ jobs:
gcc-major-version: '10'
configure-arguments: ${{ github.event.inputs.configure-arguments }}
make-arguments: ${{ github.event.inputs.make-arguments }}
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
# Upload static libs bundles separately to avoid interference with normal linux-x64 bundle.
# This bundle is not used by testing jobs, but downstreams use it to check that
# dependent projects, e.g. libgraal, builds fine.
@@ -268,6 +307,7 @@ jobs:
gcc-major-version: '10'
configure-arguments: ${{ github.event.inputs.configure-arguments }}
make-arguments: ${{ github.event.inputs.make-arguments }}
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
if: needs.prepare.outputs.linux-cross-compile == 'true'
build-alpine-linux-x64:
@@ -278,6 +318,7 @@ jobs:
platform: alpine-linux-x64
configure-arguments: ${{ github.event.inputs.configure-arguments }}
make-arguments: ${{ github.event.inputs.make-arguments }}
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
if: needs.prepare.outputs.alpine-linux-x64 == 'true'
build-macos-x64:
@@ -290,6 +331,7 @@ jobs:
xcode-toolset-version: '14.3.1'
configure-arguments: ${{ github.event.inputs.configure-arguments }}
make-arguments: ${{ github.event.inputs.make-arguments }}
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
if: needs.prepare.outputs.macos-x64 == 'true'
build-macos-aarch64:
@@ -302,6 +344,7 @@ jobs:
xcode-toolset-version: '15.4'
configure-arguments: ${{ github.event.inputs.configure-arguments }}
make-arguments: ${{ github.event.inputs.make-arguments }}
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
if: needs.prepare.outputs.macos-aarch64 == 'true'
build-windows-x64:
@@ -310,10 +353,11 @@ jobs:
uses: ./.github/workflows/build-windows.yml
with:
platform: windows-x64
msvc-toolset-version: '14.43'
msvc-toolset-version: '14.44'
msvc-toolset-architecture: 'x86.x64'
configure-arguments: ${{ github.event.inputs.configure-arguments }}
make-arguments: ${{ github.event.inputs.make-arguments }}
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
if: needs.prepare.outputs.windows-x64 == 'true'
build-windows-aarch64:
@@ -322,12 +366,13 @@ jobs:
uses: ./.github/workflows/build-windows.yml
with:
platform: windows-aarch64
msvc-toolset-version: '14.43'
msvc-toolset-version: '14.44'
msvc-toolset-architecture: 'arm64'
make-target: 'hotspot'
extra-conf-options: '--openjdk-target=aarch64-unknown-cygwin'
configure-arguments: ${{ github.event.inputs.configure-arguments }}
make-arguments: ${{ github.event.inputs.make-arguments }}
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
if: needs.prepare.outputs.windows-aarch64 == 'true'
build-docs:
@@ -344,6 +389,7 @@ jobs:
gcc-major-version: '10'
configure-arguments: ${{ github.event.inputs.configure-arguments }}
make-arguments: ${{ github.event.inputs.make-arguments }}
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
if: needs.prepare.outputs.docs == 'true'
###
@@ -353,17 +399,20 @@ jobs:
test-linux-x64:
name: linux-x64
needs:
- prepare
- build-linux-x64
uses: ./.github/workflows/test.yml
with:
platform: linux-x64
bootjdk-platform: linux-x64
runs-on: ubuntu-22.04
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
debug-suffix: -debug
test-linux-x64-static:
name: linux-x64-static
needs:
- prepare
- build-linux-x64
- build-linux-x64-static
uses: ./.github/workflows/test.yml
@@ -371,27 +420,32 @@ jobs:
platform: linux-x64
bootjdk-platform: linux-x64
runs-on: ubuntu-22.04
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
static-suffix: "-static"
test-macos-aarch64:
name: macos-aarch64
needs:
- prepare
- build-macos-aarch64
uses: ./.github/workflows/test.yml
with:
platform: macos-aarch64
bootjdk-platform: macos-aarch64
runs-on: macos-14
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
xcode-toolset-version: '15.4'
debug-suffix: -debug
test-windows-x64:
name: windows-x64
needs:
- prepare
- build-windows-x64
uses: ./.github/workflows/test.yml
with:
platform: windows-x64
bootjdk-platform: windows-x64
runs-on: windows-2025
dry-run: ${{ needs.prepare.outputs.dry-run == 'true' }}
debug-suffix: -debug

View File

@@ -40,6 +40,10 @@ on:
xcode-toolset-version:
required: false
type: string
dry-run:
required: false
type: boolean
default: false
debug-suffix:
required: false
type: string
@@ -147,6 +151,7 @@ jobs:
platform: ${{ inputs.platform }}
debug-suffix: ${{ matrix.debug-suffix }}
static-suffix: ${{ inputs.static-suffix }}
if: ${{ inputs.dry-run == false }}
- name: 'Install dependencies'
run: |
@@ -199,6 +204,7 @@ jobs:
&& bash ./.github/scripts/gen-test-summary.sh "$GITHUB_STEP_SUMMARY" "$GITHUB_OUTPUT"
env:
PATH: ${{ steps.path.outputs.value }}
if: ${{ inputs.dry-run == false }}
# This is a separate step, since if the markdown from a step gets bigger than
# 1024 kB it is skipped, but then the short summary above is still generated

View File

@@ -125,7 +125,8 @@ if [ -d "$TOPLEVEL_DIR/.hg" ] ; then
VCS_TYPE="hg4idea"
fi
if [ -d "$TOPLEVEL_DIR/.git" ] ; then
# Git worktrees use a '.git' file rather than directory, so test both.
if [ -d "$TOPLEVEL_DIR/.git" -o -f "$TOPLEVEL_DIR/.git" ] ; then
VCS_TYPE="Git"
fi

View File

@@ -1,5 +1,5 @@
#
# Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2014, 2025, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -78,7 +78,6 @@ src/jdk.jdi : jdk/src/jdk.jdi
src/jdk.jdwp.agent : jdk/src/jdk.jdwp.agent
src/jdk.jlink : jdk/src/jdk.jlink
src/jdk.jshell : langtools/src/jdk.jshell
src/jdk.jsobject : jdk/src/jdk.jsobject
src/jdk.jstatd : jdk/src/jdk.jstatd
src/jdk.localedata : jdk/src/jdk.localedata
src/jdk.management : jdk/src/jdk.management

View File

@@ -1451,10 +1451,10 @@ of a cross-compiling toolchain and a sysroot environment which can
easily be used together with the <code>--with-devkit</code> configure
option to cross compile the JDK. On Linux/x86_64, the following
command:</p>
<pre><code>bash configure --with-devkit=&lt;devkit-path&gt; --openjdk-target=ppc64-linux-gnu &amp;&amp; make</code></pre>
<p>will configure and build the JDK for Linux/ppc64 assuming that
<code>&lt;devkit-path&gt;</code> points to a Linux/x86_64 to Linux/ppc64
devkit.</p>
<pre><code>bash configure --with-devkit=&lt;devkit-path&gt; --openjdk-target=ppc64le-linux-gnu &amp;&amp; make</code></pre>
<p>will configure and build the JDK for Linux/ppc64le assuming that
<code>&lt;devkit-path&gt;</code> points to a Linux/x86_64 to
Linux/ppc64le devkit.</p>
<p>Devkits can be created from the <code>make/devkit</code> directory by
executing:</p>
<pre><code>make [ TARGETS=&quot;&lt;TARGET_TRIPLET&gt;+&quot; ] [ BASE_OS=&lt;OS&gt; ] [ BASE_OS_VERSION=&lt;VER&gt; ]</code></pre>
@@ -1481,22 +1481,22 @@ following targets are known to work:</p>
<td>arm-linux-gnueabihf</td>
</tr>
<tr class="even">
<td>ppc64-linux-gnu</td>
<td>ppc64le-linux-gnu</td>
</tr>
<tr class="odd">
<td>ppc64le-linux-gnu</td>
<td>riscv64-linux-gnu</td>
</tr>
<tr class="even">
<td>s390x-linux-gnu</td>
</tr>
</tbody>
</table>
<p><code>BASE_OS</code> must be one of "OEL6" for Oracle Enterprise
Linux 6 or "Fedora" (if not specified "OEL6" will be the default). If
the base OS is "Fedora" the corresponding Fedora release can be
specified with the help of the <code>BASE_OS_VERSION</code> option (with
"27" as default version). If the build is successful, the new devkits
can be found in the <code>build/devkit/result</code> subdirectory:</p>
<p><code>BASE_OS</code> must be one of <code>OL</code> for Oracle
Enterprise Linux or <code>Fedora</code>. If the base OS is
<code>Fedora</code> the corresponding Fedora release can be specified
with the help of the <code>BASE_OS_VERSION</code> option. If the build
is successful, the new devkits can be found in the
<code>build/devkit/result</code> subdirectory:</p>
<pre><code>cd make/devkit
make TARGETS=&quot;ppc64le-linux-gnu aarch64-linux-gnu&quot; BASE_OS=Fedora BASE_OS_VERSION=21
ls -1 ../../build/devkit/result/

View File

@@ -1258,11 +1258,11 @@ toolchain and a sysroot environment which can easily be used together with the
following command:
```
bash configure --with-devkit=<devkit-path> --openjdk-target=ppc64-linux-gnu && make
bash configure --with-devkit=<devkit-path> --openjdk-target=ppc64le-linux-gnu && make
```
will configure and build the JDK for Linux/ppc64 assuming that `<devkit-path>`
points to a Linux/x86_64 to Linux/ppc64 devkit.
will configure and build the JDK for Linux/ppc64le assuming that `<devkit-path>`
points to a Linux/x86_64 to Linux/ppc64le devkit.
Devkits can be created from the `make/devkit` directory by executing:
@@ -1281,16 +1281,14 @@ at least the following targets are known to work:
| x86_64-linux-gnu |
| aarch64-linux-gnu |
| arm-linux-gnueabihf |
| ppc64-linux-gnu |
| ppc64le-linux-gnu |
| riscv64-linux-gnu |
| s390x-linux-gnu |
`BASE_OS` must be one of "OEL6" for Oracle Enterprise Linux 6 or "Fedora" (if
not specified "OEL6" will be the default). If the base OS is "Fedora" the
corresponding Fedora release can be specified with the help of the
`BASE_OS_VERSION` option (with "27" as default version). If the build is
successful, the new devkits can be found in the `build/devkit/result`
subdirectory:
`BASE_OS` must be one of `OL` for Oracle Enterprise Linux or `Fedora`. If the
base OS is `Fedora` the corresponding Fedora release can be specified with the
help of the `BASE_OS_VERSION` option. If the build is successful, the new
devkits can be found in the `build/devkit/result` subdirectory:
```
cd make/devkit

View File

@@ -77,6 +77,9 @@ SFINAE</a></li>
<li><a href="#thread_local" id="toc-thread_local">thread_local</a></li>
<li><a href="#nullptr" id="toc-nullptr">nullptr</a></li>
<li><a href="#atomic" id="toc-atomic">&lt;atomic&gt;</a></li>
<li><a href="#initializing-variables-with-static-storage-duration"
id="toc-initializing-variables-with-static-storage-duration">Initializing
variables with static storage duration</a></li>
<li><a href="#uniform-initialization"
id="toc-uniform-initialization">Uniform Initialization</a></li>
<li><a href="#local-function-objects"
@@ -84,6 +87,7 @@ id="toc-local-function-objects">Local Function Objects</a></li>
<li><a href="#inheriting-constructors"
id="toc-inheriting-constructors">Inheriting constructors</a></li>
<li><a href="#attributes" id="toc-attributes">Attributes</a></li>
<li><a href="#noexcept" id="toc-noexcept">noexcept</a></li>
<li><a href="#additional-permitted-features"
id="toc-additional-permitted-features">Additional Permitted
Features</a></li>
@@ -791,6 +795,33 @@ differ from what the Java compilers implement.</p>
"conservative" memory ordering, which may differ from (may be stronger
than) sequentially consistent. There are algorithms in HotSpot that are
believed to rely on that ordering.</p>
<h3
id="initializing-variables-with-static-storage-duration">Initializing
variables with static storage duration</h3>
<p>Variables with static storage duration and <em>dynamic
initialization</em> <a
href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf">C++14
3.6.2</a>). should be avoided, unless an implementation is permitted to
perform the initialization as a static initialization. The order in
which dynamic initializations occur is incompletely specified.
Initialization order problems can be difficult to deal with and lead to
surprises.</p>
<p>Variables with static storage duration and non-trivial destructors
should be avoided. HotSpot doesn't generally try to cleanup on exit, and
running destructors at exit can lead to problems.</p>
<p>Some of the approaches used in HotSpot to avoid dynamic
initialization include:</p>
<ul>
<li><p>Use the <code>Deferred&lt;T&gt;</code> class template. Add a call
to its initialization function at an appropriate place during VM
initialization. The underlying object is never destroyed.</p></li>
<li><p>For objects of class type, use a variable whose value is a
pointer to the class, initialized to <code>nullptr</code>. Provide an
initialization function that sets the variable to a dynamically
allocated object. Add a call to that function at an appropriate place
during VM initialization. Such objects are usually never
destroyed.</p></li>
</ul>
<h3 id="uniform-initialization">Uniform Initialization</h3>
<p>The use of <em>uniform initialization</em> (<a
href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm">n2672</a>),
@@ -1110,6 +1141,58 @@ function name and the parameter list.</li>
<code>memory_order_consume</code>.</li>
<li><code>[[deprecated]]</code> - Not relevant in HotSpot code.</li>
</ul>
<h3 id="noexcept">noexcept</h3>
<p>Use of <code>noexcept</code> exception specifications (<a
href="http://wg21.link/n3050">n3050</a>) are permitted with restrictions
described below.</p>
<ul>
<li>Only the argument-less form of <code>noexcept</code> exception
specifications are permitted.</li>
<li>Allocation functions that may return <code>nullptr</code> to
indicate allocation failure must be declared <code>noexcept</code>.</li>
<li>All other uses of <code>noexcept</code> exception specifications are
forbidden.</li>
<li><code>noexcept</code> expressions are forbidden.</li>
<li>Dynamic exception specifications are forbidden.</li>
</ul>
<p>HotSpot is built with exceptions disabled, e.g. compile with
<code>-fno-exceptions</code> (gcc, clang) or no <code>/EH</code> option
(MSVC++). So why do we need to consider <code>noexcept</code> at all?
It's because <code>noexcept</code> exception specifications serve two
distinct purposes.</p>
<p>The first is to allow the compiler to avoid generating code or data
in support of exceptions being thrown by a function. But this is
unnecessary, because exceptions are disabled.</p>
<p>The second is to allow the compiler and library code to choose
different algorithms, depending on whether some function may throw
exceptions. This is only relevant to a certain set of functions.</p>
<ul>
<li><p>Some allocation functions (<code>operator new</code> and
<code>operator new[]</code>) return <code>nullptr</code> to indicate
allocation failure. If a <code>new</code> expression calls such an
allocation function, it must check for and handle that possibility.
Declaring such a function <code>noexcept</code> informs the compiler
that <code>nullptr</code> is a possible result. If an allocation
function is not declared <code>noexcept</code> then the compiler may
elide that checking and handling for a <code>new</code> expression
calling that function.</p></li>
<li><p>Certain Standard Library facilities (notably containers) provide
different guarantees for some operations (and may choose different
algorithms to implement those operations), depending on whether certain
functions (constructors, copy/move operations, swap) are nothrow or not.
They detect this using type traits that test whether a function is
declared <code>noexcept</code>. This can have a significant performance
impact if, for example, copying is chosen over a potentially throwing
move. But this isn't relevant, since HotSpot forbids the use of most
Standard Library facilities.</p></li>
</ul>
<p>HotSpot code can assume no exceptions will ever be thrown, even from
functions not declared <code>noexcept</code>. So HotSpot code doesn't
ever need to check, either with conditional exception specifications or
with <code>noexcept</code> expressions.</p>
<p>Dynamic exception specifications were deprecated in C++11. C++17
removed all but <code>throw()</code>, with that remaining a deprecated
equivalent to <code>noexcept</code>.</p>
<h3 id="additional-permitted-features">Additional Permitted
Features</h3>
<ul>
@@ -1198,12 +1281,6 @@ Library names.</p></li>
href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html">n2179</a>)
— HotSpot does not permit the use of exceptions, so this feature isn't
useful.</p></li>
<li><p>Avoid non-local variables with non-constexpr initialization. In
particular, avoid variables with types requiring non-trivial
initialization or destruction. Initialization order problems can be
difficult to deal with and lead to surprises, as can destruction
ordering. HotSpot doesn't generally try to cleanup on exit, and running
destructors at exit can also lead to problems.</p></li>
<li><p>Avoid most operator overloading, preferring named functions. When
operator overloading is used, ensure the semantics conform to the normal
expected behavior of the operation.</p></li>

View File

@@ -770,6 +770,32 @@ ordering, which may differ from (may be stronger than) sequentially
consistent. There are algorithms in HotSpot that are believed to rely
on that ordering.
### Initializing variables with static storage duration
Variables with static storage duration and _dynamic initialization_
[C++14 3.6.2](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf)).
should be avoided, unless an implementation is permitted to perform the
initialization as a static initialization. The order in which dynamic
initializations occur is incompletely specified. Initialization order
problems can be difficult to deal with and lead to surprises.
Variables with static storage duration and non-trivial destructors should be
avoided. HotSpot doesn't generally try to cleanup on exit, and running
destructors at exit can lead to problems.
Some of the approaches used in HotSpot to avoid dynamic initialization
include:
* Use the `Deferred<T>` class template. Add a call to its initialization
function at an appropriate place during VM initialization. The underlying
object is never destroyed.
* For objects of class type, use a variable whose value is a pointer to the
class, initialized to `nullptr`. Provide an initialization function that sets
the variable to a dynamically allocated object. Add a call to that function at
an appropriate place during VM initialization. Such objects are usually never
destroyed.
### Uniform Initialization
The use of _uniform initialization_
@@ -1104,6 +1130,57 @@ The following attributes are expressly forbidden:
* `[[carries_dependency]]` - Related to `memory_order_consume`.
* `[[deprecated]]` - Not relevant in HotSpot code.
### noexcept
Use of `noexcept` exception specifications
([n3050](http://wg21.link/n3050))
are permitted with restrictions described below.
* Only the argument-less form of `noexcept` exception specifications are
permitted.
* Allocation functions that may return `nullptr` to indicate allocation
failure must be declared `noexcept`.
* All other uses of `noexcept` exception specifications are forbidden.
* `noexcept` expressions are forbidden.
* Dynamic exception specifications are forbidden.
HotSpot is built with exceptions disabled, e.g. compile with `-fno-exceptions`
(gcc, clang) or no `/EH` option (MSVC++). So why do we need to consider
`noexcept` at all? It's because `noexcept` exception specifications serve two
distinct purposes.
The first is to allow the compiler to avoid generating code or data in support
of exceptions being thrown by a function. But this is unnecessary, because
exceptions are disabled.
The second is to allow the compiler and library code to choose different
algorithms, depending on whether some function may throw exceptions. This is
only relevant to a certain set of functions.
* Some allocation functions (`operator new` and `operator new[]`) return
`nullptr` to indicate allocation failure. If a `new` expression calls such an
allocation function, it must check for and handle that possibility. Declaring
such a function `noexcept` informs the compiler that `nullptr` is a possible
result. If an allocation function is not declared `noexcept` then the compiler
may elide that checking and handling for a `new` expression calling that
function.
* Certain Standard Library facilities (notably containers) provide different
guarantees for some operations (and may choose different algorithms to
implement those operations), depending on whether certain functions
(constructors, copy/move operations, swap) are nothrow or not. They detect
this using type traits that test whether a function is declared `noexcept`.
This can have a significant performance impact if, for example, copying is
chosen over a potentially throwing move. But this isn't relevant, since
HotSpot forbids the use of most Standard Library facilities.
HotSpot code can assume no exceptions will ever be thrown, even from functions
not declared `noexcept`. So HotSpot code doesn't ever need to check, either
with conditional exception specifications or with `noexcept` expressions.
Dynamic exception specifications were deprecated in C++11. C++17 removed all
but `throw()`, with that remaining a deprecated equivalent to `noexcept`.
### Additional Permitted Features
* `alignof`
@@ -1199,13 +1276,6 @@ namespace std;` to avoid needing to qualify Standard Library names.
([n2179](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html)) &mdash;
HotSpot does not permit the use of exceptions, so this feature isn't useful.
* Avoid non-local variables with non-constexpr initialization.
In particular, avoid variables with types requiring non-trivial
initialization or destruction. Initialization order problems can be
difficult to deal with and lead to surprises, as can destruction
ordering. HotSpot doesn't generally try to cleanup on exit, and
running destructors at exit can also lead to problems.
* Avoid most operator overloading, preferring named functions. When
operator overloading is used, ensure the semantics conform to the
normal expected behavior of the operation.

View File

@@ -11,11 +11,8 @@
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;

View File

@@ -72,11 +72,9 @@ id="toc-notes-for-specific-tests">Notes for Specific Tests</a>
<li><a href="#non-us-locale" id="toc-non-us-locale">Non-US
locale</a></li>
<li><a href="#pkcs11-tests" id="toc-pkcs11-tests">PKCS11 Tests</a></li>
</ul></li>
<li><a href="#testing-ahead-of-time-optimizations"
id="toc-testing-ahead-of-time-optimizations">### Testing Ahead-of-time
Optimizations</a>
<ul>
id="toc-testing-ahead-of-time-optimizations">Testing Ahead-of-time
Optimizations</a></li>
<li><a href="#testing-with-alternative-security-providers"
id="toc-testing-with-alternative-security-providers">Testing with
alternative security providers</a></li>
@@ -435,6 +433,9 @@ the diff between the specified revision and the repository tip.</p>
<p>The report is stored in
<code>build/$BUILD/test-results/jcov-output/diff_coverage_report</code>
file.</p>
<h4 id="aot_jdk">AOT_JDK</h4>
<p>See <a href="#testing-ahead-of-time-optimizations">Testing
Ahead-of-time optimizations</a>.</p>
<h3 id="jtreg-keywords">JTReg keywords</h3>
<h4 id="jobs-1">JOBS</h4>
<p>The test concurrency (<code>-concurrency</code>).</p>
@@ -457,6 +458,12 @@ class, named Virtual, is currently part of the JDK build in the
<code>test/jtreg_test_thread_factory/</code> directory. This class gets
compiled during the test image build. The implementation of the Virtual
class creates a new virtual thread for executing each test class.</p>
<h4 id="jvmti_stress_agent">JVMTI_STRESS_AGENT</h4>
<p>Executes JTReg tests with JVM TI stress agent. The stress agent is
the part of test library and located in
<code>test/lib/jdk/test/lib/jvmti/libJvmtiStressAgent.cpp</code>. The
value of this argument is set as JVM TI agent options. This mode uses
ProblemList-jvmti-stress-agent.txt as an additional exclude list.</p>
<h4 id="test_mode">TEST_MODE</h4>
<p>The test mode (<code>agentvm</code> or <code>othervm</code>).</p>
<p>Defaults to <code>agentvm</code>.</p>
@@ -556,6 +563,12 @@ each fork. Same as specifying <code>-wi &lt;num&gt;</code>.</p>
same values as <code>-rff</code>, i.e., <code>text</code>,
<code>csv</code>, <code>scsv</code>, <code>json</code>, or
<code>latex</code>.</p>
<h4 id="test_jdk">TEST_JDK</h4>
<p>The path to the JDK that will be used to run the benchmarks.</p>
<p>Defaults to <code>build/&lt;CONF-NAME&gt;/jdk</code>.</p>
<h4 id="benchmarks_jar">BENCHMARKS_JAR</h4>
<p>The path to the JAR containing the benchmarks.</p>
<p>Defaults to <code>test/micro/benchmarks.jar</code>.</p>
<h4 id="vm_options-2">VM_OPTIONS</h4>
<p>Additional VM arguments to provide to forked off VMs. Same as
<code>-jvmArgs &lt;args&gt;</code></p>
@@ -601,8 +614,8 @@ element of the appropriate <code>@Artifact</code> class. (See
JTREG=&quot;JAVA_OPTIONS=-Djdk.test.lib.artifacts.nsslib-linux_aarch64=/path/to/NSS-libs&quot;</code></pre>
<p>For more notes about the PKCS11 tests, please refer to
test/jdk/sun/security/pkcs11/README.</p>
<h2 id="testing-ahead-of-time-optimizations">### Testing Ahead-of-time
Optimizations</h2>
<h3 id="testing-ahead-of-time-optimizations">Testing Ahead-of-time
Optimizations</h3>
<p>One way to improve test coverage of ahead-of-time (AOT) optimizations
in the JDK is to run existing jtreg test cases in a special "AOT_JDK"
mode. Example:</p>

View File

@@ -367,6 +367,10 @@ between the specified revision and the repository tip.
The report is stored in
`build/$BUILD/test-results/jcov-output/diff_coverage_report` file.
#### AOT_JDK
See [Testing Ahead-of-time optimizations](#testing-ahead-of-time-optimizations).
### JTReg keywords
#### JOBS
@@ -397,6 +401,13 @@ the `test/jtreg_test_thread_factory/` directory. This class gets compiled
during the test image build. The implementation of the Virtual class creates a
new virtual thread for executing each test class.
#### JVMTI_STRESS_AGENT
Executes JTReg tests with JVM TI stress agent. The stress agent is the part of
test library and located in `test/lib/jdk/test/lib/jvmti/libJvmtiStressAgent.cpp`.
The value of this argument is set as JVM TI agent options.
This mode uses ProblemList-jvmti-stress-agent.txt as an additional exclude list.
#### TEST_MODE
The test mode (`agentvm` or `othervm`).
@@ -545,6 +556,18 @@ Amount of time to spend in each warmup iteration. Same as specifying `-w
Specify to have the test run save a log of the values. Accepts the same values
as `-rff`, i.e., `text`, `csv`, `scsv`, `json`, or `latex`.
#### TEST_JDK
The path to the JDK that will be used to run the benchmarks.
Defaults to `build/<CONF-NAME>/jdk`.
#### BENCHMARKS_JAR
The path to the JAR containing the benchmarks.
Defaults to `test/micro/benchmarks.jar`.
#### VM_OPTIONS
Additional VM arguments to provide to forked off VMs. Same as `-jvmArgs <args>`
@@ -612,7 +635,7 @@ For more notes about the PKCS11 tests, please refer to
test/jdk/sun/security/pkcs11/README.
### Testing Ahead-of-time Optimizations
-------------------------------------------------------------------------------
One way to improve test coverage of ahead-of-time (AOT) optimizations in
the JDK is to run existing jtreg test cases in a special "AOT_JDK" mode.
Example:

View File

@@ -85,7 +85,7 @@ CreateHkTargets = \
################################################################################
# Include module specific build settings
THIS_SNIPPET := modules/$(MODULE)/Java.gmk
THIS_SNIPPET := $(call GetModuleSnippetName, Java)
ifneq ($(wildcard $(THIS_SNIPPET)), )
include MakeSnippetStart.gmk
@@ -115,6 +115,7 @@ $(eval $(call SetupJavaCompilation, $(MODULE), \
EXCLUDE_FILES := $(EXCLUDE_FILES), \
EXCLUDE_PATTERNS := -files, \
KEEP_ALL_TRANSLATIONS := $(KEEP_ALL_TRANSLATIONS), \
TARGET_RELEASE := $(TARGET_RELEASE), \
JAVAC_FLAGS := \
$(DOCLINT) \
$(JAVAC_FLAGS) \

View File

@@ -184,7 +184,7 @@ endif
################################################################################
# Include module specific build settings
THIS_SNIPPET := modules/$(MODULE)/Jmod.gmk
THIS_SNIPPET := $(call GetModuleSnippetName, Jmod)
ifneq ($(wildcard $(THIS_SNIPPET)), )
include MakeSnippetStart.gmk

View File

@@ -236,8 +236,8 @@ define create_overview_file
#
ifneq ($$($1_GROUPS), )
$1_OVERVIEW_TEXT += \
<p>This document is divided into \
$$(subst 2,two,$$(subst 3,three,$$(words $$($1_GROUPS)))) sections:</p> \
<p>This document has \
$$(subst 2,two,$$(subst 3,three,$$(words $$($1_GROUPS)))) major sections:</p> \
<blockquote><dl> \
#
$1_OVERVIEW_TEXT += $$(foreach g, $$($1_GROUPS), \
@@ -246,7 +246,10 @@ define create_overview_file
)
$1_OVERVIEW_TEXT += \
</dl></blockquote> \
#
<p><a href="../specs/index.html">Related documents</a> specify the Java \
programming language, the Java Virtual Machine, various protocols and file \
formats pertaining to the Java platform, and tools included in the JDK.</p> \
#
endif
$1_OVERVIEW_TEXT += \
</body></html> \

View File

@@ -270,6 +270,7 @@ endif
# Since debug symbols are not included in the jmod files, they need to be copied
# in manually after generating the images.
# These variables are read by SetupCopyDebuginfo
ALL_JDK_MODULES := $(JDK_MODULES)
ALL_JRE_MODULES := $(sort $(JRE_MODULES), $(foreach m, $(JRE_MODULES), \
$(call FindTransitiveDepsForModule, $m)))

View File

@@ -1014,7 +1014,7 @@ else
else ifeq ($(EXTERNAL_BUILDJDK), false)
# When not cross compiling, the BUILD_JDK is the interim jdk image, and
# the javac launcher is needed.
jdk.compiler-gendata: jdk.compiler-launchers
jdk.compiler-gendata: jdk.compiler-launchers java.base-launchers
jdk.javadoc-gendata: jdk.compiler-launchers
endif
@@ -1407,7 +1407,7 @@ CLEAN_SUPPORT_DIRS += demos
CLEAN_SUPPORT_DIR_TARGETS := $(addprefix clean-, $(CLEAN_SUPPORT_DIRS))
CLEAN_TESTS += hotspot-jtreg-native jdk-jtreg-native lib
CLEAN_TEST_TARGETS += $(addprefix clean-test-, $(CLEAN_TESTS))
CLEAN_PHASES := gensrc java native include
CLEAN_PHASES += gensrc java native include
CLEAN_PHASE_TARGETS := $(addprefix clean-, $(CLEAN_PHASES))
CLEAN_MODULE_TARGETS := $(addprefix clean-, $(ALL_MODULES))
# Construct targets of the form clean-$module-$phase

View File

@@ -149,7 +149,7 @@ endef
################################################################################
PHASE_MAKEDIRS := $(TOPDIR)/make
PHASE_MAKEDIRS += $(TOPDIR)/make
# Helper macro for DeclareRecipesForPhase
# Declare a recipe for calling the module and phase specific makefile.

View File

@@ -34,18 +34,23 @@ include MakeFileStart.gmk
################################################################################
include CopyFiles.gmk
include Modules.gmk
MODULE_SRC := $(TOPDIR)/src/$(MODULE)
# Define the snippet for MakeSnippetStart/End
THIS_SNIPPET := modules/$(MODULE)/$(MAKEFILE_PREFIX).gmk
################################################################################
# Include module specific build settings
include MakeSnippetStart.gmk
THIS_SNIPPET := $(call GetModuleSnippetName, $(MAKEFILE_PREFIX))
# Include the file being wrapped.
include $(THIS_SNIPPET)
ifneq ($(wildcard $(THIS_SNIPPET)), )
include MakeSnippetStart.gmk
include MakeSnippetEnd.gmk
# Include the file being wrapped.
include $(THIS_SNIPPET)
include MakeSnippetEnd.gmk
endif
ifeq ($(MAKEFILE_PREFIX), Lib)
# We need to keep track of what libraries are generated/needed by this

View File

@@ -204,8 +204,9 @@ $(eval $(call SetTestOpt,AOT_JDK,JTREG))
$(eval $(call ParseKeywordVariable, JTREG, \
SINGLE_KEYWORDS := JOBS TIMEOUT_FACTOR FAILURE_HANDLER_TIMEOUT \
TEST_MODE ASSERT VERBOSE RETAIN TEST_THREAD_FACTORY MAX_MEM RUN_PROBLEM_LISTS \
RETRY_COUNT REPEAT_COUNT MAX_OUTPUT REPORT AOT_JDK $(CUSTOM_JTREG_SINGLE_KEYWORDS), \
TEST_MODE ASSERT VERBOSE RETAIN TEST_THREAD_FACTORY JVMTI_STRESS_AGENT \
MAX_MEM RUN_PROBLEM_LISTS RETRY_COUNT REPEAT_COUNT MAX_OUTPUT REPORT \
AOT_JDK $(CUSTOM_JTREG_SINGLE_KEYWORDS), \
STRING_KEYWORDS := OPTIONS JAVA_OPTIONS VM_OPTIONS KEYWORDS \
EXTRA_PROBLEM_LISTS LAUNCHER_OPTIONS \
$(CUSTOM_JTREG_STRING_KEYWORDS), \
@@ -876,6 +877,15 @@ define SetupRunJtregTestBody
))
endif
ifneq ($$(JTREG_JVMTI_STRESS_AGENT), )
AGENT := $$(LIBRARY_PREFIX)JvmtiStressAgent$$(SHARED_LIBRARY_SUFFIX)=$$(JTREG_JVMTI_STRESS_AGENT)
$1_JTREG_BASIC_OPTIONS += -javaoption:'-agentpath:$(TEST_IMAGE_DIR)/hotspot/jtreg/native/$$(AGENT)'
$1_JTREG_BASIC_OPTIONS += $$(addprefix $$(JTREG_PROBLEM_LIST_PREFIX), $$(wildcard \
$$(addprefix $$($1_TEST_ROOT)/, ProblemList-jvmti-stress-agent.txt) \
))
endif
ifneq ($$(JTREG_LAUNCHER_OPTIONS), )
$1_JTREG_LAUNCHER_OPTIONS += $$(JTREG_LAUNCHER_OPTIONS)
endif
@@ -1243,7 +1253,7 @@ UseSpecialTestHandler = \
# Now process each test to run and setup a proper make rule
$(foreach test, $(TESTS_TO_RUN), \
$(eval TEST_ID := $(shell $(ECHO) $(strip $(test)) | \
$(TR) -cs '[a-z][A-Z][0-9]\n' '[_*1000]')) \
$(TR) -cs '[a-z][A-Z][0-9]\n' '_')) \
$(eval ALL_TEST_IDS += $(TEST_ID)) \
$(if $(call UseCustomTestHandler, $(test)), \
$(eval $(call SetupRunCustomTest, $(TEST_ID), \
@@ -1323,9 +1333,9 @@ run-test-report: post-run-test
TEST TOTAL PASS FAIL ERROR SKIP " "
$(foreach test, $(TESTS_TO_RUN), \
$(eval TEST_ID := $(shell $(ECHO) $(strip $(test)) | \
$(TR) -cs '[a-z][A-Z][0-9]\n' '[_*1000]')) \
$(TR) -cs '[a-z][A-Z][0-9]\n' '_')) \
$(ECHO) >> $(TEST_LAST_IDS) $(TEST_ID) $(NEWLINE) \
$(eval NAME_PATTERN := $(shell $(ECHO) $(test) | $(TR) -c '\n' '[_*1000]')) \
$(eval NAME_PATTERN := $(shell $(ECHO) $(test) | $(TR) -c '\n' '_')) \
$(if $(filter __________________________________________________%, $(NAME_PATTERN)), \
$(eval TEST_NAME := ) \
$(PRINTF) >> $(TEST_SUMMARY) "%2s %-49s\n" " " "$(test)" $(NEWLINE) \

View File

@@ -176,3 +176,19 @@ ULIMIT := ulimit
ifeq ($(OPENJDK_BUILD_OS), windows)
PATHTOOL := cygpath
endif
# These settings are needed to run testing with jvmti agent
ifeq ($(OPENJDK_BUILD_OS), linux)
LIBRARY_PREFIX := lib
SHARED_LIBRARY_SUFFIX := .so
endif
ifeq ($(OPENJDK_BUILD_OS), windows)
LIBRARY_PREFIX :=
SHARED_LIBRARY_SUFFIX := .dll
endif
ifeq ($(OPENJDK_BUILD_OS), macosx)
LIBRARY_PREFIX := lib
SHARED_LIBRARY_SUFFIX := .dylib
endif

View File

@@ -78,6 +78,9 @@ TOOL_GENERATECACERTS = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_class
TOOL_GENERATEEXTRAPROPERTIES = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
build.tools.generateextraproperties.GenerateExtraProperties
TOOL_GENERATECASEFOLDING = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
build.tools.generatecharacter.CaseFolding
TOOL_MAKEZIPREPRODUCIBLE = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
build.tools.makezipreproducible.MakeZipReproducible

View File

@@ -36,7 +36,7 @@ $(eval $(call SetupJavaCompilation, BUILD_TOOLS_LANGTOOLS, \
COMPILER := bootjdk, \
TARGET_RELEASE := $(TARGET_RELEASE_BOOTJDK), \
SRC := $(TOPDIR)/make/langtools/tools, \
INCLUDES := compileproperties propertiesparser, \
INCLUDES := compileproperties flagsgenerator propertiesparser, \
COPY := .properties, \
BIN := $(BUILDTOOLS_OUTPUTDIR)/langtools_tools_classes, \
))

View File

@@ -395,11 +395,9 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK],
# When compiling code to be executed by the Boot JDK, force compatibility with the
# oldest supported bootjdk.
OLDEST_BOOT_JDK=`$ECHO $DEFAULT_ACCEPTABLE_BOOT_VERSIONS \
OLDEST_BOOT_JDK_VERSION=`$ECHO $DEFAULT_ACCEPTABLE_BOOT_VERSIONS \
| $TR " " "\n" | $SORT -n | $HEAD -n1`
# -Xlint:-options is added to avoid "warning: [options] system modules path not set in conjunction with -source"
BOOT_JDK_SOURCETARGET="-source $OLDEST_BOOT_JDK -target $OLDEST_BOOT_JDK -Xlint:-options"
AC_SUBST(BOOT_JDK_SOURCETARGET)
AC_SUBST(OLDEST_BOOT_JDK_VERSION)
# Check if the boot jdk is 32 or 64 bit
if $JAVA -version 2>&1 | $GREP -q "64-Bit"; then

View File

@@ -736,8 +736,15 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
$1_CFLAGS_CPU_JVM="${$1_CFLAGS_CPU_JVM} -mminimal-toc"
elif test "x$FLAGS_CPU" = xppc64le; then
# Little endian machine uses ELFv2 ABI.
# Use Power8, this is the first CPU to support PPC64 LE with ELFv2 ABI.
$1_CFLAGS_CPU="-mcpu=power8 -mtune=power10"
# Use Power8 for target cpu, this is the first CPU to support PPC64 LE with ELFv2 ABI.
# Use Power10 for tuning target, this is supported by gcc >= 10
POWER_TUNE_VERSION="-mtune=power10"
FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [${POWER_TUNE_VERSION}],
IF_FALSE: [
POWER_TUNE_VERSION="-mtune=power8"
]
)
$1_CFLAGS_CPU="-mcpu=power8 ${POWER_TUNE_VERSION}"
$1_CFLAGS_CPU_JVM="${$1_CFLAGS_CPU_JVM} -DABI_ELFv2"
fi
elif test "x$FLAGS_CPU" = xs390x; then
@@ -933,7 +940,7 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
# ACLE and this flag are required to build the aarch64 SVE related functions in
# libvectormath. Apple Silicon does not support SVE; use macOS as a proxy for
# that check.
if test "x$OPENJDK_TARGET_CPU" = "xaarch64" && test "x$OPENJDK_TARGET_CPU" = "xlinux"; then
if test "x$OPENJDK_TARGET_CPU" = "xaarch64" && test "x$OPENJDK_TARGET_OS" = "xlinux"; then
if test "x$TOOLCHAIN_TYPE" = xgcc || test "x$TOOLCHAIN_TYPE" = xclang; then
AC_LANG_PUSH(C)
OLD_CFLAGS="$CFLAGS"
@@ -947,6 +954,17 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
[
AC_MSG_RESULT([yes])
$2SVE_CFLAGS="-march=armv8-a+sve"
# Switching the initialization mode with gcc from 'pattern' to 'zero'
# avoids the use of unsupported `__builtin_clear_padding` for variable
# length aggregates
if test "x$DEBUG_LEVEL" != xrelease && test "x$TOOLCHAIN_TYPE" = xgcc ; then
INIT_ZERO_FLAG="-ftrivial-auto-var-init=zero"
FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$INIT_ZERO_FLAG],
IF_TRUE: [
$2SVE_CFLAGS="${$2SVE_CFLAGS} $INIT_ZERO_FLAG"
]
)
fi
],
[
AC_MSG_RESULT([no])

View File

@@ -513,6 +513,10 @@ AC_DEFUN([JVM_FEATURES_VERIFY],
[
variant=$1
if JVM_FEATURES_IS_ACTIVE(jfr) && ! JVM_FEATURES_IS_ACTIVE(services); then
AC_MSG_ERROR([Specified JVM feature 'jfr' requires feature 'services' for variant '$variant'])
fi
if JVM_FEATURES_IS_ACTIVE(jvmci) && ! (JVM_FEATURES_IS_ACTIVE(compiler1) || \
JVM_FEATURES_IS_ACTIVE(compiler2)); then
AC_MSG_ERROR([Specified JVM feature 'jvmci' requires feature 'compiler2' or 'compiler1' for variant '$variant'])

View File

@@ -393,9 +393,8 @@ EXTERNAL_BUILDJDK := @EXTERNAL_BUILDJDK@
# Whether the boot jdk jar supports --date=TIMESTAMP
BOOT_JDK_JAR_SUPPORTS_DATE := @BOOT_JDK_JAR_SUPPORTS_DATE@
# When compiling Java source to be run by the boot jdk
# use these extra flags, eg -source 6 -target 6
BOOT_JDK_SOURCETARGET := @BOOT_JDK_SOURCETARGET@
# The oldest supported boot jdk version
OLDEST_BOOT_JDK_VERSION := @OLDEST_BOOT_JDK_VERSION@
# Information about the build system
NUM_CORES := @NUM_CORES@

View File

@@ -38,10 +38,15 @@ include JarArchive.gmk
###
# Create classes that can run on the bootjdk
TARGET_RELEASE_BOOTJDK := $(BOOT_JDK_SOURCETARGET)
# -Xlint:-options is added to avoid the warning
# "system modules path not set in conjunction with -source"
TARGET_RELEASE_BOOTJDK := -source $(OLDEST_BOOT_JDK_VERSION) \
-target $(OLDEST_BOOT_JDK_VERSION) -Xlint:-options
# Create classes that can be used in (or be a part of) the new jdk we're building
TARGET_RELEASE_NEWJDK := -source $(JDK_SOURCE_TARGET_VERSION) -target $(JDK_SOURCE_TARGET_VERSION)
# Create classes that can be used in (or be a part of) the new jdk we're
# building
TARGET_RELEASE_NEWJDK := -source $(JDK_SOURCE_TARGET_VERSION) \
-target $(JDK_SOURCE_TARGET_VERSION)
# Create classes that can be used in JDK 8, for legacy support
TARGET_RELEASE_JDK8 := --release 8
@@ -178,6 +183,10 @@ define SetupJavaCompilationBody
$1_SAFE_NAME := $$(strip $$(subst /,_, $1))
ifeq ($$($1_LOG_ACTION), )
$1_LOG_ACTION := Compiling
endif
ifeq ($$($1_SMALL_JAVA), )
# If unspecified, default to true
$1_SMALL_JAVA := true
@@ -472,7 +481,7 @@ define SetupJavaCompilationBody
# list of files.
$$($1_FILELIST): $$($1_SRCS) $$($1_VARDEPS_FILE)
$$(call MakeDir, $$(@D))
$$(call LogWarn, Compiling up to $$(words $$($1_SRCS)) files for $1)
$$(call LogWarn, $$($1_LOG_ACTION) up to $$(words $$($1_SRCS)) files for $1)
$$(eval $$(call ListPathsSafely, $1_SRCS, $$($1_FILELIST)))
# Create a $$($1_MODFILELIST) file with significant modified dependencies

View File

@@ -33,7 +33,7 @@ include $(TOPDIR)/make/conf/module-loader-map.conf
# Append platform-specific and upgradeable modules
PLATFORM_MODULES += $(PLATFORM_MODULES_$(OPENJDK_TARGET_OS)) \
$(UPGRADEABLE_PLATFORM_MODULES)
$(UPGRADEABLE_PLATFORM_MODULES) $(CUSTOM_UPGRADEABLE_PLATFORM_MODULES)
################################################################################
# Setup module sets for docs
@@ -216,7 +216,7 @@ endif
# Find dependencies ("requires") for a given module.
# Param 1: Module to find dependencies for.
FindDepsForModule = \
$(DEPS_$(strip $1))
$(filter-out $(IMPORT_MODULES), $(DEPS_$(strip $1)))
# Find dependencies ("requires") transitively in 3 levels for a given module.
# Param 1: Module to find dependencies for.
@@ -254,7 +254,8 @@ FindTransitiveIndirectDepsForModules = \
# Upgradeable modules are those that are either defined as upgradeable or that
# require an upradeable module.
FindAllUpgradeableModules = \
$(sort $(filter-out $(MODULES_FILTER), $(UPGRADEABLE_PLATFORM_MODULES)))
$(sort $(filter-out $(MODULES_FILTER), \
$(UPGRADEABLE_PLATFORM_MODULES) $(CUSTOM_UPGRADEABLE_PLATFORM_MODULES)))
################################################################################
@@ -316,6 +317,19 @@ define ReadImportMetaData
$$(eval $$(call ReadSingleImportMetaData, $$m)))
endef
################################################################################
# Get a full snippet path for the current module and a given base name.
#
# Param 1 - The base name of the snippet file to include
GetModuleSnippetName = \
$(if $(CUSTOM_MODULE_MAKE_ROOT), \
$(if $(wildcard $(CUSTOM_MODULE_MAKE_ROOT)/$(MODULE)/$(strip $1).gmk), \
$(CUSTOM_MODULE_MAKE_ROOT)/$(MODULE)/$(strip $1).gmk, \
$(wildcard modules/$(MODULE)/$(strip $1).gmk) \
), \
$(wildcard modules/$(MODULE)/$(strip $1).gmk) \
)
################################################################################
endif # include guard

View File

@@ -1,5 +1,5 @@
#
# Copyright (c) 2014, 2023, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2014, 2025, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -51,7 +51,6 @@ DOCS_MODULES= \
jdk.jdwp.agent \
jdk.jfr \
jdk.jlink \
jdk.jsobject \
jdk.jshell \
jdk.jstatd \
jdk.localedata \

View File

@@ -62,7 +62,6 @@ UPGRADEABLE_PLATFORM_MODULES= \
java.compiler \
jdk.graal.compiler \
jdk.graal.compiler.management \
jdk.jsobject \
#
PLATFORM_MODULES= \

View File

@@ -67,6 +67,8 @@ ATTRIBUTE_DEFAULT_VISIBILITY ATTRIBUTE_USED const char* CDECL __asan_default_opt
#endif
"print_suppressions=0,"
"handle_segv=0,"
// A lot of libjsig related tests fail because of the link order check; so better avoid it
"verify_asan_link_order=0,"
// See https://github.com/google/sanitizers/issues/1322. Hopefully this is resolved
// at some point and we can remove this option.
"intercept_tls_get_addr=0";

View File

@@ -62,5 +62,8 @@
// thread so it is easier to track down. You can override these options by setting the environment
// variable UBSAN_OPTIONS.
ATTRIBUTE_DEFAULT_VISIBILITY ATTRIBUTE_USED const char* __ubsan_default_options() {
return "halt_on_error=1,print_stacktrace=1" _LLVM_SYMBOLIZER(LLVM_SYMBOLIZER);
return "halt_on_error=1,"
"handle_segv=0,"
"handle_sigbus=0,"
"print_stacktrace=1" _LLVM_SYMBOLIZER(LLVM_SYMBOLIZER);
}

View File

@@ -39,7 +39,7 @@
#
# make TARGETS="aarch64-linux-gnu" BASE_OS=Fedora
# or
# make TARGETS="arm-linux-gnueabihf ppc64-linux-gnu" BASE_OS=Fedora BASE_OS_VERSION=17
# make TARGETS="arm-linux-gnueabihf ppc64le-linux-gnu" BASE_OS=Fedora BASE_OS_VERSION=17
#
# to build several devkits for a specific OS version at once.
# You can find the final results under ../../build/devkit/result/<host>-to-<target>
@@ -50,7 +50,7 @@
# makefile again for cross compilation. Ex:
#
# PATH=$PWD/../../build/devkit/result/x86_64-linux-gnu-to-x86_64-linux-gnu/bin:$PATH \
# make TARGETS="arm-linux-gnueabihf,ppc64-linux-gnu" BASE_OS=Fedora
# make TARGETS="arm-linux-gnueabihf ppc64le-linux-gnu" BASE_OS=Fedora
#
# This is the makefile which iterates over all host and target platforms.
#

View File

@@ -69,15 +69,26 @@ else ifeq ($(BASE_OS), Fedora)
ifeq ($(BASE_OS_VERSION), )
BASE_OS_VERSION := $(DEFAULT_OS_VERSION)
endif
ifeq ($(filter aarch64 armhfp ppc64le riscv64 s390x x86_64, $(ARCH)), )
$(error Only "aarch64 armhfp ppc64le riscv64 s390x x86_64" architectures are supported for Fedora, but "$(ARCH)" was requested)
endif
ifeq ($(ARCH), riscv64)
ifeq ($(filter 38 39 40 41, $(BASE_OS_VERSION)), )
$(error Only Fedora 38-41 are supported for "$(ARCH)", but Fedora $(BASE_OS_VERSION) was requested)
endif
BASE_URL := http://fedora.riscv.rocks/repos-dist/f$(BASE_OS_VERSION)/latest/$(ARCH)/Packages/
else
LATEST_ARCHIVED_OS_VERSION := 35
ifeq ($(filter x86_64 armhfp, $(ARCH)), )
LATEST_ARCHIVED_OS_VERSION := 36
ifeq ($(filter aarch64 armhfp x86_64, $(ARCH)), )
FEDORA_TYPE := fedora-secondary
else
FEDORA_TYPE := fedora/linux
endif
ifeq ($(ARCH), armhfp)
ifneq ($(BASE_OS_VERSION), 36)
$(error Fedora 36 is the last release supporting "armhfp", but $(BASE_OS) was requested)
endif
endif
NOT_ARCHIVED := $(shell [ $(BASE_OS_VERSION) -gt $(LATEST_ARCHIVED_OS_VERSION) ] && echo true)
ifeq ($(NOT_ARCHIVED),true)
BASE_URL := https://dl.fedoraproject.org/pub/$(FEDORA_TYPE)/releases/$(BASE_OS_VERSION)/Everything/$(ARCH)/os/Packages/
@@ -464,7 +475,7 @@ ifeq ($(ARCH), armhfp)
$(BUILDDIR)/$(gcc_ver)/Makefile : CONFIG += --with-float=hard
endif
ifneq ($(filter riscv64 ppc64 ppc64le s390x, $(ARCH)), )
ifneq ($(filter riscv64 ppc64le s390x, $(ARCH)), )
# We only support 64-bit on these platforms anyway
CONFIG += --disable-multilib
endif

View File

@@ -64,6 +64,30 @@ IS_WSL=`echo $UNAME_RELEASE | grep Microsoft`
IS_MSYS=`echo $UNAME_OS | grep -i Msys`
MSYS2_ARG_CONV_EXCL="*" # make "cmd.exe /c" work for msys2
CMD_EXE="cmd.exe /c"
# Detect host architecture to determine devkit platform support
# Note: The devkit always includes x86, x64, and aarch64 libraries and tools
# The difference is in toolchain capabilities:
# - On x64|AMD64 hosts: aarch64 tools are cross-compilation tools (Hostx64/arm64)
# - On aarch64|ARMv8 hosts: aarch64 tools are native tools (Hostarm64/arm64)
HOST_ARCH=`echo $PROCESSOR_IDENTIFIER`
case $HOST_ARCH in
AMD64)
echo "Running on x64 host - generating devkit with native x86/x64 tools and cross-compiled aarch64 tools."
echo "For native aarch64 compilation tools, run this script on a Windows/aarch64 machine."
SUPPORTED_PLATFORMS="x86, x64 (native) and aarch64 (cross-compiled)"
;;
ARMv8)
echo "Running on aarch64 host - generating devkit with native tools for all platforms (x86, x64, aarch64)."
SUPPORTED_PLATFORMS="x86, x64, and aarch64 (all native)"
;;
*)
echo "Unknown host architecture: $HOST_ARCH"
echo "Proceeding with devkit generation - toolchain capabilities may vary."
SUPPORTED_PLATFORMS="x86, x64, and aarch64"
;;
esac
if test "x$IS_CYGWIN" != "x"; then
BUILD_ENV="cygwin"
elif test "x$IS_MSYS" != "x"; then
@@ -139,6 +163,7 @@ DEVKIT_ROOT="${BUILD_DIR}/VS${VS_VERSION}-${VS_VERSION_SP}-devkit"
DEVKIT_BUNDLE="${DEVKIT_ROOT}.tar.gz"
echo "Creating devkit in $DEVKIT_ROOT"
echo "Platform support: $SUPPORTED_PLATFORMS"
MSVCR_DLL=${MSVC_CRT_DIR}/vcruntime${VS_DLL_VERSION}.dll
VCRUNTIME_1_DLL=${MSVC_CRT_DIR}/vcruntime${VS_DLL_VERSION}_1.dll
@@ -156,7 +181,11 @@ REDIST_SUBDIR="VC/Redist/MSVC/$REDIST_VERSION"
echo "Copying VC..."
rm -rf $DEVKIT_ROOT/VC
mkdir -p $DEVKIT_ROOT/VC/bin
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/arm64" $DEVKIT_ROOT/VC/bin/
if [ -d "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostarm64/arm64" ]; then
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostarm64/arm64" $DEVKIT_ROOT/VC/bin/
else
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/arm64" $DEVKIT_ROOT/VC/bin/
fi
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/x64" $DEVKIT_ROOT/VC/bin/
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx86/x86" $DEVKIT_ROOT/VC/bin/
mkdir -p $DEVKIT_ROOT/VC/lib

View File

@@ -12,12 +12,17 @@
],
"extensions": {
"recommendations": [
"oracle.oracle-java",
// {{INDEXER_EXTENSIONS}}
]
},
"settings": {
// {{INDEXER_SETTINGS}}
// Java extension
"jdk.project.jdkhome": "{{OUTPUTDIR}}/jdk",
"jdk.java.onSave.organizeImports": false, // prevents unnecessary changes
// Additional conventions
"files.associations": {
"*.gmk": "makefile"

View File

@@ -0,0 +1,73 @@
/*
* Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package build.tools.generatecharacter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class CaseFolding {
public static void main(String[] args) throws Throwable {
if (args.length != 3) {
System.err.println("Usage: java CaseFolding TemplateFile CaseFolding.txt CaseFolding.java");
System.exit(1);
}
var templateFile = Paths.get(args[0]);
var caseFoldingTxt = Paths.get(args[1]);
var genSrcFile = Paths.get(args[2]);
var supportedTypes = "^.*; [CTS]; .*$";
var caseFoldingEntries = Files.lines(caseFoldingTxt)
.filter(line -> !line.startsWith("#") && line.matches(supportedTypes))
.map(line -> {
String[] cols = line.split("; ");
return new String[] {cols[0], cols[1], cols[2]};
})
.filter(cols -> {
// the folding case doesn't map back to the original char.
var cp1 = Integer.parseInt(cols[0], 16);
var cp2 = Integer.parseInt(cols[2], 16);
return Character.toUpperCase(cp2) != cp1 && Character.toLowerCase(cp2) != cp1;
})
.map(cols -> String.format(" entry(0x%s, 0x%s)", cols[0], cols[2]))
.collect(Collectors.joining(",\n", "", ""));
// hack, hack, hack! the logic does not pick 0131. just add manually to support 'I's.
// 0049; T; 0131; # LATIN CAPITAL LETTER I
final String T_0x0131_0x49 = String.format(" entry(0x%04x, 0x%04x),\n", 0x0131, 0x49);
// Generate .java file
Files.write(
genSrcFile,
Files.lines(templateFile)
.map(line -> line.contains("%%%Entries") ? T_0x0131_0x49 + caseFoldingEntries : line)
.collect(Collectors.toList()),
StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
}
}

View File

@@ -0,0 +1,161 @@
/*
* Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package flagsgenerator;
import com.sun.source.tree.CompilationUnitTree;
import com.sun.source.util.JavacTask;
import com.sun.source.util.TreePath;
import com.sun.source.util.Trees;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
import java.util.stream.Collectors;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.util.ElementFilter;
import javax.tools.ToolProvider;
public class FlagsGenerator {
public static void main(String... args) throws IOException {
var compiler = ToolProvider.getSystemJavaCompiler();
try (var fm = compiler.getStandardFileManager(null, null, null)) {
JavacTask task = (JavacTask) compiler.getTask(null, null, d -> {}, null, null, fm.getJavaFileObjects(args[0]));
Trees trees = Trees.instance(task);
CompilationUnitTree cut = task.parse().iterator().next();
task.analyze();
TypeElement clazz = (TypeElement) trees.getElement(new TreePath(new TreePath(cut), cut.getTypeDecls().get(0)));
Map<Integer, List<String>> flag2Names = new TreeMap<>();
Map<FlagTarget, Map<Integer, List<String>>> target2FlagBit2Fields = new EnumMap<>(FlagTarget.class);
Map<String, String> customToString = new HashMap<>();
Set<String> noToString = new HashSet<>();
for (VariableElement field : ElementFilter.fieldsIn(clazz.getEnclosedElements())) {
String flagName = field.getSimpleName().toString();
for (AnnotationMirror am : field.getAnnotationMirrors()) {
switch (am.getAnnotationType().toString()) {
case "com.sun.tools.javac.code.Flags.Use" -> {
long flagValue = ((Number) field.getConstantValue()).longValue();
int flagBit = 63 - Long.numberOfLeadingZeros(flagValue);
flag2Names.computeIfAbsent(flagBit, _ -> new ArrayList<>())
.add(flagName);
List<?> originalTargets = (List<?>) valueOfValueAttribute(am);
originalTargets.stream()
.map(value -> FlagTarget.valueOf(value.toString()))
.forEach(target -> target2FlagBit2Fields.computeIfAbsent(target, _ -> new HashMap<>())
.computeIfAbsent(flagBit, _ -> new ArrayList<>())
.add(flagName));
}
case "com.sun.tools.javac.code.Flags.CustomToStringValue" -> {
customToString.put(flagName, (String) valueOfValueAttribute(am));
}
case "com.sun.tools.javac.code.Flags.NoToStringValue" -> {
noToString.add(flagName);
}
}
}
}
//verify there are no flag overlaps:
for (Entry<FlagTarget, Map<Integer, List<String>>> targetAndFlag : target2FlagBit2Fields.entrySet()) {
for (Entry<Integer, List<String>> flagAndFields : targetAndFlag.getValue().entrySet()) {
if (flagAndFields.getValue().size() > 1) {
throw new AssertionError("duplicate flag for target: " + targetAndFlag.getKey() +
", flag: " + flagAndFields.getKey() +
", flags fields: " + flagAndFields.getValue());
}
}
}
try (PrintWriter out = new PrintWriter(Files.newBufferedWriter(Paths.get(args[1])))) {
out.println("""
package com.sun.tools.javac.code;
public enum FlagsEnum {
""");
for (Entry<Integer, List<String>> e : flag2Names.entrySet()) {
String constantName = e.getValue().stream().collect(Collectors.joining("_OR_"));
String toString = e.getValue()
.stream()
.filter(n -> !noToString.contains(n))
.map(n -> customToString.getOrDefault(n, n.toLowerCase(Locale.US)))
.collect(Collectors.joining(" or "));
out.println(" " + constantName + "(1L<<" + e.getKey() + ", \"" + toString + "\"),");
}
out.println("""
;
private final long value;
private final String toString;
private FlagsEnum(long value, String toString) {
this.value = value;
this.toString = toString;
}
public long value() {
return value;
}
public String toString() {
return toString;
}
}
""");
}
}
}
private static Object valueOfValueAttribute(AnnotationMirror am) {
return am.getElementValues()
.values()
.iterator()
.next()
.getValue();
}
private enum FlagTarget {
BLOCK,
CLASS,
METHOD,
MODULE,
PACKAGE,
TYPE_VAR,
VARIABLE;
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -47,6 +47,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
@@ -93,7 +94,9 @@ public class ClassGenerator {
FACTORY_FIELD_LINT("factory.decl.field.lint"),
WILDCARDS_EXTENDS("wildcards.extends"),
SUPPRESS_WARNINGS("suppress.warnings"),
LINT_CATEGORY("lint.category");
LINT_CATEGORY("lint.category"),
DIAGNOSTIC_FLAGS_EMPTY("diagnostic.flags.empty"),
DIAGNOSTIC_FLAGS_NON_EMPTY("diagnostic.flags.non-empty");
/** stub key (as it appears in the property file) */
String key;
@@ -259,17 +262,30 @@ public class ClassGenerator {
.map(MessageLine::lintCategory)
.findFirst().orElse(null);
//System.out.println("category for " + key + " = " + lintCategory);
String diagnosticFlags = lines.stream()
.filter(MessageLine::isDiagnosticFlags)
.map(MessageLine::diagnosticFlags)
.flatMap(Stream::of)
.map(s -> s.replace('-', '_'))
.map(s -> s.toUpperCase(Locale.ROOT))
.collect(Collectors.joining(", "));
String factoryName = factoryName(key);
if (msgInfo.getTypes().isEmpty()) {
//generate field
String factoryField;
if (lintCategory == null) {
factoryField = StubKind.FACTORY_FIELD.format(k.keyClazz, factoryName,
diagnosticFlags.isEmpty() ?
StubKind.DIAGNOSTIC_FLAGS_EMPTY.format() :
StubKind.DIAGNOSTIC_FLAGS_NON_EMPTY.format(diagnosticFlags),
"\"" + keyParts[0] + "\"",
"\"" + Stream.of(keyParts).skip(2).collect(Collectors.joining(".")) + "\"",
javadoc);
} else {
factoryField = StubKind.FACTORY_FIELD_LINT.format(k.keyClazz, factoryName,
diagnosticFlags.isEmpty() ?
StubKind.DIAGNOSTIC_FLAGS_EMPTY.format() :
StubKind.DIAGNOSTIC_FLAGS_NON_EMPTY.format(diagnosticFlags),
StubKind.LINT_CATEGORY.format("\"" + lintCategory + "\""),
"\"" + keyParts[0] + "\"",
"\"" + Stream.of(keyParts).skip(2).collect(Collectors.joining(".")) + "\"",
@@ -287,11 +303,17 @@ public class ClassGenerator {
String methodBody;
if (lintCategory == null) {
methodBody = StubKind.FACTORY_METHOD_BODY.format(k.keyClazz,
diagnosticFlags.isEmpty() ?
StubKind.DIAGNOSTIC_FLAGS_EMPTY.format() :
StubKind.DIAGNOSTIC_FLAGS_NON_EMPTY.format(diagnosticFlags),
"\"" + keyParts[0] + "\"",
"\"" + Stream.of(keyParts).skip(2).collect(Collectors.joining(".")) + "\"",
argNames.stream().collect(Collectors.joining(", ")));
} else {
methodBody = StubKind.FACTORY_METHOD_BODY_LINT.format(k.keyClazz,
diagnosticFlags.isEmpty() ?
StubKind.DIAGNOSTIC_FLAGS_EMPTY.format() :
StubKind.DIAGNOSTIC_FLAGS_NON_EMPTY.format(diagnosticFlags),
StubKind.LINT_CATEGORY.format("\"" + lintCategory + "\""),
"\"" + keyParts[0] + "\"",
"\"" + Stream.of(keyParts).skip(2).collect(Collectors.joining(".")) + "\"",

View File

@@ -32,7 +32,8 @@ import java.util.List;
* A message within the message file.
* A message is a series of lines containing a "name=value" property,
* optionally preceded by a comment describing the use of placeholders
* such as {0}, {1}, etc within the property value.
* such as {0}, {1}, etc within the property value, a lint category,
* and/or a list of diagnostic flags.
*/
public final class Message {
final MessageLine firstLine;
@@ -49,7 +50,7 @@ public final class Message {
public MessageInfo getMessageInfo() {
if (messageInfo == null) {
MessageLine l = firstLine.prev;
if (l != null && l.isLint()) {
while (l != null && (l.isLint() || l.isDiagnosticFlags())) {
l = l.prev;
}
if (l != null && l.isInfo())
@@ -74,7 +75,7 @@ public final class Message {
while (l.text.isEmpty())
l = l.next;
} else {
if (l.prev != null && (l.prev.isInfo() || l.prev.isLint()))
while (l.prev != null && (l.prev.isInfo() || l.prev.isLint() || l.prev.isDiagnosticFlags()))
l = l.prev;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,7 @@
package propertiesparser.parser;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -39,6 +40,7 @@ public class MessageLine {
static final Pattern infoPattern = Pattern.compile(String.format("# ([0-9]+: %s, )*[0-9]+: %s",
typePattern.pattern(), typePattern.pattern()));
static final Pattern lintPattern = Pattern.compile("# lint: ([a-z\\-]+)");
static final Pattern diagnosticFlagsPattern = Pattern.compile("# flags: ([a-z\\-]+(, ([a-z\\-]+))*)");
public String text;
MessageLine prev;
@@ -69,6 +71,19 @@ public class MessageLine {
}
}
public boolean isDiagnosticFlags() {
return diagnosticFlagsPattern.matcher(text).matches();
}
public String[] diagnosticFlags() {
Matcher matcher = diagnosticFlagsPattern.matcher(text);
if (matcher.matches()) {
return matcher.group(1).split(", ", -1);
} else {
return null;
}
}
boolean hasContinuation() {
return (next != null) && text.endsWith("\\");
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, 2024, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -76,7 +76,7 @@ public interface MessageType {
ANNOTATION("annotation", "Compound", "com.sun.tools.javac.code.Attribute"),
BOOLEAN("boolean", "boolean", null),
COLLECTION("collection", "Collection", "java.util"),
FLAG("flag", "Flag", "com.sun.tools.javac.code.Flags"),
FLAG("flag", "FlagsEnum", "com.sun.tools.javac.code"),
FRAGMENT("fragment", "Fragment", null),
DIAGNOSTIC("diagnostic", "JCDiagnostic", "com.sun.tools.javac.util"),
MODIFIER("modifier", "Modifier", "javax.lang.model.element"),

View File

@@ -1,5 +1,5 @@
#
# Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@ toplevel.decl=\
package {0};\n\
\n\
{1}\n\
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticFlag;\n\
import com.sun.tools.javac.util.JCDiagnostic.Error;\n\
import com.sun.tools.javac.util.JCDiagnostic.Warning;\n\
import com.sun.tools.javac.util.JCDiagnostic.LintWarning;\n\
@@ -34,6 +35,10 @@ toplevel.decl=\
import com.sun.tools.javac.util.JCDiagnostic.Fragment;\n\
import com.sun.tools.javac.code.Lint.LintCategory;\n\
\n\
import java.util.EnumSet;\n\
\n\
import static com.sun.tools.javac.util.JCDiagnostic.DiagnosticFlag.*;\n\
\n\
public class {2} '{'\n\
{3}\n\
'}'\n
@@ -58,22 +63,22 @@ factory.decl.method.arg=\
arg{0}
factory.decl.method.body=\
return new {0}({1}, {2}, {3});
return new {0}({1}, {2}, {3}, {4});
factory.decl.method.body.lint=\
return new {0}({1}, {2}, {3}, {4});
return new {0}({1}, {2}, {3}, {4}, {5});
factory.decl.field=\
/**\n\
' '* {4}\n\
' '*/\n\
public static final {0} {1} = new {0}({2}, {3});
public static final {0} {1} = new {0}({2}, {3}, {4});
factory.decl.field.lint=\
/**\n\
' '* {5}\n\
' '*/\n\
public static final {0} {1} = new {0}({2}, {3}, {4});
public static final {0} {1} = new {0}({2}, {3}, {4}, {5});
wildcards.extends=\
{0}<? extends {1}>
@@ -84,3 +89,9 @@ suppress.warnings=\
lint.category=\
LintCategory.get({0}).get()
diagnostic.flags.empty=\
EnumSet.noneOf(DiagnosticFlag.class)
diagnostic.flags.non-empty=\
EnumSet.of({0})

View File

@@ -50,5 +50,22 @@ TARGETS += $(GENSRC_INDICCONJUNCTBREAK)
################################################################################
GENSRC_CASEFOLDING := $(SUPPORT_OUTPUTDIR)/gensrc/java.base/jdk/internal/util/regex/CaseFolding.java
CASEFOLDINGTEMP := $(MODULE_SRC)/share/classes/jdk/internal/util/regex/CaseFolding.java.template
CASEFOLDINGTXT := $(MODULE_SRC)/share/data/unicodedata/CaseFolding.txt
$(GENSRC_CASEFOLDING): $(BUILD_TOOLS_JDK) $(CASEFOLDINGTEMP) $(CASEFOLDINGTXT)
$(call LogInfo, Generating $@)
$(call MakeTargetDir)
$(TOOL_GENERATECASEFOLDING) \
$(CASEFOLDINGTEMP) \
$(CASEFOLDINGTXT) \
$(GENSRC_CASEFOLDING)
TARGETS += $(GENSRC_CASEFOLDING)
################################################################################
endif # include guard
include MakeIncludeEnd.gmk

View File

@@ -177,7 +177,8 @@ ifeq ($(ENABLE_HEADLESS_ONLY), false)
endif
LIBSPLASHSCREEN_CFLAGS += -DSPLASHSCREEN -DPNG_NO_MMX_CODE \
-DPNG_ARM_NEON_OPT=0 -DPNG_ARM_NEON_IMPLEMENTATION=0
-DPNG_ARM_NEON_OPT=0 -DPNG_ARM_NEON_IMPLEMENTATION=0 \
-DPNG_LOONGARCH_LSX_OPT=0
ifeq ($(call isTargetOs, linux)+$(call isTargetCpuArch, ppc), true+true)
LIBSPLASHSCREEN_CFLAGS += -DPNG_POWERPC_VSX_OPT=0

View File

@@ -41,17 +41,17 @@ $(eval $(call SetupCompileProperties, COMPILE_PROPERTIES, \
TARGETS += $(COMPILE_PROPERTIES)
################################################################################
#
# Compile properties files into enum-like classes using the propertiesparser tool
#
# To avoid reevaluating the compilation setup for the tools each time this file
# is included, the following trick is used to be able to declare a dependency on
# the built tools.
BUILD_TOOLS_LANGTOOLS := $(call SetupJavaCompilationCompileTarget, \
BUILD_TOOLS_LANGTOOLS, $(BUILDTOOLS_OUTPUTDIR)/langtools_tools_classes)
################################################################################
#
# Compile properties files into enum-like classes using the propertiesparser tool
#
TOOL_PARSEPROPERTIES_CMD := $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/langtools_tools_classes \
propertiesparser.PropertiesParser
@@ -76,3 +76,26 @@ $(eval $(call SetupExecute, PARSEPROPERTIES, \
TARGETS += $(PARSEPROPERTIES)
################################################################################
#
# Generate FlagsEnum from Flags constants
#
TOOL_FLAGSGENERATOR_CMD := $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/langtools_tools_classes \
flagsgenerator.FlagsGenerator
FLAGS_SRC := \
$(MODULE_SRC)/share/classes/com/sun/tools/javac/code/Flags.java
FLAGS_OUT := \
$(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/com/sun/tools/javac/code/FlagsEnum.java
$(eval $(call SetupExecute, FLAGSGENERATOR, \
WARN := Generating FlagsEnum, \
DEPS := $(FLAGS_SRC) $(BUILD_TOOLS_LANGTOOLS), \
OUTPUT_FILE := $(FLAGS_OUT), \
COMMAND := $(TOOL_FLAGSGENERATOR_CMD) $(FLAGS_SRC) $(FLAGS_OUT), \
))
TARGETS += $(FLAGSGENERATOR)
################################################################################

View File

@@ -33,4 +33,6 @@ DISABLED_WARNINGS_java += dangling-doc-comments this-escape
JAVAC_FLAGS += -parameters -XDstringConcat=inline
TARGET_RELEASE := $(TARGET_RELEASE_BOOTJDK)
################################################################################

View File

@@ -121,15 +121,15 @@ ifeq ($(call isTargetOs, windows), true)
TARGETS += $(BUILD_LIBJPACKAGE)
##############################################################################
## Build libwixhelper
## Build libmsica
##############################################################################
# Build Wix custom action helper
# Build MSI custom action library
# Output library in resources dir, and symbols in the object dir
$(eval $(call SetupJdkLibrary, BUILD_LIBWIXHELPER, \
NAME := wixhelper, \
$(eval $(call SetupJdkLibrary, BUILD_LIBMSICA, \
NAME := msica, \
OUTPUT_DIR := $(JPACKAGE_OUTPUT_DIR), \
SYMBOLS_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libwixhelper, \
SYMBOLS_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libmsica, \
ONLY_EXPORTED := true, \
OPTIMIZATION := LOW, \
EXTRA_SRC := common, \
@@ -139,7 +139,7 @@ ifeq ($(call isTargetOs, windows), true)
LIBS_windows := msi.lib ole32.lib shell32.lib shlwapi.lib user32.lib, \
))
TARGETS += $(BUILD_LIBWIXHELPER)
TARGETS += $(BUILD_LIBMSICA)
##############################################################################
## Build msiwrapper

View File

@@ -92,6 +92,7 @@ $(eval $(call SetupJavaCompilation, BUILD_JDK_MICROBENCHMARK, \
--add-exports java.base/jdk.internal.classfile.impl=ALL-UNNAMED \
--add-exports java.base/jdk.internal.event=ALL-UNNAMED \
--add-exports java.base/jdk.internal.foreign=ALL-UNNAMED \
--add-exports java.base/jdk.internal.jimage=ALL-UNNAMED \
--add-exports java.base/jdk.internal.misc=ALL-UNNAMED \
--add-exports java.base/jdk.internal.util=ALL-UNNAMED \
--add-exports java.base/jdk.internal.vm=ALL-UNNAMED \

View File

@@ -62,7 +62,8 @@ BUILD_JDK_JTREG_LIBRARIES_JDK_LIBS_libGetXSpace := java.base:libjava
ifeq ($(call isTargetOs, windows), true)
BUILD_JDK_JTREG_EXCLUDE += libDirectIO.c libInheritedChannel.c \
libExplicitAttach.c libImplicitAttach.c \
exelauncher.c libFDLeaker.c exeFDLeakTester.c
exelauncher.c libFDLeaker.c exeFDLeakTester.c \
libChangeSignalDisposition.c exePrintSignalDisposition.c
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exeNullCallerTest := $(LIBCXX)
BUILD_JDK_JTREG_EXECUTABLES_LIBS_exerevokeall := advapi32.lib

View File

@@ -31,10 +31,10 @@
ifndef SOURCE
export SOURCE := 7
export SOURCE := 8
endif
ifndef TARGET
export TARGET := 7
export TARGET := 8
endif
ifndef JAVAC
export JAVAC := javac

View File

@@ -39,12 +39,12 @@
<property name="dist" location="dist"/>
<property name="resources" location="resources"/>
<condition property="source" value="7">
<condition property="source" value="8">
<not>
<isset property="source"/>
</not>
</condition>
<condition property="target" value="7">
<condition property="target" value="8">
<not>
<isset property="target"/>
</not>
@@ -54,11 +54,6 @@
<isset property="java"/>
</not>
</condition>
<condition property="javac" value="javac">
<not>
<isset property="javac"/>
</not>
</condition>
<target name="init">
<!-- Create the time stamp -->
@@ -70,7 +65,7 @@
<target name="compile" depends="init"
description="compile the source " >
<!-- Compile the java code from ${src} into ${build} -->
<javac debug="off" source="${source}" target="${target}" srcdir="${src}" destdir="${build}" fork="true" executable="${javac}"/>
<javac debug="off" source="${source}" target="${target}" srcdir="${src}" destdir="${build}"/>
</target>
<target name="run" depends="dist"

View File

@@ -270,7 +270,7 @@ public class J2DAnalyzer {
} else {
double overallscore = totalscore[i]/numtests[i];
System.out.println(" Number of tests: "+numtests[i]);
System.out.println(" Overall average: "+overallscore);
System.out.printf( " Overall average: %-10.4f%n", overallscore);
System.out.println(" Best spread: "+bestspread[i]+
"% variance");
System.out.println(" Worst spread: "+worstspread[i]+

View File

@@ -362,7 +362,7 @@ public class RunWindow extends JPanel implements Runnable, ActionListener {
/**
* This class contains initial values for instance variables of 'RunWindow' class,
* and its instance is used in creation of 'RunWindow' object. Values parsed from
* certain command line options of the demo or from the demo applet parameters are
* certain command line options of the demo
* set to the fields of this class instance. It is a part of the fix which changed
* static variables for instance variables in certain demo classes.
*

View File

@@ -406,13 +406,6 @@ public final class Tools extends JPanel implements ActionListener,
if (pDialogState) {
printJob.print(aset);
}
} catch (@SuppressWarnings("removal") java.security.AccessControlException ace) {
String errmsg = "Applet access control exception; to allow "
+ "access to printer, set\n"
+ "permission for \"queuePrintJob\" in "
+ "RuntimePermission.";
JOptionPane.showMessageDialog(this, errmsg, "Printer Access Error",
JOptionPane.ERROR_MESSAGE);
} catch (Exception ex) {
Logger.getLogger(Tools.class.getName()).log(Level.SEVERE,
null, ex);

View File

@@ -131,7 +131,7 @@ public class SwingSet2 extends JPanel {
private JEditorPane demoSrcPane = null;
// contentPane cache, saved from the applet or application frame
// contentPane cache, saved from the application frame
Container contentPane = null;
@@ -177,7 +177,7 @@ public class SwingSet2 extends JPanel {
/**
* SwingSet2 Main. Called only if we're an application, not an applet.
* SwingSet2 Main.
*/
public static void main(final String[] args) {
// must run in EDT when constructing the GUI components
@@ -716,8 +716,7 @@ public class SwingSet2 extends JPanel {
}
/**
* Returns the content pane whether we're in an applet
* or application
* Returns the content pane
*/
public Container getContentPane() {
if(contentPane == null) {

View File

@@ -456,13 +456,13 @@ SliderDemo.horizontal=Horizontal
SliderDemo.vertical=Vertikal
SliderDemo.plain=Einfach
SliderDemo.a_plain_slider=Ein einfacher Schieberegler
SliderDemo.majorticks=Grobteilungen
SliderDemo.majorticksdescription=Ein Schieberegler mit Grobteilungsmarkierungen
SliderDemo.ticks=Feinteilungen, Teilungen zum Einrasten und Labels
SliderDemo.minorticks=Feinteilungen
SliderDemo.minorticksdescription=Ein Schieberegler mit Grob- und Feinteilungen, mit Teilungen, in die der Schieberegler einrastet, wobei einige Teilungen mit einem sichtbaren Label versehen sind
SliderDemo.majorticks=Hauptteilstriche
SliderDemo.majorticksdescription=Ein Schieberegler mit Hauptteilstrichen
SliderDemo.ticks=Hilfsteilstriche, zum Einrasten und Beschriften
SliderDemo.minorticks=Hilfsteilstriche
SliderDemo.minorticksdescription=Ein Schieberegler mit Haupt- und Hilfsteilstrichen, in die der Schieberegler einrastet, wobei einige Teilstriche mit einer sichtbaren Beschriftung versehen sind
SliderDemo.disabled=Deaktiviert
SliderDemo.disableddescription=Ein Schieberegler mit Grob- und Feinteilungen, der nicht aktiviert ist (kann nicht bearbeitet werden)
SliderDemo.disableddescription=Ein Schieberegler mit Haupt- und Hilfsteilstrichen, der nicht aktiviert ist (kann nicht bearbeitet werden)
### SplitPane Demo ###

View File

@@ -881,6 +881,46 @@ reg_class vectorx_reg(
V31, V31_H, V31_J, V31_K
);
// Class for vector register V10
reg_class v10_veca_reg(
V10, V10_H, V10_J, V10_K
);
// Class for vector register V11
reg_class v11_veca_reg(
V11, V11_H, V11_J, V11_K
);
// Class for vector register V12
reg_class v12_veca_reg(
V12, V12_H, V12_J, V12_K
);
// Class for vector register V13
reg_class v13_veca_reg(
V13, V13_H, V13_J, V13_K
);
// Class for vector register V17
reg_class v17_veca_reg(
V17, V17_H, V17_J, V17_K
);
// Class for vector register V18
reg_class v18_veca_reg(
V18, V18_H, V18_J, V18_K
);
// Class for vector register V23
reg_class v23_veca_reg(
V23, V23_H, V23_J, V23_K
);
// Class for vector register V24
reg_class v24_veca_reg(
V24, V24_H, V24_J, V24_K
);
// Class for 128 bit register v0
reg_class v0_reg(
V0, V0_H
@@ -1765,10 +1805,6 @@ void MachPrologNode::emit(C2_MacroAssembler *masm, PhaseRegAlloc *ra_) const {
// n.b. frame size includes space for return pc and rfp
const int framesize = C->output()->frame_size_in_bytes();
// insert a nop at the start of the prolog so we can patch in a
// branch if we need to invalidate the method later
__ nop();
if (C->clinit_barrier_on_entry()) {
assert(!C->method()->holder()->is_not_initialized(), "initialization should have been started");
@@ -2366,17 +2402,34 @@ int Matcher::max_vector_size(const BasicType bt) {
}
int Matcher::min_vector_size(const BasicType bt) {
int max_size = max_vector_size(bt);
// Limit the min vector size to 8 bytes.
int size = 8 / type2aelembytes(bt);
if (bt == T_BYTE) {
// To support vector api shuffle/rearrange.
size = 4;
} else if (bt == T_BOOLEAN) {
// To support vector api load/store mask.
size = 2;
// Usually, the shortest vector length supported by AArch64 ISA and
// Vector API species is 64 bits. However, we allow 32-bit or 16-bit
// vectors in a few special cases.
int size;
switch(bt) {
case T_BOOLEAN:
// Load/store a vector mask with only 2 elements for vector types
// such as "2I/2F/2L/2D".
size = 2;
break;
case T_BYTE:
// Generate a "4B" vector, to support vector cast between "8B/16B"
// and "4S/4I/4L/4F/4D".
size = 4;
break;
case T_SHORT:
// Generate a "2S" vector, to support vector cast between "4S/8S"
// and "2I/2L/2F/2D".
size = 2;
break;
default:
// Limit the min vector length to 64-bit.
size = 8 / type2aelembytes(bt);
// The number of elements in a vector should be at least 2.
size = MAX2(size, 2);
}
if (size < 2) size = 2;
int max_size = max_vector_size(bt);
return MIN2(size, max_size);
}
@@ -3454,10 +3507,6 @@ encode %{
__ mov(dst_reg, (uint64_t)1);
%}
enc_class aarch64_enc_mov_byte_map_base(iRegP dst, immByteMapBase src) %{
__ load_byte_map_base($dst$$Register);
%}
enc_class aarch64_enc_mov_n(iRegN dst, immN src) %{
Register dst_reg = as_Register($dst$$reg);
address con = (address)$src$$constant;
@@ -4558,20 +4607,6 @@ operand immP_1()
interface(CONST_INTER);
%}
// Card Table Byte Map Base
operand immByteMapBase()
%{
// Get base of card map
predicate(BarrierSet::barrier_set()->is_a(BarrierSet::CardTableBarrierSet) &&
SHENANDOAHGC_ONLY(!BarrierSet::barrier_set()->is_a(BarrierSet::ShenandoahBarrierSet) &&)
(CardTable::CardValue*)n->get_ptr() == ((CardTableBarrierSet*)(BarrierSet::barrier_set()))->card_table()->byte_map_base());
match(ConP);
op_cost(0);
format %{ %}
interface(CONST_INTER);
%}
// Float and Double operands
// Double Immediate
operand immD()
@@ -4974,6 +5009,86 @@ operand vReg()
interface(REG_INTER);
%}
operand vReg_V10()
%{
constraint(ALLOC_IN_RC(v10_veca_reg));
match(vReg);
op_cost(0);
format %{ %}
interface(REG_INTER);
%}
operand vReg_V11()
%{
constraint(ALLOC_IN_RC(v11_veca_reg));
match(vReg);
op_cost(0);
format %{ %}
interface(REG_INTER);
%}
operand vReg_V12()
%{
constraint(ALLOC_IN_RC(v12_veca_reg));
match(vReg);
op_cost(0);
format %{ %}
interface(REG_INTER);
%}
operand vReg_V13()
%{
constraint(ALLOC_IN_RC(v13_veca_reg));
match(vReg);
op_cost(0);
format %{ %}
interface(REG_INTER);
%}
operand vReg_V17()
%{
constraint(ALLOC_IN_RC(v17_veca_reg));
match(vReg);
op_cost(0);
format %{ %}
interface(REG_INTER);
%}
operand vReg_V18()
%{
constraint(ALLOC_IN_RC(v18_veca_reg));
match(vReg);
op_cost(0);
format %{ %}
interface(REG_INTER);
%}
operand vReg_V23()
%{
constraint(ALLOC_IN_RC(v23_veca_reg));
match(vReg);
op_cost(0);
format %{ %}
interface(REG_INTER);
%}
operand vReg_V24()
%{
constraint(ALLOC_IN_RC(v24_veca_reg));
match(vReg);
op_cost(0);
format %{ %}
interface(REG_INTER);
%}
operand vecA()
%{
constraint(ALLOC_IN_RC(vectora_reg));
@@ -6858,20 +6973,6 @@ instruct loadConP1(iRegPNoSp dst, immP_1 con)
ins_pipe(ialu_imm);
%}
// Load Byte Map Base Constant
instruct loadByteMapBase(iRegPNoSp dst, immByteMapBase con)
%{
match(Set dst con);
ins_cost(INSN_COST);
format %{ "adr $dst, $con\t# Byte Map Base" %}
ins_encode(aarch64_enc_mov_byte_map_base(dst, con));
ins_pipe(ialu_imm);
%}
// Load Narrow Pointer Constant
instruct loadConN(iRegNNoSp dst, immN con)
@@ -16180,41 +16281,8 @@ instruct branchLoopEnd(cmpOp cmp, rFlagsReg cr, label lbl)
// ============================================================================
// inlined locking and unlocking
instruct cmpFastLock(rFlagsReg cr, iRegP object, iRegP box, iRegPNoSp tmp, iRegPNoSp tmp2, iRegPNoSp tmp3)
%{
predicate(LockingMode != LM_LIGHTWEIGHT);
match(Set cr (FastLock object box));
effect(TEMP tmp, TEMP tmp2, TEMP tmp3);
ins_cost(5 * INSN_COST);
format %{ "fastlock $object,$box\t! kills $tmp,$tmp2,$tmp3" %}
ins_encode %{
__ fast_lock($object$$Register, $box$$Register, $tmp$$Register, $tmp2$$Register, $tmp3$$Register);
%}
ins_pipe(pipe_serial);
%}
instruct cmpFastUnlock(rFlagsReg cr, iRegP object, iRegP box, iRegPNoSp tmp, iRegPNoSp tmp2)
%{
predicate(LockingMode != LM_LIGHTWEIGHT);
match(Set cr (FastUnlock object box));
effect(TEMP tmp, TEMP tmp2);
ins_cost(5 * INSN_COST);
format %{ "fastunlock $object,$box\t! kills $tmp, $tmp2" %}
ins_encode %{
__ fast_unlock($object$$Register, $box$$Register, $tmp$$Register, $tmp2$$Register);
%}
ins_pipe(pipe_serial);
%}
instruct cmpFastLockLightweight(rFlagsReg cr, iRegP object, iRegP box, iRegPNoSp tmp, iRegPNoSp tmp2, iRegPNoSp tmp3)
%{
predicate(LockingMode == LM_LIGHTWEIGHT);
match(Set cr (FastLock object box));
effect(TEMP tmp, TEMP tmp2, TEMP tmp3);
@@ -16230,7 +16298,6 @@ instruct cmpFastLockLightweight(rFlagsReg cr, iRegP object, iRegP box, iRegPNoSp
instruct cmpFastUnlockLightweight(rFlagsReg cr, iRegP object, iRegP box, iRegPNoSp tmp, iRegPNoSp tmp2, iRegPNoSp tmp3)
%{
predicate(LockingMode == LM_LIGHTWEIGHT);
match(Set cr (FastUnlock object box));
effect(TEMP tmp, TEMP tmp2, TEMP tmp3);

View File

@@ -131,7 +131,7 @@ source %{
// These operations are not profitable to be vectorized on NEON, because no direct
// NEON instructions support them. But the match rule support for them is profitable for
// Vector API intrinsics.
if ((opcode == Op_VectorCastD2X && bt == T_INT) ||
if ((opcode == Op_VectorCastD2X && (bt == T_INT || bt == T_SHORT)) ||
(opcode == Op_VectorCastL2X && bt == T_FLOAT) ||
(opcode == Op_CountLeadingZerosV && bt == T_LONG) ||
(opcode == Op_CountTrailingZerosV && bt == T_LONG) ||
@@ -189,6 +189,18 @@ source %{
return false;
}
break;
case Op_AddReductionVI:
case Op_AndReductionV:
case Op_OrReductionV:
case Op_XorReductionV:
case Op_MinReductionV:
case Op_MaxReductionV:
// Reductions with less than 8 bytes vector length are
// not supported.
if (length_in_bytes < 8) {
return false;
}
break;
case Op_MulReductionVD:
case Op_MulReductionVF:
case Op_MulReductionVI:
@@ -245,6 +257,28 @@ source %{
return false;
}
break;
case Op_SelectFromTwoVector:
// The "tbl" instruction for two vector table is supported only in Neon and SVE2. Return
// false if vector length > 16B but supported SVE version < 2.
// For vector length of 16B, generate SVE2 "tbl" instruction if SVE2 is supported, else
// generate Neon "tbl" instruction to select from two vectors.
// This operation is disabled for doubles and longs on machines with SVE < 2 and instead
// the default VectorRearrange + VectorBlend is generated because the performance of the default
// implementation was better than or equal to the implementation for SelectFromTwoVector.
if (UseSVE < 2 && (type2aelembytes(bt) == 8 || length_in_bytes > 16)) {
return false;
}
// Because the SVE2 "tbl" instruction is unpredicated and partial operations cannot be generated
// using masks, we disable this operation on machines where length_in_bytes < MaxVectorSize
// on that machine with the only exception of 8B vector length. This is because at the time of
// writing this, there is no SVE2 machine available with length_in_bytes > 8 and
// length_in_bytes < MaxVectorSize to test this operation on (for example - there isn't an
// SVE2 machine available with MaxVectorSize = 32 to test a case with length_in_bytes = 16).
if (UseSVE == 2 && length_in_bytes > 8 && length_in_bytes < MaxVectorSize) {
return false;
}
break;
default:
break;
}
@@ -4244,8 +4278,8 @@ instruct vzeroExtStoX(vReg dst, vReg src) %{
assert(bt == T_INT || bt == T_LONG, "must be");
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
if (VM_Version::use_neon_for_vector(length_in_bytes)) {
// 4S to 4I
__ neon_vector_extend($dst$$FloatRegister, T_INT, length_in_bytes,
// 2S to 2I/2L, 4S to 4I
__ neon_vector_extend($dst$$FloatRegister, bt, length_in_bytes,
$src$$FloatRegister, T_SHORT, /* is_unsigned */ true);
} else {
assert(UseSVE > 0, "must be sve");
@@ -4265,11 +4299,11 @@ instruct vzeroExtItoX(vReg dst, vReg src) %{
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
if (VM_Version::use_neon_for_vector(length_in_bytes)) {
// 2I to 2L
__ neon_vector_extend($dst$$FloatRegister, T_LONG, length_in_bytes,
__ neon_vector_extend($dst$$FloatRegister, bt, length_in_bytes,
$src$$FloatRegister, T_INT, /* is_unsigned */ true);
} else {
assert(UseSVE > 0, "must be sve");
__ sve_vector_extend($dst$$FloatRegister, __ D,
__ sve_vector_extend($dst$$FloatRegister, __ elemType_to_regVariant(bt),
$src$$FloatRegister, __ S, /* is_unsigned */ true);
}
%}
@@ -4343,11 +4377,15 @@ instruct vcvtStoX_extend(vReg dst, vReg src) %{
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
if (VM_Version::use_neon_for_vector(length_in_bytes)) {
// 4S to 4I/4F
__ neon_vector_extend($dst$$FloatRegister, T_INT, length_in_bytes,
$src$$FloatRegister, T_SHORT);
if (bt == T_FLOAT) {
__ scvtfv(__ T4S, $dst$$FloatRegister, $dst$$FloatRegister);
if (is_floating_point_type(bt)) {
// 2S to 2F/2D, 4S to 4F
__ neon_vector_extend($dst$$FloatRegister, bt == T_FLOAT ? T_INT : T_LONG,
length_in_bytes, $src$$FloatRegister, T_SHORT);
__ scvtfv(get_arrangement(this), $dst$$FloatRegister, $dst$$FloatRegister);
} else {
// 2S to 2I/2L, 4S to 4I
__ neon_vector_extend($dst$$FloatRegister, bt, length_in_bytes,
$src$$FloatRegister, T_SHORT);
}
} else {
assert(UseSVE > 0, "must be sve");
@@ -4371,7 +4409,7 @@ instruct vcvtItoX_narrow_neon(vReg dst, vReg src) %{
effect(TEMP_DEF dst);
format %{ "vcvtItoX_narrow_neon $dst, $src" %}
ins_encode %{
// 4I to 4B/4S
// 2I to 2S, 4I to 4B/4S
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this, $src);
__ neon_vector_narrow($dst$$FloatRegister, bt,
@@ -4434,28 +4472,29 @@ instruct vcvtItoX(vReg dst, vReg src) %{
// VectorCastL2X
instruct vcvtLtoI_neon(vReg dst, vReg src) %{
predicate(Matcher::vector_element_basic_type(n) == T_INT &&
instruct vcvtLtoX_narrow_neon(vReg dst, vReg src) %{
predicate((Matcher::vector_element_basic_type(n) == T_INT ||
Matcher::vector_element_basic_type(n) == T_SHORT) &&
VM_Version::use_neon_for_vector(Matcher::vector_length_in_bytes(n->in(1))));
match(Set dst (VectorCastL2X src));
format %{ "vcvtLtoI_neon $dst, $src" %}
format %{ "vcvtLtoX_narrow_neon $dst, $src" %}
ins_encode %{
// 2L to 2I
// 2L to 2S/2I
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this, $src);
__ neon_vector_narrow($dst$$FloatRegister, T_INT,
__ neon_vector_narrow($dst$$FloatRegister, bt,
$src$$FloatRegister, T_LONG, length_in_bytes);
%}
ins_pipe(pipe_slow);
%}
instruct vcvtLtoI_sve(vReg dst, vReg src, vReg tmp) %{
predicate((Matcher::vector_element_basic_type(n) == T_INT &&
!VM_Version::use_neon_for_vector(Matcher::vector_length_in_bytes(n->in(1)))) ||
Matcher::vector_element_basic_type(n) == T_BYTE ||
Matcher::vector_element_basic_type(n) == T_SHORT);
instruct vcvtLtoX_narrow_sve(vReg dst, vReg src, vReg tmp) %{
predicate(!VM_Version::use_neon_for_vector(Matcher::vector_length_in_bytes(n->in(1))) &&
!is_floating_point_type(Matcher::vector_element_basic_type(n)) &&
type2aelembytes(Matcher::vector_element_basic_type(n)) <= 4);
match(Set dst (VectorCastL2X src));
effect(TEMP_DEF dst, TEMP tmp);
format %{ "vcvtLtoI_sve $dst, $src\t# KILL $tmp" %}
format %{ "vcvtLtoX_narrow_sve $dst, $src\t# KILL $tmp" %}
ins_encode %{
assert(UseSVE > 0, "must be sve");
BasicType bt = Matcher::vector_element_basic_type(this);
@@ -4521,10 +4560,11 @@ instruct vcvtFtoX_narrow_neon(vReg dst, vReg src) %{
effect(TEMP_DEF dst);
format %{ "vcvtFtoX_narrow_neon $dst, $src" %}
ins_encode %{
// 4F to 4B/4S
// 2F to 2S, 4F to 4B/4S
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this, $src);
__ fcvtzs($dst$$FloatRegister, __ T4S, $src$$FloatRegister);
__ fcvtzs($dst$$FloatRegister, length_in_bytes == 16 ? __ T4S : __ T2S,
$src$$FloatRegister);
__ neon_vector_narrow($dst$$FloatRegister, bt,
$dst$$FloatRegister, T_INT, length_in_bytes);
%}
@@ -4590,12 +4630,14 @@ instruct vcvtFtoX(vReg dst, vReg src) %{
// VectorCastD2X
instruct vcvtDtoI_neon(vReg dst, vReg src) %{
predicate(UseSVE == 0 && Matcher::vector_element_basic_type(n) == T_INT);
predicate(UseSVE == 0 &&
(Matcher::vector_element_basic_type(n) == T_INT ||
Matcher::vector_element_basic_type(n) == T_SHORT));
match(Set dst (VectorCastD2X src));
effect(TEMP_DEF dst);
format %{ "vcvtDtoI_neon $dst, $src\t# 2D to 2I" %}
format %{ "vcvtDtoI_neon $dst, $src\t# 2D to 2S/2I" %}
ins_encode %{
// 2D to 2I
// 2D to 2S/2I
__ ins($dst$$FloatRegister, __ D, $src$$FloatRegister, 0, 1);
// We can't use fcvtzs(vector, integer) instruction here because we need
// saturation arithmetic. See JDK-8276151.
@@ -4603,6 +4645,10 @@ instruct vcvtDtoI_neon(vReg dst, vReg src) %{
__ fcvtzdw(rscratch2, $dst$$FloatRegister);
__ fmovs($dst$$FloatRegister, rscratch1);
__ mov($dst$$FloatRegister, __ S, 1, rscratch2);
if (Matcher::vector_element_basic_type(this) == T_SHORT) {
__ neon_vector_narrow($dst$$FloatRegister, T_SHORT,
$dst$$FloatRegister, T_INT, 8);
}
%}
ins_pipe(pipe_slow);
%}
@@ -4676,7 +4722,7 @@ instruct vcvtHFtoF(vReg dst, vReg src) %{
ins_encode %{
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
if (VM_Version::use_neon_for_vector(length_in_bytes)) {
// 4HF to 4F
// 2HF to 2F, 4HF to 4F
__ fcvtl($dst$$FloatRegister, __ T4S, $src$$FloatRegister, __ T4H);
} else {
assert(UseSVE > 0, "must be sve");
@@ -4692,9 +4738,9 @@ instruct vcvtHFtoF(vReg dst, vReg src) %{
instruct vcvtFtoHF_neon(vReg dst, vReg src) %{
predicate(VM_Version::use_neon_for_vector(Matcher::vector_length_in_bytes(n->in(1))));
match(Set dst (VectorCastF2HF src));
format %{ "vcvtFtoHF_neon $dst, $src\t# 4F to 4HF" %}
format %{ "vcvtFtoHF_neon $dst, $src\t# 2F/4F to 2HF/4HF" %}
ins_encode %{
// 4F to 4HF
// 2F to 2HF, 4F to 4HF
__ fcvtn($dst$$FloatRegister, __ T4H, $src$$FloatRegister, __ T4S);
%}
ins_pipe(pipe_slow);
@@ -6396,14 +6442,12 @@ instruct vpopcountI(vReg dst, vReg src) %{
} else {
assert(bt == T_SHORT || bt == T_INT, "unsupported");
if (UseSVE == 0) {
assert(length_in_bytes == 8 || length_in_bytes == 16, "unsupported");
__ cnt($dst$$FloatRegister, length_in_bytes == 16 ? __ T16B : __ T8B,
$src$$FloatRegister);
__ uaddlp($dst$$FloatRegister, length_in_bytes == 16 ? __ T16B : __ T8B,
$dst$$FloatRegister);
assert(length_in_bytes <= 16, "unsupported");
bool isQ = length_in_bytes == 16;
__ cnt($dst$$FloatRegister, isQ ? __ T16B : __ T8B, $src$$FloatRegister);
__ uaddlp($dst$$FloatRegister, isQ ? __ T16B : __ T8B, $dst$$FloatRegister);
if (bt == T_INT) {
__ uaddlp($dst$$FloatRegister, length_in_bytes == 16 ? __ T8H : __ T4H,
$dst$$FloatRegister);
__ uaddlp($dst$$FloatRegister, isQ ? __ T8H : __ T4H, $dst$$FloatRegister);
}
} else {
__ sve_cnt($dst$$FloatRegister, __ elemType_to_regVariant(bt),
@@ -6465,7 +6509,7 @@ instruct vblend_neon(vReg dst, vReg src1, vReg src2) %{
format %{ "vblend_neon $dst, $src1, $src2" %}
ins_encode %{
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
assert(length_in_bytes == 8 || length_in_bytes == 16, "must be");
assert(length_in_bytes <= 16, "must be");
__ bsl($dst$$FloatRegister, length_in_bytes == 16 ? __ T16B : __ T8B,
$src2$$FloatRegister, $src1$$FloatRegister);
%}
@@ -6852,7 +6896,7 @@ instruct vcountTrailingZeros(vReg dst, vReg src) %{
} else {
assert(bt == T_SHORT || bt == T_INT || bt == T_LONG, "unsupported type");
if (UseSVE == 0) {
assert(length_in_bytes == 8 || length_in_bytes == 16, "unsupported");
assert(length_in_bytes <= 16, "unsupported");
__ neon_reverse_bits($dst$$FloatRegister, $src$$FloatRegister,
bt, /* isQ */ length_in_bytes == 16);
if (bt != T_LONG) {
@@ -6911,7 +6955,7 @@ instruct vreverse(vReg dst, vReg src) %{
} else {
assert(bt == T_SHORT || bt == T_INT || bt == T_LONG, "unsupported type");
if (UseSVE == 0) {
assert(length_in_bytes == 8 || length_in_bytes == 16, "unsupported");
assert(length_in_bytes <= 16, "unsupported");
__ neon_reverse_bits($dst$$FloatRegister, $src$$FloatRegister,
bt, /* isQ */ length_in_bytes == 16);
} else {
@@ -6947,7 +6991,7 @@ instruct vreverseBytes(vReg dst, vReg src) %{
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
if (VM_Version::use_neon_for_vector(length_in_bytes)) {
assert(length_in_bytes == 8 || length_in_bytes == 16, "unsupported");
assert(length_in_bytes <= 16, "unsupported");
if (bt == T_BYTE) {
if ($dst$$FloatRegister != $src$$FloatRegister) {
__ orr($dst$$FloatRegister, length_in_bytes == 16 ? __ T16B : __ T8B,
@@ -7150,3 +7194,71 @@ instruct vexpandBits(vReg dst, vReg src1, vReg src2) %{
%}
ins_pipe(pipe_slow);
%}
// ------------------------------------- SelectFromTwoVector ------------------------------------
// The Neon and SVE2 tbl instruction for two vector lookup requires both the source vectors to be
// consecutive. The match rules for SelectFromTwoVector reserve two consecutive vector registers
// for src1 and src2.
// Four combinations of vector registers for vselect_from_two_vectors are chosen at random
// (two from volatile and two from non-volatile set) which gives more freedom to the register
// allocator to choose the best pair of source registers at that point.
instruct vselect_from_two_vectors_10_11(vReg dst, vReg_V10 src1, vReg_V11 src2,
vReg index, vReg tmp) %{
effect(TEMP_DEF dst, TEMP tmp);
match(Set dst (SelectFromTwoVector (Binary index src1) src2));
format %{ "vselect_from_two_vectors_10_11 $dst, $src1, $src2, $index\t# KILL $tmp" %}
ins_encode %{
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
__ select_from_two_vectors($dst$$FloatRegister, $src1$$FloatRegister,
$src2$$FloatRegister, $index$$FloatRegister,
$tmp$$FloatRegister, bt, length_in_bytes);
%}
ins_pipe(pipe_slow);
%}
instruct vselect_from_two_vectors_12_13(vReg dst, vReg_V12 src1, vReg_V13 src2,
vReg index, vReg tmp) %{
effect(TEMP_DEF dst, TEMP tmp);
match(Set dst (SelectFromTwoVector (Binary index src1) src2));
format %{ "vselect_from_two_vectors_12_13 $dst, $src1, $src2, $index\t# KILL $tmp" %}
ins_encode %{
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
__ select_from_two_vectors($dst$$FloatRegister, $src1$$FloatRegister,
$src2$$FloatRegister, $index$$FloatRegister,
$tmp$$FloatRegister, bt, length_in_bytes);
%}
ins_pipe(pipe_slow);
%}
instruct vselect_from_two_vectors_17_18(vReg dst, vReg_V17 src1, vReg_V18 src2,
vReg index, vReg tmp) %{
effect(TEMP_DEF dst, TEMP tmp);
match(Set dst (SelectFromTwoVector (Binary index src1) src2));
format %{ "vselect_from_two_vectors_17_18 $dst, $src1, $src2, $index\t# KILL $tmp" %}
ins_encode %{
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
__ select_from_two_vectors($dst$$FloatRegister, $src1$$FloatRegister,
$src2$$FloatRegister, $index$$FloatRegister,
$tmp$$FloatRegister, bt, length_in_bytes);
%}
ins_pipe(pipe_slow);
%}
instruct vselect_from_two_vectors_23_24(vReg dst, vReg_V23 src1, vReg_V24 src2,
vReg index, vReg tmp) %{
effect(TEMP_DEF dst, TEMP tmp);
match(Set dst (SelectFromTwoVector (Binary index src1) src2));
format %{ "vselect_from_two_vectors_23_24 $dst, $src1, $src2, $index\t# KILL $tmp" %}
ins_encode %{
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
__ select_from_two_vectors($dst$$FloatRegister, $src1$$FloatRegister,
$src2$$FloatRegister, $index$$FloatRegister,
$tmp$$FloatRegister, bt, length_in_bytes);
%}
ins_pipe(pipe_slow);
%}

View File

@@ -121,7 +121,7 @@ source %{
// These operations are not profitable to be vectorized on NEON, because no direct
// NEON instructions support them. But the match rule support for them is profitable for
// Vector API intrinsics.
if ((opcode == Op_VectorCastD2X && bt == T_INT) ||
if ((opcode == Op_VectorCastD2X && (bt == T_INT || bt == T_SHORT)) ||
(opcode == Op_VectorCastL2X && bt == T_FLOAT) ||
(opcode == Op_CountLeadingZerosV && bt == T_LONG) ||
(opcode == Op_CountTrailingZerosV && bt == T_LONG) ||
@@ -179,6 +179,18 @@ source %{
return false;
}
break;
case Op_AddReductionVI:
case Op_AndReductionV:
case Op_OrReductionV:
case Op_XorReductionV:
case Op_MinReductionV:
case Op_MaxReductionV:
// Reductions with less than 8 bytes vector length are
// not supported.
if (length_in_bytes < 8) {
return false;
}
break;
case Op_MulReductionVD:
case Op_MulReductionVF:
case Op_MulReductionVI:
@@ -235,6 +247,28 @@ source %{
return false;
}
break;
case Op_SelectFromTwoVector:
// The "tbl" instruction for two vector table is supported only in Neon and SVE2. Return
// false if vector length > 16B but supported SVE version < 2.
// For vector length of 16B, generate SVE2 "tbl" instruction if SVE2 is supported, else
// generate Neon "tbl" instruction to select from two vectors.
// This operation is disabled for doubles and longs on machines with SVE < 2 and instead
// the default VectorRearrange + VectorBlend is generated because the performance of the default
// implementation was better than or equal to the implementation for SelectFromTwoVector.
if (UseSVE < 2 && (type2aelembytes(bt) == 8 || length_in_bytes > 16)) {
return false;
}
// Because the SVE2 "tbl" instruction is unpredicated and partial operations cannot be generated
// using masks, we disable this operation on machines where length_in_bytes < MaxVectorSize
// on that machine with the only exception of 8B vector length. This is because at the time of
// writing this, there is no SVE2 machine available with length_in_bytes > 8 and
// length_in_bytes < MaxVectorSize to test this operation on (for example - there isn't an
// SVE2 machine available with MaxVectorSize = 32 to test a case with length_in_bytes = 16).
if (UseSVE == 2 && length_in_bytes > 8 && length_in_bytes < MaxVectorSize) {
return false;
}
break;
default:
break;
}
@@ -2502,31 +2536,31 @@ instruct reinterpret_resize_gt128b(vReg dst, vReg src, pReg ptmp, rFlagsReg cr)
%}
// ---------------------------- Vector zero extend --------------------------------
dnl VECTOR_ZERO_EXTEND($1, $2, $3, $4, $5 $6, $7, )
dnl VECTOR_ZERO_EXTEND(op_name, dst_bt, src_bt, dst_size, src_size, assertion, neon_comment)
dnl VECTOR_ZERO_EXTEND($1, $2, $3, $4, $5, )
dnl VECTOR_ZERO_EXTEND(op_name, src_bt, src_size, assertion, neon_comment)
define(`VECTOR_ZERO_EXTEND', `
instruct vzeroExt$1toX(vReg dst, vReg src) %{
match(Set dst (VectorUCast`$1'2X src));
format %{ "vzeroExt$1toX $dst, $src" %}
ins_encode %{
BasicType bt = Matcher::vector_element_basic_type(this);
assert($6, "must be");
assert($4, "must be");
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
if (VM_Version::use_neon_for_vector(length_in_bytes)) {
// $7
__ neon_vector_extend($dst$$FloatRegister, $2, length_in_bytes,
$src$$FloatRegister, $3, /* is_unsigned */ true);
// $5
__ neon_vector_extend($dst$$FloatRegister, bt, length_in_bytes,
$src$$FloatRegister, $2, /* is_unsigned */ true);
} else {
assert(UseSVE > 0, "must be sve");
__ sve_vector_extend($dst$$FloatRegister, __ $4,
$src$$FloatRegister, __ $5, /* is_unsigned */ true);
__ sve_vector_extend($dst$$FloatRegister, __ elemType_to_regVariant(bt),
$src$$FloatRegister, __ $3, /* is_unsigned */ true);
}
%}
ins_pipe(pipe_slow);
%}')dnl
VECTOR_ZERO_EXTEND(B, bt, T_BYTE, elemType_to_regVariant(bt), B, bt == T_SHORT || bt == T_INT || bt == T_LONG, `4B to 4S/4I, 8B to 8S')
VECTOR_ZERO_EXTEND(S, T_INT, T_SHORT, elemType_to_regVariant(bt), H, bt == T_INT || bt == T_LONG, `4S to 4I')
VECTOR_ZERO_EXTEND(I, T_LONG, T_INT, D, S, bt == T_LONG, `2I to 2L')
VECTOR_ZERO_EXTEND(B, T_BYTE, B, bt == T_SHORT || bt == T_INT || bt == T_LONG, `4B to 4S/4I, 8B to 8S')
VECTOR_ZERO_EXTEND(S, T_SHORT, H, bt == T_INT || bt == T_LONG, `2S to 2I/2L, 4S to 4I')
VECTOR_ZERO_EXTEND(I, T_INT, S, bt == T_LONG, `2I to 2L')
// ------------------------------ Vector cast ----------------------------------
@@ -2595,11 +2629,15 @@ instruct vcvtStoX_extend(vReg dst, vReg src) %{
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
if (VM_Version::use_neon_for_vector(length_in_bytes)) {
// 4S to 4I/4F
__ neon_vector_extend($dst$$FloatRegister, T_INT, length_in_bytes,
$src$$FloatRegister, T_SHORT);
if (bt == T_FLOAT) {
__ scvtfv(__ T4S, $dst$$FloatRegister, $dst$$FloatRegister);
if (is_floating_point_type(bt)) {
// 2S to 2F/2D, 4S to 4F
__ neon_vector_extend($dst$$FloatRegister, bt == T_FLOAT ? T_INT : T_LONG,
length_in_bytes, $src$$FloatRegister, T_SHORT);
__ scvtfv(get_arrangement(this), $dst$$FloatRegister, $dst$$FloatRegister);
} else {
// 2S to 2I/2L, 4S to 4I
__ neon_vector_extend($dst$$FloatRegister, bt, length_in_bytes,
$src$$FloatRegister, T_SHORT);
}
} else {
assert(UseSVE > 0, "must be sve");
@@ -2623,7 +2661,7 @@ instruct vcvtItoX_narrow_neon(vReg dst, vReg src) %{
effect(TEMP_DEF dst);
format %{ "vcvtItoX_narrow_neon $dst, $src" %}
ins_encode %{
// 4I to 4B/4S
// 2I to 2S, 4I to 4B/4S
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this, $src);
__ neon_vector_narrow($dst$$FloatRegister, bt,
@@ -2686,28 +2724,29 @@ instruct vcvtItoX(vReg dst, vReg src) %{
// VectorCastL2X
instruct vcvtLtoI_neon(vReg dst, vReg src) %{
predicate(Matcher::vector_element_basic_type(n) == T_INT &&
instruct vcvtLtoX_narrow_neon(vReg dst, vReg src) %{
predicate((Matcher::vector_element_basic_type(n) == T_INT ||
Matcher::vector_element_basic_type(n) == T_SHORT) &&
VM_Version::use_neon_for_vector(Matcher::vector_length_in_bytes(n->in(1))));
match(Set dst (VectorCastL2X src));
format %{ "vcvtLtoI_neon $dst, $src" %}
format %{ "vcvtLtoX_narrow_neon $dst, $src" %}
ins_encode %{
// 2L to 2I
// 2L to 2S/2I
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this, $src);
__ neon_vector_narrow($dst$$FloatRegister, T_INT,
__ neon_vector_narrow($dst$$FloatRegister, bt,
$src$$FloatRegister, T_LONG, length_in_bytes);
%}
ins_pipe(pipe_slow);
%}
instruct vcvtLtoI_sve(vReg dst, vReg src, vReg tmp) %{
predicate((Matcher::vector_element_basic_type(n) == T_INT &&
!VM_Version::use_neon_for_vector(Matcher::vector_length_in_bytes(n->in(1)))) ||
Matcher::vector_element_basic_type(n) == T_BYTE ||
Matcher::vector_element_basic_type(n) == T_SHORT);
instruct vcvtLtoX_narrow_sve(vReg dst, vReg src, vReg tmp) %{
predicate(!VM_Version::use_neon_for_vector(Matcher::vector_length_in_bytes(n->in(1))) &&
!is_floating_point_type(Matcher::vector_element_basic_type(n)) &&
type2aelembytes(Matcher::vector_element_basic_type(n)) <= 4);
match(Set dst (VectorCastL2X src));
effect(TEMP_DEF dst, TEMP tmp);
format %{ "vcvtLtoI_sve $dst, $src\t# KILL $tmp" %}
format %{ "vcvtLtoX_narrow_sve $dst, $src\t# KILL $tmp" %}
ins_encode %{
assert(UseSVE > 0, "must be sve");
BasicType bt = Matcher::vector_element_basic_type(this);
@@ -2773,10 +2812,11 @@ instruct vcvtFtoX_narrow_neon(vReg dst, vReg src) %{
effect(TEMP_DEF dst);
format %{ "vcvtFtoX_narrow_neon $dst, $src" %}
ins_encode %{
// 4F to 4B/4S
// 2F to 2S, 4F to 4B/4S
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this, $src);
__ fcvtzs($dst$$FloatRegister, __ T4S, $src$$FloatRegister);
__ fcvtzs($dst$$FloatRegister, length_in_bytes == 16 ? __ T4S : __ T2S,
$src$$FloatRegister);
__ neon_vector_narrow($dst$$FloatRegister, bt,
$dst$$FloatRegister, T_INT, length_in_bytes);
%}
@@ -2842,12 +2882,14 @@ instruct vcvtFtoX(vReg dst, vReg src) %{
// VectorCastD2X
instruct vcvtDtoI_neon(vReg dst, vReg src) %{
predicate(UseSVE == 0 && Matcher::vector_element_basic_type(n) == T_INT);
predicate(UseSVE == 0 &&
(Matcher::vector_element_basic_type(n) == T_INT ||
Matcher::vector_element_basic_type(n) == T_SHORT));
match(Set dst (VectorCastD2X src));
effect(TEMP_DEF dst);
format %{ "vcvtDtoI_neon $dst, $src\t# 2D to 2I" %}
format %{ "vcvtDtoI_neon $dst, $src\t# 2D to 2S/2I" %}
ins_encode %{
// 2D to 2I
// 2D to 2S/2I
__ ins($dst$$FloatRegister, __ D, $src$$FloatRegister, 0, 1);
// We can't use fcvtzs(vector, integer) instruction here because we need
// saturation arithmetic. See JDK-8276151.
@@ -2855,6 +2897,10 @@ instruct vcvtDtoI_neon(vReg dst, vReg src) %{
__ fcvtzdw(rscratch2, $dst$$FloatRegister);
__ fmovs($dst$$FloatRegister, rscratch1);
__ mov($dst$$FloatRegister, __ S, 1, rscratch2);
if (Matcher::vector_element_basic_type(this) == T_SHORT) {
__ neon_vector_narrow($dst$$FloatRegister, T_SHORT,
$dst$$FloatRegister, T_INT, 8);
}
%}
ins_pipe(pipe_slow);
%}
@@ -2928,7 +2974,7 @@ instruct vcvtHFtoF(vReg dst, vReg src) %{
ins_encode %{
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
if (VM_Version::use_neon_for_vector(length_in_bytes)) {
// 4HF to 4F
// 2HF to 2F, 4HF to 4F
__ fcvtl($dst$$FloatRegister, __ T4S, $src$$FloatRegister, __ T4H);
} else {
assert(UseSVE > 0, "must be sve");
@@ -2944,9 +2990,9 @@ instruct vcvtHFtoF(vReg dst, vReg src) %{
instruct vcvtFtoHF_neon(vReg dst, vReg src) %{
predicate(VM_Version::use_neon_for_vector(Matcher::vector_length_in_bytes(n->in(1))));
match(Set dst (VectorCastF2HF src));
format %{ "vcvtFtoHF_neon $dst, $src\t# 4F to 4HF" %}
format %{ "vcvtFtoHF_neon $dst, $src\t# 2F/4F to 2HF/4HF" %}
ins_encode %{
// 4F to 4HF
// 2F to 2HF, 4F to 4HF
__ fcvtn($dst$$FloatRegister, __ T4H, $src$$FloatRegister, __ T4S);
%}
ins_pipe(pipe_slow);
@@ -4417,14 +4463,12 @@ instruct vpopcountI(vReg dst, vReg src) %{
} else {
assert(bt == T_SHORT || bt == T_INT, "unsupported");
if (UseSVE == 0) {
assert(length_in_bytes == 8 || length_in_bytes == 16, "unsupported");
__ cnt($dst$$FloatRegister, length_in_bytes == 16 ? __ T16B : __ T8B,
$src$$FloatRegister);
__ uaddlp($dst$$FloatRegister, length_in_bytes == 16 ? __ T16B : __ T8B,
$dst$$FloatRegister);
assert(length_in_bytes <= 16, "unsupported");
bool isQ = length_in_bytes == 16;
__ cnt($dst$$FloatRegister, isQ ? __ T16B : __ T8B, $src$$FloatRegister);
__ uaddlp($dst$$FloatRegister, isQ ? __ T16B : __ T8B, $dst$$FloatRegister);
if (bt == T_INT) {
__ uaddlp($dst$$FloatRegister, length_in_bytes == 16 ? __ T8H : __ T4H,
$dst$$FloatRegister);
__ uaddlp($dst$$FloatRegister, isQ ? __ T8H : __ T4H, $dst$$FloatRegister);
}
} else {
__ sve_cnt($dst$$FloatRegister, __ elemType_to_regVariant(bt),
@@ -4475,7 +4519,7 @@ instruct vblend_neon(vReg dst, vReg src1, vReg src2) %{
format %{ "vblend_neon $dst, $src1, $src2" %}
ins_encode %{
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
assert(length_in_bytes == 8 || length_in_bytes == 16, "must be");
assert(length_in_bytes <= 16, "must be");
__ bsl($dst$$FloatRegister, length_in_bytes == 16 ? __ T16B : __ T8B,
$src2$$FloatRegister, $src1$$FloatRegister);
%}
@@ -4851,7 +4895,7 @@ instruct vcountTrailingZeros(vReg dst, vReg src) %{
} else {
assert(bt == T_SHORT || bt == T_INT || bt == T_LONG, "unsupported type");
if (UseSVE == 0) {
assert(length_in_bytes == 8 || length_in_bytes == 16, "unsupported");
assert(length_in_bytes <= 16, "unsupported");
__ neon_reverse_bits($dst$$FloatRegister, $src$$FloatRegister,
bt, /* isQ */ length_in_bytes == 16);
if (bt != T_LONG) {
@@ -4910,7 +4954,7 @@ instruct vreverse(vReg dst, vReg src) %{
} else {
assert(bt == T_SHORT || bt == T_INT || bt == T_LONG, "unsupported type");
if (UseSVE == 0) {
assert(length_in_bytes == 8 || length_in_bytes == 16, "unsupported");
assert(length_in_bytes <= 16, "unsupported");
__ neon_reverse_bits($dst$$FloatRegister, $src$$FloatRegister,
bt, /* isQ */ length_in_bytes == 16);
} else {
@@ -4935,7 +4979,7 @@ instruct vreverseBytes(vReg dst, vReg src) %{
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
if (VM_Version::use_neon_for_vector(length_in_bytes)) {
assert(length_in_bytes == 8 || length_in_bytes == 16, "unsupported");
assert(length_in_bytes <= 16, "unsupported");
if (bt == T_BYTE) {
if ($dst$$FloatRegister != $src$$FloatRegister) {
__ orr($dst$$FloatRegister, length_in_bytes == 16 ? __ T16B : __ T8B,
@@ -5132,3 +5176,34 @@ BITPERM(vcompressBits, CompressBitsV, sve_bext)
// ----------------------------------- ExpandBitsV ---------------------------------
BITPERM(vexpandBits, ExpandBitsV, sve_bdep)
// ------------------------------------- SelectFromTwoVector ------------------------------------
// The Neon and SVE2 tbl instruction for two vector lookup requires both the source vectors to be
// consecutive. The match rules for SelectFromTwoVector reserve two consecutive vector registers
// for src1 and src2.
// Four combinations of vector registers for vselect_from_two_vectors are chosen at random
// (two from volatile and two from non-volatile set) which gives more freedom to the register
// allocator to choose the best pair of source registers at that point.
dnl
dnl SELECT_FROM_TWO_VECTORS($1, $2 )
dnl SELECT_FROM_TWO_VECTORS(first_reg, second_reg)
define(`SELECT_FROM_TWO_VECTORS', `
instruct vselect_from_two_vectors_$1_$2(vReg dst, vReg_V$1 src1, vReg_V$2 src2,
vReg index, vReg tmp) %{
effect(TEMP_DEF dst, TEMP tmp);
match(Set dst (SelectFromTwoVector (Binary index src1) src2));
format %{ "vselect_from_two_vectors_$1_$2 $dst, $src1, $src2, $index\t# KILL $tmp" %}
ins_encode %{
BasicType bt = Matcher::vector_element_basic_type(this);
uint length_in_bytes = Matcher::vector_length_in_bytes(this);
__ select_from_two_vectors($dst$$FloatRegister, $src1$$FloatRegister,
$src2$$FloatRegister, $index$$FloatRegister,
$tmp$$FloatRegister, bt, length_in_bytes);
%}
ins_pipe(pipe_slow);
%}')dnl
dnl
SELECT_FROM_TWO_VECTORS(10, 11)
SELECT_FROM_TWO_VECTORS(12, 13)
SELECT_FROM_TWO_VECTORS(17, 18)
SELECT_FROM_TWO_VECTORS(23, 24)

View File

@@ -1136,6 +1136,10 @@ public:
system(0b00, 0b011, 0b00011, SY, 0b110);
}
void sb() {
system(0b00, 0b011, 0b00011, 0b0000, 0b111);
}
void sys(int op1, int CRn, int CRm, int op2,
Register rt = as_Register(0b11111)) {
system(0b01, op1, CRn, CRm, op2, rt);
@@ -4227,12 +4231,29 @@ public:
sf(imm1, 9, 5), rf(Zd, 0);
}
// SVE programmable table lookup/permute using vector of element indices
void sve_tbl(FloatRegister Zd, SIMD_RegVariant T, FloatRegister Zn, FloatRegister Zm) {
private:
void _sve_tbl(FloatRegister Zd, SIMD_RegVariant T, FloatRegister Zn, unsigned reg_count, FloatRegister Zm) {
starti;
assert(T != Q, "invalid size");
// Only supports one or two vector lookup. One vector lookup was introduced in SVE1
// and two vector lookup in SVE2
assert(0 < reg_count && reg_count <= 2, "invalid number of registers");
int op11 = (reg_count == 1) ? 0b10 : 0b01;
f(0b00000101, 31, 24), f(T, 23, 22), f(0b1, 21), rf(Zm, 16);
f(0b001100, 15, 10), rf(Zn, 5), rf(Zd, 0);
f(0b001, 15, 13), f(op11, 12, 11), f(0b0, 10), rf(Zn, 5), rf(Zd, 0);
}
public:
// SVE/SVE2 Programmable table lookup in one or two vector table (zeroing)
void sve_tbl(FloatRegister Zd, SIMD_RegVariant T, FloatRegister Zn, FloatRegister Zm) {
_sve_tbl(Zd, T, Zn, 1, Zm);
}
void sve_tbl(FloatRegister Zd, SIMD_RegVariant T, FloatRegister Zn1, FloatRegister Zn2, FloatRegister Zm) {
assert(Zn1->successor() == Zn2, "invalid order of registers");
_sve_tbl(Zd, T, Zn1, 2, Zm);
}
// Shuffle active elements of vector to the right and fill with zero

View File

@@ -56,7 +56,7 @@ void CounterOverflowStub::emit_code(LIR_Assembler* ce) {
__ mov_metadata(rscratch1, m);
ce->store_parameter(rscratch1, 1);
ce->store_parameter(_bci, 0);
__ far_call(RuntimeAddress(Runtime1::entry_for(C1StubId::counter_overflow_id)));
__ far_call(RuntimeAddress(Runtime1::entry_for(StubId::c1_counter_overflow_id)));
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
__ b(_continuation);
@@ -65,7 +65,7 @@ void CounterOverflowStub::emit_code(LIR_Assembler* ce) {
void RangeCheckStub::emit_code(LIR_Assembler* ce) {
__ bind(_entry);
if (_info->deoptimize_on_exception()) {
address a = Runtime1::entry_for(C1StubId::predicate_failed_trap_id);
address a = Runtime1::entry_for(StubId::c1_predicate_failed_trap_id);
__ far_call(RuntimeAddress(a));
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
@@ -78,13 +78,13 @@ void RangeCheckStub::emit_code(LIR_Assembler* ce) {
} else {
__ mov(rscratch1, _index->as_jint());
}
C1StubId stub_id;
StubId stub_id;
if (_throw_index_out_of_bounds_exception) {
stub_id = C1StubId::throw_index_exception_id;
stub_id = StubId::c1_throw_index_exception_id;
} else {
assert(_array != LIR_Opr::nullOpr(), "sanity");
__ mov(rscratch2, _array->as_pointer_register());
stub_id = C1StubId::throw_range_check_failed_id;
stub_id = StubId::c1_throw_range_check_failed_id;
}
__ lea(lr, RuntimeAddress(Runtime1::entry_for(stub_id)));
__ blr(lr);
@@ -99,7 +99,7 @@ PredicateFailedStub::PredicateFailedStub(CodeEmitInfo* info) {
void PredicateFailedStub::emit_code(LIR_Assembler* ce) {
__ bind(_entry);
address a = Runtime1::entry_for(C1StubId::predicate_failed_trap_id);
address a = Runtime1::entry_for(StubId::c1_predicate_failed_trap_id);
__ far_call(RuntimeAddress(a));
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
@@ -111,7 +111,7 @@ void DivByZeroStub::emit_code(LIR_Assembler* ce) {
ce->compilation()->implicit_exception_table()->append(_offset, __ offset());
}
__ bind(_entry);
__ far_call(RuntimeAddress(Runtime1::entry_for(C1StubId::throw_div0_exception_id)));
__ far_call(RuntimeAddress(Runtime1::entry_for(StubId::c1_throw_div0_exception_id)));
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
#ifdef ASSERT
@@ -123,14 +123,14 @@ void DivByZeroStub::emit_code(LIR_Assembler* ce) {
// Implementation of NewInstanceStub
NewInstanceStub::NewInstanceStub(LIR_Opr klass_reg, LIR_Opr result, ciInstanceKlass* klass, CodeEmitInfo* info, C1StubId stub_id) {
NewInstanceStub::NewInstanceStub(LIR_Opr klass_reg, LIR_Opr result, ciInstanceKlass* klass, CodeEmitInfo* info, StubId stub_id) {
_result = result;
_klass = klass;
_klass_reg = klass_reg;
_info = new CodeEmitInfo(info);
assert(stub_id == C1StubId::new_instance_id ||
stub_id == C1StubId::fast_new_instance_id ||
stub_id == C1StubId::fast_new_instance_init_check_id,
assert(stub_id == StubId::c1_new_instance_id ||
stub_id == StubId::c1_fast_new_instance_id ||
stub_id == StubId::c1_fast_new_instance_init_check_id,
"need new_instance id");
_stub_id = stub_id;
}
@@ -166,7 +166,7 @@ void NewTypeArrayStub::emit_code(LIR_Assembler* ce) {
__ bind(_entry);
assert(_length->as_register() == r19, "length must in r19,");
assert(_klass_reg->as_register() == r3, "klass_reg must in r3");
__ far_call(RuntimeAddress(Runtime1::entry_for(C1StubId::new_type_array_id)));
__ far_call(RuntimeAddress(Runtime1::entry_for(StubId::c1_new_type_array_id)));
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
assert(_result->as_register() == r0, "result must in r0");
@@ -189,7 +189,7 @@ void NewObjectArrayStub::emit_code(LIR_Assembler* ce) {
__ bind(_entry);
assert(_length->as_register() == r19, "length must in r19,");
assert(_klass_reg->as_register() == r3, "klass_reg must in r3");
__ far_call(RuntimeAddress(Runtime1::entry_for(C1StubId::new_object_array_id)));
__ far_call(RuntimeAddress(Runtime1::entry_for(StubId::c1_new_object_array_id)));
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
assert(_result->as_register() == r0, "result must in r0");
@@ -201,11 +201,11 @@ void MonitorEnterStub::emit_code(LIR_Assembler* ce) {
__ bind(_entry);
ce->store_parameter(_obj_reg->as_register(), 1);
ce->store_parameter(_lock_reg->as_register(), 0);
C1StubId enter_id;
StubId enter_id;
if (ce->compilation()->has_fpu_code()) {
enter_id = C1StubId::monitorenter_id;
enter_id = StubId::c1_monitorenter_id;
} else {
enter_id = C1StubId::monitorenter_nofpu_id;
enter_id = StubId::c1_monitorenter_nofpu_id;
}
__ far_call(RuntimeAddress(Runtime1::entry_for(enter_id)));
ce->add_call_info_here(_info);
@@ -222,11 +222,11 @@ void MonitorExitStub::emit_code(LIR_Assembler* ce) {
}
ce->store_parameter(_lock_reg->as_register(), 0);
// note: non-blocking leaf routine => no call info needed
C1StubId exit_id;
StubId exit_id;
if (ce->compilation()->has_fpu_code()) {
exit_id = C1StubId::monitorexit_id;
exit_id = StubId::c1_monitorexit_id;
} else {
exit_id = C1StubId::monitorexit_nofpu_id;
exit_id = StubId::c1_monitorexit_nofpu_id;
}
__ adr(lr, _continuation);
__ far_jump(RuntimeAddress(Runtime1::entry_for(exit_id)));
@@ -254,7 +254,7 @@ void PatchingStub::emit_code(LIR_Assembler* ce) {
void DeoptimizeStub::emit_code(LIR_Assembler* ce) {
__ bind(_entry);
ce->store_parameter(_trap_request, 0);
__ far_call(RuntimeAddress(Runtime1::entry_for(C1StubId::deoptimize_id)));
__ far_call(RuntimeAddress(Runtime1::entry_for(StubId::c1_deoptimize_id)));
ce->add_call_info_here(_info);
DEBUG_ONLY(__ should_not_reach_here());
}
@@ -264,9 +264,9 @@ void ImplicitNullCheckStub::emit_code(LIR_Assembler* ce) {
address a;
if (_info->deoptimize_on_exception()) {
// Deoptimize, do not throw the exception, because it is probably wrong to do it here.
a = Runtime1::entry_for(C1StubId::predicate_failed_trap_id);
a = Runtime1::entry_for(StubId::c1_predicate_failed_trap_id);
} else {
a = Runtime1::entry_for(C1StubId::throw_null_pointer_exception_id);
a = Runtime1::entry_for(StubId::c1_throw_null_pointer_exception_id);
}
ce->compilation()->implicit_exception_table()->append(_offset, __ offset());

View File

@@ -320,19 +320,19 @@ void LIR_Assembler::deoptimize_trap(CodeEmitInfo *info) {
switch (patching_id(info)) {
case PatchingStub::access_field_id:
target = Runtime1::entry_for(C1StubId::access_field_patching_id);
target = Runtime1::entry_for(StubId::c1_access_field_patching_id);
reloc_type = relocInfo::section_word_type;
break;
case PatchingStub::load_klass_id:
target = Runtime1::entry_for(C1StubId::load_klass_patching_id);
target = Runtime1::entry_for(StubId::c1_load_klass_patching_id);
reloc_type = relocInfo::metadata_type;
break;
case PatchingStub::load_mirror_id:
target = Runtime1::entry_for(C1StubId::load_mirror_patching_id);
target = Runtime1::entry_for(StubId::c1_load_mirror_patching_id);
reloc_type = relocInfo::oop_type;
break;
case PatchingStub::load_appendix_id:
target = Runtime1::entry_for(C1StubId::load_appendix_patching_id);
target = Runtime1::entry_for(StubId::c1_load_appendix_patching_id);
reloc_type = relocInfo::oop_type;
break;
default: ShouldNotReachHere();
@@ -374,7 +374,7 @@ int LIR_Assembler::emit_exception_handler() {
__ verify_not_null_oop(r0);
// search an exception handler (r0: exception oop, r3: throwing pc)
__ far_call(RuntimeAddress(Runtime1::entry_for(C1StubId::handle_exception_from_callee_id)));
__ far_call(RuntimeAddress(Runtime1::entry_for(StubId::c1_handle_exception_from_callee_id)));
__ should_not_reach_here();
guarantee(code_offset() - offset <= exception_handler_size(), "overflow");
__ end_a_stub();
@@ -410,11 +410,7 @@ int LIR_Assembler::emit_unwind_handler() {
if (method()->is_synchronized()) {
monitor_address(0, FrameMap::r0_opr);
stub = new MonitorExitStub(FrameMap::r0_opr, true, 0);
if (LockingMode == LM_MONITOR) {
__ b(*stub->entry());
} else {
__ unlock_object(r5, r4, r0, r6, *stub->entry());
}
__ unlock_object(r5, r4, r0, r6, *stub->entry());
__ bind(*stub->continuation());
}
@@ -431,7 +427,7 @@ int LIR_Assembler::emit_unwind_handler() {
// remove the activation and dispatch to the unwind handler
__ block_comment("remove_frame and dispatch to the unwind handler");
__ remove_frame(initial_frame_size_in_bytes());
__ far_jump(RuntimeAddress(Runtime1::entry_for(C1StubId::unwind_exception_id)));
__ far_jump(RuntimeAddress(Runtime1::entry_for(StubId::c1_unwind_exception_id)));
// Emit the slow path assembly
if (stub != nullptr) {
@@ -874,19 +870,19 @@ void LIR_Assembler::klass2reg_with_patching(Register reg, CodeEmitInfo* info) {
switch (patching_id(info)) {
case PatchingStub::access_field_id:
target = Runtime1::entry_for(C1StubId::access_field_patching_id);
target = Runtime1::entry_for(StubId::c1_access_field_patching_id);
reloc_type = relocInfo::section_word_type;
break;
case PatchingStub::load_klass_id:
target = Runtime1::entry_for(C1StubId::load_klass_patching_id);
target = Runtime1::entry_for(StubId::c1_load_klass_patching_id);
reloc_type = relocInfo::metadata_type;
break;
case PatchingStub::load_mirror_id:
target = Runtime1::entry_for(C1StubId::load_mirror_patching_id);
target = Runtime1::entry_for(StubId::c1_load_mirror_patching_id);
reloc_type = relocInfo::oop_type;
break;
case PatchingStub::load_appendix_id:
target = Runtime1::entry_for(C1StubId::load_appendix_patching_id);
target = Runtime1::entry_for(StubId::c1_load_appendix_patching_id);
reloc_type = relocInfo::oop_type;
break;
default: ShouldNotReachHere();
@@ -1358,7 +1354,7 @@ void LIR_Assembler::emit_typecheck_helper(LIR_OpTypeCheck *op, Label* success, L
__ br(Assembler::EQ, *success_target);
__ stp(klass_RInfo, k_RInfo, Address(__ pre(sp, -2 * wordSize)));
__ far_call(RuntimeAddress(Runtime1::entry_for(C1StubId::slow_subtype_check_id)));
__ far_call(RuntimeAddress(Runtime1::entry_for(StubId::c1_slow_subtype_check_id)));
__ ldr(klass_RInfo, Address(__ post(sp, 2 * wordSize)));
// result is a boolean
__ cbzw(klass_RInfo, *failure_target);
@@ -1369,7 +1365,7 @@ void LIR_Assembler::emit_typecheck_helper(LIR_OpTypeCheck *op, Label* success, L
__ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, success_target, failure_target, nullptr);
// call out-of-line instance of __ check_klass_subtype_slow_path(...):
__ stp(klass_RInfo, k_RInfo, Address(__ pre(sp, -2 * wordSize)));
__ far_call(RuntimeAddress(Runtime1::entry_for(C1StubId::slow_subtype_check_id)));
__ far_call(RuntimeAddress(Runtime1::entry_for(StubId::c1_slow_subtype_check_id)));
__ ldp(k_RInfo, klass_RInfo, Address(__ post(sp, 2 * wordSize)));
// result is a boolean
__ cbz(k_RInfo, *failure_target);
@@ -1447,7 +1443,7 @@ void LIR_Assembler::emit_opTypeCheck(LIR_OpTypeCheck* op) {
__ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, success_target, failure_target, nullptr);
// call out-of-line instance of __ check_klass_subtype_slow_path(...):
__ stp(klass_RInfo, k_RInfo, Address(__ pre(sp, -2 * wordSize)));
__ far_call(RuntimeAddress(Runtime1::entry_for(C1StubId::slow_subtype_check_id)));
__ far_call(RuntimeAddress(Runtime1::entry_for(StubId::c1_slow_subtype_check_id)));
__ ldp(k_RInfo, klass_RInfo, Address(__ post(sp, 2 * wordSize)));
// result is a boolean
__ cbzw(k_RInfo, *failure_target);
@@ -2033,7 +2029,7 @@ void LIR_Assembler::throw_op(LIR_Opr exceptionPC, LIR_Opr exceptionOop, CodeEmit
// exception object is not added to oop map by LinearScan
// (LinearScan assumes that no oops are in fixed registers)
info->add_register_oop(exceptionOop);
C1StubId unwind_id;
StubId unwind_id;
// get current pc information
// pc is only needed if the method has an exception handler, the unwind code does not need it.
@@ -2052,9 +2048,9 @@ void LIR_Assembler::throw_op(LIR_Opr exceptionPC, LIR_Opr exceptionOop, CodeEmit
__ verify_not_null_oop(r0);
// search an exception handler (r0: exception oop, r3: throwing pc)
if (compilation()->has_fpu_code()) {
unwind_id = C1StubId::handle_exception_id;
unwind_id = StubId::c1_handle_exception_id;
} else {
unwind_id = C1StubId::handle_exception_nofpu_id;
unwind_id = StubId::c1_handle_exception_nofpu_id;
}
__ far_call(RuntimeAddress(Runtime1::entry_for(unwind_id)));
@@ -2325,7 +2321,7 @@ void LIR_Assembler::emit_arraycopy(LIR_OpArrayCopy* op) {
__ check_klass_subtype_fast_path(src, dst, tmp, &cont, &slow, nullptr);
__ PUSH(src, dst);
__ far_call(RuntimeAddress(Runtime1::entry_for(C1StubId::slow_subtype_check_id)));
__ far_call(RuntimeAddress(Runtime1::entry_for(StubId::c1_slow_subtype_check_id)));
__ POP(src, dst);
__ cbnz(src, cont);
@@ -2484,13 +2480,7 @@ void LIR_Assembler::emit_lock(LIR_OpLock* op) {
Register hdr = op->hdr_opr()->as_register();
Register lock = op->lock_opr()->as_register();
Register temp = op->scratch_opr()->as_register();
if (LockingMode == LM_MONITOR) {
if (op->info() != nullptr) {
add_debug_info_for_null_check_here(op->info());
__ null_check(obj, -1);
}
__ b(*op->stub()->entry());
} else if (op->code() == lir_lock) {
if (op->code() == lir_lock) {
assert(BasicLock::displaced_header_offset_in_bytes() == 0, "lock_reg must point to the displaced header");
// add debug info for NullPointerException only if one is possible
int null_check_offset = __ lock_object(hdr, obj, lock, temp, *op->stub()->entry());
@@ -2823,7 +2813,7 @@ void LIR_Assembler::leal(LIR_Opr addr, LIR_Opr dest, LIR_PatchCode patch_code, C
return;
}
__ lea(dest->as_register_lo(), as_Address(addr->as_address_ptr()));
__ lea(dest->as_pointer_register(), as_Address(addr->as_address_ptr()));
}
@@ -3133,7 +3123,9 @@ void LIR_Assembler::atomic_op(LIR_Code code, LIR_Opr src, LIR_Opr data, LIR_Opr
default:
ShouldNotReachHere();
}
__ membar(__ AnyAny);
if(!UseLSE) {
__ membar(__ AnyAny);
}
}
#undef __

View File

@@ -981,7 +981,7 @@ void LIRGenerator::do_update_CRC32(Intrinsic* x) {
CallingConvention* cc = frame_map()->c_calling_convention(&signature);
const LIR_Opr result_reg = result_register_for(x->type());
LIR_Opr addr = new_pointer_register();
LIR_Opr addr = new_register(T_ADDRESS);
__ leal(LIR_OprFact::address(a), addr);
crc.load_item_force(cc->at(0));
@@ -1058,7 +1058,7 @@ void LIRGenerator::do_update_CRC32C(Intrinsic* x) {
CallingConvention* cc = frame_map()->c_calling_convention(&signature);
const LIR_Opr result_reg = result_register_for(x->type());
LIR_Opr addr = new_pointer_register();
LIR_Opr addr = new_register(T_ADDRESS);
__ leal(LIR_OprFact::address(a), addr);
crc.load_item_force(cc->at(0));
@@ -1245,7 +1245,7 @@ void LIRGenerator::do_NewMultiArray(NewMultiArray* x) {
args->append(rank);
args->append(varargs);
LIR_Opr reg = result_register_for(x->type());
__ call_runtime(Runtime1::entry_for(C1StubId::new_multi_array_id),
__ call_runtime(Runtime1::entry_for(StubId::c1_new_multi_array_id),
LIR_OprFact::illegalOpr,
reg, args, info);
@@ -1276,14 +1276,14 @@ void LIRGenerator::do_CheckCast(CheckCast* x) {
CodeStub* stub;
if (x->is_incompatible_class_change_check()) {
assert(patching_info == nullptr, "can't patch this");
stub = new SimpleExceptionStub(C1StubId::throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception);
stub = new SimpleExceptionStub(StubId::c1_throw_incompatible_class_change_error_id, LIR_OprFact::illegalOpr, info_for_exception);
} else if (x->is_invokespecial_receiver_check()) {
assert(patching_info == nullptr, "can't patch this");
stub = new DeoptimizeStub(info_for_exception,
Deoptimization::Reason_class_check,
Deoptimization::Action_none);
} else {
stub = new SimpleExceptionStub(C1StubId::throw_class_cast_exception_id, obj.result(), info_for_exception);
stub = new SimpleExceptionStub(StubId::c1_throw_class_cast_exception_id, obj.result(), info_for_exception);
}
LIR_Opr reg = rlock_result(x);
LIR_Opr tmp3 = LIR_OprFact::illegalOpr;
@@ -1318,7 +1318,7 @@ void LIRGenerator::do_InstanceOf(InstanceOf* x) {
// Intrinsic for Class::isInstance
address LIRGenerator::isInstance_entry() {
return Runtime1::entry_for(C1StubId::is_instance_of_id);
return Runtime1::entry_for(StubId::c1_is_instance_of_id);
}
void LIRGenerator::do_If(If* x) {

View File

@@ -60,8 +60,6 @@ void C1_MacroAssembler::float_cmp(bool is_float, int unordered_result,
}
int C1_MacroAssembler::lock_object(Register hdr, Register obj, Register disp_hdr, Register temp, Label& slow_case) {
const int aligned_mask = BytesPerWord -1;
const int hdr_offset = oopDesc::mark_offset_in_bytes();
assert_different_registers(hdr, obj, disp_hdr, temp, rscratch2);
int null_check_offset = -1;
@@ -72,95 +70,20 @@ int C1_MacroAssembler::lock_object(Register hdr, Register obj, Register disp_hdr
null_check_offset = offset();
if (LockingMode == LM_LIGHTWEIGHT) {
lightweight_lock(disp_hdr, obj, hdr, temp, rscratch2, slow_case);
} else if (LockingMode == LM_LEGACY) {
lightweight_lock(disp_hdr, obj, hdr, temp, rscratch2, slow_case);
if (DiagnoseSyncOnValueBasedClasses != 0) {
load_klass(hdr, obj);
ldrb(hdr, Address(hdr, Klass::misc_flags_offset()));
tst(hdr, KlassFlags::_misc_is_value_based_class);
br(Assembler::NE, slow_case);
}
Label done;
// Load object header
ldr(hdr, Address(obj, hdr_offset));
// and mark it as unlocked
orr(hdr, hdr, markWord::unlocked_value);
// save unlocked object header into the displaced header location on the stack
str(hdr, Address(disp_hdr, 0));
// test if object header is still the same (i.e. unlocked), and if so, store the
// displaced header address in the object header - if it is not the same, get the
// object header instead
lea(rscratch2, Address(obj, hdr_offset));
cmpxchgptr(hdr, disp_hdr, rscratch2, rscratch1, done, /*fallthough*/nullptr);
// if the object header was the same, we're done
// if the object header was not the same, it is now in the hdr register
// => test if it is a stack pointer into the same stack (recursive locking), i.e.:
//
// 1) (hdr & aligned_mask) == 0
// 2) sp <= hdr
// 3) hdr <= sp + page_size
//
// these 3 tests can be done by evaluating the following expression:
//
// (hdr - sp) & (aligned_mask - page_size)
//
// assuming both the stack pointer and page_size have their least
// significant 2 bits cleared and page_size is a power of 2
mov(rscratch1, sp);
sub(hdr, hdr, rscratch1);
ands(hdr, hdr, aligned_mask - (int)os::vm_page_size());
// for recursive locking, the result is zero => save it in the displaced header
// location (null in the displaced hdr location indicates recursive locking)
str(hdr, Address(disp_hdr, 0));
// otherwise we don't care about the result and handle locking via runtime call
cbnz(hdr, slow_case);
// done
bind(done);
inc_held_monitor_count(rscratch1);
}
return null_check_offset;
}
void C1_MacroAssembler::unlock_object(Register hdr, Register obj, Register disp_hdr, Register temp, Label& slow_case) {
const int aligned_mask = BytesPerWord -1;
const int hdr_offset = oopDesc::mark_offset_in_bytes();
assert_different_registers(hdr, obj, disp_hdr, temp, rscratch2);
Label done;
if (LockingMode != LM_LIGHTWEIGHT) {
// load displaced header
ldr(hdr, Address(disp_hdr, 0));
// if the loaded hdr is null we had recursive locking
// if we had recursive locking, we are done
cbz(hdr, done);
}
// load object
ldr(obj, Address(disp_hdr, BasicObjectLock::obj_offset()));
verify_oop(obj);
if (LockingMode == LM_LIGHTWEIGHT) {
lightweight_unlock(obj, hdr, temp, rscratch2, slow_case);
} else if (LockingMode == LM_LEGACY) {
// test if object header is pointing to the displaced header, and if so, restore
// the displaced header in the object - if the object header is not pointing to
// the displaced header, get the object header instead
// if the object header was not pointing to the displaced header,
// we do unlocking via runtime call
if (hdr_offset) {
lea(rscratch1, Address(obj, hdr_offset));
cmpxchgptr(disp_hdr, hdr, rscratch1, rscratch2, done, &slow_case);
} else {
cmpxchgptr(disp_hdr, hdr, obj, rscratch2, done, &slow_case);
}
// done
bind(done);
dec_held_monitor_count(rscratch1);
}
lightweight_unlock(obj, hdr, temp, rscratch2, slow_case);
}
@@ -271,7 +194,7 @@ void C1_MacroAssembler::initialize_object(Register obj, Register klass, Register
if (CURRENT_ENV->dtrace_alloc_probes()) {
assert(obj == r0, "must be");
far_call(RuntimeAddress(Runtime1::entry_for(C1StubId::dtrace_object_alloc_id)));
far_call(RuntimeAddress(Runtime1::entry_for(StubId::c1_dtrace_object_alloc_id)));
}
verify_oop(obj);
@@ -312,7 +235,7 @@ void C1_MacroAssembler::allocate_array(Register obj, Register len, Register t1,
if (CURRENT_ENV->dtrace_alloc_probes()) {
assert(obj == r0, "must be");
far_call(RuntimeAddress(Runtime1::entry_for(C1StubId::dtrace_object_alloc_id)));
far_call(RuntimeAddress(Runtime1::entry_for(StubId::c1_dtrace_object_alloc_id)));
}
verify_oop(obj);

View File

@@ -99,10 +99,10 @@ int StubAssembler::call_RT(Register oop_result1, Register metadata_result, addre
if (frame_size() == no_frame_size) {
leave();
far_jump(RuntimeAddress(StubRoutines::forward_exception_entry()));
} else if (_stub_id == (int)C1StubId::forward_exception_id) {
} else if (_stub_id == (int)StubId::c1_forward_exception_id) {
should_not_reach_here();
} else {
far_jump(RuntimeAddress(Runtime1::entry_for(C1StubId::forward_exception_id)));
far_jump(RuntimeAddress(Runtime1::entry_for(StubId::c1_forward_exception_id)));
}
bind(L);
}
@@ -350,8 +350,8 @@ void Runtime1::initialize_pd() {
// return: offset in 64-bit words.
uint Runtime1::runtime_blob_current_thread_offset(frame f) {
CodeBlob* cb = f.cb();
assert(cb == Runtime1::blob_for(C1StubId::monitorenter_id) ||
cb == Runtime1::blob_for(C1StubId::monitorenter_nofpu_id), "must be");
assert(cb == Runtime1::blob_for(StubId::c1_monitorenter_id) ||
cb == Runtime1::blob_for(StubId::c1_monitorenter_nofpu_id), "must be");
assert(cb != nullptr && cb->is_runtime_stub(), "invalid frame");
int offset = cpu_reg_save_offsets[rthread->encoding()];
return offset / 2; // SP offsets are in halfwords
@@ -377,7 +377,7 @@ OopMapSet* Runtime1::generate_exception_throw(StubAssembler* sasm, address targe
}
OopMapSet* Runtime1::generate_handle_exception(C1StubId id, StubAssembler *sasm) {
OopMapSet* Runtime1::generate_handle_exception(StubId id, StubAssembler *sasm) {
__ block_comment("generate_handle_exception");
// incoming parameters
@@ -389,7 +389,7 @@ OopMapSet* Runtime1::generate_handle_exception(C1StubId id, StubAssembler *sasm)
OopMapSet* oop_maps = new OopMapSet();
OopMap* oop_map = nullptr;
switch (id) {
case C1StubId::forward_exception_id:
case StubId::c1_forward_exception_id:
// We're handling an exception in the context of a compiled frame.
// The registers have been saved in the standard places. Perform
// an exception lookup in the caller and dispatch to the handler
@@ -409,12 +409,12 @@ OopMapSet* Runtime1::generate_handle_exception(C1StubId id, StubAssembler *sasm)
__ str(zr, Address(rthread, JavaThread::vm_result_oop_offset()));
__ str(zr, Address(rthread, JavaThread::vm_result_metadata_offset()));
break;
case C1StubId::handle_exception_nofpu_id:
case C1StubId::handle_exception_id:
case StubId::c1_handle_exception_nofpu_id:
case StubId::c1_handle_exception_id:
// At this point all registers MAY be live.
oop_map = save_live_registers(sasm, id != C1StubId::handle_exception_nofpu_id);
oop_map = save_live_registers(sasm, id != StubId::c1_handle_exception_nofpu_id);
break;
case C1StubId::handle_exception_from_callee_id: {
case StubId::c1_handle_exception_from_callee_id: {
// At this point all registers except exception oop (r0) and
// exception pc (lr) are dead.
const int frame_size = 2 /*fp, return address*/;
@@ -472,13 +472,13 @@ OopMapSet* Runtime1::generate_handle_exception(C1StubId id, StubAssembler *sasm)
__ str(r0, Address(rfp, 1*BytesPerWord));
switch (id) {
case C1StubId::forward_exception_id:
case C1StubId::handle_exception_nofpu_id:
case C1StubId::handle_exception_id:
case StubId::c1_forward_exception_id:
case StubId::c1_handle_exception_nofpu_id:
case StubId::c1_handle_exception_id:
// Restore the registers that were saved at the beginning.
restore_live_registers(sasm, id != C1StubId::handle_exception_nofpu_id);
restore_live_registers(sasm, id != StubId::c1_handle_exception_nofpu_id);
break;
case C1StubId::handle_exception_from_callee_id:
case StubId::c1_handle_exception_from_callee_id:
break;
default: ShouldNotReachHere();
}
@@ -630,7 +630,7 @@ OopMapSet* Runtime1::generate_patching(StubAssembler* sasm, address target) {
}
OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
OopMapSet* Runtime1::generate_code_for(StubId id, StubAssembler* sasm) {
const Register exception_oop = r0;
const Register exception_pc = r3;
@@ -647,7 +647,7 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
OopMap* oop_map = nullptr;
switch (id) {
{
case C1StubId::forward_exception_id:
case StubId::c1_forward_exception_id:
{
oop_maps = generate_handle_exception(id, sasm);
__ leave();
@@ -655,31 +655,31 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
}
break;
case C1StubId::throw_div0_exception_id:
case StubId::c1_throw_div0_exception_id:
{ StubFrame f(sasm, "throw_div0_exception", dont_gc_arguments, does_not_return);
oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_div0_exception), false);
}
break;
case C1StubId::throw_null_pointer_exception_id:
case StubId::c1_throw_null_pointer_exception_id:
{ StubFrame f(sasm, "throw_null_pointer_exception", dont_gc_arguments, does_not_return);
oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_null_pointer_exception), false);
}
break;
case C1StubId::new_instance_id:
case C1StubId::fast_new_instance_id:
case C1StubId::fast_new_instance_init_check_id:
case StubId::c1_new_instance_id:
case StubId::c1_fast_new_instance_id:
case StubId::c1_fast_new_instance_init_check_id:
{
Register klass = r3; // Incoming
Register obj = r0; // Result
if (id == C1StubId::new_instance_id) {
if (id == StubId::c1_new_instance_id) {
__ set_info("new_instance", dont_gc_arguments);
} else if (id == C1StubId::fast_new_instance_id) {
} else if (id == StubId::c1_fast_new_instance_id) {
__ set_info("fast new_instance", dont_gc_arguments);
} else {
assert(id == C1StubId::fast_new_instance_init_check_id, "bad C1StubId");
assert(id == StubId::c1_fast_new_instance_init_check_id, "bad StubId");
__ set_info("fast new_instance init check", dont_gc_arguments);
}
@@ -698,7 +698,7 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
break;
case C1StubId::counter_overflow_id:
case StubId::c1_counter_overflow_id:
{
Register bci = r0, method = r1;
__ enter();
@@ -716,14 +716,14 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
}
break;
case C1StubId::new_type_array_id:
case C1StubId::new_object_array_id:
case StubId::c1_new_type_array_id:
case StubId::c1_new_object_array_id:
{
Register length = r19; // Incoming
Register klass = r3; // Incoming
Register obj = r0; // Result
if (id == C1StubId::new_type_array_id) {
if (id == StubId::c1_new_type_array_id) {
__ set_info("new_type_array", dont_gc_arguments);
} else {
__ set_info("new_object_array", dont_gc_arguments);
@@ -736,7 +736,7 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
Register t0 = obj;
__ ldrw(t0, Address(klass, Klass::layout_helper_offset()));
__ asrw(t0, t0, Klass::_lh_array_tag_shift);
int tag = ((id == C1StubId::new_type_array_id)
int tag = ((id == StubId::c1_new_type_array_id)
? Klass::_lh_array_tag_type_value
: Klass::_lh_array_tag_obj_value);
__ mov(rscratch1, tag);
@@ -751,7 +751,7 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
__ enter();
OopMap* map = save_live_registers(sasm);
int call_offset;
if (id == C1StubId::new_type_array_id) {
if (id == StubId::c1_new_type_array_id) {
call_offset = __ call_RT(obj, noreg, CAST_FROM_FN_PTR(address, new_type_array), klass, length);
} else {
call_offset = __ call_RT(obj, noreg, CAST_FROM_FN_PTR(address, new_object_array), klass, length);
@@ -769,7 +769,7 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
}
break;
case C1StubId::new_multi_array_id:
case StubId::c1_new_multi_array_id:
{ StubFrame f(sasm, "new_multi_array", dont_gc_arguments);
// r0,: klass
// r19,: rank
@@ -789,7 +789,7 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
}
break;
case C1StubId::register_finalizer_id:
case StubId::c1_register_finalizer_id:
{
__ set_info("register_finalizer", dont_gc_arguments);
@@ -821,19 +821,19 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
}
break;
case C1StubId::throw_class_cast_exception_id:
case StubId::c1_throw_class_cast_exception_id:
{ StubFrame f(sasm, "throw_class_cast_exception", dont_gc_arguments, does_not_return);
oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_class_cast_exception), true);
}
break;
case C1StubId::throw_incompatible_class_change_error_id:
case StubId::c1_throw_incompatible_class_change_error_id:
{ StubFrame f(sasm, "throw_incompatible_class_cast_exception", dont_gc_arguments, does_not_return);
oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_incompatible_class_change_error), false);
}
break;
case C1StubId::slow_subtype_check_id:
case StubId::c1_slow_subtype_check_id:
{
// Typical calling sequence:
// __ push(klass_RInfo); // object klass or other subclass
@@ -882,10 +882,10 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
}
break;
case C1StubId::monitorenter_nofpu_id:
case StubId::c1_monitorenter_nofpu_id:
save_fpu_registers = false;
// fall through
case C1StubId::monitorenter_id:
case StubId::c1_monitorenter_id:
{
StubFrame f(sasm, "monitorenter", dont_gc_arguments, requires_pop_epilogue_return);
OopMap* map = save_live_registers(sasm, save_fpu_registers);
@@ -903,7 +903,7 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
}
break;
case C1StubId::is_instance_of_id:
case StubId::c1_is_instance_of_id:
{
// Mirror: c_rarg0
// Object: c_rarg1
@@ -952,10 +952,10 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
}
break;
case C1StubId::monitorexit_nofpu_id:
case StubId::c1_monitorexit_nofpu_id:
save_fpu_registers = false;
// fall through
case C1StubId::monitorexit_id:
case StubId::c1_monitorexit_id:
{
StubFrame f(sasm, "monitorexit", dont_gc_arguments);
OopMap* map = save_live_registers(sasm, save_fpu_registers);
@@ -975,7 +975,7 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
}
break;
case C1StubId::deoptimize_id:
case StubId::c1_deoptimize_id:
{
StubFrame f(sasm, "deoptimize", dont_gc_arguments, does_not_return);
OopMap* oop_map = save_live_registers(sasm);
@@ -992,13 +992,13 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
}
break;
case C1StubId::throw_range_check_failed_id:
case StubId::c1_throw_range_check_failed_id:
{ StubFrame f(sasm, "range_check_failed", dont_gc_arguments, does_not_return);
oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_range_check_exception), true);
}
break;
case C1StubId::unwind_exception_id:
case StubId::c1_unwind_exception_id:
{ __ set_info("unwind_exception", dont_gc_arguments);
// note: no stubframe since we are about to leave the current
// activation and we are calling a leaf VM function only.
@@ -1006,54 +1006,54 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
}
break;
case C1StubId::access_field_patching_id:
case StubId::c1_access_field_patching_id:
{ StubFrame f(sasm, "access_field_patching", dont_gc_arguments, does_not_return);
// we should set up register map
oop_maps = generate_patching(sasm, CAST_FROM_FN_PTR(address, access_field_patching));
}
break;
case C1StubId::load_klass_patching_id:
case StubId::c1_load_klass_patching_id:
{ StubFrame f(sasm, "load_klass_patching", dont_gc_arguments, does_not_return);
// we should set up register map
oop_maps = generate_patching(sasm, CAST_FROM_FN_PTR(address, move_klass_patching));
}
break;
case C1StubId::load_mirror_patching_id:
case StubId::c1_load_mirror_patching_id:
{ StubFrame f(sasm, "load_mirror_patching", dont_gc_arguments, does_not_return);
// we should set up register map
oop_maps = generate_patching(sasm, CAST_FROM_FN_PTR(address, move_mirror_patching));
}
break;
case C1StubId::load_appendix_patching_id:
case StubId::c1_load_appendix_patching_id:
{ StubFrame f(sasm, "load_appendix_patching", dont_gc_arguments, does_not_return);
// we should set up register map
oop_maps = generate_patching(sasm, CAST_FROM_FN_PTR(address, move_appendix_patching));
}
break;
case C1StubId::handle_exception_nofpu_id:
case C1StubId::handle_exception_id:
case StubId::c1_handle_exception_nofpu_id:
case StubId::c1_handle_exception_id:
{ StubFrame f(sasm, "handle_exception", dont_gc_arguments);
oop_maps = generate_handle_exception(id, sasm);
}
break;
case C1StubId::handle_exception_from_callee_id:
case StubId::c1_handle_exception_from_callee_id:
{ StubFrame f(sasm, "handle_exception_from_callee", dont_gc_arguments);
oop_maps = generate_handle_exception(id, sasm);
}
break;
case C1StubId::throw_index_exception_id:
case StubId::c1_throw_index_exception_id:
{ StubFrame f(sasm, "index_range_check_failed", dont_gc_arguments, does_not_return);
oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_index_exception), true);
}
break;
case C1StubId::throw_array_store_exception_id:
case StubId::c1_throw_array_store_exception_id:
{ StubFrame f(sasm, "throw_array_store_exception", dont_gc_arguments, does_not_return);
// tos + 0: link
// + 1: return address
@@ -1061,7 +1061,7 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
}
break;
case C1StubId::predicate_failed_trap_id:
case StubId::c1_predicate_failed_trap_id:
{
StubFrame f(sasm, "predicate_failed_trap", dont_gc_arguments, does_not_return);
@@ -1079,7 +1079,7 @@ OopMapSet* Runtime1::generate_code_for(C1StubId id, StubAssembler* sasm) {
}
break;
case C1StubId::dtrace_object_alloc_id:
case StubId::c1_dtrace_object_alloc_id:
{ // c_rarg0: object
StubFrame f(sasm, "dtrace_object_alloc", dont_gc_arguments);
save_live_registers(sasm);

View File

@@ -147,215 +147,8 @@ address C2_MacroAssembler::arrays_hashcode(Register ary, Register cnt, Register
return pc();
}
void C2_MacroAssembler::fast_lock(Register objectReg, Register boxReg, Register tmpReg,
Register tmp2Reg, Register tmp3Reg) {
Register oop = objectReg;
Register box = boxReg;
Register disp_hdr = tmpReg;
Register tmp = tmp2Reg;
Label cont;
Label object_has_monitor;
Label count, no_count;
assert(LockingMode != LM_LIGHTWEIGHT, "lightweight locking should use fast_lock_lightweight");
assert_different_registers(oop, box, tmp, disp_hdr, rscratch2);
// Load markWord from object into displaced_header.
ldr(disp_hdr, Address(oop, oopDesc::mark_offset_in_bytes()));
if (DiagnoseSyncOnValueBasedClasses != 0) {
load_klass(tmp, oop);
ldrb(tmp, Address(tmp, Klass::misc_flags_offset()));
tst(tmp, KlassFlags::_misc_is_value_based_class);
br(Assembler::NE, cont);
}
// Check for existing monitor
tbnz(disp_hdr, exact_log2(markWord::monitor_value), object_has_monitor);
if (LockingMode == LM_MONITOR) {
tst(oop, oop); // Set NE to indicate 'failure' -> take slow-path. We know that oop != 0.
b(cont);
} else {
assert(LockingMode == LM_LEGACY, "must be");
// Set tmp to be (markWord of object | UNLOCK_VALUE).
orr(tmp, disp_hdr, markWord::unlocked_value);
// Initialize the box. (Must happen before we update the object mark!)
str(tmp, Address(box, BasicLock::displaced_header_offset_in_bytes()));
// Compare object markWord with an unlocked value (tmp) and if
// equal exchange the stack address of our box with object markWord.
// On failure disp_hdr contains the possibly locked markWord.
cmpxchg(oop, tmp, box, Assembler::xword, /*acquire*/ true,
/*release*/ true, /*weak*/ false, disp_hdr);
br(Assembler::EQ, cont);
assert(oopDesc::mark_offset_in_bytes() == 0, "offset of _mark is not 0");
// If the compare-and-exchange succeeded, then we found an unlocked
// object, will have now locked it will continue at label cont
// Check if the owner is self by comparing the value in the
// markWord of object (disp_hdr) with the stack pointer.
mov(rscratch1, sp);
sub(disp_hdr, disp_hdr, rscratch1);
mov(tmp, (address) (~(os::vm_page_size()-1) | markWord::lock_mask_in_place));
// If condition is true we are cont and hence we can store 0 as the
// displaced header in the box, which indicates that it is a recursive lock.
ands(tmp/*==0?*/, disp_hdr, tmp); // Sets flags for result
str(tmp/*==0, perhaps*/, Address(box, BasicLock::displaced_header_offset_in_bytes()));
b(cont);
}
// Handle existing monitor.
bind(object_has_monitor);
// Try to CAS owner (no owner => current thread's _monitor_owner_id).
ldr(rscratch2, Address(rthread, JavaThread::monitor_owner_id_offset()));
add(tmp, disp_hdr, (in_bytes(ObjectMonitor::owner_offset())-markWord::monitor_value));
cmpxchg(tmp, zr, rscratch2, Assembler::xword, /*acquire*/ true,
/*release*/ true, /*weak*/ false, tmp3Reg); // Sets flags for result
// Store a non-null value into the box to avoid looking like a re-entrant
// lock. The fast-path monitor unlock code checks for
// markWord::monitor_value so use markWord::unused_mark which has the
// relevant bit set, and also matches ObjectSynchronizer::enter.
mov(tmp, (address)markWord::unused_mark().value());
str(tmp, Address(box, BasicLock::displaced_header_offset_in_bytes()));
br(Assembler::EQ, cont); // CAS success means locking succeeded
cmp(tmp3Reg, rscratch2);
br(Assembler::NE, cont); // Check for recursive locking
// Recursive lock case
increment(Address(disp_hdr, in_bytes(ObjectMonitor::recursions_offset()) - markWord::monitor_value), 1);
// flag == EQ still from the cmp above, checking if this is a reentrant lock
bind(cont);
// flag == EQ indicates success
// flag == NE indicates failure
br(Assembler::NE, no_count);
bind(count);
if (LockingMode == LM_LEGACY) {
inc_held_monitor_count(rscratch1);
}
bind(no_count);
}
void C2_MacroAssembler::fast_unlock(Register objectReg, Register boxReg, Register tmpReg,
Register tmp2Reg) {
Register oop = objectReg;
Register box = boxReg;
Register disp_hdr = tmpReg;
Register owner_addr = tmpReg;
Register tmp = tmp2Reg;
Label cont;
Label object_has_monitor;
Label count, no_count;
Label unlocked;
assert(LockingMode != LM_LIGHTWEIGHT, "lightweight locking should use fast_unlock_lightweight");
assert_different_registers(oop, box, tmp, disp_hdr);
if (LockingMode == LM_LEGACY) {
// Find the lock address and load the displaced header from the stack.
ldr(disp_hdr, Address(box, BasicLock::displaced_header_offset_in_bytes()));
// If the displaced header is 0, we have a recursive unlock.
cmp(disp_hdr, zr);
br(Assembler::EQ, cont);
}
// Handle existing monitor.
ldr(tmp, Address(oop, oopDesc::mark_offset_in_bytes()));
tbnz(tmp, exact_log2(markWord::monitor_value), object_has_monitor);
if (LockingMode == LM_MONITOR) {
tst(oop, oop); // Set NE to indicate 'failure' -> take slow-path. We know that oop != 0.
b(cont);
} else {
assert(LockingMode == LM_LEGACY, "must be");
// Check if it is still a light weight lock, this is is true if we
// see the stack address of the basicLock in the markWord of the
// object.
cmpxchg(oop, box, disp_hdr, Assembler::xword, /*acquire*/ false,
/*release*/ true, /*weak*/ false, tmp);
b(cont);
}
assert(oopDesc::mark_offset_in_bytes() == 0, "offset of _mark is not 0");
// Handle existing monitor.
bind(object_has_monitor);
STATIC_ASSERT(markWord::monitor_value <= INT_MAX);
add(tmp, tmp, -(int)markWord::monitor_value); // monitor
ldr(disp_hdr, Address(tmp, ObjectMonitor::recursions_offset()));
Label notRecursive;
cbz(disp_hdr, notRecursive);
// Recursive lock
sub(disp_hdr, disp_hdr, 1u);
str(disp_hdr, Address(tmp, ObjectMonitor::recursions_offset()));
cmp(disp_hdr, disp_hdr); // Sets flags for result
b(cont);
bind(notRecursive);
// Compute owner address.
lea(owner_addr, Address(tmp, ObjectMonitor::owner_offset()));
// Set owner to null.
// Release to satisfy the JMM
stlr(zr, owner_addr);
// We need a full fence after clearing owner to avoid stranding.
// StoreLoad achieves this.
membar(StoreLoad);
// Check if the entry_list is empty.
ldr(rscratch1, Address(tmp, ObjectMonitor::entry_list_offset()));
cmp(rscratch1, zr);
br(Assembler::EQ, cont); // If so we are done.
// Check if there is a successor.
ldr(rscratch1, Address(tmp, ObjectMonitor::succ_offset()));
cmp(rscratch1, zr);
br(Assembler::NE, unlocked); // If so we are done.
// Save the monitor pointer in the current thread, so we can try to
// reacquire the lock in SharedRuntime::monitor_exit_helper().
str(tmp, Address(rthread, JavaThread::unlocked_inflated_monitor_offset()));
cmp(zr, rthread); // Set Flag to NE => slow path
b(cont);
bind(unlocked);
cmp(zr, zr); // Set Flag to EQ => fast path
// Intentional fall-through
bind(cont);
// flag == EQ indicates success
// flag == NE indicates failure
br(Assembler::NE, no_count);
bind(count);
if (LockingMode == LM_LEGACY) {
dec_held_monitor_count(rscratch1);
}
bind(no_count);
}
void C2_MacroAssembler::fast_lock_lightweight(Register obj, Register box, Register t1,
Register t2, Register t3) {
assert(LockingMode == LM_LIGHTWEIGHT, "must be");
assert_different_registers(obj, box, t1, t2, t3, rscratch2);
// Handle inflated monitor.
@@ -512,7 +305,6 @@ void C2_MacroAssembler::fast_lock_lightweight(Register obj, Register box, Regist
void C2_MacroAssembler::fast_unlock_lightweight(Register obj, Register box, Register t1,
Register t2, Register t3) {
assert(LockingMode == LM_LIGHTWEIGHT, "must be");
assert_different_registers(obj, box, t1, t2, t3);
// Handle inflated monitor.
@@ -1778,19 +1570,21 @@ void C2_MacroAssembler::sve_vmask_lasttrue(Register dst, BasicType bt, PRegister
void C2_MacroAssembler::neon_vector_extend(FloatRegister dst, BasicType dst_bt, unsigned dst_vlen_in_bytes,
FloatRegister src, BasicType src_bt, bool is_unsigned) {
if (src_bt == T_BYTE) {
if (dst_bt == T_SHORT) {
// 4B/8B to 4S/8S
_xshll(is_unsigned, dst, T8H, src, T8B, 0);
} else {
// 4B to 4I
assert(dst_vlen_in_bytes == 16 && dst_bt == T_INT, "unsupported");
_xshll(is_unsigned, dst, T8H, src, T8B, 0);
// 4B to 4S/4I, 8B to 8S
assert(dst_vlen_in_bytes == 8 || dst_vlen_in_bytes == 16, "unsupported");
assert(dst_bt == T_SHORT || dst_bt == T_INT, "unsupported");
_xshll(is_unsigned, dst, T8H, src, T8B, 0);
if (dst_bt == T_INT) {
_xshll(is_unsigned, dst, T4S, dst, T4H, 0);
}
} else if (src_bt == T_SHORT) {
// 4S to 4I
assert(dst_vlen_in_bytes == 16 && dst_bt == T_INT, "unsupported");
// 2S to 2I/2L, 4S to 4I
assert(dst_vlen_in_bytes == 8 || dst_vlen_in_bytes == 16, "unsupported");
assert(dst_bt == T_INT || dst_bt == T_LONG, "unsupported");
_xshll(is_unsigned, dst, T4S, src, T4H, 0);
if (dst_bt == T_LONG) {
_xshll(is_unsigned, dst, T2D, dst, T2S, 0);
}
} else if (src_bt == T_INT) {
// 2I to 2L
assert(dst_vlen_in_bytes == 16 && dst_bt == T_LONG, "unsupported");
@@ -1810,18 +1604,21 @@ void C2_MacroAssembler::neon_vector_narrow(FloatRegister dst, BasicType dst_bt,
assert(dst_bt == T_BYTE, "unsupported");
xtn(dst, T8B, src, T8H);
} else if (src_bt == T_INT) {
// 4I to 4B/4S
assert(src_vlen_in_bytes == 16, "unsupported");
// 2I to 2S, 4I to 4B/4S
assert(src_vlen_in_bytes == 8 || src_vlen_in_bytes == 16, "unsupported");
assert(dst_bt == T_BYTE || dst_bt == T_SHORT, "unsupported");
xtn(dst, T4H, src, T4S);
if (dst_bt == T_BYTE) {
xtn(dst, T8B, dst, T8H);
}
} else if (src_bt == T_LONG) {
// 2L to 2I
// 2L to 2S/2I
assert(src_vlen_in_bytes == 16, "unsupported");
assert(dst_bt == T_INT, "unsupported");
assert(dst_bt == T_INT || dst_bt == T_SHORT, "unsupported");
xtn(dst, T2S, src, T2D);
if (dst_bt == T_SHORT) {
xtn(dst, T4H, dst, T4S);
}
} else {
ShouldNotReachHere();
}
@@ -2853,3 +2650,124 @@ void C2_MacroAssembler::reconstruct_frame_pointer(Register rtmp) {
add(rfp, sp, framesize - 2 * wordSize);
}
}
// Selects elements from two source vectors (src1, src2) based on index values in the index register
// using Neon instructions and places it in the destination vector element corresponding to the
// index vector element. Each index in the index register must be in the range - [0, 2 * NUM_ELEM),
// where NUM_ELEM is the number of BasicType elements per vector.
// If idx < NUM_ELEM --> selects src1[idx] (idx is an element of the index register)
// Otherwise, selects src2[idx NUM_ELEM]
void C2_MacroAssembler::select_from_two_vectors_neon(FloatRegister dst, FloatRegister src1,
FloatRegister src2, FloatRegister index,
FloatRegister tmp, unsigned vector_length_in_bytes) {
assert_different_registers(dst, src1, src2, tmp);
SIMD_Arrangement size = vector_length_in_bytes == 16 ? T16B : T8B;
if (vector_length_in_bytes == 16) {
assert(UseSVE <= 1, "sve must be <= 1");
assert(src1->successor() == src2, "Source registers must be ordered");
// If the vector length is 16B, then use the Neon "tbl" instruction with two vector table
tbl(dst, size, src1, 2, index);
} else { // vector length == 8
assert(UseSVE == 0, "must be Neon only");
// We need to fit both the source vectors (src1, src2) in a 128-bit register because the
// Neon "tbl" instruction supports only looking up 16B vectors. We then use the Neon "tbl"
// instruction with one vector lookup
ins(tmp, D, src1, 0, 0);
ins(tmp, D, src2, 1, 0);
tbl(dst, size, tmp, 1, index);
}
}
// Selects elements from two source vectors (src1, src2) based on index values in the index register
// using SVE/SVE2 instructions and places it in the destination vector element corresponding to the
// index vector element. Each index in the index register must be in the range - [0, 2 * NUM_ELEM),
// where NUM_ELEM is the number of BasicType elements per vector.
// If idx < NUM_ELEM --> selects src1[idx] (idx is an element of the index register)
// Otherwise, selects src2[idx NUM_ELEM]
void C2_MacroAssembler::select_from_two_vectors_sve(FloatRegister dst, FloatRegister src1,
FloatRegister src2, FloatRegister index,
FloatRegister tmp, SIMD_RegVariant T,
unsigned vector_length_in_bytes) {
assert_different_registers(dst, src1, src2, index, tmp);
if (vector_length_in_bytes == 8) {
// We need to fit both the source vectors (src1, src2) in a single vector register because the
// SVE "tbl" instruction is unpredicated and works on the entire vector which can lead to
// incorrect results if each source vector is only partially filled. We then use the SVE "tbl"
// instruction with one vector lookup
assert(UseSVE >= 1, "sve must be >= 1");
ins(tmp, D, src1, 0, 0);
ins(tmp, D, src2, 1, 0);
sve_tbl(dst, T, tmp, index);
} else { // UseSVE == 2 and vector_length_in_bytes > 8
// If the vector length is > 8, then use the SVE2 "tbl" instruction with the two vector table.
// The assertion - vector_length_in_bytes == MaxVectorSize ensures that this operation
// is not executed on machines where vector_length_in_bytes < MaxVectorSize
// with the only exception of 8B vector length.
assert(UseSVE == 2 && vector_length_in_bytes == MaxVectorSize, "must be");
assert(src1->successor() == src2, "Source registers must be ordered");
sve_tbl(dst, T, src1, src2, index);
}
}
void C2_MacroAssembler::select_from_two_vectors(FloatRegister dst, FloatRegister src1,
FloatRegister src2, FloatRegister index,
FloatRegister tmp, BasicType bt,
unsigned vector_length_in_bytes) {
assert_different_registers(dst, src1, src2, index, tmp);
// The cases that can reach this method are -
// - UseSVE = 0, vector_length_in_bytes = 8 or 16
// - UseSVE = 1, vector_length_in_bytes = 8 or 16
// - UseSVE = 2, vector_length_in_bytes >= 8
//
// SVE/SVE2 tbl instructions are generated when UseSVE = 1 with vector_length_in_bytes = 8
// and UseSVE = 2 with vector_length_in_bytes >= 8
//
// Neon instructions are generated when UseSVE = 0 with vector_length_in_bytes = 8 or 16 and
// UseSVE = 1 with vector_length_in_bytes = 16
if ((UseSVE == 1 && vector_length_in_bytes == 8) || UseSVE == 2) {
SIMD_RegVariant T = elemType_to_regVariant(bt);
select_from_two_vectors_sve(dst, src1, src2, index, tmp, T, vector_length_in_bytes);
return;
}
// The only BasicTypes that can reach here are T_SHORT, T_BYTE, T_INT and T_FLOAT
assert(bt != T_DOUBLE && bt != T_LONG, "unsupported basic type");
assert(vector_length_in_bytes <= 16, "length_in_bytes must be <= 16");
bool isQ = vector_length_in_bytes == 16;
SIMD_Arrangement size1 = isQ ? T16B : T8B;
SIMD_Arrangement size2 = esize2arrangement((uint)type2aelembytes(bt), isQ);
// Neon "tbl" instruction only supports byte tables, so we need to look at chunks of
// 2B for selecting shorts or chunks of 4B for selecting ints/floats from the table.
// The index values in "index" register are in the range of [0, 2 * NUM_ELEM) where NUM_ELEM
// is the number of elements that can fit in a vector. For ex. for T_SHORT with 64-bit vector length,
// the indices can range from [0, 8).
// As an example with 64-bit vector length and T_SHORT type - let index = [2, 5, 1, 0]
// Move a constant 0x02 in every byte of tmp - tmp = [0x0202, 0x0202, 0x0202, 0x0202]
// Multiply index vector with tmp to yield - dst = [0x0404, 0x0a0a, 0x0202, 0x0000]
// Move a constant 0x0100 in every 2B of tmp - tmp = [0x0100, 0x0100, 0x0100, 0x0100]
// Add the multiplied result to the vector in tmp to obtain the byte level
// offsets - dst = [0x0504, 0x0b0a, 0x0302, 0x0100]
// Use these offsets in the "tbl" instruction to select chunks of 2B.
if (bt == T_BYTE) {
select_from_two_vectors_neon(dst, src1, src2, index, tmp, vector_length_in_bytes);
} else {
int elem_size = (bt == T_SHORT) ? 2 : 4;
uint64_t tbl_offset = (bt == T_SHORT) ? 0x0100u : 0x03020100u;
mov(tmp, size1, elem_size);
mulv(dst, size2, index, tmp);
mov(tmp, size2, tbl_offset);
addv(dst, size1, dst, tmp); // "dst" now contains the processed index elements
// to select a set of 2B/4B
select_from_two_vectors_neon(dst, src1, src2, dst, tmp, vector_length_in_bytes);
}
}

View File

@@ -34,6 +34,15 @@
void neon_reduce_logical_helper(int opc, bool sf, Register Rd, Register Rn, Register Rm,
enum shift_kind kind = Assembler::LSL, unsigned shift = 0);
void select_from_two_vectors_neon(FloatRegister dst, FloatRegister src1,
FloatRegister src2, FloatRegister index,
FloatRegister tmp, unsigned vector_length_in_bytes);
void select_from_two_vectors_sve(FloatRegister dst, FloatRegister src1,
FloatRegister src2, FloatRegister index,
FloatRegister tmp, SIMD_RegVariant T,
unsigned vector_length_in_bytes);
public:
// jdk.internal.util.ArraysSupport.vectorizedHashCode
address arrays_hashcode(Register ary, Register cnt, Register result, FloatRegister vdata0,
@@ -42,9 +51,6 @@
FloatRegister vmul3, FloatRegister vpow, FloatRegister vpowm,
BasicType eltype);
// Code used by cmpFastLock and cmpFastUnlock mach instructions in .ad file.
void fast_lock(Register object, Register box, Register tmp, Register tmp2, Register tmp3);
void fast_unlock(Register object, Register box, Register tmp, Register tmp2);
// Code used by cmpFastLockLightweight and cmpFastUnlockLightweight mach instructions in .ad file.
void fast_lock_lightweight(Register object, Register box, Register t1, Register t2, Register t3);
void fast_unlock_lightweight(Register object, Register box, Register t1, Register t2, Register t3);
@@ -193,4 +199,9 @@
void reconstruct_frame_pointer(Register rtmp);
// Select from a table of two vectors
void select_from_two_vectors(FloatRegister dst, FloatRegister src1, FloatRegister src2,
FloatRegister index, FloatRegister tmp, BasicType bt,
unsigned vector_length_in_bytes);
#endif // CPU_AARCH64_C2_MACROASSEMBLER_AARCH64_HPP

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2019, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -101,9 +101,12 @@ frame FreezeBase::new_heap_frame(frame& f, frame& caller) {
*hf.addr_at(frame::interpreter_frame_locals_offset) = locals_offset;
return hf;
} else {
// We need to re-read fp out of the frame because it may be an oop and we might have
// had a safepoint in finalize_freeze, after constructing f.
fp = *(intptr_t**)(f.sp() - frame::sender_sp_offset);
// For a compiled frame we need to re-read fp out of the frame because it may be an
// oop and we might have had a safepoint in finalize_freeze, after constructing f.
// For stub/native frames the value is not used while frozen, and will be constructed again
// when thawing the frame (see ThawBase::new_stack_frame). We use a special bad address to
// help with debugging, particularly when inspecting frames and identifying invalid accesses.
fp = FKind::compiled ? *(intptr_t**)(f.sp() - frame::sender_sp_offset) : (intptr_t*)badAddressVal;
int fsize = FKind::size(f);
sp = caller.unextended_sp() - fsize;
@@ -192,6 +195,11 @@ inline void FreezeBase::patch_pd(frame& hf, const frame& caller) {
}
}
inline void FreezeBase::patch_pd_unused(intptr_t* sp) {
intptr_t* fp_addr = sp - frame::sender_sp_offset;
*fp_addr = badAddressVal;
}
//////// Thaw
// Fast path

View File

@@ -441,8 +441,8 @@ JavaThread** frame::saved_thread_address(const frame& f) {
JavaThread** thread_addr;
#ifdef COMPILER1
if (cb == Runtime1::blob_for(C1StubId::monitorenter_id) ||
cb == Runtime1::blob_for(C1StubId::monitorenter_nofpu_id)) {
if (cb == Runtime1::blob_for(StubId::c1_monitorenter_id) ||
cb == Runtime1::blob_for(StubId::c1_monitorenter_nofpu_id)) {
thread_addr = (JavaThread**)(f.sp() + Runtime1::runtime_blob_current_thread_offset(f));
} else
#endif

View File

@@ -292,7 +292,8 @@ void ShenandoahBarrierSetAssembler::load_reference_barrier(MacroAssembler* masm,
} else {
assert(is_phantom, "only remaining strength");
assert(!is_narrow, "phantom access cannot be narrow");
__ mov(lr, CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_phantom));
// AOT saved adapters need relocation for this call.
__ lea(lr, RuntimeAddress(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_phantom)));
}
__ blr(lr);
__ mov(rscratch1, r0);

View File

@@ -117,7 +117,8 @@ define_pd_global(intx, InlineSmallCode, 1000);
product(ccstr, OnSpinWaitInst, "yield", DIAGNOSTIC, \
"The instruction to use to implement " \
"java.lang.Thread.onSpinWait()." \
"Options: none, nop, isb, yield.") \
"Valid values are: none, nop, isb, yield, sb.") \
constraint(OnSpinWaitInstNameConstraintFunc, AtParse) \
product(uint, OnSpinWaitInstCount, 1, DIAGNOSTIC, \
"The number of OnSpinWaitInst instructions to generate." \
"It cannot be used with OnSpinWaitInst=none.") \

View File

@@ -691,104 +691,27 @@ void InterpreterMacroAssembler::leave_jfr_critical_section() {
void InterpreterMacroAssembler::lock_object(Register lock_reg)
{
assert(lock_reg == c_rarg1, "The argument is only for looks. It must be c_rarg1");
if (LockingMode == LM_MONITOR) {
call_VM_preemptable(noreg,
CAST_FROM_FN_PTR(address, InterpreterRuntime::monitorenter),
lock_reg);
} else {
Label count, done;
const Register swap_reg = r0;
const Register tmp = c_rarg2;
const Register obj_reg = c_rarg3; // Will contain the oop
const Register tmp2 = c_rarg4;
const Register tmp3 = c_rarg5;
const Register tmp = c_rarg2;
const Register obj_reg = c_rarg3; // Will contain the oop
const Register tmp2 = c_rarg4;
const Register tmp3 = c_rarg5;
const int obj_offset = in_bytes(BasicObjectLock::obj_offset());
const int lock_offset = in_bytes(BasicObjectLock::lock_offset());
const int mark_offset = lock_offset +
BasicLock::displaced_header_offset_in_bytes();
// Load object pointer into obj_reg %c_rarg3
ldr(obj_reg, Address(lock_reg, BasicObjectLock::obj_offset()));
Label slow_case;
Label slow_case, done;
lightweight_lock(lock_reg, obj_reg, tmp, tmp2, tmp3, slow_case);
b(done);
// Load object pointer into obj_reg %c_rarg3
ldr(obj_reg, Address(lock_reg, obj_offset));
bind(slow_case);
if (LockingMode == LM_LIGHTWEIGHT) {
lightweight_lock(lock_reg, obj_reg, tmp, tmp2, tmp3, slow_case);
b(done);
} else if (LockingMode == LM_LEGACY) {
// Call the runtime routine for slow case
call_VM_preemptable(noreg,
CAST_FROM_FN_PTR(address, InterpreterRuntime::monitorenter),
lock_reg);
if (DiagnoseSyncOnValueBasedClasses != 0) {
load_klass(tmp, obj_reg);
ldrb(tmp, Address(tmp, Klass::misc_flags_offset()));
tst(tmp, KlassFlags::_misc_is_value_based_class);
br(Assembler::NE, slow_case);
}
// Load (object->mark() | 1) into swap_reg
ldr(rscratch1, Address(obj_reg, oopDesc::mark_offset_in_bytes()));
orr(swap_reg, rscratch1, 1);
// Save (object->mark() | 1) into BasicLock's displaced header
str(swap_reg, Address(lock_reg, mark_offset));
assert(lock_offset == 0,
"displached header must be first word in BasicObjectLock");
Label fail;
cmpxchg_obj_header(swap_reg, lock_reg, obj_reg, rscratch1, count, /*fallthrough*/nullptr);
// Fast check for recursive lock.
//
// Can apply the optimization only if this is a stack lock
// allocated in this thread. For efficiency, we can focus on
// recently allocated stack locks (instead of reading the stack
// base and checking whether 'mark' points inside the current
// thread stack):
// 1) (mark & 7) == 0, and
// 2) sp <= mark < mark + os::pagesize()
//
// Warning: sp + os::pagesize can overflow the stack base. We must
// neither apply the optimization for an inflated lock allocated
// just above the thread stack (this is why condition 1 matters)
// nor apply the optimization if the stack lock is inside the stack
// of another thread. The latter is avoided even in case of overflow
// because we have guard pages at the end of all stacks. Hence, if
// we go over the stack base and hit the stack of another thread,
// this should not be in a writeable area that could contain a
// stack lock allocated by that thread. As a consequence, a stack
// lock less than page size away from sp is guaranteed to be
// owned by the current thread.
//
// These 3 tests can be done by evaluating the following
// expression: ((mark - sp) & (7 - os::vm_page_size())),
// assuming both stack pointer and pagesize have their
// least significant 3 bits clear.
// NOTE: the mark is in swap_reg %r0 as the result of cmpxchg
// NOTE2: aarch64 does not like to subtract sp from rn so take a
// copy
mov(rscratch1, sp);
sub(swap_reg, swap_reg, rscratch1);
ands(swap_reg, swap_reg, (uint64_t)(7 - (int)os::vm_page_size()));
// Save the test result, for recursive case, the result is zero
str(swap_reg, Address(lock_reg, mark_offset));
br(Assembler::NE, slow_case);
bind(count);
inc_held_monitor_count(rscratch1);
b(done);
}
bind(slow_case);
// Call the runtime routine for slow case
call_VM_preemptable(noreg,
CAST_FROM_FN_PTR(address, InterpreterRuntime::monitorenter),
lock_reg);
bind(done);
}
bind(done);
}
@@ -807,57 +730,29 @@ void InterpreterMacroAssembler::unlock_object(Register lock_reg)
{
assert(lock_reg == c_rarg1, "The argument is only for looks. It must be rarg1");
if (LockingMode == LM_MONITOR) {
call_VM_leaf(CAST_FROM_FN_PTR(address, InterpreterRuntime::monitorexit), lock_reg);
} else {
Label count, done;
const Register swap_reg = r0;
const Register header_reg = c_rarg2; // Will contain the old oopMark
const Register obj_reg = c_rarg3; // Will contain the oop
const Register tmp_reg = c_rarg4; // Temporary used by lightweight_unlock
const Register swap_reg = r0;
const Register header_reg = c_rarg2; // Will contain the old oopMark
const Register obj_reg = c_rarg3; // Will contain the oop
const Register tmp_reg = c_rarg4; // Temporary used by lightweight_unlock
save_bcp(); // Save in case of exception
save_bcp(); // Save in case of exception
// Load oop into obj_reg(%c_rarg3)
ldr(obj_reg, Address(lock_reg, BasicObjectLock::obj_offset()));
if (LockingMode != LM_LIGHTWEIGHT) {
// Convert from BasicObjectLock structure to object and BasicLock
// structure Store the BasicLock address into %r0
lea(swap_reg, Address(lock_reg, BasicObjectLock::lock_offset()));
}
// Free entry
str(zr, Address(lock_reg, BasicObjectLock::obj_offset()));
// Load oop into obj_reg(%c_rarg3)
ldr(obj_reg, Address(lock_reg, BasicObjectLock::obj_offset()));
Label slow_case, done;
lightweight_unlock(obj_reg, header_reg, swap_reg, tmp_reg, slow_case);
b(done);
// Free entry
str(zr, Address(lock_reg, BasicObjectLock::obj_offset()));
Label slow_case;
if (LockingMode == LM_LIGHTWEIGHT) {
lightweight_unlock(obj_reg, header_reg, swap_reg, tmp_reg, slow_case);
b(done);
} else if (LockingMode == LM_LEGACY) {
// Load the old header from BasicLock structure
ldr(header_reg, Address(swap_reg,
BasicLock::displaced_header_offset_in_bytes()));
// Test for recursion
cbz(header_reg, count);
// Atomic swap back the old header
cmpxchg_obj_header(swap_reg, header_reg, obj_reg, rscratch1, count, &slow_case);
bind(count);
dec_held_monitor_count(rscratch1);
b(done);
}
bind(slow_case);
// Call the runtime routine for slow case.
str(obj_reg, Address(lock_reg, BasicObjectLock::obj_offset())); // restore obj
call_VM_leaf(CAST_FROM_FN_PTR(address, InterpreterRuntime::monitorexit), lock_reg);
bind(done);
restore_bcp();
}
bind(slow_case);
// Call the runtime routine for slow case.
str(obj_reg, Address(lock_reg, BasicObjectLock::obj_offset())); // restore obj
call_VM_leaf(CAST_FROM_FN_PTR(address, InterpreterRuntime::monitorexit), lock_reg);
bind(done);
restore_bcp();
}
void InterpreterMacroAssembler::test_method_data_pointer(Register mdp,
@@ -1016,31 +911,16 @@ void InterpreterMacroAssembler::update_mdp_for_ret(Register return_bci) {
}
void InterpreterMacroAssembler::profile_taken_branch(Register mdp,
Register bumped_count) {
void InterpreterMacroAssembler::profile_taken_branch(Register mdp) {
if (ProfileInterpreter) {
Label profile_continue;
// If no method data exists, go to profile_continue.
// Otherwise, assign to mdp
test_method_data_pointer(mdp, profile_continue);
// We are taking a branch. Increment the taken count.
// We inline increment_mdp_data_at to return bumped_count in a register
//increment_mdp_data_at(mdp, in_bytes(JumpData::taken_offset()));
Address data(mdp, in_bytes(JumpData::taken_offset()));
ldr(bumped_count, data);
assert(DataLayout::counter_increment == 1,
"flow-free idiom only works with 1");
// Intel does this to catch overflow
// addptr(bumped_count, DataLayout::counter_increment);
// sbbptr(bumped_count, 0);
// so we do this
adds(bumped_count, bumped_count, DataLayout::counter_increment);
Label L;
br(Assembler::CS, L); // skip store if counter overflow
str(bumped_count, data);
bind(L);
increment_mdp_data_at(mdp, in_bytes(JumpData::taken_offset()));
// The method data pointer needs to be updated to reflect the new target.
update_mdp_by_offset(mdp, in_bytes(JumpData::displacement_offset()));
bind(profile_continue);
@@ -1055,7 +935,7 @@ void InterpreterMacroAssembler::profile_not_taken_branch(Register mdp) {
// If no method data exists, go to profile_continue.
test_method_data_pointer(mdp, profile_continue);
// We are taking a branch. Increment the not taken count.
// We are not taking a branch. Increment the not taken count.
increment_mdp_data_at(mdp, in_bytes(BranchData::not_taken_offset()));
// The method data pointer needs to be updated to correspond to

View File

@@ -276,7 +276,7 @@ class InterpreterMacroAssembler: public MacroAssembler {
// narrow int return value
void narrow(Register result);
void profile_taken_branch(Register mdp, Register bumped_count);
void profile_taken_branch(Register mdp);
void profile_not_taken_branch(Register mdp);
void profile_call(Register mdp);
void profile_final_call(Register mdp);

View File

@@ -6421,10 +6421,14 @@ void MacroAssembler::fill_words(Register base, Register cnt, Register value)
// Intrinsic for
//
// - sun/nio/cs/ISO_8859_1$Encoder.implEncodeISOArray
// return the number of characters copied.
// - java/lang/StringUTF16.compress
// return index of non-latin1 character if copy fails, otherwise 'len'.
// - sun.nio.cs.ISO_8859_1.Encoder#encodeISOArray0(byte[] sa, int sp, byte[] da, int dp, int len)
// Encodes char[] to byte[] in ISO-8859-1
//
// - java.lang.StringCoding#encodeISOArray0(byte[] sa, int sp, byte[] da, int dp, int len)
// Encodes byte[] (containing UTF-16) to byte[] in ISO-8859-1
//
// - java.lang.StringCoding#encodeAsciiArray0(char[] sa, int sp, byte[] da, int dp, int len)
// Encodes char[] to byte[] in ASCII
//
// This version always returns the number of characters copied, and does not
// clobber the 'len' register. A successful copy will complete with the post-
@@ -6803,6 +6807,7 @@ void MacroAssembler::verify_cross_modify_fence_not_required() {
#endif
void MacroAssembler::spin_wait() {
block_comment("spin_wait {");
for (int i = 0; i < VM_Version::spin_wait_desc().inst_count(); ++i) {
switch (VM_Version::spin_wait_desc().inst()) {
case SpinWait::NOP:
@@ -6814,10 +6819,15 @@ void MacroAssembler::spin_wait() {
case SpinWait::YIELD:
yield();
break;
case SpinWait::SB:
assert(VM_Version::supports_sb(), "current CPU does not support SB instruction");
sb();
break;
default:
ShouldNotReachHere();
}
}
block_comment("}");
}
// Stack frame creation/removal
@@ -7091,7 +7101,6 @@ void MacroAssembler::double_move(VMRegPair src, VMRegPair dst, Register tmp) {
// - t1, t2, t3: temporary registers, will be destroyed
// - slow: branched to if locking fails, absolute offset may larger than 32KB (imm14 encoding).
void MacroAssembler::lightweight_lock(Register basic_lock, Register obj, Register t1, Register t2, Register t3, Label& slow) {
assert(LockingMode == LM_LIGHTWEIGHT, "only used with new lightweight locking");
assert_different_registers(basic_lock, obj, t1, t2, t3, rscratch1);
Label push;
@@ -7151,7 +7160,6 @@ void MacroAssembler::lightweight_lock(Register basic_lock, Register obj, Registe
// - t1, t2, t3: temporary registers
// - slow: branched to if unlocking fails, absolute offset may larger than 32KB (imm14 encoding).
void MacroAssembler::lightweight_unlock(Register obj, Register t1, Register t2, Register t3, Label& slow) {
assert(LockingMode == LM_LIGHTWEIGHT, "only used with new lightweight locking");
// cmpxchg clobbers rscratch1.
assert_different_registers(obj, t1, t2, t3, rscratch1);

View File

@@ -543,7 +543,7 @@ void MacroAssembler::generate__ieee754_rem_pio2(address npio2_hw,
// }
//
// /* compute n */
// z = scalbnA(z,q0); /* actual value of z */
// z = scalbn(z,q0); /* actual value of z */
// z -= 8.0*floor(z*0.125); /* trim off integer >= 8 */
// n = (int) z;
// z -= (double)n;
@@ -576,7 +576,7 @@ void MacroAssembler::generate__ieee754_rem_pio2(address npio2_hw,
// }
// if(ih==2) {
// z = one - z;
// if(carry!=0) z -= scalbnA(one,q0);
// if(carry!=0) z -= scalbn(one,q0);
// }
// }
//
@@ -602,7 +602,7 @@ void MacroAssembler::generate__ieee754_rem_pio2(address npio2_hw,
// jz -= 1; q0 -= 24;
// while(iq[jz]==0) { jz--; q0-=24;}
// } else { /* break z into 24-bit if necessary */
// z = scalbnA(z,-q0);
// z = scalbn(z,-q0);
// if(z>=two24B) {
// fw = (double)((int)(twon24*z));
// iq[jz] = (int)(z-two24B*fw);
@@ -612,7 +612,7 @@ void MacroAssembler::generate__ieee754_rem_pio2(address npio2_hw,
// }
//
// /* convert integer "bit" chunk to floating-point value */
// fw = scalbnA(one,q0);
// fw = scalbn(one,q0);
// for(i=jz;i>=0;i--) {
// q[i] = fw*(double)iq[i]; fw*=twon24;
// }
@@ -925,7 +925,7 @@ void MacroAssembler::generate__kernel_rem_pio2(address two_over_pi, address pio2
fmovd(v25, 1.0);
fsubd(v18, v25, v18); // z = one - z;
cbzw(rscratch2, IH_HANDLED);
fsubd(v18, v18, v30); // z -= scalbnA(one,q0);
fsubd(v18, v18, v30); // z -= scalbn(one,q0);
}
}
bind(IH_HANDLED);
@@ -1026,7 +1026,7 @@ void MacroAssembler::generate__kernel_rem_pio2(address two_over_pi, address pio2
bind(Z_ZERO_CHECK_DONE);
// convert integer "bit" chunk to floating-point value
// v17 = twon24
// update v30, which was scalbnA(1.0, <old q0>);
// update v30, which was scalbn(1.0, <old q0>);
addw(tmp2, rscratch1, 1023); // biased exponent
lsl(tmp2, tmp2, 52); // put at correct position
mov(i, jz);

View File

@@ -212,11 +212,6 @@ void NativeMovRegMem::verify() {
void NativeJump::verify() { ; }
void NativeJump::check_verified_entry_alignment(address entry, address verified_entry) {
}
address NativeJump::jump_destination() const {
address dest = MacroAssembler::target_addr_for_insn_or_null(instruction_address());
@@ -345,10 +340,6 @@ bool NativeInstruction::is_movk() {
return Instruction_aarch64::extract(int_at(0), 30, 23) == 0b11100101;
}
bool NativeInstruction::is_sigill_not_entrant() {
return uint_at(0) == 0xd4bbd5a1; // dcps1 #0xdead
}
void NativeIllegalInstruction::insert(address code_pos) {
*(juint*)code_pos = 0xd4bbd5a1; // dcps1 #0xdead
}
@@ -359,31 +350,6 @@ bool NativeInstruction::is_stop() {
//-------------------------------------------------------------------
// MT-safe inserting of a jump over a jump or a nop (used by
// nmethod::make_not_entrant)
void NativeJump::patch_verified_entry(address entry, address verified_entry, address dest) {
assert(dest == SharedRuntime::get_handle_wrong_method_stub(), "expected fixed destination of patch");
assert(nativeInstruction_at(verified_entry)->is_jump_or_nop()
|| nativeInstruction_at(verified_entry)->is_sigill_not_entrant(),
"Aarch64 cannot replace non-jump with jump");
// Patch this nmethod atomically.
if (Assembler::reachable_from_branch_at(verified_entry, dest)) {
ptrdiff_t disp = dest - verified_entry;
guarantee(disp < 1 << 27 && disp > - (1 << 27), "branch overflow");
unsigned int insn = (0b000101 << 26) | ((disp >> 2) & 0x3ffffff);
*(unsigned int*)verified_entry = insn;
} else {
// We use an illegal instruction for marking a method as not_entrant.
NativeIllegalInstruction::insert(verified_entry);
}
ICache::invalidate_range(verified_entry, instruction_size);
}
void NativeGeneralJump::verify() { }
// MT-safe patching of a long jump instruction.

View File

@@ -83,7 +83,6 @@ public:
bool is_safepoint_poll();
bool is_movz();
bool is_movk();
bool is_sigill_not_entrant();
bool is_stop();
protected:
@@ -360,9 +359,6 @@ public:
// Insertion of native jump instruction
static void insert(address code_pos, address entry);
// MT-safe insertion of native jump at verified method entry
static void check_verified_entry_alignment(address entry, address verified_entry);
static void patch_verified_entry(address entry, address verified_entry, address dest);
};
inline NativeJump* nativeJump_at(address address) {

View File

@@ -61,8 +61,8 @@ class SimpleRuntimeFrame {
//------------------------------generate_uncommon_trap_blob--------------------
UncommonTrapBlob* OptoRuntime::generate_uncommon_trap_blob() {
const char* name = OptoRuntime::stub_name(OptoStubId::uncommon_trap_id);
CodeBlob* blob = AOTCodeCache::load_code_blob(AOTCodeEntry::C2Blob, (uint)OptoStubId::uncommon_trap_id, name);
const char* name = OptoRuntime::stub_name(StubId::c2_uncommon_trap_id);
CodeBlob* blob = AOTCodeCache::load_code_blob(AOTCodeEntry::C2Blob, BlobId::c2_uncommon_trap_id);
if (blob != nullptr) {
return blob->as_uncommon_trap_blob();
}
@@ -254,7 +254,7 @@ UncommonTrapBlob* OptoRuntime::generate_uncommon_trap_blob() {
UncommonTrapBlob *ut_blob = UncommonTrapBlob::create(&buffer, oop_maps,
SimpleRuntimeFrame::framesize >> 1);
AOTCodeCache::store_code_blob(*ut_blob, AOTCodeEntry::C2Blob, (uint)OptoStubId::uncommon_trap_id, name);
AOTCodeCache::store_code_blob(*ut_blob, AOTCodeEntry::C2Blob, BlobId::c2_uncommon_trap_id);
return ut_blob;
}
@@ -291,8 +291,8 @@ ExceptionBlob* OptoRuntime::generate_exception_blob() {
assert(SimpleRuntimeFrame::framesize % 4 == 0, "sp not 16-byte aligned");
const char* name = OptoRuntime::stub_name(OptoStubId::exception_id);
CodeBlob* blob = AOTCodeCache::load_code_blob(AOTCodeEntry::C2Blob, (uint)OptoStubId::exception_id, name);
const char* name = OptoRuntime::stub_name(StubId::c2_exception_id);
CodeBlob* blob = AOTCodeCache::load_code_blob(AOTCodeEntry::C2Blob, (uint)BlobId::c2_exception_id, name);
if (blob != nullptr) {
return blob->as_exception_blob();
}
@@ -398,7 +398,7 @@ ExceptionBlob* OptoRuntime::generate_exception_blob() {
// Set exception blob
ExceptionBlob* ex_blob = ExceptionBlob::create(&buffer, oop_maps, SimpleRuntimeFrame::framesize >> 1);
AOTCodeCache::store_code_blob(*ex_blob, AOTCodeEntry::C2Blob, (uint)OptoStubId::exception_id, name);
AOTCodeCache::store_code_blob(*ex_blob, AOTCodeEntry::C2Blob, BlobId::c2_exception_id);
return ex_blob;
}
#endif // COMPILER2

View File

@@ -1721,7 +1721,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm,
// We use the same pc/oopMap repeatedly when we call out.
Label native_return;
if (LockingMode != LM_LEGACY && method->is_object_wait0()) {
if (method->is_object_wait0()) {
// For convenience we use the pc we want to resume to in case of preemption on Object.wait.
__ set_last_Java_frame(sp, noreg, native_return, rscratch1);
} else {
@@ -1776,44 +1776,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm,
// Load the oop from the handle
__ ldr(obj_reg, Address(oop_handle_reg, 0));
if (LockingMode == LM_MONITOR) {
__ b(slow_path_lock);
} else if (LockingMode == LM_LEGACY) {
// Load (object->mark() | 1) into swap_reg %r0
__ ldr(rscratch1, Address(obj_reg, oopDesc::mark_offset_in_bytes()));
__ orr(swap_reg, rscratch1, 1);
// Save (object->mark() | 1) into BasicLock's displaced header
__ str(swap_reg, Address(lock_reg, mark_word_offset));
// src -> dest iff dest == r0 else r0 <- dest
__ cmpxchg_obj_header(r0, lock_reg, obj_reg, rscratch1, count, /*fallthrough*/nullptr);
// Hmm should this move to the slow path code area???
// Test if the oopMark is an obvious stack pointer, i.e.,
// 1) (mark & 3) == 0, and
// 2) sp <= mark < mark + os::pagesize()
// These 3 tests can be done by evaluating the following
// expression: ((mark - sp) & (3 - os::vm_page_size())),
// assuming both stack pointer and pagesize have their
// least significant 2 bits clear.
// NOTE: the oopMark is in swap_reg %r0 as the result of cmpxchg
__ sub(swap_reg, sp, swap_reg);
__ neg(swap_reg, swap_reg);
__ ands(swap_reg, swap_reg, 3 - (int)os::vm_page_size());
// Save the test result, for recursive case, the result is zero
__ str(swap_reg, Address(lock_reg, mark_word_offset));
__ br(Assembler::NE, slow_path_lock);
__ bind(count);
__ inc_held_monitor_count(rscratch1);
} else {
assert(LockingMode == LM_LIGHTWEIGHT, "must be");
__ lightweight_lock(lock_reg, obj_reg, swap_reg, tmp, lock_tmp, slow_path_lock);
}
__ lightweight_lock(lock_reg, obj_reg, swap_reg, tmp, lock_tmp, slow_path_lock);
// Slow path will re-enter here
__ bind(lock_done);
@@ -1888,7 +1851,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm,
__ lea(rscratch2, Address(rthread, JavaThread::thread_state_offset()));
__ stlrw(rscratch1, rscratch2);
if (LockingMode != LM_LEGACY && method->is_object_wait0()) {
if (method->is_object_wait0()) {
// Check preemption for Object.wait()
__ ldr(rscratch1, Address(rthread, JavaThread::preempt_alternate_return_offset()));
__ cbz(rscratch1, native_return);
@@ -1917,48 +1880,18 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm,
// Get locked oop from the handle we passed to jni
__ ldr(obj_reg, Address(oop_handle_reg, 0));
Label done, not_recursive;
if (LockingMode == LM_LEGACY) {
// Simple recursive lock?
__ ldr(rscratch1, Address(sp, lock_slot_offset * VMRegImpl::stack_slot_size));
__ cbnz(rscratch1, not_recursive);
__ dec_held_monitor_count(rscratch1);
__ b(done);
}
__ bind(not_recursive);
// Must save r0 if if it is live now because cmpxchg must use it
if (ret_type != T_FLOAT && ret_type != T_DOUBLE && ret_type != T_VOID) {
save_native_result(masm, ret_type, stack_slots);
}
if (LockingMode == LM_MONITOR) {
__ b(slow_path_unlock);
} else if (LockingMode == LM_LEGACY) {
// get address of the stack lock
__ lea(r0, Address(sp, lock_slot_offset * VMRegImpl::stack_slot_size));
// get old displaced header
__ ldr(old_hdr, Address(r0, 0));
// Atomic swap old header if oop still contains the stack lock
Label count;
__ cmpxchg_obj_header(r0, old_hdr, obj_reg, rscratch1, count, &slow_path_unlock);
__ bind(count);
__ dec_held_monitor_count(rscratch1);
} else {
assert(LockingMode == LM_LIGHTWEIGHT, "");
__ lightweight_unlock(obj_reg, old_hdr, swap_reg, lock_tmp, slow_path_unlock);
}
__ lightweight_unlock(obj_reg, old_hdr, swap_reg, lock_tmp, slow_path_unlock);
// slow path re-enters here
__ bind(unlock_done);
if (ret_type != T_FLOAT && ret_type != T_DOUBLE && ret_type != T_VOID) {
restore_native_result(masm, ret_type, stack_slots);
}
__ bind(done);
}
Label dtrace_method_exit, dtrace_method_exit_done;
@@ -2201,8 +2134,8 @@ void SharedRuntime::generate_deopt_blob() {
pad += 512; // Increase the buffer size when compiling for JVMCI
}
#endif
const char* name = SharedRuntime::stub_name(SharedStubId::deopt_id);
CodeBlob* blob = AOTCodeCache::load_code_blob(AOTCodeEntry::SharedBlob, (uint)SharedStubId::deopt_id, name);
const char* name = SharedRuntime::stub_name(StubId::shared_deopt_id);
CodeBlob* blob = AOTCodeCache::load_code_blob(AOTCodeEntry::SharedBlob, BlobId::shared_deopt_id);
if (blob != nullptr) {
_deopt_blob = blob->as_deoptimization_blob();
return;
@@ -2572,7 +2505,7 @@ void SharedRuntime::generate_deopt_blob() {
}
#endif
AOTCodeCache::store_code_blob(*_deopt_blob, AOTCodeEntry::SharedBlob, (uint)SharedStubId::deopt_id, name);
AOTCodeCache::store_code_blob(*_deopt_blob, AOTCodeEntry::SharedBlob, BlobId::shared_deopt_id);
}
// Number of stack slots between incoming argument block and the start of
@@ -2598,12 +2531,12 @@ VMReg SharedRuntime::thread_register() {
// Generate a special Compile2Runtime blob that saves all registers,
// and setup oopmap.
//
SafepointBlob* SharedRuntime::generate_handler_blob(SharedStubId id, address call_ptr) {
SafepointBlob* SharedRuntime::generate_handler_blob(StubId id, address call_ptr) {
assert(is_polling_page_id(id), "expected a polling page stub id");
// Allocate space for the code. Setup code generation tools.
const char* name = SharedRuntime::stub_name(id);
CodeBlob* blob = AOTCodeCache::load_code_blob(AOTCodeEntry::SharedBlob, (uint)id, name);
CodeBlob* blob = AOTCodeCache::load_code_blob(AOTCodeEntry::SharedBlob, StubInfo::blob(id));
if (blob != nullptr) {
return blob->as_safepoint_blob();
}
@@ -2617,8 +2550,8 @@ SafepointBlob* SharedRuntime::generate_handler_blob(SharedStubId id, address cal
address start = __ pc();
address call_pc = nullptr;
int frame_size_in_words;
bool cause_return = (id == SharedStubId::polling_page_return_handler_id);
RegisterSaver reg_save(id == SharedStubId::polling_page_vectors_safepoint_handler_id /* save_vectors */);
bool cause_return = (id == StubId::shared_polling_page_return_handler_id);
RegisterSaver reg_save(id == StubId::shared_polling_page_vectors_safepoint_handler_id /* save_vectors */);
// When the signal occurred, the LR was either signed and stored on the stack (in which
// case it will be restored from the stack before being used) or unsigned and not stored
@@ -2721,7 +2654,7 @@ SafepointBlob* SharedRuntime::generate_handler_blob(SharedStubId id, address cal
// Fill-out other meta info
SafepointBlob* sp_blob = SafepointBlob::create(&buffer, oop_maps, frame_size_in_words);
AOTCodeCache::store_code_blob(*sp_blob, AOTCodeEntry::SharedBlob, (uint)id, name);
AOTCodeCache::store_code_blob(*sp_blob, AOTCodeEntry::SharedBlob, StubInfo::blob(id));
return sp_blob;
}
@@ -2733,12 +2666,12 @@ SafepointBlob* SharedRuntime::generate_handler_blob(SharedStubId id, address cal
// but since this is generic code we don't know what they are and the caller
// must do any gc of the args.
//
RuntimeStub* SharedRuntime::generate_resolve_blob(SharedStubId id, address destination) {
RuntimeStub* SharedRuntime::generate_resolve_blob(StubId id, address destination) {
assert (StubRoutines::forward_exception_entry() != nullptr, "must be generated before");
assert(is_resolve_id(id), "expected a resolve stub id");
const char* name = SharedRuntime::stub_name(id);
CodeBlob* blob = AOTCodeCache::load_code_blob(AOTCodeEntry::SharedBlob, (uint)id, name);
CodeBlob* blob = AOTCodeCache::load_code_blob(AOTCodeEntry::SharedBlob, StubInfo::blob(id));
if (blob != nullptr) {
return blob->as_runtime_stub();
}
@@ -2819,7 +2752,7 @@ RuntimeStub* SharedRuntime::generate_resolve_blob(SharedStubId id, address desti
// frame_size_words or bytes??
RuntimeStub* rs_blob = RuntimeStub::new_runtime_stub(name, &buffer, frame_complete, frame_size_in_words, oop_maps, true);
AOTCodeCache::store_code_blob(*rs_blob, AOTCodeEntry::SharedBlob, (uint)id, name);
AOTCodeCache::store_code_blob(*rs_blob, AOTCodeEntry::SharedBlob, StubInfo::blob(id));
return rs_blob;
}
@@ -2839,7 +2772,7 @@ RuntimeStub* SharedRuntime::generate_resolve_blob(SharedStubId id, address desti
// otherwise assume that stack unwinding will be initiated, so
// caller saved registers were assumed volatile in the compiler.
RuntimeStub* SharedRuntime::generate_throw_exception(SharedStubId id, address runtime_entry) {
RuntimeStub* SharedRuntime::generate_throw_exception(StubId id, address runtime_entry) {
assert(is_throw_id(id), "expected a throw stub id");
const char* name = SharedRuntime::stub_name(id);
@@ -2863,7 +2796,7 @@ RuntimeStub* SharedRuntime::generate_throw_exception(SharedStubId id, address ru
const char* timer_msg = "SharedRuntime generate_throw_exception";
TraceTime timer(timer_msg, TRACETIME_LOG(Info, startuptime));
CodeBlob* blob = AOTCodeCache::load_code_blob(AOTCodeEntry::SharedBlob, (uint)id, name);
CodeBlob* blob = AOTCodeCache::load_code_blob(AOTCodeEntry::SharedBlob, StubInfo::blob(id));
if (blob != nullptr) {
return blob->as_runtime_stub();
}
@@ -2928,7 +2861,7 @@ RuntimeStub* SharedRuntime::generate_throw_exception(SharedStubId id, address ru
frame_complete,
(framesize >> (LogBytesPerWord - LogBytesPerInt)),
oop_maps, false);
AOTCodeCache::store_code_blob(*stub, AOTCodeEntry::SharedBlob, (uint)id, name);
AOTCodeCache::store_code_blob(*stub, AOTCodeEntry::SharedBlob, StubInfo::blob(id));
return stub;
}
@@ -2959,7 +2892,7 @@ RuntimeStub* SharedRuntime::generate_jfr_write_checkpoint() {
int insts_size = 1024;
int locs_size = 64;
const char* name = SharedRuntime::stub_name(SharedStubId::jfr_write_checkpoint_id);
const char* name = SharedRuntime::stub_name(StubId::shared_jfr_write_checkpoint_id);
CodeBuffer code(name, insts_size, locs_size);
OopMapSet* oop_maps = new OopMapSet();
MacroAssembler* masm = new MacroAssembler(&code);
@@ -2998,7 +2931,7 @@ RuntimeStub* SharedRuntime::generate_jfr_return_lease() {
int insts_size = 1024;
int locs_size = 64;
const char* name = SharedRuntime::stub_name(SharedStubId::jfr_return_lease_id);
const char* name = SharedRuntime::stub_name(StubId::shared_jfr_return_lease_id);
CodeBuffer code(name, insts_size, locs_size);
OopMapSet* oop_maps = new OopMapSet();
MacroAssembler* masm = new MacroAssembler(&code);

View File

@@ -19,42 +19,34 @@
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
package sun.jvm.hotspot.runtime;
#include "spin_wait_aarch64.hpp"
#include "utilities/debug.hpp"
import sun.jvm.hotspot.types.TypeDataBase;
#include <string.h>
/** Encapsulates the LockingMode enum in globalDefinitions.hpp in
the VM. */
public class LockingMode {
private static int monitor;
private static int legacy;
private static int lightweight;
static {
VM.registerVMInitializedObserver(
(o, d) -> initialize(VM.getVM().getTypeDataBase()));
}
private static synchronized void initialize(TypeDataBase db) {
monitor = db.lookupIntConstant("LM_MONITOR").intValue();
legacy = db.lookupIntConstant("LM_LEGACY").intValue();
lightweight = db.lookupIntConstant("LM_LIGHTWEIGHT").intValue();
}
public static int getMonitor() {
return monitor;
}
public static int getLegacy() {
return legacy;
}
public static int getLightweight() {
return lightweight;
}
bool SpinWait::supports(const char *name) {
return name != nullptr &&
(strcmp(name, "nop") == 0 ||
strcmp(name, "isb") == 0 ||
strcmp(name, "yield") == 0 ||
strcmp(name, "sb") == 0 ||
strcmp(name, "none") == 0);
}
SpinWait::Inst SpinWait::from_name(const char* name) {
assert(supports(name), "checked by OnSpinWaitInstNameConstraintFunc");
if (strcmp(name, "nop") == 0) {
return SpinWait::NOP;
} else if (strcmp(name, "isb") == 0) {
return SpinWait::ISB;
} else if (strcmp(name, "yield") == 0) {
return SpinWait::YIELD;
} else if (strcmp(name, "sb") == 0) {
return SpinWait::SB;
}
return SpinWait::NONE;
}

View File

@@ -19,7 +19,6 @@
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
#ifndef CPU_AARCH64_SPIN_WAIT_AARCH64_HPP
@@ -31,18 +30,24 @@ public:
NONE = -1,
NOP,
ISB,
YIELD
YIELD,
SB
};
private:
Inst _inst;
int _count;
Inst from_name(const char *name);
public:
SpinWait(Inst inst = NONE, int count = 0) : _inst(inst), _count(count) {}
SpinWait(Inst inst = NONE, int count = 0) : _inst(inst), _count(inst == NONE ? 0 : count) {}
SpinWait(const char *name, int count) : SpinWait(from_name(name), count) {}
Inst inst() const { return _inst; }
int inst_count() const { return _count; }
static bool supports(const char *name);
};
#endif // CPU_AARCH64_SPIN_WAIT_AARCH64_HPP

File diff suppressed because it is too large Load Diff

View File

@@ -71,6 +71,10 @@ ATTRIBUTE_ALIGNED(64) uint32_t StubRoutines::aarch64::_dilithiumConsts[] =
/**
* crc_table[] from jdk/src/share/native/java/util/zip/zlib-1.2.5/crc32.h
*/
address StubRoutines::crc_table_addr() { return (address)StubRoutines::aarch64::_crc_table; }
address StubRoutines::crc32c_table_addr() { ShouldNotCallThis(); return nullptr; }
ATTRIBUTE_ALIGNED(4096) juint StubRoutines::aarch64::_crc_table[] =
{
// Table 0

View File

@@ -47,6 +47,7 @@ enum platform_dependent_constants {
class aarch64 {
friend class StubGenerator;
friend class StubRoutines;
#if INCLUDE_JVMCI
friend class JVMCIVMStructs;
#endif

View File

@@ -1478,22 +1478,17 @@ address TemplateInterpreterGenerator::generate_native_entry(bool synchronized) {
__ lea(rscratch2, Address(rthread, JavaThread::thread_state_offset()));
__ stlrw(rscratch1, rscratch2);
if (LockingMode != LM_LEGACY) {
// Check preemption for Object.wait()
Label not_preempted;
__ ldr(rscratch1, Address(rthread, JavaThread::preempt_alternate_return_offset()));
__ cbz(rscratch1, not_preempted);
__ str(zr, Address(rthread, JavaThread::preempt_alternate_return_offset()));
__ br(rscratch1);
__ bind(native_return);
__ restore_after_resume(true /* is_native */);
// reload result_handler
__ ldr(result_handler, Address(rfp, frame::interpreter_frame_result_handler_offset*wordSize));
__ bind(not_preempted);
} else {
// any pc will do so just use this one for LM_LEGACY to keep code together.
__ bind(native_return);
}
// Check preemption for Object.wait()
Label not_preempted;
__ ldr(rscratch1, Address(rthread, JavaThread::preempt_alternate_return_offset()));
__ cbz(rscratch1, not_preempted);
__ str(zr, Address(rthread, JavaThread::preempt_alternate_return_offset()));
__ br(rscratch1);
__ bind(native_return);
__ restore_after_resume(true /* is_native */);
// reload result_handler
__ ldr(result_handler, Address(rfp, frame::interpreter_frame_result_handler_offset*wordSize));
__ bind(not_preempted);
// reset_last_Java_frame
__ reset_last_Java_frame(true);

View File

@@ -1759,7 +1759,7 @@ void TemplateTable::float_cmp(bool is_float, int unordered_result)
void TemplateTable::branch(bool is_jsr, bool is_wide)
{
__ profile_taken_branch(r0, r1);
__ profile_taken_branch(r0);
const ByteSize be_offset = MethodCounters::backedge_counter_offset() +
InvocationCounter::counter_offset();
const ByteSize inv_offset = MethodCounters::invocation_counter_offset() +
@@ -1809,7 +1809,6 @@ void TemplateTable::branch(bool is_jsr, bool is_wide)
if (UseLoopCounter) {
// increment backedge counter for backward branches
// r0: MDO
// w1: MDO bumped taken-count
// r2: target offset
__ cmp(r2, zr);
__ br(Assembler::GT, dispatch); // count only if backward branch
@@ -1820,12 +1819,10 @@ void TemplateTable::branch(bool is_jsr, bool is_wide)
__ ldr(rscratch1, Address(rmethod, Method::method_counters_offset()));
__ cbnz(rscratch1, has_counters);
__ push(r0);
__ push(r1);
__ push(r2);
__ call_VM(noreg, CAST_FROM_FN_PTR(address,
InterpreterRuntime::build_method_counters), rmethod);
__ pop(r2);
__ pop(r1);
__ pop(r0);
__ ldr(rscratch1, Address(rmethod, Method::method_counters_offset()));
__ cbz(rscratch1, dispatch); // No MethodCounters allocated, OutOfMemory

View File

@@ -32,6 +32,7 @@
#include "runtime/vm_version.hpp"
#include "utilities/formatBuffer.hpp"
#include "utilities/macros.hpp"
#include "utilities/ostream.hpp"
int VM_Version::_cpu;
int VM_Version::_model;
@@ -50,25 +51,23 @@ uintptr_t VM_Version::_pac_mask;
SpinWait VM_Version::_spin_wait;
const char* VM_Version::_features_names[MAX_CPU_FEATURES] = { nullptr };
static SpinWait get_spin_wait_desc() {
if (strcmp(OnSpinWaitInst, "nop") == 0) {
return SpinWait(SpinWait::NOP, OnSpinWaitInstCount);
} else if (strcmp(OnSpinWaitInst, "isb") == 0) {
return SpinWait(SpinWait::ISB, OnSpinWaitInstCount);
} else if (strcmp(OnSpinWaitInst, "yield") == 0) {
return SpinWait(SpinWait::YIELD, OnSpinWaitInstCount);
} else if (strcmp(OnSpinWaitInst, "none") != 0) {
vm_exit_during_initialization("The options for OnSpinWaitInst are nop, isb, yield, and none", OnSpinWaitInst);
SpinWait spin_wait(OnSpinWaitInst, OnSpinWaitInstCount);
if (spin_wait.inst() == SpinWait::SB && !VM_Version::supports_sb()) {
vm_exit_during_initialization("OnSpinWaitInst is SB but current CPU does not support SB instruction");
}
if (!FLAG_IS_DEFAULT(OnSpinWaitInstCount) && OnSpinWaitInstCount > 0) {
vm_exit_during_initialization("OnSpinWaitInstCount cannot be used for OnSpinWaitInst 'none'");
}
return SpinWait{};
return spin_wait;
}
void VM_Version::initialize() {
#define SET_CPU_FEATURE_NAME(id, name, bit) \
_features_names[bit] = XSTR(name);
CPU_FEATURE_FLAGS(SET_CPU_FEATURE_NAME)
#undef SET_CPU_FEATURE_NAME
_supports_atomic_getset4 = true;
_supports_atomic_getadd4 = true;
_supports_atomic_getset8 = true;
@@ -203,7 +202,7 @@ void VM_Version::initialize() {
// Cortex A53
if (_cpu == CPU_ARM && model_is(0xd03)) {
_features |= CPU_A53MAC;
set_feature(CPU_A53MAC);
if (FLAG_IS_DEFAULT(UseSIMDForArrayEquals)) {
FLAG_SET_DEFAULT(UseSIMDForArrayEquals, false);
}
@@ -243,7 +242,7 @@ void VM_Version::initialize() {
}
}
if (_features & (CPU_FP | CPU_ASIMD)) {
if (supports_feature(CPU_FP) || supports_feature(CPU_ASIMD)) {
if (FLAG_IS_DEFAULT(UseSignumIntrinsic)) {
FLAG_SET_DEFAULT(UseSignumIntrinsic, true);
}
@@ -406,7 +405,7 @@ void VM_Version::initialize() {
FLAG_SET_DEFAULT(UseGHASHIntrinsics, false);
}
if (_features & CPU_ASIMD) {
if (supports_feature(CPU_ASIMD)) {
if (FLAG_IS_DEFAULT(UseChaCha20Intrinsics)) {
UseChaCha20Intrinsics = true;
}
@@ -417,7 +416,7 @@ void VM_Version::initialize() {
FLAG_SET_DEFAULT(UseChaCha20Intrinsics, false);
}
if (_features & CPU_ASIMD) {
if (supports_feature(CPU_ASIMD)) {
if (FLAG_IS_DEFAULT(UseKyberIntrinsics)) {
UseKyberIntrinsics = true;
}
@@ -428,7 +427,7 @@ void VM_Version::initialize() {
FLAG_SET_DEFAULT(UseKyberIntrinsics, false);
}
if (_features & CPU_ASIMD) {
if (supports_feature(CPU_ASIMD)) {
if (FLAG_IS_DEFAULT(UseDilithiumIntrinsics)) {
UseDilithiumIntrinsics = true;
}
@@ -629,32 +628,38 @@ void VM_Version::initialize() {
// Sync SVE related CPU features with flags
if (UseSVE < 2) {
_features &= ~CPU_SVE2;
_features &= ~CPU_SVEBITPERM;
clear_feature(CPU_SVE2);
clear_feature(CPU_SVEBITPERM);
}
if (UseSVE < 1) {
_features &= ~CPU_SVE;
clear_feature(CPU_SVE);
}
// Construct the "features" string
char buf[512];
int buf_used_len = os::snprintf_checked(buf, sizeof(buf), "0x%02x:0x%x:0x%03x:%d", _cpu, _variant, _model, _revision);
stringStream ss(512);
ss.print("0x%02x:0x%x:0x%03x:%d", _cpu, _variant, _model, _revision);
if (_model2) {
os::snprintf_checked(buf + buf_used_len, sizeof(buf) - buf_used_len, "(0x%03x)", _model2);
ss.print("(0x%03x)", _model2);
}
size_t features_offset = strnlen(buf, sizeof(buf));
#define ADD_FEATURE_IF_SUPPORTED(id, name, bit) \
do { \
if (VM_Version::supports_##name()) strcat(buf, ", " #name); \
} while(0);
CPU_FEATURE_FLAGS(ADD_FEATURE_IF_SUPPORTED)
#undef ADD_FEATURE_IF_SUPPORTED
ss.print(", ");
int features_offset = (int)ss.size();
insert_features_names(_features, ss);
_cpu_info_string = os::strdup(buf);
_cpu_info_string = ss.as_string(true);
_features_string = _cpu_info_string + features_offset;
}
_features_string = extract_features_string(_cpu_info_string,
strnlen(_cpu_info_string, sizeof(buf)),
features_offset);
void VM_Version::insert_features_names(uint64_t features, stringStream& ss) {
int i = 0;
ss.join([&]() {
while (i < MAX_CPU_FEATURES) {
if (supports_feature((VM_Version::Feature_Flag)i)) {
return _features_names[i++];
}
i += 1;
}
return (const char*)nullptr;
}, ", ");
}
#if defined(LINUX)

View File

@@ -30,6 +30,10 @@
#include "runtime/abstract_vm_version.hpp"
#include "utilities/sizes.hpp"
class stringStream;
#define BIT_MASK(flag) (1ULL<<(flag))
class VM_Version : public Abstract_VM_Version {
friend class VMStructs;
friend class JVMCIVMStructs;
@@ -66,6 +70,8 @@ public:
static void initialize();
static void check_virtualizations();
static void insert_features_names(uint64_t features, stringStream& ss);
static void print_platform_virtualization_info(outputStream*);
// Asserts
@@ -131,6 +137,7 @@ enum Ampere_CPU_Model {
decl(SHA3, sha3, 17) \
decl(SHA512, sha512, 21) \
decl(SVE, sve, 22) \
decl(SB, sb, 29) \
decl(PACA, paca, 30) \
/* flags above must follow Linux HWCAP */ \
decl(SVEBITPERM, svebitperm, 27) \
@@ -138,17 +145,32 @@ enum Ampere_CPU_Model {
decl(A53MAC, a53mac, 31)
enum Feature_Flag {
#define DECLARE_CPU_FEATURE_FLAG(id, name, bit) CPU_##id = (1 << bit),
#define DECLARE_CPU_FEATURE_FLAG(id, name, bit) CPU_##id = bit,
CPU_FEATURE_FLAGS(DECLARE_CPU_FEATURE_FLAG)
#undef DECLARE_CPU_FEATURE_FLAG
MAX_CPU_FEATURES
};
STATIC_ASSERT(sizeof(_features) * BitsPerByte >= MAX_CPU_FEATURES);
static const char* _features_names[MAX_CPU_FEATURES];
// Feature identification
#define CPU_FEATURE_DETECTION(id, name, bit) \
static bool supports_##name() { return (_features & CPU_##id) != 0; };
static bool supports_##name() { return supports_feature(CPU_##id); }
CPU_FEATURE_FLAGS(CPU_FEATURE_DETECTION)
#undef CPU_FEATURE_DETECTION
static void set_feature(Feature_Flag flag) {
_features |= BIT_MASK(flag);
}
static void clear_feature(Feature_Flag flag) {
_features &= (~BIT_MASK(flag));
}
static bool supports_feature(Feature_Flag flag) {
return (_features & BIT_MASK(flag)) != 0;
}
static int cpu_family() { return _cpu; }
static int cpu_model() { return _model; }
static int cpu_model2() { return _model2; }

View File

@@ -8888,13 +8888,8 @@ instruct TailCalljmpInd(IPRegP jump_target, inline_cache_regP method_ptr) %{
match(TailCall jump_target method_ptr);
ins_cost(CALL_COST);
format %{ "MOV Rexception_pc, LR\n\t"
"jump $jump_target \t! $method_ptr holds method" %}
format %{ "jump $jump_target \t! $method_ptr holds method" %}
ins_encode %{
__ mov(Rexception_pc, LR); // this is used only to call
// StubRoutines::forward_exception_entry()
// which expects PC of exception in
// R5. FIXME?
__ jump($jump_target$$Register);
%}
ins_pipe(tail_call);
@@ -8939,8 +8934,10 @@ instruct ForwardExceptionjmp()
match(ForwardException);
ins_cost(CALL_COST);
format %{ "b forward_exception_stub" %}
format %{ "MOV Rexception_pc, LR\n\t"
"b forward_exception_entry" %}
ins_encode %{
__ mov(Rexception_pc, LR);
// OK to trash Rtemp, because Rtemp is used by stub
__ jump(StubRoutines::forward_exception_entry(), relocInfo::runtime_call_type, Rtemp);
%}

View File

@@ -45,7 +45,7 @@ void CounterOverflowStub::emit_code(LIR_Assembler* ce) {
__ bind(_entry);
ce->store_parameter(_bci, 0);
ce->store_parameter(_method->as_constant_ptr()->as_metadata(), 1);
__ call(Runtime1::entry_for(C1StubId::counter_overflow_id), relocInfo::runtime_call_type);
__ call(Runtime1::entry_for(StubId::c1_counter_overflow_id), relocInfo::runtime_call_type);
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
@@ -56,7 +56,7 @@ void RangeCheckStub::emit_code(LIR_Assembler* ce) {
__ bind(_entry);
if (_info->deoptimize_on_exception()) {
__ call(Runtime1::entry_for(C1StubId::predicate_failed_trap_id), relocInfo::runtime_call_type);
__ call(Runtime1::entry_for(StubId::c1_predicate_failed_trap_id), relocInfo::runtime_call_type);
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
DEBUG_ONLY(__ should_not_reach_here());
@@ -72,10 +72,10 @@ void RangeCheckStub::emit_code(LIR_Assembler* ce) {
}
if (_throw_index_out_of_bounds_exception) {
__ call(Runtime1::entry_for(C1StubId::throw_index_exception_id), relocInfo::runtime_call_type);
__ call(Runtime1::entry_for(StubId::c1_throw_index_exception_id), relocInfo::runtime_call_type);
} else {
__ str(_array->as_pointer_register(), Address(SP, BytesPerWord)); // ??? Correct offset? Correct instruction?
__ call(Runtime1::entry_for(C1StubId::throw_range_check_failed_id), relocInfo::runtime_call_type);
__ call(Runtime1::entry_for(StubId::c1_throw_range_check_failed_id), relocInfo::runtime_call_type);
}
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
@@ -88,7 +88,7 @@ PredicateFailedStub::PredicateFailedStub(CodeEmitInfo* info) {
void PredicateFailedStub::emit_code(LIR_Assembler* ce) {
__ bind(_entry);
__ call(Runtime1::entry_for(C1StubId::predicate_failed_trap_id), relocInfo::runtime_call_type);
__ call(Runtime1::entry_for(StubId::c1_predicate_failed_trap_id), relocInfo::runtime_call_type);
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
DEBUG_ONLY(__ should_not_reach_here());
@@ -99,7 +99,7 @@ void DivByZeroStub::emit_code(LIR_Assembler* ce) {
ce->compilation()->implicit_exception_table()->append(_offset, __ offset());
}
__ bind(_entry);
__ call(Runtime1::entry_for(C1StubId::throw_div0_exception_id),
__ call(Runtime1::entry_for(StubId::c1_throw_div0_exception_id),
relocInfo::runtime_call_type);
ce->add_call_info_here(_info);
DEBUG_ONLY(STOP("DivByZero");)
@@ -108,14 +108,14 @@ void DivByZeroStub::emit_code(LIR_Assembler* ce) {
// Implementation of NewInstanceStub
NewInstanceStub::NewInstanceStub(LIR_Opr klass_reg, LIR_Opr result, ciInstanceKlass* klass, CodeEmitInfo* info, C1StubId stub_id) {
NewInstanceStub::NewInstanceStub(LIR_Opr klass_reg, LIR_Opr result, ciInstanceKlass* klass, CodeEmitInfo* info, StubId stub_id) {
_result = result;
_klass = klass;
_klass_reg = klass_reg;
_info = new CodeEmitInfo(info);
assert(stub_id == C1StubId::new_instance_id ||
stub_id == C1StubId::fast_new_instance_id ||
stub_id == C1StubId::fast_new_instance_init_check_id,
assert(stub_id == StubId::c1_new_instance_id ||
stub_id == StubId::c1_fast_new_instance_id ||
stub_id == StubId::c1_fast_new_instance_init_check_id,
"need new_instance id");
_stub_id = stub_id;
}
@@ -147,7 +147,7 @@ void NewTypeArrayStub::emit_code(LIR_Assembler* ce) {
assert(_klass_reg->as_register() == R1, "runtime call setup");
assert(_length->as_register() == R2, "runtime call setup");
__ bind(_entry);
__ call(Runtime1::entry_for(C1StubId::new_type_array_id), relocInfo::runtime_call_type);
__ call(Runtime1::entry_for(StubId::c1_new_type_array_id), relocInfo::runtime_call_type);
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
__ b(_continuation);
@@ -169,7 +169,7 @@ void NewObjectArrayStub::emit_code(LIR_Assembler* ce) {
assert(_klass_reg->as_register() == R1, "runtime call setup");
assert(_length->as_register() == R2, "runtime call setup");
__ bind(_entry);
__ call(Runtime1::entry_for(C1StubId::new_object_array_id), relocInfo::runtime_call_type);
__ call(Runtime1::entry_for(StubId::c1_new_object_array_id), relocInfo::runtime_call_type);
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
__ b(_continuation);
@@ -188,9 +188,9 @@ void MonitorEnterStub::emit_code(LIR_Assembler* ce) {
__ str(lock_reg, Address(SP, BytesPerWord));
}
C1StubId enter_id = ce->compilation()->has_fpu_code() ?
C1StubId::monitorenter_id :
C1StubId::monitorenter_nofpu_id;
StubId enter_id = ce->compilation()->has_fpu_code() ?
StubId::c1_monitorenter_id :
StubId::c1_monitorenter_nofpu_id;
__ call(Runtime1::entry_for(enter_id), relocInfo::runtime_call_type);
ce->add_call_info_here(_info);
ce->verify_oop_map(_info);
@@ -209,9 +209,9 @@ void MonitorExitStub::emit_code(LIR_Assembler* ce) {
__ str(lock_reg, Address(SP));
// Non-blocking leaf routine - no call info needed
C1StubId exit_id = ce->compilation()->has_fpu_code() ?
C1StubId::monitorexit_id :
C1StubId::monitorexit_nofpu_id;
StubId exit_id = ce->compilation()->has_fpu_code() ?
StubId::c1_monitorexit_id :
StubId::c1_monitorexit_nofpu_id;
__ call(Runtime1::entry_for(exit_id), relocInfo::runtime_call_type);
__ b(_continuation);
}
@@ -321,10 +321,10 @@ void PatchingStub::emit_code(LIR_Assembler* ce) {
address target = nullptr;
relocInfo::relocType reloc_type = relocInfo::none;
switch (_id) {
case access_field_id: target = Runtime1::entry_for(C1StubId::access_field_patching_id); break;
case load_klass_id: target = Runtime1::entry_for(C1StubId::load_klass_patching_id); reloc_type = relocInfo::metadata_type; break;
case load_mirror_id: target = Runtime1::entry_for(C1StubId::load_mirror_patching_id); reloc_type = relocInfo::oop_type; break;
case load_appendix_id: target = Runtime1::entry_for(C1StubId::load_appendix_patching_id); reloc_type = relocInfo::oop_type; break;
case access_field_id: target = Runtime1::entry_for(StubId::c1_access_field_patching_id); break;
case load_klass_id: target = Runtime1::entry_for(StubId::c1_load_klass_patching_id); reloc_type = relocInfo::metadata_type; break;
case load_mirror_id: target = Runtime1::entry_for(StubId::c1_load_mirror_patching_id); reloc_type = relocInfo::oop_type; break;
case load_appendix_id: target = Runtime1::entry_for(StubId::c1_load_appendix_patching_id); reloc_type = relocInfo::oop_type; break;
default: ShouldNotReachHere();
}
__ bind(call_patch);
@@ -350,7 +350,7 @@ void DeoptimizeStub::emit_code(LIR_Assembler* ce) {
__ mov_slow(Rtemp, _trap_request);
ce->verify_reserved_argument_area_size(1);
__ str(Rtemp, Address(SP));
__ call(Runtime1::entry_for(C1StubId::deoptimize_id), relocInfo::runtime_call_type);
__ call(Runtime1::entry_for(StubId::c1_deoptimize_id), relocInfo::runtime_call_type);
ce->add_call_info_here(_info);
DEBUG_ONLY(__ should_not_reach_here());
}
@@ -361,9 +361,9 @@ void ImplicitNullCheckStub::emit_code(LIR_Assembler* ce) {
if (_info->deoptimize_on_exception()) {
// Deoptimize, do not throw the exception, because it is
// probably wrong to do it here.
a = Runtime1::entry_for(C1StubId::predicate_failed_trap_id);
a = Runtime1::entry_for(StubId::c1_predicate_failed_trap_id);
} else {
a = Runtime1::entry_for(C1StubId::throw_null_pointer_exception_id);
a = Runtime1::entry_for(StubId::c1_throw_null_pointer_exception_id);
}
ce->compilation()->implicit_exception_table()->append(_offset, __ offset());
__ bind(_entry);

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2008, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2008, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -95,8 +95,6 @@
}
static int adjust_reg_range(int range) {
// Reduce the number of available regs (to free Rheap_base) in case of compressed oops
if (UseCompressedOops || UseCompressedClassPointers) return range - 1;
return range;
}

Some files were not shown because too many files have changed in this diff Show More