summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/machine-operator.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/compiler/machine-operator.h')
-rw-r--r--deps/v8/src/compiler/machine-operator.h76
1 files changed, 51 insertions, 25 deletions
diff --git a/deps/v8/src/compiler/machine-operator.h b/deps/v8/src/compiler/machine-operator.h
index 1280f91544..00fefe3539 100644
--- a/deps/v8/src/compiler/machine-operator.h
+++ b/deps/v8/src/compiler/machine-operator.h
@@ -6,7 +6,7 @@
#define V8_COMPILER_MACHINE_OPERATOR_H_
#include "src/base/flags.h"
-#include "src/compiler/machine-type.h"
+#include "src/machine-type.h"
namespace v8 {
namespace internal {
@@ -62,20 +62,22 @@ std::ostream& operator<<(std::ostream& os, WriteBarrierKind);
// A Load needs a MachineType.
typedef MachineType LoadRepresentation;
+LoadRepresentation LoadRepresentationOf(Operator const*);
// A Store needs a MachineType and a WriteBarrierKind in order to emit the
// correct write barrier.
class StoreRepresentation final {
public:
- StoreRepresentation(MachineType machine_type,
+ StoreRepresentation(MachineRepresentation representation,
WriteBarrierKind write_barrier_kind)
- : machine_type_(machine_type), write_barrier_kind_(write_barrier_kind) {}
+ : representation_(representation),
+ write_barrier_kind_(write_barrier_kind) {}
- MachineType machine_type() const { return machine_type_; }
+ MachineRepresentation representation() const { return representation_; }
WriteBarrierKind write_barrier_kind() const { return write_barrier_kind_; }
private:
- MachineType machine_type_;
+ MachineRepresentation representation_;
WriteBarrierKind write_barrier_kind_;
};
@@ -96,7 +98,7 @@ CheckedLoadRepresentation CheckedLoadRepresentationOf(Operator const*);
// A CheckedStore needs a MachineType.
-typedef MachineType CheckedStoreRepresentation;
+typedef MachineRepresentation CheckedStoreRepresentation;
CheckedStoreRepresentation CheckedStoreRepresentationOf(Operator const*);
@@ -116,25 +118,35 @@ class MachineOperatorBuilder final : public ZoneObject {
kFloat32Min = 1u << 1,
kFloat64Max = 1u << 2,
kFloat64Min = 1u << 3,
- kFloat64RoundDown = 1u << 4,
- kFloat64RoundTruncate = 1u << 5,
- kFloat64RoundTiesAway = 1u << 6,
- kInt32DivIsSafe = 1u << 7,
- kUint32DivIsSafe = 1u << 8,
- kWord32ShiftIsSafe = 1u << 9,
- kWord32Ctz = 1u << 10,
- kWord32Popcnt = 1u << 11,
- kWord64Ctz = 1u << 12,
- kWord64Popcnt = 1u << 13,
+ kFloat32RoundDown = 1u << 4,
+ kFloat64RoundDown = 1u << 5,
+ kFloat32RoundUp = 1u << 6,
+ kFloat64RoundUp = 1u << 7,
+ kFloat32RoundTruncate = 1u << 8,
+ kFloat64RoundTruncate = 1u << 9,
+ kFloat32RoundTiesEven = 1u << 10,
+ kFloat64RoundTiesEven = 1u << 11,
+ kFloat64RoundTiesAway = 1u << 12,
+ kInt32DivIsSafe = 1u << 13,
+ kUint32DivIsSafe = 1u << 14,
+ kWord32ShiftIsSafe = 1u << 15,
+ kWord32Ctz = 1u << 16,
+ kWord64Ctz = 1u << 17,
+ kWord32Popcnt = 1u << 18,
+ kWord64Popcnt = 1u << 19,
kAllOptionalOps = kFloat32Max | kFloat32Min | kFloat64Max | kFloat64Min |
- kFloat64RoundDown | kFloat64RoundTruncate |
- kFloat64RoundTiesAway | kWord32Ctz | kWord32Popcnt |
- kWord64Ctz | kWord64Popcnt
+ kFloat32RoundDown | kFloat64RoundDown | kFloat32RoundUp |
+ kFloat64RoundUp | kFloat32RoundTruncate |
+ kFloat64RoundTruncate | kFloat64RoundTiesAway |
+ kFloat32RoundTiesEven | kFloat64RoundTiesEven |
+ kWord32Ctz | kWord64Ctz | kWord32Popcnt | kWord64Popcnt
};
typedef base::Flags<Flag, unsigned> Flags;
- explicit MachineOperatorBuilder(Zone* zone, MachineType word = kMachPtr,
- Flags supportedOperators = kNoFlags);
+ explicit MachineOperatorBuilder(
+ Zone* zone,
+ MachineRepresentation word = MachineType::PointerRepresentation(),
+ Flags supportedOperators = kNoFlags);
const Operator* Word32And();
const Operator* Word32Or();
@@ -180,7 +192,9 @@ class MachineOperatorBuilder final : public ZoneObject {
bool Uint32DivIsSafe() const { return flags_ & kUint32DivIsSafe; }
const Operator* Int64Add();
+ const Operator* Int64AddWithOverflow();
const Operator* Int64Sub();
+ const Operator* Int64SubWithOverflow();
const Operator* Int64Mul();
const Operator* Int64Div();
const Operator* Int64Mod();
@@ -199,6 +213,10 @@ class MachineOperatorBuilder final : public ZoneObject {
const Operator* ChangeFloat32ToFloat64();
const Operator* ChangeFloat64ToInt32(); // narrowing
const Operator* ChangeFloat64ToUint32(); // narrowing
+ const Operator* TryTruncateFloat32ToInt64();
+ const Operator* TryTruncateFloat64ToInt64();
+ const Operator* TryTruncateFloat32ToUint64();
+ const Operator* TryTruncateFloat64ToUint64();
const Operator* ChangeInt32ToFloat64();
const Operator* ChangeInt32ToInt64();
const Operator* ChangeUint32ToFloat64();
@@ -211,6 +229,8 @@ class MachineOperatorBuilder final : public ZoneObject {
const Operator* TruncateInt64ToInt32();
const Operator* RoundInt64ToFloat32();
const Operator* RoundInt64ToFloat64();
+ const Operator* RoundUint64ToFloat32();
+ const Operator* RoundUint64ToFloat64();
// These operators reinterpret the bits of a floating point number as an
// integer and vice versa.
@@ -261,9 +281,15 @@ class MachineOperatorBuilder final : public ZoneObject {
const Operator* Float64Abs();
// Floating point rounding.
+ const OptionalOperator Float32RoundDown();
const OptionalOperator Float64RoundDown();
+ const OptionalOperator Float32RoundUp();
+ const OptionalOperator Float64RoundUp();
+ const OptionalOperator Float32RoundTruncate();
const OptionalOperator Float64RoundTruncate();
const OptionalOperator Float64RoundTiesAway();
+ const OptionalOperator Float32RoundTiesEven();
+ const OptionalOperator Float64RoundTiesEven();
// Floating point bit representation.
const Operator* Float64ExtractLowWord32();
@@ -287,9 +313,9 @@ class MachineOperatorBuilder final : public ZoneObject {
const Operator* CheckedStore(CheckedStoreRepresentation);
// Target machine word-size assumed by this builder.
- bool Is32() const { return word() == kRepWord32; }
- bool Is64() const { return word() == kRepWord64; }
- MachineType word() const { return word_; }
+ bool Is32() const { return word() == MachineRepresentation::kWord32; }
+ bool Is64() const { return word() == MachineRepresentation::kWord64; }
+ MachineRepresentation word() const { return word_; }
// Pseudo operators that translate to 32/64-bit operators depending on the
// word-size of the target machine assumed by this builder.
@@ -322,7 +348,7 @@ class MachineOperatorBuilder final : public ZoneObject {
private:
MachineOperatorGlobalCache const& cache_;
- MachineType const word_;
+ MachineRepresentation const word_;
Flags const flags_;
DISALLOW_COPY_AND_ASSIGN(MachineOperatorBuilder);