[16] RFR(S): 8251525: AARCH64: Faster Math.signum(fp)

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Fri Aug 14 18:53:04 UTC 2020


> http://cr.openjdk.java.net/~dchuyko/8251525/webrev.01/

Changes in shared code look good.

Best regards,
Vladimir Ivanov

> On 8/13/20 2:51 PM, Vladimir Ivanov wrote:
>> Hi Dmitry,
>>
>> Some comments on shared code changes:
>>
>> src/hotspot/share/opto/library_call.cpp:
>>
>> +  case vmIntrinsics::_dsignum:
>> +    return UseSignumIntrinsic && 
>> (Matcher::match_rule_supported(Op_SignumD) ? inline_double_math(id) : 
>> false);
>>
>> There's no need in repeating UseSignumIntrinsic and 
>> (Matcher::match_rule_supported(Op_SignumD) checks.
>> C2Compiler::is_intrinsic_supported() already covers taht.
>>
>>
>> src/hotspot/share/opto/signum.hpp:
>>
>>   32 class SignumNode : public Node {
>>   33 public:
>>   34   SignumNode(Node* in) : Node(0, in) {}
>>   35   virtual int Opcode() const;
>>   36   virtual const Type *bottom_type() const { return NULL; }
>>   37   virtual uint ideal_reg() const { return Op_RegD; }
>>   38 };
>>
>> Any particular reason to keep SignumNode? I don't see any and would 
>> just drop it.
>>
>> Also, having a dedicated header file just for a couple of nodes with 
>> trivial implementations looks like an overkill. As an alternative 
>> location, intrinsicnode.cpp should be a better option.
>>
>> Best regards,
>> Vladimir Ivanov
>>
>> On 13.08.2020 14:04, Dmitry Chuyko wrote:
>>> Hello,
>>>
>>> Please review a faster version of Math.signum() for AArch64.
>>>
>>> Two new intrinsics (double and float) are introduced in general code, 
>>> with appropriate new nodes. New JTreg test is added to cover the 
>>> intrinsic case (enabled only for aarch64).
>>>
>>> AArch64 implementation uses FACGT (compare abslute fp values) and BSL 
>>> (fp bit selection) to avoid branches and moves to non-fp registers 
>>> and back.
>>>
>>> Performance results show ~30% better time in the benchmark with a 
>>> black hole [1] on Cortex. E.g. on random numbers 4.8 ns/op --> 3.5 
>>> ns/op, overhead is 2.9 ns/op.
>>>
>>> rfe: https://bugs.openjdk.java.net/browse/JDK-8251525
>>> webrev: http://cr.openjdk.java.net/~dchuyko/8251525/webrev.00/
>>> testing: jck, jtreg including new dedicated test
>>>
>>> -Dmitry
>>>
>>> [1] https://cr.openjdk.java.net/~dchuyko/8249198/DoubleSignum.java
>>>


More information about the hotspot-compiler-dev mailing list