RFR: 8231649: PPC64: Intrinsics for Math.ceil, floor, rint on Power
Vladimir Ivanov
vladimir.x.ivanov at oracle.com
Mon Oct 7 10:55:24 UTC 2019
> I think sharedRuntime is not a good place for the C2 enum.
Agree.
I suggest to put the enum in RoundDoubleModeNode (convertnode.hpp) and
lift instruction selection logic from macroAssembler_ppc.cpp into ppc.ad.
Best regards,
Vladimir Ivanov
>
> 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