OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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_WASM_OPCODES_H_ | 5 #ifndef V8_WASM_OPCODES_H_ |
6 #define V8_WASM_OPCODES_H_ | 6 #define V8_WASM_OPCODES_H_ |
7 | 7 |
8 #include "src/machine-type.h" | 8 #include "src/machine-type.h" |
9 #include "src/signature.h" | 9 #include "src/signature.h" |
10 | 10 |
(...skipping 28 matching lines...) Expand all Loading... |
39 // A typedef improves readability without adding a whole new type system. | 39 // A typedef improves readability without adding a whole new type system. |
40 typedef MachineRepresentation LocalType; | 40 typedef MachineRepresentation LocalType; |
41 const LocalType kAstStmt = MachineRepresentation::kNone; | 41 const LocalType kAstStmt = MachineRepresentation::kNone; |
42 const LocalType kAstI32 = MachineRepresentation::kWord32; | 42 const LocalType kAstI32 = MachineRepresentation::kWord32; |
43 const LocalType kAstI64 = MachineRepresentation::kWord64; | 43 const LocalType kAstI64 = MachineRepresentation::kWord64; |
44 const LocalType kAstF32 = MachineRepresentation::kFloat32; | 44 const LocalType kAstF32 = MachineRepresentation::kFloat32; |
45 const LocalType kAstF64 = MachineRepresentation::kFloat64; | 45 const LocalType kAstF64 = MachineRepresentation::kFloat64; |
46 // We use kTagged here because kNone is already used by kAstStmt. | 46 // We use kTagged here because kNone is already used by kAstStmt. |
47 const LocalType kAstEnd = MachineRepresentation::kTagged; | 47 const LocalType kAstEnd = MachineRepresentation::kTagged; |
48 | 48 |
49 // Functionality related to encoding memory accesses. | |
50 struct MemoryAccess { | |
51 // Atomicity annotations for access to the memory and globals. | |
52 enum Atomicity { | |
53 kNone = 0, // non-atomic | |
54 kSequential = 1, // sequential consistency | |
55 kAcquire = 2, // acquire semantics | |
56 kRelease = 3 // release semantics | |
57 }; | |
58 | |
59 // Alignment annotations for memory accesses. | |
60 enum Alignment { kAligned = 0, kUnaligned = 1 }; | |
61 | |
62 // Bitfields for the various annotations for memory accesses. | |
63 typedef BitField<Alignment, 7, 1> AlignmentField; | |
64 typedef BitField<Atomicity, 5, 2> AtomicityField; | |
65 typedef BitField<bool, 4, 1> OffsetField; | |
66 }; | |
67 | |
68 typedef Signature<LocalType> FunctionSig; | 49 typedef Signature<LocalType> FunctionSig; |
69 std::ostream& operator<<(std::ostream& os, const FunctionSig& function); | 50 std::ostream& operator<<(std::ostream& os, const FunctionSig& function); |
70 | 51 |
71 // TODO(titzer): Renumber all the opcodes to fill in holes. | 52 // TODO(titzer): Renumber all the opcodes to fill in holes. |
72 | 53 |
73 // Control expressions and blocks. | 54 // Control expressions and blocks. |
74 #define FOREACH_CONTROL_OPCODE(V) \ | 55 #define FOREACH_CONTROL_OPCODE(V) \ |
75 V(Nop, 0x00, _) \ | 56 V(Nop, 0x00, _) \ |
76 V(Block, 0x01, _) \ | 57 V(Block, 0x01, _) \ |
77 V(Loop, 0x02, _) \ | 58 V(Loop, 0x02, _) \ |
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
441 } else if (type == MachineType::Float32()) { | 422 } else if (type == MachineType::Float32()) { |
442 return store ? kExprF32StoreMem : kExprF32LoadMem; | 423 return store ? kExprF32StoreMem : kExprF32LoadMem; |
443 } else if (type == MachineType::Float64()) { | 424 } else if (type == MachineType::Float64()) { |
444 return store ? kExprF64StoreMem : kExprF64LoadMem; | 425 return store ? kExprF64StoreMem : kExprF64LoadMem; |
445 } else { | 426 } else { |
446 UNREACHABLE(); | 427 UNREACHABLE(); |
447 return kExprNop; | 428 return kExprNop; |
448 } | 429 } |
449 } | 430 } |
450 | 431 |
451 static byte LoadStoreAccessOf(bool with_offset) { | |
452 return MemoryAccess::OffsetField::encode(with_offset); | |
453 } | |
454 | |
455 static char ShortNameOf(LocalType type) { | 432 static char ShortNameOf(LocalType type) { |
456 switch (type) { | 433 switch (type) { |
457 case kAstI32: | 434 case kAstI32: |
458 return 'i'; | 435 return 'i'; |
459 case kAstI64: | 436 case kAstI64: |
460 return 'l'; | 437 return 'l'; |
461 case kAstF32: | 438 case kAstF32: |
462 return 'f'; | 439 return 'f'; |
463 case kAstF64: | 440 case kAstF64: |
464 return 'd'; | 441 return 'd'; |
(...skipping 24 matching lines...) Expand all Loading... |
489 default: | 466 default: |
490 return "<unknown>"; | 467 return "<unknown>"; |
491 } | 468 } |
492 } | 469 } |
493 }; | 470 }; |
494 } // namespace wasm | 471 } // namespace wasm |
495 } // namespace internal | 472 } // namespace internal |
496 } // namespace v8 | 473 } // namespace v8 |
497 | 474 |
498 #endif // V8_WASM_OPCODES_H_ | 475 #endif // V8_WASM_OPCODES_H_ |
OLD | NEW |