RFR: 8315612: RISC-V: intrinsic for unsignedMultiplyHigh

Vladimir Kempik vkempik at openjdk.org
Mon Sep 4 10:03:03 UTC 2023


Hello
Please review this simple patch, it add c2 implementation of intrinsic for unsignedMultiplyHigh.
The generated code changes from:

            0x0000003fbcfb12f8:   mulh	t4,t2,t3
   2.99%    0x0000003fbcfb12fc:   srai	t5,t2,0x3f
            0x0000003fbcfb1300:   and	t5,t5,t3
            0x0000003fbcfb1304:   srai	t3,t3,0x3f
            0x0000003fbcfb1308:   and	t2,t3,t2
            0x0000003fbcfb130c:   add	t4,t4,t5
            0x0000003fbcfb130e:   add	t2,t2,t4                    ;*ladd {reexecute=0 rethrow=0 return_oop=0}

to

            0x0000003fdcfb6668:   mulhu	t2,t2,t3                    ;*invokestatic unsignedMultiplyHigh {reexecute=0 rethrow=0 return_oop=0}


Clear code size reduction and potentially some performance boost.

However the jmh benchmark unsignedMultiplyHighLongLong  didn't show any difference as the hottest place is the fence ( getfield isDone ):

            0x0000003fdcfb6660:   ld	t3,64(t4)
            0x0000003fdcfb6664:   ld	t2,56(t4)
            0x0000003fdcfb6668:   mulhu	t2,t2,t3                    ;*invokestatic unsignedMultiplyHigh {reexecute=0 rethrow=0 return_oop=0}
                                                                      ; - org.openjdk.bench.java.lang.MathBench::unsignedMultiplyHighLongLong at 8 (line 545)
                                                                      ; - org.openjdk.bench.java.lang.jmh_generated.MathBench_unsignedMultiplyHighLongLong_jmhTest::unsignedMultiplyHighLongLong_thrpt_jmhStub at 17 (line 119)
   3.12%    0x0000003fdcfb666c:   lbu	t3,148(s3)                  ;*invokestatic consumeCompiler {reexecute=0 rethrow=0 return_oop=0}
                                                                      ; - org.openjdk.jmh.infra.Blackhole::consume at 7 (line 393)
                                                                      ; - org.openjdk.bench.java.lang.jmh_generated.MathBench_unsignedMultiplyHighLongLong_jmhTest::unsignedMultiplyHighLongLong_thrpt_jmhStub at 20 (line 119)
            0x0000003fdcfb6670:   fence	ir,iorw                     ;*getfield isDone {reexecute=0 rethrow=0 return_oop=0}
                                                                      ; - org.openjdk.bench.java.lang.jmh_generated.MathBench_unsignedMultiplyHighLongLong_jmhTest::unsignedMultiplyHighLongLong_thrpt_jmhStub at 30 (line 121)
  62.78%    0x0000003fdcfb6674:   addi	s2,s2,1                     ;*ladd {reexecute=0 rethrow=0 return_oop=0}
                                                                      ; - org.openjdk.bench.java.lang.jmh_generated.MathBench_unsignedMultiplyHighLongLong_jmhTest::unsignedMultiplyHighLongLong_thrpt_jmhStub at 26 (line 120)


tier1/tier2 tbd

-------------

Commit messages:
 - initial commit

Changes: https://git.openjdk.org/jdk/pull/15558/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=15558&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8315612
  Stats: 15 lines in 1 file changed: 15 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/15558.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/15558/head:pull/15558

PR: https://git.openjdk.org/jdk/pull/15558


More information about the hotspot-compiler-dev mailing list