Skip to content

Commit afed7d0

Browse files
vpaprotskSandhya Viswanathan
authored andcommitted
8329538: Accelerate P256 on x86_64 using Montgomery intrinsic
Reviewed-by: ihse, ascarpino, sviswanathan
1 parent 9ca90cc commit afed7d0

36 files changed

+2253
-316
lines changed

make/jdk/src/classes/build/tools/intpoly/FieldGen.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -778,7 +778,7 @@ private String generate(FieldParams params) throws IOException {
778778
result.appendLine("}");
779779

780780
result.appendLine("@Override");
781-
result.appendLine("protected void mult(long[] a, long[] b, long[] r) {");
781+
result.appendLine("protected int mult(long[] a, long[] b, long[] r) {");
782782
result.incrIndent();
783783
for (int i = 0; i < 2 * params.getNumLimbs() - 1; i++) {
784784
result.appendIndent();
@@ -804,6 +804,9 @@ private String generate(FieldParams params) throws IOException {
804804
}
805805
}
806806
result.append(");\n");
807+
result.appendIndent();
808+
result.append("return 0;");
809+
result.appendLine();
807810
result.decrIndent();
808811
result.appendLine("}");
809812

@@ -833,7 +836,7 @@ private String generate(FieldParams params) throws IOException {
833836
// }
834837
// }
835838
result.appendLine("@Override");
836-
result.appendLine("protected void square(long[] a, long[] r) {");
839+
result.appendLine("protected int square(long[] a, long[] r) {");
837840
result.incrIndent();
838841
for (int i = 0; i < 2 * params.getNumLimbs() - 1; i++) {
839842
result.appendIndent();
@@ -874,6 +877,9 @@ private String generate(FieldParams params) throws IOException {
874877
}
875878
}
876879
result.append(");\n");
880+
result.appendIndent();
881+
result.append("return 0;");
882+
result.appendLine();
877883
result.decrIndent();
878884
result.appendLine("}");
879885

make/test/BuildMicrobenchmark.gmk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ $(eval $(call SetupJavaCompilation, BUILD_JDK_MICROBENCHMARK, \
109109
--add-exports java.base/jdk.internal.vm=ALL-UNNAMED \
110110
--add-exports java.base/sun.invoke.util=ALL-UNNAMED \
111111
--add-exports java.base/sun.security.util=ALL-UNNAMED \
112+
--add-exports java.base/sun.security.util.math=ALL-UNNAMED \
113+
--add-exports java.base/sun.security.util.math.intpoly=ALL-UNNAMED \
112114
--enable-preview \
113115
-XDsuppressNotes \
114116
-processor org.openjdk.jmh.generators.BenchmarkProcessor, \

src/hotspot/cpu/x86/macroAssembler_x86.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,6 +1549,8 @@ class MacroAssembler: public Assembler {
15491549
Assembler::evpsrlvd(dst, mask, nds, src, merge, vector_len);
15501550
}
15511551
}
1552+
1553+
using Assembler::evpsrlq;
15521554
void evpsrlq(XMMRegister dst, KRegister mask, XMMRegister nds, XMMRegister src, bool merge, int vector_len, bool is_varshift) {
15531555
if (!is_varshift) {
15541556
Assembler::evpsrlq(dst, mask, nds, src, merge, vector_len);
@@ -1570,6 +1572,7 @@ class MacroAssembler: public Assembler {
15701572
Assembler::evpsravd(dst, mask, nds, src, merge, vector_len);
15711573
}
15721574
}
1575+
using Assembler::evpsraq;
15731576
void evpsraq(XMMRegister dst, KRegister mask, XMMRegister nds, XMMRegister src, bool merge, int vector_len, bool is_varshift) {
15741577
if (!is_varshift) {
15751578
Assembler::evpsraq(dst, mask, nds, src, merge, vector_len);

src/hotspot/cpu/x86/stubGenerator_x86_64.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4255,6 +4255,11 @@ void StubGenerator::generate_compiler_stubs() {
42554255
StubRoutines::_poly1305_processBlocks = generate_poly1305_processBlocks();
42564256
}
42574257

4258+
if (UseIntPolyIntrinsics) {
4259+
StubRoutines::_intpoly_montgomeryMult_P256 = generate_intpoly_montgomeryMult_P256();
4260+
StubRoutines::_intpoly_assign = generate_intpoly_assign();
4261+
}
4262+
42584263
if (UseMD5Intrinsics) {
42594264
StubRoutines::_md5_implCompress = generate_md5_implCompress(false, "md5_implCompress");
42604265
StubRoutines::_md5_implCompressMB = generate_md5_implCompress(true, "md5_implCompressMB");

src/hotspot/cpu/x86/stubGenerator_x86_64.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,9 @@ class StubGenerator: public StubCodeGenerator {
483483
const XMMRegister P2L, const XMMRegister P2H,
484484
const XMMRegister YTMP1, const Register rscratch);
485485

486+
address generate_intpoly_montgomeryMult_P256();
487+
address generate_intpoly_assign();
488+
486489
// BASE64 stubs
487490

488491
address base64_shuffle_addr();

0 commit comments

Comments
 (0)