11cb0ef41Sopenharmony_ci// Copyright (c) 1994-2006 Sun Microsystems Inc.
21cb0ef41Sopenharmony_ci// All Rights Reserved.
31cb0ef41Sopenharmony_ci//
41cb0ef41Sopenharmony_ci// Redistribution and use in source and binary forms, with or without
51cb0ef41Sopenharmony_ci// modification, are permitted provided that the following conditions are
61cb0ef41Sopenharmony_ci// met:
71cb0ef41Sopenharmony_ci//
81cb0ef41Sopenharmony_ci// - Redistributions of source code must retain the above copyright notice,
91cb0ef41Sopenharmony_ci// this list of conditions and the following disclaimer.
101cb0ef41Sopenharmony_ci//
111cb0ef41Sopenharmony_ci// - Redistribution in binary form must reproduce the above copyright
121cb0ef41Sopenharmony_ci// notice, this list of conditions and the following disclaimer in the
131cb0ef41Sopenharmony_ci// documentation and/or other materials provided with the distribution.
141cb0ef41Sopenharmony_ci//
151cb0ef41Sopenharmony_ci// - Neither the name of Sun Microsystems or the names of contributors may
161cb0ef41Sopenharmony_ci// be used to endorse or promote products derived from this software without
171cb0ef41Sopenharmony_ci// specific prior written permission.
181cb0ef41Sopenharmony_ci//
191cb0ef41Sopenharmony_ci// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
201cb0ef41Sopenharmony_ci// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
211cb0ef41Sopenharmony_ci// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
221cb0ef41Sopenharmony_ci// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
231cb0ef41Sopenharmony_ci// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
241cb0ef41Sopenharmony_ci// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
251cb0ef41Sopenharmony_ci// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
261cb0ef41Sopenharmony_ci// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
271cb0ef41Sopenharmony_ci// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
281cb0ef41Sopenharmony_ci// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
291cb0ef41Sopenharmony_ci// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
301cb0ef41Sopenharmony_ci
311cb0ef41Sopenharmony_ci// The original source code covered by the above license above has been
321cb0ef41Sopenharmony_ci// modified significantly by Google Inc.
331cb0ef41Sopenharmony_ci// Copyright 2012 the V8 project authors. All rights reserved.
341cb0ef41Sopenharmony_ci
351cb0ef41Sopenharmony_ci// A light-weight IA32 Assembler.
361cb0ef41Sopenharmony_ci
371cb0ef41Sopenharmony_ci#ifndef V8_CODEGEN_IA32_ASSEMBLER_IA32_INL_H_
381cb0ef41Sopenharmony_ci#define V8_CODEGEN_IA32_ASSEMBLER_IA32_INL_H_
391cb0ef41Sopenharmony_ci
401cb0ef41Sopenharmony_ci#include "src/codegen/ia32/assembler-ia32.h"
411cb0ef41Sopenharmony_ci
421cb0ef41Sopenharmony_ci#include "src/base/memory.h"
431cb0ef41Sopenharmony_ci#include "src/codegen/assembler.h"
441cb0ef41Sopenharmony_ci#include "src/debug/debug.h"
451cb0ef41Sopenharmony_ci#include "src/objects/objects-inl.h"
461cb0ef41Sopenharmony_ci
471cb0ef41Sopenharmony_cinamespace v8 {
481cb0ef41Sopenharmony_cinamespace internal {
491cb0ef41Sopenharmony_ci
501cb0ef41Sopenharmony_cibool CpuFeatures::SupportsOptimizer() { return true; }
511cb0ef41Sopenharmony_ci
521cb0ef41Sopenharmony_ci// The modes possibly affected by apply must be in kApplyMask.
531cb0ef41Sopenharmony_civoid RelocInfo::apply(intptr_t delta) {
541cb0ef41Sopenharmony_ci  DCHECK_EQ(kApplyMask, (RelocInfo::ModeMask(RelocInfo::CODE_TARGET) |
551cb0ef41Sopenharmony_ci                         RelocInfo::ModeMask(RelocInfo::INTERNAL_REFERENCE) |
561cb0ef41Sopenharmony_ci                         RelocInfo::ModeMask(RelocInfo::OFF_HEAP_TARGET) |
571cb0ef41Sopenharmony_ci                         RelocInfo::ModeMask(RelocInfo::RUNTIME_ENTRY)));
581cb0ef41Sopenharmony_ci  if (IsRuntimeEntry(rmode_) || IsCodeTarget(rmode_) ||
591cb0ef41Sopenharmony_ci      IsOffHeapTarget(rmode_)) {
601cb0ef41Sopenharmony_ci    base::WriteUnalignedValue(pc_,
611cb0ef41Sopenharmony_ci                              base::ReadUnalignedValue<int32_t>(pc_) - delta);
621cb0ef41Sopenharmony_ci  } else if (IsInternalReference(rmode_)) {
631cb0ef41Sopenharmony_ci    // Absolute code pointer inside code object moves with the code object.
641cb0ef41Sopenharmony_ci    base::WriteUnalignedValue(pc_,
651cb0ef41Sopenharmony_ci                              base::ReadUnalignedValue<int32_t>(pc_) + delta);
661cb0ef41Sopenharmony_ci  }
671cb0ef41Sopenharmony_ci}
681cb0ef41Sopenharmony_ci
691cb0ef41Sopenharmony_ciAddress RelocInfo::target_address() {
701cb0ef41Sopenharmony_ci  DCHECK(IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_) || IsWasmCall(rmode_));
711cb0ef41Sopenharmony_ci  return Assembler::target_address_at(pc_, constant_pool_);
721cb0ef41Sopenharmony_ci}
731cb0ef41Sopenharmony_ci
741cb0ef41Sopenharmony_ciAddress RelocInfo::target_address_address() {
751cb0ef41Sopenharmony_ci  DCHECK(HasTargetAddressAddress());
761cb0ef41Sopenharmony_ci  return pc_;
771cb0ef41Sopenharmony_ci}
781cb0ef41Sopenharmony_ci
791cb0ef41Sopenharmony_ciAddress RelocInfo::constant_pool_entry_address() { UNREACHABLE(); }
801cb0ef41Sopenharmony_ci
811cb0ef41Sopenharmony_ciint RelocInfo::target_address_size() { return Assembler::kSpecialTargetSize; }
821cb0ef41Sopenharmony_ci
831cb0ef41Sopenharmony_ciHeapObject RelocInfo::target_object(PtrComprCageBase cage_base) {
841cb0ef41Sopenharmony_ci  DCHECK(IsCodeTarget(rmode_) || IsFullEmbeddedObject(rmode_) ||
851cb0ef41Sopenharmony_ci         IsDataEmbeddedObject(rmode_));
861cb0ef41Sopenharmony_ci  return HeapObject::cast(Object(ReadUnalignedValue<Address>(pc_)));
871cb0ef41Sopenharmony_ci}
881cb0ef41Sopenharmony_ci
891cb0ef41Sopenharmony_ciHandle<HeapObject> RelocInfo::target_object_handle(Assembler* origin) {
901cb0ef41Sopenharmony_ci  DCHECK(IsCodeTarget(rmode_) || IsFullEmbeddedObject(rmode_) ||
911cb0ef41Sopenharmony_ci         IsDataEmbeddedObject(rmode_));
921cb0ef41Sopenharmony_ci  return Handle<HeapObject>::cast(ReadUnalignedValue<Handle<Object>>(pc_));
931cb0ef41Sopenharmony_ci}
941cb0ef41Sopenharmony_ci
951cb0ef41Sopenharmony_civoid RelocInfo::set_target_object(Heap* heap, HeapObject target,
961cb0ef41Sopenharmony_ci                                  WriteBarrierMode write_barrier_mode,
971cb0ef41Sopenharmony_ci                                  ICacheFlushMode icache_flush_mode) {
981cb0ef41Sopenharmony_ci  DCHECK(IsCodeTarget(rmode_) || IsFullEmbeddedObject(rmode_) ||
991cb0ef41Sopenharmony_ci         IsDataEmbeddedObject(rmode_));
1001cb0ef41Sopenharmony_ci  WriteUnalignedValue(pc_, target.ptr());
1011cb0ef41Sopenharmony_ci  if (icache_flush_mode != SKIP_ICACHE_FLUSH) {
1021cb0ef41Sopenharmony_ci    FlushInstructionCache(pc_, sizeof(Address));
1031cb0ef41Sopenharmony_ci  }
1041cb0ef41Sopenharmony_ci  if (write_barrier_mode == UPDATE_WRITE_BARRIER && !host().is_null() &&
1051cb0ef41Sopenharmony_ci      !FLAG_disable_write_barriers) {
1061cb0ef41Sopenharmony_ci    WriteBarrierForCode(host(), this, target);
1071cb0ef41Sopenharmony_ci  }
1081cb0ef41Sopenharmony_ci}
1091cb0ef41Sopenharmony_ci
1101cb0ef41Sopenharmony_ciAddress RelocInfo::target_external_reference() {
1111cb0ef41Sopenharmony_ci  DCHECK(rmode_ == RelocInfo::EXTERNAL_REFERENCE);
1121cb0ef41Sopenharmony_ci  return ReadUnalignedValue<Address>(pc_);
1131cb0ef41Sopenharmony_ci}
1141cb0ef41Sopenharmony_ci
1151cb0ef41Sopenharmony_civoid RelocInfo::set_target_external_reference(
1161cb0ef41Sopenharmony_ci    Address target, ICacheFlushMode icache_flush_mode) {
1171cb0ef41Sopenharmony_ci  DCHECK(rmode_ == RelocInfo::EXTERNAL_REFERENCE);
1181cb0ef41Sopenharmony_ci  WriteUnalignedValue(pc_, target);
1191cb0ef41Sopenharmony_ci  if (icache_flush_mode != SKIP_ICACHE_FLUSH) {
1201cb0ef41Sopenharmony_ci    FlushInstructionCache(pc_, sizeof(Address));
1211cb0ef41Sopenharmony_ci  }
1221cb0ef41Sopenharmony_ci}
1231cb0ef41Sopenharmony_ci
1241cb0ef41Sopenharmony_ciAddress RelocInfo::target_internal_reference() {
1251cb0ef41Sopenharmony_ci  DCHECK(rmode_ == INTERNAL_REFERENCE);
1261cb0ef41Sopenharmony_ci  return ReadUnalignedValue<Address>(pc_);
1271cb0ef41Sopenharmony_ci}
1281cb0ef41Sopenharmony_ci
1291cb0ef41Sopenharmony_ciAddress RelocInfo::target_internal_reference_address() {
1301cb0ef41Sopenharmony_ci  DCHECK(rmode_ == INTERNAL_REFERENCE);
1311cb0ef41Sopenharmony_ci  return pc_;
1321cb0ef41Sopenharmony_ci}
1331cb0ef41Sopenharmony_ci
1341cb0ef41Sopenharmony_ciAddress RelocInfo::target_runtime_entry(Assembler* origin) {
1351cb0ef41Sopenharmony_ci  DCHECK(IsRuntimeEntry(rmode_));
1361cb0ef41Sopenharmony_ci  return ReadUnalignedValue<Address>(pc_);
1371cb0ef41Sopenharmony_ci}
1381cb0ef41Sopenharmony_ci
1391cb0ef41Sopenharmony_civoid RelocInfo::set_target_runtime_entry(Address target,
1401cb0ef41Sopenharmony_ci                                         WriteBarrierMode write_barrier_mode,
1411cb0ef41Sopenharmony_ci                                         ICacheFlushMode icache_flush_mode) {
1421cb0ef41Sopenharmony_ci  DCHECK(IsRuntimeEntry(rmode_));
1431cb0ef41Sopenharmony_ci  if (target_address() != target) {
1441cb0ef41Sopenharmony_ci    set_target_address(target, write_barrier_mode, icache_flush_mode);
1451cb0ef41Sopenharmony_ci  }
1461cb0ef41Sopenharmony_ci}
1471cb0ef41Sopenharmony_ci
1481cb0ef41Sopenharmony_ciAddress RelocInfo::target_off_heap_target() {
1491cb0ef41Sopenharmony_ci  DCHECK(IsOffHeapTarget(rmode_));
1501cb0ef41Sopenharmony_ci  return Assembler::target_address_at(pc_, constant_pool_);
1511cb0ef41Sopenharmony_ci}
1521cb0ef41Sopenharmony_ci
1531cb0ef41Sopenharmony_civoid RelocInfo::WipeOut() {
1541cb0ef41Sopenharmony_ci  if (IsFullEmbeddedObject(rmode_) || IsExternalReference(rmode_) ||
1551cb0ef41Sopenharmony_ci      IsInternalReference(rmode_)) {
1561cb0ef41Sopenharmony_ci    WriteUnalignedValue(pc_, kNullAddress);
1571cb0ef41Sopenharmony_ci  } else if (IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_) ||
1581cb0ef41Sopenharmony_ci             IsOffHeapTarget(rmode_)) {
1591cb0ef41Sopenharmony_ci    // Effectively write zero into the relocation.
1601cb0ef41Sopenharmony_ci    Assembler::set_target_address_at(pc_, constant_pool_,
1611cb0ef41Sopenharmony_ci                                     pc_ + sizeof(int32_t));
1621cb0ef41Sopenharmony_ci  } else {
1631cb0ef41Sopenharmony_ci    UNREACHABLE();
1641cb0ef41Sopenharmony_ci  }
1651cb0ef41Sopenharmony_ci}
1661cb0ef41Sopenharmony_ci
1671cb0ef41Sopenharmony_civoid Assembler::emit(uint32_t x) {
1681cb0ef41Sopenharmony_ci  WriteUnalignedValue(reinterpret_cast<Address>(pc_), x);
1691cb0ef41Sopenharmony_ci  pc_ += sizeof(uint32_t);
1701cb0ef41Sopenharmony_ci}
1711cb0ef41Sopenharmony_ci
1721cb0ef41Sopenharmony_civoid Assembler::emit_q(uint64_t x) {
1731cb0ef41Sopenharmony_ci  WriteUnalignedValue(reinterpret_cast<Address>(pc_), x);
1741cb0ef41Sopenharmony_ci  pc_ += sizeof(uint64_t);
1751cb0ef41Sopenharmony_ci}
1761cb0ef41Sopenharmony_ci
1771cb0ef41Sopenharmony_civoid Assembler::emit(Handle<HeapObject> handle) {
1781cb0ef41Sopenharmony_ci  emit(handle.address(), RelocInfo::FULL_EMBEDDED_OBJECT);
1791cb0ef41Sopenharmony_ci}
1801cb0ef41Sopenharmony_ci
1811cb0ef41Sopenharmony_civoid Assembler::emit(uint32_t x, RelocInfo::Mode rmode) {
1821cb0ef41Sopenharmony_ci  if (!RelocInfo::IsNoInfo(rmode)) {
1831cb0ef41Sopenharmony_ci    RecordRelocInfo(rmode);
1841cb0ef41Sopenharmony_ci  }
1851cb0ef41Sopenharmony_ci  emit(x);
1861cb0ef41Sopenharmony_ci}
1871cb0ef41Sopenharmony_ci
1881cb0ef41Sopenharmony_civoid Assembler::emit(Handle<Code> code, RelocInfo::Mode rmode) {
1891cb0ef41Sopenharmony_ci  emit(code.address(), rmode);
1901cb0ef41Sopenharmony_ci}
1911cb0ef41Sopenharmony_ci
1921cb0ef41Sopenharmony_civoid Assembler::emit(const Immediate& x) {
1931cb0ef41Sopenharmony_ci  if (x.rmode_ == RelocInfo::INTERNAL_REFERENCE) {
1941cb0ef41Sopenharmony_ci    Label* label = reinterpret_cast<Label*>(x.immediate());
1951cb0ef41Sopenharmony_ci    emit_code_relative_offset(label);
1961cb0ef41Sopenharmony_ci    return;
1971cb0ef41Sopenharmony_ci  }
1981cb0ef41Sopenharmony_ci  if (!RelocInfo::IsNoInfo(x.rmode_)) RecordRelocInfo(x.rmode_);
1991cb0ef41Sopenharmony_ci  if (x.is_heap_object_request()) {
2001cb0ef41Sopenharmony_ci    RequestHeapObject(x.heap_object_request());
2011cb0ef41Sopenharmony_ci    emit(0);
2021cb0ef41Sopenharmony_ci    return;
2031cb0ef41Sopenharmony_ci  }
2041cb0ef41Sopenharmony_ci  emit(x.immediate());
2051cb0ef41Sopenharmony_ci}
2061cb0ef41Sopenharmony_ci
2071cb0ef41Sopenharmony_civoid Assembler::emit_code_relative_offset(Label* label) {
2081cb0ef41Sopenharmony_ci  if (label->is_bound()) {
2091cb0ef41Sopenharmony_ci    int32_t pos;
2101cb0ef41Sopenharmony_ci    pos = label->pos() + Code::kHeaderSize - kHeapObjectTag;
2111cb0ef41Sopenharmony_ci    emit(pos);
2121cb0ef41Sopenharmony_ci  } else {
2131cb0ef41Sopenharmony_ci    emit_disp(label, Displacement::CODE_RELATIVE);
2141cb0ef41Sopenharmony_ci  }
2151cb0ef41Sopenharmony_ci}
2161cb0ef41Sopenharmony_ci
2171cb0ef41Sopenharmony_civoid Assembler::emit_b(Immediate x) {
2181cb0ef41Sopenharmony_ci  DCHECK(x.is_int8() || x.is_uint8());
2191cb0ef41Sopenharmony_ci  uint8_t value = static_cast<uint8_t>(x.immediate());
2201cb0ef41Sopenharmony_ci  *pc_++ = value;
2211cb0ef41Sopenharmony_ci}
2221cb0ef41Sopenharmony_ci
2231cb0ef41Sopenharmony_civoid Assembler::emit_w(const Immediate& x) {
2241cb0ef41Sopenharmony_ci  DCHECK(RelocInfo::IsNoInfo(x.rmode_));
2251cb0ef41Sopenharmony_ci  uint16_t value = static_cast<uint16_t>(x.immediate());
2261cb0ef41Sopenharmony_ci  WriteUnalignedValue(reinterpret_cast<Address>(pc_), value);
2271cb0ef41Sopenharmony_ci  pc_ += sizeof(uint16_t);
2281cb0ef41Sopenharmony_ci}
2291cb0ef41Sopenharmony_ci
2301cb0ef41Sopenharmony_ciAddress Assembler::target_address_at(Address pc, Address constant_pool) {
2311cb0ef41Sopenharmony_ci  return pc + sizeof(int32_t) + ReadUnalignedValue<int32_t>(pc);
2321cb0ef41Sopenharmony_ci}
2331cb0ef41Sopenharmony_ci
2341cb0ef41Sopenharmony_civoid Assembler::set_target_address_at(Address pc, Address constant_pool,
2351cb0ef41Sopenharmony_ci                                      Address target,
2361cb0ef41Sopenharmony_ci                                      ICacheFlushMode icache_flush_mode) {
2371cb0ef41Sopenharmony_ci  WriteUnalignedValue(pc, target - (pc + sizeof(int32_t)));
2381cb0ef41Sopenharmony_ci  if (icache_flush_mode != SKIP_ICACHE_FLUSH) {
2391cb0ef41Sopenharmony_ci    FlushInstructionCache(pc, sizeof(int32_t));
2401cb0ef41Sopenharmony_ci  }
2411cb0ef41Sopenharmony_ci}
2421cb0ef41Sopenharmony_ci
2431cb0ef41Sopenharmony_civoid Assembler::deserialization_set_special_target_at(
2441cb0ef41Sopenharmony_ci    Address instruction_payload, Code code, Address target) {
2451cb0ef41Sopenharmony_ci  set_target_address_at(instruction_payload,
2461cb0ef41Sopenharmony_ci                        !code.is_null() ? code.constant_pool() : kNullAddress,
2471cb0ef41Sopenharmony_ci                        target);
2481cb0ef41Sopenharmony_ci}
2491cb0ef41Sopenharmony_ci
2501cb0ef41Sopenharmony_ciint Assembler::deserialization_special_target_size(
2511cb0ef41Sopenharmony_ci    Address instruction_payload) {
2521cb0ef41Sopenharmony_ci  return kSpecialTargetSize;
2531cb0ef41Sopenharmony_ci}
2541cb0ef41Sopenharmony_ci
2551cb0ef41Sopenharmony_ciDisplacement Assembler::disp_at(Label* L) {
2561cb0ef41Sopenharmony_ci  return Displacement(long_at(L->pos()));
2571cb0ef41Sopenharmony_ci}
2581cb0ef41Sopenharmony_ci
2591cb0ef41Sopenharmony_civoid Assembler::disp_at_put(Label* L, Displacement disp) {
2601cb0ef41Sopenharmony_ci  long_at_put(L->pos(), disp.data());
2611cb0ef41Sopenharmony_ci}
2621cb0ef41Sopenharmony_ci
2631cb0ef41Sopenharmony_civoid Assembler::emit_disp(Label* L, Displacement::Type type) {
2641cb0ef41Sopenharmony_ci  Displacement disp(L, type);
2651cb0ef41Sopenharmony_ci  L->link_to(pc_offset());
2661cb0ef41Sopenharmony_ci  emit(static_cast<int>(disp.data()));
2671cb0ef41Sopenharmony_ci}
2681cb0ef41Sopenharmony_ci
2691cb0ef41Sopenharmony_civoid Assembler::emit_near_disp(Label* L) {
2701cb0ef41Sopenharmony_ci  byte disp = 0x00;
2711cb0ef41Sopenharmony_ci  if (L->is_near_linked()) {
2721cb0ef41Sopenharmony_ci    int offset = L->near_link_pos() - pc_offset();
2731cb0ef41Sopenharmony_ci    DCHECK(is_int8(offset));
2741cb0ef41Sopenharmony_ci    disp = static_cast<byte>(offset & 0xFF);
2751cb0ef41Sopenharmony_ci  }
2761cb0ef41Sopenharmony_ci  L->link_to(pc_offset(), Label::kNear);
2771cb0ef41Sopenharmony_ci  *pc_++ = disp;
2781cb0ef41Sopenharmony_ci}
2791cb0ef41Sopenharmony_ci
2801cb0ef41Sopenharmony_civoid Assembler::deserialization_set_target_internal_reference_at(
2811cb0ef41Sopenharmony_ci    Address pc, Address target, RelocInfo::Mode mode) {
2821cb0ef41Sopenharmony_ci  WriteUnalignedValue(pc, target);
2831cb0ef41Sopenharmony_ci}
2841cb0ef41Sopenharmony_ci
2851cb0ef41Sopenharmony_civoid Operand::set_sib(ScaleFactor scale, Register index, Register base) {
2861cb0ef41Sopenharmony_ci  DCHECK_EQ(len_, 1);
2871cb0ef41Sopenharmony_ci  DCHECK_EQ(scale & -4, 0);
2881cb0ef41Sopenharmony_ci  // Use SIB with no index register only for base esp.
2891cb0ef41Sopenharmony_ci  DCHECK(index != esp || base == esp);
2901cb0ef41Sopenharmony_ci  buf_[1] = scale << 6 | index.code() << 3 | base.code();
2911cb0ef41Sopenharmony_ci  len_ = 2;
2921cb0ef41Sopenharmony_ci}
2931cb0ef41Sopenharmony_ci
2941cb0ef41Sopenharmony_civoid Operand::set_disp8(int8_t disp) {
2951cb0ef41Sopenharmony_ci  DCHECK(len_ == 1 || len_ == 2);
2961cb0ef41Sopenharmony_ci  *reinterpret_cast<int8_t*>(&buf_[len_++]) = disp;
2971cb0ef41Sopenharmony_ci}
2981cb0ef41Sopenharmony_ci
2991cb0ef41Sopenharmony_ci}  // namespace internal
3001cb0ef41Sopenharmony_ci}  // namespace v8
3011cb0ef41Sopenharmony_ci
3021cb0ef41Sopenharmony_ci#endif  // V8_CODEGEN_IA32_ASSEMBLER_IA32_INL_H_
303