Skip to content

Commit 15a3b60

Browse files
Merge tag 'jdk-22.0.2+9' into ola/24.0_jdk-22.0.2+9
Added tag jdk-22.0.2+9 for changeset 8153097
2 parents 05e316c + 8153097 commit 15a3b60

File tree

223 files changed

+5047
-2750
lines changed

Some content is hidden

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

223 files changed

+5047
-2750
lines changed

doc/testing.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,9 @@ <h2 id="test-selection">Test selection</h2>
179179
<p>The test specifications given in <code>TEST</code> is parsed into
180180
fully qualified test descriptors, which clearly and unambigously show
181181
which tests will be run. As an example, <code>:tier1</code> will expand
182-
to
183-
<code>jtreg:$(TOPDIR)/test/hotspot/jtreg:tier1 jtreg:$(TOPDIR)/test/jdk:tier1 jtreg:$(TOPDIR)/test/langtools:tier1 jtreg:$(TOPDIR)/test/nashorn:tier1 jtreg:$(TOPDIR)/test/jaxp:tier1</code>.
182+
to include all subcomponent test directories that define `tier1`,
183+
for example:
184+
<code>jtreg:$(TOPDIR)/test/hotspot/jtreg:tier1 jtreg:$(TOPDIR)/test/jdk:tier1 jtreg:$(TOPDIR)/test/langtools:tier1 ...</code>.
184185
You can always submit a list of fully qualified test descriptors in the
185186
<code>TEST</code> variable if you want to shortcut the parser.</p>
186187
<h3 id="common-test-groups">Common Test Groups</h3>

doc/testing.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,11 @@ test runs, the `test TEST="x"` solution needs to be used.
103103

104104
The test specifications given in `TEST` is parsed into fully qualified test
105105
descriptors, which clearly and unambigously show which tests will be run. As an
106-
example, `:tier1` will expand to `jtreg:$(TOPDIR)/test/hotspot/jtreg:tier1
107-
jtreg:$(TOPDIR)/test/jdk:tier1 jtreg:$(TOPDIR)/test/langtools:tier1
108-
jtreg:$(TOPDIR)/test/nashorn:tier1 jtreg:$(TOPDIR)/test/jaxp:tier1`. You can
109-
always submit a list of fully qualified test descriptors in the `TEST` variable
110-
if you want to shortcut the parser.
106+
example, `:tier1` will expand to include all subcomponent test directories
107+
that define `tier1`, for example: `jtreg:$(TOPDIR)/test/hotspot/jtreg:tier1
108+
jtreg:$(TOPDIR)/test/jdk:tier1 jtreg:$(TOPDIR)/test/langtools:tier1 ...`. You
109+
can always submit a list of fully qualified test descriptors in the `TEST`
110+
variable if you want to shortcut the parser.
111111

112112
### Common Test Groups
113113

