Commit 32aef42a authored by Junliang Yan's avatar Junliang Yan Committed by Commit Bot

PPC/s390: [turbofan] Initial support to compute NumberAdd/NumberSubtract in Word64.

Port 0c296cb2

Original Commit Message:

    This change introduces the necessary conversion operators to convert
    from Word64 to other representations (Tagged, Word32, Float64, etc.),
    and plugs in the Word64 representation for NumberAdd/NumberSubtract,
    such that TurboFan will go to Int64Add/Sub on 64-bit architectures
    when the inputs and the output of the operation is in safe integer
    range. This includes the necessary changes to the Deoptimizer to be
    able to rematerialize Int64 values as Smi/HeapNumber when going back
    to Ignition later.

    This change might affect performance, although measurements indicate
    that there should be no noticable performance impact.

    The goal is to have TurboFan support Word64 representation to a degree
    that changing the TypedArray length to an uint64_t (for 64-bit archs)
    becomes viable and doesn't have any negative performance implications.
    Independent of that we might get performance improvements in other areas
    such as for crypto code later.

R=bmeurer@chromium.org, joransiu@ca.ibm.com, michael_dawson@ca.ibm.com
BUG=
LOG=N

Change-Id: I2119f156c4ddf942ea09ff8ed52e1c6cb32477f2
Reviewed-on: https://chromium-review.googlesource.com/1228634Reviewed-by: 's avatarJoran Siu <joransiu@ca.ibm.com>
Commit-Queue: Junliang Yan <jyan@ca.ibm.com>
Cr-Commit-Position: refs/heads/master@{#55971}
parent 89304433
......@@ -1234,6 +1234,9 @@ void InstructionSelector::VisitRoundInt64ToFloat64(Node* node) {
VisitRR(this, kPPC_Int64ToDouble, node);
}
void InstructionSelector::VisitChangeInt64ToFloat64(Node* node) {
VisitRR(this, kPPC_Int64ToDouble, node);
}
void InstructionSelector::VisitRoundUint64ToFloat32(Node* node) {
VisitRR(this, kPPC_Uint64ToFloat32, node);
......
......@@ -1492,6 +1492,8 @@ static inline bool TryMatchDoubleConstructFromInsert(
null) \
V(Word64, RoundInt64ToFloat64, kS390_Int64ToDouble, OperandMode::kNone, \
null) \
V(Word64, ChangeInt64ToFloat64, kS390_Int64ToDouble, OperandMode::kNone, \
null) \
V(Word64, RoundUint64ToFloat32, kS390_Uint64ToFloat32, OperandMode::kNone, \
null) \
V(Word64, RoundUint64ToFloat64, kS390_Uint64ToDouble, OperandMode::kNone, \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment