RFR: 8231649: PPC64: Intrinsics for Math.ceil, floor, rint on Power

Doerr, Martin martin.doerr at sap.com
Mon Oct 7 08:30:04 UTC 2019


Hi Michihiro,

I think sharedRuntime is not a good place for the C2 enum.
Maybe intrinsicnode.hpp would be a better pace for it. But then, the code in macroAssembler should be guarded by #ifdef COMPILER2.

Best regards,
Martin


From: Michihiro Horie <HORIE at jp.ibm.com>
Sent: Montag, 7. Oktober 2019 09:14
To: Vladimir Ivanov <vladimir.x.ivanov at oracle.com>
Cc: hotspot compiler <hotspot-compiler-dev at openjdk.java.net>; ppc-aix-port-dev at openjdk.java.net; Doerr, Martin <martin.doerr at sap.com>
Subject: RE: RFR: 8231649: PPC64: Intrinsics for Math.ceil, floor, rint on Power


Hi Vladimir,

Thanks a lot for your nice suggestion. Yes, I prefer enum use.
I'm wondering if the enum constants can be declared in sharedRuntime.hpp.
Webrev: http://cr.openjdk.java.net/~mhorie/8231649/webrev.02/

Best regards,
Michihiro

[Inactive hide details for Vladimir Ivanov ---2019/10/04 23:05:48---Hi Michihiro, src/hotspot/cpu/ppc/macroAssembler_ppc.cpp:]Vladimir Ivanov ---2019/10/04 23:05:48---Hi Michihiro, src/hotspot/cpu/ppc/macroAssembler_ppc.cpp:

From: Vladimir Ivanov <vladimir.x.ivanov at oracle.com<mailto:vladimir.x.ivanov at oracle.com>>
To: Michihiro Horie <HORIE at jp.ibm.com<mailto:HORIE at jp.ibm.com>>, ppc-aix-port-dev at openjdk.java.net<mailto:ppc-aix-port-dev at openjdk.java.net>, hotspot compiler <hotspot-compiler-dev at openjdk.java.net<mailto:hotspot-compiler-dev at openjdk.java.net>>
Date: 2019/10/04 23:05
Subject: [EXTERNAL] Re: RFR: 8231649: PPC64: Intrinsics for Math.ceil, floor, rint on Power

________________________________



Hi Michihiro,

src/hotspot/cpu/ppc/macroAssembler_ppc.cpp:
+  switch (rmode) {
+    case 0: // rint
+      frin(t, b);
+      break;
+    case 1: // floor
+      frim(t, b);
+      break;
+    case 2: // ceil
+      frip(t, b);
+      break;
+    default:
+      ShouldNotReachHere();
+  }

What do you think about introducing enum constants instead of using
hard-coded 0/1/2?

src/hotspot/share/opto/library_call.cpp:

  case vmIntrinsics::_ceil:   n = new RoundDoubleModeNode(arg,
makecon(TypeInt::make(2))); break;
  case vmIntrinsics::_floor:  n = new RoundDoubleModeNode(arg,
makecon(TypeInt::make(1))); break;
  case vmIntrinsics::_rint:   n = new RoundDoubleModeNode(arg,
makecon(TypeInt::make(0))); break;

The downside is you have to move the switch from macroAssembler because
enum should be visible from both places. (Is there a better place for
that than roundD_regNode::emit() in AD file?)

Best regards,
Vladimir Ivanov

On 02/10/2019 07:27, Michihiro Horie wrote:
>
> Dear all,
>
> Would you please review the following change?
> Bug: https://bugs.openjdk.java.net/browse/JDK-8231649
> Webrev: http://cr.openjdk.java.net/~mhorie/8231649/webrev.00
>
> This change adds intrinsics for Math's ceil, floor, and rint for PPC64, on
> top of 8226721: Missing intrinsics for Math.ceil, floor, rint.
>
> Best regards,
> Michihiro
>





More information about the hotspot-compiler-dev mailing list