v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
wasm-deopt-data.cc
Go to the documentation of this file.
1// Copyright 2024 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
6
8
9namespace v8::internal::wasm {
10
11std::vector<DeoptimizationLiteral>
14 static_assert(std::is_trivially_copy_assignable_v<DeoptimizationLiteral>);
15 std::vector<DeoptimizationLiteral> deopt_literals(
17 const uint8_t* data = deopt_data_.begin() + sizeof(base_data_) +
20 // Copy the data (as the data in the WasmCode object is potentially
21 // misaligned).
22 std::memcpy(deopt_literals.data(), data,
23 base_data_.deopt_literals_size * sizeof(deopt_literals[0]));
24 return deopt_literals;
25}
26
28 int deopt_exit_start_offset, int eager_deopt_count,
29 base::Vector<const uint8_t> translation_array,
31 const ZoneDeque<DeoptimizationLiteral>& deopt_literals) {
33 data.entry_count = eager_deopt_count;
34 data.deopt_exit_start_offset = deopt_exit_start_offset;
35 data.eager_deopt_count = eager_deopt_count;
36 data.deopt_literals_size = static_cast<uint32_t>(deopt_literals.size());
37
38 data.translation_array_size = static_cast<uint32_t>(translation_array.size());
39
40 size_t translation_array_byte_size =
41 translation_array.size() * sizeof(translation_array[0]);
42 size_t deopt_entries_byte_size =
43 deopt_entries.size() * sizeof(deopt_entries[0]);
44 size_t deopt_literals_byte_size =
45 deopt_literals.size() * sizeof(deopt_literals[0]);
46 size_t byte_size = sizeof(data) + translation_array_byte_size +
47 deopt_entries_byte_size + deopt_literals_byte_size;
49 uint8_t* result_iter = result.begin();
50 std::memcpy(result_iter, &data, sizeof(data));
51 result_iter += sizeof(data);
52 std::memcpy(result_iter, translation_array.data(),
53 translation_array_byte_size);
54 result_iter += translation_array_byte_size;
55 std::memcpy(result_iter, deopt_entries.data(), deopt_entries_byte_size);
56 result_iter += deopt_entries_byte_size;
57 static_assert(std::is_trivially_copyable_v<
58 std::remove_reference<decltype(deopt_literals[0])>>);
59 for (const auto& literal : deopt_literals) {
60 // We can't serialize objects. Wasm should never contain object literals as
61 // it is isolate-independent.
63 std::memcpy(result_iter, &literal, sizeof(literal));
64 result_iter += sizeof(literal);
65 }
66 DCHECK_EQ(result_iter, result.end());
67 return result;
68}
69
70} // namespace v8::internal::wasm
union v8::internal::@341::BuiltinMetadata::KindSpecificData data
static OwnedVector< T > New(size_t size)
Definition vector.h:287
constexpr size_t size() const
Definition vector.h:70
constexpr T * begin() const
Definition vector.h:96
constexpr T * data() const
Definition vector.h:100
static base::OwnedVector< uint8_t > Serialize(int deopt_exit_start_offset, int eager_deopt_count, base::Vector< const uint8_t > translation_array, base::Vector< wasm::WasmDeoptEntry > deopt_entries, const ZoneDeque< DeoptimizationLiteral > &deopt_literals)
std::vector< DeoptimizationLiteral > BuildDeoptimizationLiteralArray()
base::Vector< const uint8_t > deopt_data_
ZoneVector< RpoNumber > & result
FunctionLiteral * literal
Definition liveedit.cc:294
#define CHECK_NE(lhs, rhs)
#define DCHECK(condition)
Definition logging.h:482
#define DCHECK_EQ(v1, v2)
Definition logging.h:485