make/autoconf/jdk-options.m4

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,17 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS],
190190
fi
191191
AC_SUBST(INCLUDE_SA)
192192
193+
# Setup default CDS alignment. On platforms where one build may run on machines with different
194+
# page sizes, the JVM choses a compatible alignment to fit all possible page sizes. This slightly
195+
# increases archive size.
196+
# The only platform having this problem at the moment is Linux on aarch64, which may encounter
197+
# three different page sizes: 4K, 64K, and if run on Mac m1 hardware, 16K.
198+
COMPATIBLE_CDS_ALIGNMENT_DEFAULT=false
199+
if test "x$OPENJDK_TARGET_OS" = "xlinux" && test "x$OPENJDK_TARGET_CPU" = "xaarch64"; then
200+
COMPATIBLE_CDS_ALIGNMENT_DEFAULT=true
201+
fi
202+
AC_SUBST(COMPATIBLE_CDS_ALIGNMENT_DEFAULT)
203+
193204
# Compress jars
194205
COMPRESS_JARS=false
195206
@@ -491,7 +502,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_UNDEFINED_BEHAVIOR_SANITIZER],
491502
[
492503
# GCC reports lots of likely false positives for stringop-truncation and format-overflow.
493504
# Silence them for now.
494-
UBSAN_CHECKS="-fsanitize=undefined -fsanitize=float-divide-by-zero -fno-sanitize=shift-base"
505+
UBSAN_CHECKS="-fsanitize=undefined -fsanitize=float-divide-by-zero -fno-sanitize=shift-base -fno-sanitize=alignment"
495506
UBSAN_CFLAGS="$UBSAN_CHECKS -Wno-stringop-truncation -Wno-format-overflow -fno-omit-frame-pointer -DUNDEFINED_BEHAVIOR_SANITIZER"
496507
UBSAN_LDFLAGS="$UBSAN_CHECKS"
497508
UTIL_ARG_ENABLE(NAME: ubsan, DEFAULT: false, RESULT: UBSAN_ENABLED,
@@ -673,7 +684,7 @@ AC_DEFUN([JDKOPT_ENABLE_DISABLE_CDS_ARCHIVE],
673684
#
674685
AC_DEFUN([JDKOPT_ENABLE_DISABLE_COMPATIBLE_CDS_ALIGNMENT],
675686
[
676-
UTIL_ARG_ENABLE(NAME: compatible-cds-alignment, DEFAULT: false,
687+
UTIL_ARG_ENABLE(NAME: compatible-cds-alignment, DEFAULT: $COMPATIBLE_CDS_ALIGNMENT_DEFAULT,
677688
RESULT: ENABLE_COMPATIBLE_CDS_ALIGNMENT,
678689
DESC: [enable use alternative compatible cds core region alignment],
679690
DEFAULT_DESC: [disabled],

make/conf/version-numbers.conf

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

make/devkit/createJMHBundle.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ rm -f *
4343
fetchJar() {
4444
url="https://repo.maven.apache.org/maven2/$1/$2/$3/$2-$3.jar"
4545
if command -v curl > /dev/null; then
46-
curl -O --fail $url
46+
curl -OL --fail $url
4747
elif command -v wget > /dev/null; then
4848
wget $url
4949
else

make/modules/java.base/Launcher.gmk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ ifeq ($(call isTargetOs, macosx aix linux), true)
7878
NAME := jspawnhelper, \
7979
SRC := $(TOPDIR)/src/$(MODULE)/unix/native/jspawnhelper, \
8080
OPTIMIZATION := LOW, \
81-
CFLAGS := $(CFLAGS_JDKEXE) -I$(TOPDIR)/src/$(MODULE)/unix/native/libjava, \
81+
CFLAGS := $(CFLAGS_JDKEXE) $(VERSION_CFLAGS) \
82+
-I$(TOPDIR)/src/$(MODULE)/unix/native/libjava, \
8283
EXTRA_OBJECT_FILES := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjava/childproc$(OBJ_SUFFIX), \
8384
LDFLAGS := $(LDFLAGS_JDKEXE), \
8485
OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/modules_libs/$(MODULE), \

make/modules/java.base/lib/CoreLibraries.gmk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBJAVA, \
5959
CFLAGS := $(CFLAGS_JDKLIB) \
6060
$(LIBJAVA_CFLAGS), \
6161
jdk_util.c_CFLAGS := $(VERSION_CFLAGS), \
62+
ProcessImpl_md.c_CFLAGS := $(VERSION_CFLAGS), \
6263
WARNINGS_AS_ERRORS_xlc := false, \
6364
DISABLED_WARNINGS_gcc_ProcessImpl_md.c := unused-result, \
6465
LDFLAGS := $(LDFLAGS_JDKLIB) \

make/modules/java.desktop/lib/Awt2dLibraries.gmk

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,8 +506,10 @@ else
506506
# noexcept-type required for GCC 7 builds. Not required for GCC 8+.
507507
# expansion-to-defined required for GCC 9 builds. Not required for GCC 10+.
508508
# maybe-uninitialized required for GCC 8 builds. Not required for GCC 9+.
509+
# calloc-transposed-args required for GCC 14 builds. (fixed upstream in Harfbuzz 032c931e1c0cfb20f18e5acb8ba005775242bd92)
509510
HARFBUZZ_DISABLED_WARNINGS_CXX_gcc := class-memaccess noexcept-type \
510-
expansion-to-defined dangling-reference maybe-uninitialized
511+
expansion-to-defined dangling-reference maybe-uninitialized \
512+
calloc-transposed-args
511513
HARFBUZZ_DISABLED_WARNINGS_clang := missing-field-initializers range-loop-analysis
512514
HARFBUZZ_DISABLED_WARNINGS_microsoft := 4267 4244
513515

src/hotspot/cpu/aarch64/compressedKlass_aarch64.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,15 @@ static char* reserve_at_eor_compatible_address(size_t size, bool aslr) {
5757
0x7800, 0x7c00, 0x7e00, 0x7f00, 0x7f80, 0x7fc0, 0x7fe0, 0x7ff0, 0x7ff8,
5858
0x7ffc, 0x7ffe, 0x7fff
5959
};
60-
static constexpr int num_immediates = sizeof(immediates) / sizeof(immediates[0]);
61-
const int start_index = aslr ? os::next_random((int)os::javaTimeNanos()) : 0;
60+
static constexpr unsigned num_immediates = sizeof(immediates) / sizeof(immediates[0]);
61+
const unsigned start_index = aslr ? os::next_random((int)os::javaTimeNanos()) : 0;
6262
constexpr int max_tries = 64;
6363
for (int ntry = 0; result == nullptr && ntry < max_tries; ntry ++) {
6464
// As in os::attempt_reserve_memory_between, we alternate between higher and lower
6565
// addresses; this maximizes the chance of early success if part of the address space
6666
// is not accessible (e.g. 39-bit address space).
67-
const int alt_index = (ntry & 1) ? 0 : num_immediates / 2;
68-
const int index = (start_index + ntry + alt_index) % num_immediates;
67+
const unsigned alt_index = (ntry & 1) ? 0 : num_immediates / 2;
68+
const unsigned index = (start_index + ntry + alt_index) % num_immediates;
6969
const uint64_t immediate = ((uint64_t)immediates[index]) << 32;
7070
assert(immediate > 0 && Assembler::operand_valid_for_logical_immediate(/*is32*/false, immediate),
7171
"Invalid immediate %d " UINT64_FORMAT, index, immediate);

src/hotspot/cpu/aarch64/gc/x/xGlobals_aarch64.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,11 @@
142142
// * 63-48 Fixed (16-bits, always zero)
143143
//
144144

145-
// Default value if probing is not implemented for a certain platform: 128TB
146-
static const size_t DEFAULT_MAX_ADDRESS_BIT = 47;
147-
// Minimum value returned, if probing fails: 64GB
145+
// Default value if probing is not implemented for a certain platform
146+
// Max address bit is restricted by implicit assumptions in the code, for instance
147+
// the bit layout of XForwardingEntry or Partial array entry (see XMarkStackEntry) in mark stack
148+
static const size_t DEFAULT_MAX_ADDRESS_BIT = 46;
149+
// Minimum value returned, if probing fails
148150
static const size_t MINIMUM_MAX_ADDRESS_BIT = 36;
149151

150152
static size_t probe_valid_max_address_bit() {

src/hotspot/cpu/aarch64/gc/z/zAddress_aarch64.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,11 @@
3636
#include <sys/mman.h>
3737
#endif // LINUX
3838

39-
// Default value if probing is not implemented for a certain platform: 128TB
40-
static const size_t DEFAULT_MAX_ADDRESS_BIT = 47;
41-
// Minimum value returned, if probing fails: 64GB
39+
// Default value if probing is not implemented for a certain platform
40+
// Max address bit is restricted by implicit assumptions in the code, for instance
41+
// the bit layout of ZForwardingEntry or Partial array entry (see ZMarkStackEntry) in mark stack
42+
static const size_t DEFAULT_MAX_ADDRESS_BIT = 46;
43+
// Minimum value returned, if probing fail
4244
static const size_t MINIMUM_MAX_ADDRESS_BIT = 36;
4345

4446
static size_t probe_valid_max_address_bit() {

src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp

Lines changed: 97 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -390,13 +390,13 @@ static bool offset_for(uint32_t insn1, uint32_t insn2, ptrdiff_t &byte_offset) {
390390
return false;
391391
}
392392

393-
class Decoder : public RelocActions {
394-
virtual reloc_insn adrpMem() { return &Decoder::adrpMem_impl; }
395-
virtual reloc_insn adrpAdd() { return &Decoder::adrpAdd_impl; }
396-
virtual reloc_insn adrpMovk() { return &Decoder::adrpMovk_impl; }
393+
class AArch64Decoder : public RelocActions {
394+
virtual reloc_insn adrpMem() { return &AArch64Decoder::adrpMem_impl; }
395+
virtual reloc_insn adrpAdd() { return &AArch64Decoder::adrpAdd_impl; }
396+
virtual reloc_insn adrpMovk() { return &AArch64Decoder::adrpMovk_impl; }
397397

398398
public:
399-
Decoder(address insn_addr, uint32_t insn) : RelocActions(insn_addr, insn) {}
399+
AArch64Decoder(address insn_addr, uint32_t insn) : RelocActions(insn_addr, insn) {}
400400

401401
virtual int loadStore(address insn_addr, address &target) {
402402
intptr_t offset = Instruction_aarch64::sextract(_insn, 23, 5);
@@ -492,7 +492,7 @@ class Decoder : public RelocActions {
492492
};
493493

494494
address MacroAssembler::target_addr_for_insn(address insn_addr, uint32_t insn) {
495-
Decoder decoder(insn_addr, insn);
495+
AArch64Decoder decoder(insn_addr, insn);
496496
address target;
497497
decoder.run(insn_addr, target);
498498
return target;
@@ -4258,108 +4258,117 @@ void MacroAssembler::kernel_crc32_common_fold_using_crypto_pmull(Register crc, R
42584258
}
42594259
add(table, table, table_offset);
42604260

4261+
// Registers v0..v7 are used as data registers.
4262+
// Registers v16..v31 are used as tmp registers.
42614263
sub(buf, buf, 0x10);
4262-
ldrq(v1, Address(buf, 0x10));
4263-
ldrq(v2, Address(buf, 0x20));
4264-
ldrq(v3, Address(buf, 0x30));
4265-
ldrq(v4, Address(buf, 0x40));
4266-
ldrq(v5, Address(buf, 0x50));
4267-
ldrq(v6, Address(buf, 0x60));
4268-
ldrq(v7, Address(buf, 0x70));
4269-
ldrq(v8, Address(pre(buf, 0x80)));
4270-
4271-
movi(v25, T4S, 0);
4272-
mov(v25, S, 0, crc);
4273-
eor(v1, T16B, v1, v25);
4274-
4275-
ldrq(v0, Address(table));
4264+
ldrq(v0, Address(buf, 0x10));
4265+
ldrq(v1, Address(buf, 0x20));
4266+
ldrq(v2, Address(buf, 0x30));
4267+
ldrq(v3, Address(buf, 0x40));
4268+
ldrq(v4, Address(buf, 0x50));
4269+
ldrq(v5, Address(buf, 0x60));
4270+
ldrq(v6, Address(buf, 0x70));
4271+
ldrq(v7, Address(pre(buf, 0x80)));
4272+
4273+
movi(v31, T4S, 0);
4274+
mov(v31, S, 0, crc);
4275+
eor(v0, T16B, v0, v31);
4276+
4277+
// Register v16 contains constants from the crc table.
4278+
ldrq(v16, Address(table));
42764279
b(CRC_by128_loop);
42774280

42784281
align(OptoLoopAlignment);
42794282
BIND(CRC_by128_loop);
4280-
pmull (v9, T1Q, v1, v0, T1D);
4281-
pmull2(v10, T1Q, v1, v0, T2D);
4282-
ldrq(v1, Address(buf, 0x10));
4283-
eor3(v1, T16B, v9, v10, v1);
4284-
4285-
pmull (v11, T1Q, v2, v0, T1D);
4286-
pmull2(v12, T1Q, v2, v0, T2D);
4287-
ldrq(v2, Address(buf, 0x20));
4288-
eor3(v2, T16B, v11, v12, v2);
4289-
4290-
pmull (v13, T1Q, v3, v0, T1D);
4291-
pmull2(v14, T1Q, v3, v0, T2D);
4292-
ldrq(v3, Address(buf, 0x30));
4293-
eor3(v3, T16B, v13, v14, v3);
4294-
4295-
pmull (v15, T1Q, v4, v0, T1D);
4296-
pmull2(v16, T1Q, v4, v0, T2D);
4297-
ldrq(v4, Address(buf, 0x40));
4298-
eor3(v4, T16B, v15, v16, v4);
4299-
4300-
pmull (v17, T1Q, v5, v0, T1D);
4301-
pmull2(v18, T1Q, v5, v0, T2D);
4302-
ldrq(v5, Address(buf, 0x50));
4303-
eor3(v5, T16B, v17, v18, v5);
4304-
4305-
pmull (v19, T1Q, v6, v0, T1D);
4306-
pmull2(v20, T1Q, v6, v0, T2D);
4307-
ldrq(v6, Address(buf, 0x60));
4308-
eor3(v6, T16B, v19, v20, v6);
4309-
4310-
pmull (v21, T1Q, v7, v0, T1D);
4311-
pmull2(v22, T1Q, v7, v0, T2D);
4312-
ldrq(v7, Address(buf, 0x70));
4313-
eor3(v7, T16B, v21, v22, v7);
4314-
4315-
pmull (v23, T1Q, v8, v0, T1D);
4316-
pmull2(v24, T1Q, v8, v0, T2D);
4317-
ldrq(v8, Address(pre(buf, 0x80)));
4318-
eor3(v8, T16B, v23, v24, v8);
4283+
pmull (v17, T1Q, v0, v16, T1D);
4284+
pmull2(v18, T1Q, v0, v16, T2D);
4285+
ldrq(v0, Address(buf, 0x10));
4286+
eor3(v0, T16B, v17, v18, v0);
4287+
4288+
pmull (v19, T1Q, v1, v16, T1D);
4289+
pmull2(v20, T1Q, v1, v16, T2D);
4290+
ldrq(v1, Address(buf, 0x20));
4291+
eor3(v1, T16B, v19, v20, v1);
4292+
4293+
pmull (v21, T1Q, v2, v16, T1D);
4294+
pmull2(v22, T1Q, v2, v16, T2D);
4295+
ldrq(v2, Address(buf, 0x30));
4296+
eor3(v2, T16B, v21, v22, v2);
4297+
4298+
pmull (v23, T1Q, v3, v16, T1D);
4299+
pmull2(v24, T1Q, v3, v16, T2D);
4300+
ldrq(v3, Address(buf, 0x40));
4301+
eor3(v3, T16B, v23, v24, v3);
4302+
4303+
pmull (v25, T1Q, v4, v16, T1D);
4304+
pmull2(v26, T1Q, v4, v16, T2D);
4305+
ldrq(v4, Address(buf, 0x50));
4306+
eor3(v4, T16B, v25, v26, v4);
4307+
4308+
pmull (v27, T1Q, v5, v16, T1D);
4309+
pmull2(v28, T1Q, v5, v16, T2D);
4310+
ldrq(v5, Address(buf, 0x60));
4311+
eor3(v5, T16B, v27, v28, v5);
4312+
4313+
pmull (v29, T1Q, v6, v16, T1D);
4314+
pmull2(v30, T1Q, v6, v16, T2D);
4315+
ldrq(v6, Address(buf, 0x70));
4316+
eor3(v6, T16B, v29, v30, v6);
4317+
4318+
// Reuse registers v23, v24.
4319+
// Using them won't block the first instruction of the next iteration.
4320+
pmull (v23, T1Q, v7, v16, T1D);
4321+
pmull2(v24, T1Q, v7, v16, T2D);
4322+
ldrq(v7, Address(pre(buf, 0x80)));
4323+
eor3(v7, T16B, v23, v24, v7);
43194324

43204325
subs(len, len, 0x80);
43214326
br(Assembler::GE, CRC_by128_loop);
43224327

43234328
// fold into 512 bits
4324-
ldrq(v0, Address(table, 0x10));
4329+
// Use v31 for constants because v16 can be still in use.
4330+
ldrq(v31, Address(table, 0x10));
43254331

4326-
pmull (v10, T1Q, v1, v0, T1D);
4327-
pmull2(v11, T1Q, v1, v0, T2D);
4328-
eor3(v1, T16B, v10, v11, v5);
4332+
pmull (v17, T1Q, v0, v31, T1D);
4333+
pmull2(v18, T1Q, v0, v31, T2D);
4334+
eor3(v0, T16B, v17, v18, v4);
43294335

4330-
pmull (v12, T1Q, v2, v0, T1D);
4331-
pmull2(v13, T1Q, v2, v0, T2D);
4332-
eor3(v2, T16B, v12, v13, v6);
4336+
pmull (v19, T1Q, v1, v31, T1D);
4337+
pmull2(v20, T1Q, v1, v31, T2D);
4338+
eor3(v1, T16B, v19, v20, v5);
43334339

4334-
pmull (v14, T1Q, v3, v0, T1D);
4335-
pmull2(v15, T1Q, v3, v0, T2D);
4336-
eor3(v3, T16B, v14, v15, v7);
4340+
pmull (v21, T1Q, v2, v31, T1D);
4341+
pmull2(v22, T1Q, v2, v31, T2D);
4342+
eor3(v2, T16B, v21, v22, v6);
43374343

4338-
pmull (v16, T1Q, v4, v0, T1D);
4339-
pmull2(v17, T1Q, v4, v0, T2D);
4340-
eor3(v4, T16B, v16, v17, v8);
4344+
pmull (v23, T1Q, v3, v31, T1D);
4345+
pmull2(v24, T1Q, v3, v31, T2D);
4346+
eor3(v3, T16B, v23, v24, v7);
43414347

43424348
// fold into 128 bits
4343-
ldrq(v5, Address(table, 0x20));
4344-
pmull (v10, T1Q, v1, v5, T1D);
4345-
pmull2(v11, T1Q, v1, v5, T2D);
4346-
eor3(v4, T16B, v4, v10, v11);
4347-
4348-
ldrq(v6, Address(table, 0x30));
4349-
pmull (v12, T1Q, v2, v6, T1D);
4350-
pmull2(v13, T1Q, v2, v6, T2D);
4351-
eor3(v4, T16B, v4, v12, v13);
4352-
4353-
ldrq(v7, Address(table, 0x40));
4354-
pmull (v14, T1Q, v3, v7, T1D);
4355-
pmull2(v15, T1Q, v3, v7, T2D);
4356-
eor3(v1, T16B, v4, v14, v15);
4349+
// Use v17 for constants because v31 can be still in use.
4350+
ldrq(v17, Address(table, 0x20));
4351+
pmull (v25, T1Q, v0, v17, T1D);
4352+
pmull2(v26, T1Q, v0, v17, T2D);
4353+
eor3(v3, T16B, v3, v25, v26);
4354+
4355+
// Use v18 for constants because v17 can be still in use.
4356+
ldrq(v18, Address(table, 0x30));
4357+
pmull (v27, T1Q, v1, v18, T1D);
4358+
pmull2(v28, T1Q, v1, v18, T2D);
4359+
eor3(v3, T16B, v3, v27, v28);
4360+
4361+
// Use v19 for constants because v18 can be still in use.
4362+
ldrq(v19, Address(table, 0x40));
4363+
pmull (v29, T1Q, v2, v19, T1D);
4364+
pmull2(v30, T1Q, v2, v19, T2D);
4365+
eor3(v0, T16B, v3, v29, v30);
43574366

43584367
add(len, len, 0x80);
43594368
add(buf, buf, 0x10);
43604369

4361-
mov(tmp0, v1, D, 0);
4362-
mov(tmp1, v1, D, 1);
4370+
mov(tmp0, v0, D, 0);
4371+
mov(tmp1, v0, D, 1);
43634372
}
43644373

43654374
SkipIfEqual::SkipIfEqual(

0 commit comments

Comments
 (0)