Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: src/compiler/machine-operator.h

Issue 1919513002: [turbofan] Introduce TruncateTaggedToWord32 simplified operator. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_COMPILER_MACHINE_OPERATOR_H_ 5 #ifndef V8_COMPILER_MACHINE_OPERATOR_H_
6 #define V8_COMPILER_MACHINE_OPERATOR_H_ 6 #define V8_COMPILER_MACHINE_OPERATOR_H_
7 7
8 #include "src/base/flags.h" 8 #include "src/base/flags.h"
9 #include "src/machine-type.h" 9 #include "src/machine-type.h"
10 10
(...skipping 14 matching lines...) Expand all
25 bool IsSupported() const { return op_ != nullptr; } 25 bool IsSupported() const { return op_ != nullptr; }
26 const Operator* op() const { 26 const Operator* op() const {
27 DCHECK_NOT_NULL(op_); 27 DCHECK_NOT_NULL(op_);
28 return op_; 28 return op_;
29 } 29 }
30 30
31 private: 31 private:
32 const Operator* const op_; 32 const Operator* const op_;
33 }; 33 };
34 34
35
36 // Supported float64 to int32 truncation modes.
37 enum class TruncationMode : uint8_t {
38 kJavaScript, // ES6 section 7.1.5
39 kRoundToZero // Round towards zero. Implementation defined for NaN and ovf.
40 };
41
42 V8_INLINE size_t hash_value(TruncationMode mode) {
43 return static_cast<uint8_t>(mode);
44 }
45
46 std::ostream& operator<<(std::ostream&, TruncationMode);
47
48 TruncationMode TruncationModeOf(Operator const*);
49
50
51 // Supported write barrier modes. 35 // Supported write barrier modes.
52 enum WriteBarrierKind { 36 enum WriteBarrierKind {
53 kNoWriteBarrier, 37 kNoWriteBarrier,
54 kMapWriteBarrier, 38 kMapWriteBarrier,
55 kPointerWriteBarrier, 39 kPointerWriteBarrier,
56 kFullWriteBarrier 40 kFullWriteBarrier
57 }; 41 };
58 42
59 std::ostream& operator<<(std::ostream& os, WriteBarrierKind); 43 std::ostream& operator<<(std::ostream& os, WriteBarrierKind);
60 44
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 const Operator* Int64LessThan(); 200 const Operator* Int64LessThan();
217 const Operator* Int64LessThanOrEqual(); 201 const Operator* Int64LessThanOrEqual();
218 const Operator* Uint64Div(); 202 const Operator* Uint64Div();
219 const Operator* Uint64LessThan(); 203 const Operator* Uint64LessThan();
220 const Operator* Uint64LessThanOrEqual(); 204 const Operator* Uint64LessThanOrEqual();
221 const Operator* Uint64Mod(); 205 const Operator* Uint64Mod();
222 206
223 // This operator reinterprets the bits of a word as tagged pointer. 207 // This operator reinterprets the bits of a word as tagged pointer.
224 const Operator* BitcastWordToTagged(); 208 const Operator* BitcastWordToTagged();
225 209
210 // JavaScript float64 to int32/uint32 truncation.
211 const Operator* TruncateFloat64ToWord32();
212
226 // These operators change the representation of numbers while preserving the 213 // These operators change the representation of numbers while preserving the
227 // value of the number. Narrowing operators assume the input is representable 214 // value of the number. Narrowing operators assume the input is representable
228 // in the target type and are *not* defined for other inputs. 215 // in the target type and are *not* defined for other inputs.
229 // Use narrowing change operators only when there is a static guarantee that 216 // Use narrowing change operators only when there is a static guarantee that
230 // the input value is representable in the target value. 217 // the input value is representable in the target value.
231 const Operator* ChangeFloat32ToFloat64(); 218 const Operator* ChangeFloat32ToFloat64();
232 const Operator* ChangeFloat64ToInt32(); // narrowing 219 const Operator* ChangeFloat64ToInt32(); // narrowing
233 const Operator* ChangeFloat64ToUint32(); // narrowing 220 const Operator* ChangeFloat64ToUint32(); // narrowing
234 const Operator* TruncateFloat64ToUint32(); 221 const Operator* TruncateFloat64ToUint32();
235 const Operator* TruncateFloat32ToInt32(); 222 const Operator* TruncateFloat32ToInt32();
236 const Operator* TruncateFloat32ToUint32(); 223 const Operator* TruncateFloat32ToUint32();
237 const Operator* TryTruncateFloat32ToInt64(); 224 const Operator* TryTruncateFloat32ToInt64();
238 const Operator* TryTruncateFloat64ToInt64(); 225 const Operator* TryTruncateFloat64ToInt64();
239 const Operator* TryTruncateFloat32ToUint64(); 226 const Operator* TryTruncateFloat32ToUint64();
240 const Operator* TryTruncateFloat64ToUint64(); 227 const Operator* TryTruncateFloat64ToUint64();
241 const Operator* ChangeInt32ToFloat64(); 228 const Operator* ChangeInt32ToFloat64();
242 const Operator* ChangeInt32ToInt64(); 229 const Operator* ChangeInt32ToInt64();
243 const Operator* ChangeUint32ToFloat64(); 230 const Operator* ChangeUint32ToFloat64();
244 const Operator* ChangeUint32ToUint64(); 231 const Operator* ChangeUint32ToUint64();
245 232
246 // These operators truncate or round numbers, both changing the representation 233 // These operators truncate or round numbers, both changing the representation
247 // of the number and mapping multiple input values onto the same output value. 234 // of the number and mapping multiple input values onto the same output value.
248 const Operator* TruncateFloat64ToFloat32(); 235 const Operator* TruncateFloat64ToFloat32();
249 const Operator* TruncateFloat64ToInt32(TruncationMode);
250 const Operator* TruncateInt64ToInt32(); 236 const Operator* TruncateInt64ToInt32();
237 const Operator* RoundFloat64ToInt32();
251 const Operator* RoundInt32ToFloat32(); 238 const Operator* RoundInt32ToFloat32();
252 const Operator* RoundInt64ToFloat32(); 239 const Operator* RoundInt64ToFloat32();
253 const Operator* RoundInt64ToFloat64(); 240 const Operator* RoundInt64ToFloat64();
254 const Operator* RoundUint32ToFloat32(); 241 const Operator* RoundUint32ToFloat32();
255 const Operator* RoundUint64ToFloat32(); 242 const Operator* RoundUint64ToFloat32();
256 const Operator* RoundUint64ToFloat64(); 243 const Operator* RoundUint64ToFloat64();
257 244
258 // These operators reinterpret the bits of a floating point number as an 245 // These operators reinterpret the bits of a floating point number as an
259 // integer and vice versa. 246 // integer and vice versa.
260 const Operator* BitcastFloat32ToInt32(); 247 const Operator* BitcastFloat32ToInt32();
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 }; 372 };
386 373
387 374
388 DEFINE_OPERATORS_FOR_FLAGS(MachineOperatorBuilder::Flags) 375 DEFINE_OPERATORS_FOR_FLAGS(MachineOperatorBuilder::Flags)
389 376
390 } // namespace compiler 377 } // namespace compiler
391 } // namespace internal 378 } // namespace internal
392 } // namespace v8 379 } // namespace v8
393 380
394 #endif // V8_COMPILER_MACHINE_OPERATOR_H_ 381 #endif // V8_COMPILER_MACHINE_OPERATOR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698