1 // Copyright 2021 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_WASM_BRANCH_HINT_MAP_H_ 6 #define V8_WASM_BRANCH_HINT_MAP_H_ 7 8 #include <unordered_map> 9 10 #include "src/base/macros.h" 11 12 namespace v8 { 13 namespace internal { 14 15 namespace wasm { 16 17 enum class WasmBranchHint : uint8_t { 18 kNoHint = 0, 19 kUnlikely = 1, 20 kLikely = 2, 21 }; 22 23 class V8_EXPORT_PRIVATE BranchHintMap { 24 public: insert(uint32_t offset,WasmBranchHint hint)25 void insert(uint32_t offset, WasmBranchHint hint) { 26 map_.emplace(offset, hint); 27 } GetHintFor(uint32_t offset)28 WasmBranchHint GetHintFor(uint32_t offset) const { 29 auto it = map_.find(offset); 30 if (it == map_.end()) { 31 return WasmBranchHint::kNoHint; 32 } 33 return it->second; 34 } 35 36 private: 37 std::unordered_map<uint32_t, WasmBranchHint> map_; 38 }; 39 40 using BranchHintInfo = std::unordered_map<uint32_t, BranchHintMap>; 41 42 } // namespace wasm 43 } // namespace internal 44 } // namespace v8 45 46 #endif // V8_WASM_BRANCH_HINT_MAP_H_ 47