5#ifndef V8_CODEGEN_S390_MACRO_ASSEMBLER_S390_H_
6#define V8_CODEGEN_S390_MACRO_ASSEMBLER_S390_H_
8#ifndef INCLUDED_FROM_MACRO_ASSEMBLER_H
9#error This header must be included via macro-assembler.h
48 using MacroAssemblerBase::MacroAssemblerBase;
99 return ExternalReferenceAsOperand(ExternalReference::Create(
id),
no_reg);
123 Label** labels,
int num_labels);
126 Label* if_marked_for_deoptimization);
129 Label* if_turbofanned);
148 Label* jump_deoptimization_entry_label);
169#ifdef V8_ENABLE_LEAPTIERING
206 const Operand& shiftAmt,
bool zeroBits);
248 Register exclusion3 = no_reg)
const;
341 if (CpuFeatures::IsSupported(MISC_INSTR_EXT2)) {
342 msgrkc(dst, src1, src2);
346 }
else if (dst == src1) {
359 if (CpuFeatures::IsSupported(MISC_INSTR_EXT2)) {
360 msrkc(dst, src1, src2);
364 }
else if (dst == src1) {
583 const Operand& val2 = Operand::Zero());
586 const Operand& val2 = Operand::Zero());
589 const Operand& val2 = Operand::Zero());
592 const Operand& val2 = Operand::Zero());
595 const Operand& val2 = Operand::Zero());
598 const Operand& val2 = Operand::Zero());
776#ifdef V8_COMPRESS_POINTERS_IN_SHARED_CAGE
778 IsolateData::cage_base_offset());
785 CanonicalizeNaN(value, value);
848 int prologue_offset = 0);
866 static_assert(
sizeof(
T) ==
kDoubleSize,
"Expect input size to be 8");
867 uint64_t int_val = base::bit_cast<uint64_t, T>(value);
869 uint32_t hi_32 = int_val >> 32;
870 uint32_t lo_32 =
static_cast<uint32_t
>(int_val);
874 }
else if (lo_32 == 0) {
875 llihf(scratch,
Operand(hi_32));
886 static_assert(
sizeof(
T) ==
kFloatSize,
"Expect input size to be 4");
887 uint32_t int_val = base::bit_cast<uint32_t, T>(value);
888 LoadF64(
result,
static_cast<uint64_t
>(int_val) << 32, scratch);
957 Label* return_label =
nullptr);
959 Register function,
int num_arguments,
962 Label* return_label =
nullptr);
965 int num_double_arguments,
968 Label* return_label =
nullptr);
970 Register function,
int num_reg_arguments,
int num_double_arguments,
973 Label* return_label =
nullptr);
1020 if (CpuFeatures::IsSupported(GENERAL_INSTR_EXT)) {
1021 int shiftAmount = (64 - rangeEnd) % 64;
1023 int startBit = 63 - rangeStart + rangeEnd;
1024 RotateInsertSelectBits(dst, src,
Operand(startBit),
Operand(endBit),
1028 ShiftRightU64(dst, src,
Operand(rangeEnd));
1029 else if (dst != src)
1031 int width = rangeStart - rangeEnd + 1;
1032 uint64_t
mask = (
static_cast<uint64_t
>(1) << width) - 1;
1040 ExtractBitRange(dst, src, bitNumber, bitNumber);
1046 RCBit rc = LeaveRC) {
1049 uintptr_t bit = (1L <<
start);
1051 while (bit && (
mask & bit) == 0) {
1058 while (bit && (
mask & bit)) {
1064 DCHECK(bit == 0 || (
mask & ((bit << 1) - 1)) == 0);
1066 ExtractBitRange(dst, src,
start,
end);
1071 ExtractBitRange(scratch, value, bitNumber, bitNumber);
1078 ExtractBitRange(scratch, value, rangeStart, rangeEnd);
1084 ExtractBitMask(scratch, value,
mask,
SetRC);
1089 if (is_uint12(value.offset())) {
1091 }
else if (is_int20(value.offset())) {
1115 if (
v8_flags.enable_slow_asserts) {
1143 bool load_constant_pool_pointer_reg =
false);
1149 if (bytes == 0)
return;
1156 Label* condition_met);
1178#ifdef V8_ENABLE_LEAPTIERING
1180 uint16_t argument_count);
1182#ifdef V8_ENABLE_WEBASSEMBLY
1183 void ResolveWasmCodePointer(
Register target);
1184 void CallWasmCodePointer(
Register target,
1206 uint8_t imm_lane_idx,
Register = r0);
1208 uint8_t imm_lane_idx,
Register = r0);
1214 uint8_t imm_lane_idx,
Register = r0);
1216 uint8_t imm_lane_idx,
Register scratch);
1218 uint8_t imm_lane_idx,
Register = r0);
1220 uint8_t imm_lane_idx,
Register scratch);
1300#define SIMD_SHIFT_LIST(V) \
1314#define PROTOTYPE_SIMD_SHIFT(name) \
1315 void name(Simd128Register dst, Simd128Register src1, Register src2, \
1316 Simd128Register scratch); \
1317 void name(Simd128Register dst, Simd128Register src1, const Operand& src2, \
1318 Register scratch1, Simd128Register scratch2);
1320#undef PROTOTYPE_SIMD_SHIFT
1321#undef SIMD_SHIFT_LIST
1323#define SIMD_UNOP_LIST(V) \
1330 V(F64x2NearestInt) \
1331 V(F64x2ConvertLowI32x4S) \
1332 V(F64x2ConvertLowI32x4U) \
1339 V(F32x4NearestInt) \
1341 V(I64x2SConvertI32x4Low) \
1342 V(I64x2SConvertI32x4High) \
1343 V(I64x2UConvertI32x4Low) \
1344 V(I64x2UConvertI32x4High) \
1348 V(I32x4SConvertI16x8Low) \
1349 V(I32x4SConvertI16x8High) \
1350 V(I32x4UConvertI16x8Low) \
1351 V(I32x4UConvertI16x8High) \
1354 V(I16x8SConvertI8x16Low) \
1355 V(I16x8SConvertI8x16High) \
1356 V(I16x8UConvertI8x16Low) \
1357 V(I16x8UConvertI8x16High) \
1365#define PROTOTYPE_SIMD_UNOP(name) \
1366 void name(Simd128Register dst, Simd128Register src);
1368#undef PROTOTYPE_SIMD_UNOP
1369#undef SIMD_UNOP_LIST
1371#define SIMD_BINOP_LIST(V) \
1426 V(I16x8RoundingAverageU) \
1438 V(I8x16RoundingAverageU) \
1444#define PROTOTYPE_SIMD_BINOP(name) \
1445 void name(Simd128Register dst, Simd128Register src1, Simd128Register src2);
1447#undef PROTOTYPE_SIMD_BINOP
1448#undef SIMD_BINOP_LIST
1450#define SIMD_EXT_MUL_LIST(V) \
1451 V(I64x2ExtMulLowI32x4S) \
1452 V(I64x2ExtMulHighI32x4S) \
1453 V(I64x2ExtMulLowI32x4U) \
1454 V(I64x2ExtMulHighI32x4U) \
1455 V(I32x4ExtMulLowI16x8S) \
1456 V(I32x4ExtMulHighI16x8S) \
1457 V(I32x4ExtMulLowI16x8U) \
1458 V(I32x4ExtMulHighI16x8U) \
1459 V(I16x8ExtMulLowI8x16S) \
1460 V(I16x8ExtMulHighI8x16S) \
1461 V(I16x8ExtMulLowI8x16U) \
1462 V(I16x8ExtMulHighI8x16U)
1464#define PROTOTYPE_SIMD_EXT_MUL(name) \
1465 void name(Simd128Register dst, Simd128Register src1, Simd128Register src2, \
1466 Simd128Register scratch);
1468#undef PROTOTYPE_SIMD_EXT_MUL
1469#undef SIMD_EXT_MUL_LIST
1471#define SIMD_ALL_TRUE_LIST(V) \
1477#define PROTOTYPE_SIMD_ALL_TRUE(name) \
1478 void name(Register dst, Simd128Register src, Register scratch1, \
1479 Simd128Register scratch2);
1481#undef PROTOTYPE_SIMD_ALL_TRUE
1482#undef SIMD_ALL_TRUE_LIST
1484#define SIMD_QFM_LIST(V) \
1490#define PROTOTYPE_SIMD_QFM(name) \
1491 void name(Simd128Register dst, Simd128Register src1, Simd128Register src2, \
1492 Simd128Register src3);
1494#undef PROTOTYPE_SIMD_QFM
1497#define SIMD_ADD_SUB_SAT_LIST(V) \
1507#define PROTOTYPE_SIMD_ADD_SUB_SAT(name) \
1508 void name(Simd128Register dst, Simd128Register src1, Simd128Register src2, \
1509 Simd128Register scratch1, Simd128Register scratch2);
1511#undef PROTOTYPE_SIMD_ADD_SUB_SAT
1512#undef SIMD_ADD_SUB_SAT_LIST
1514#define SIMD_EXT_ADD_PAIRWISE_LIST(V) \
1515 V(I32x4ExtAddPairwiseI16x8S) \
1516 V(I32x4ExtAddPairwiseI16x8U) \
1517 V(I16x8ExtAddPairwiseI8x16S) \
1518 V(I16x8ExtAddPairwiseI8x16U)
1520#define PROTOTYPE_SIMD_EXT_ADD_PAIRWISE(name) \
1521 void name(Simd128Register dst, Simd128Register src, \
1522 Simd128Register scratch1, Simd128Register scratch2);
1524#undef PROTOTYPE_SIMD_EXT_ADD_PAIRWISE
1525#undef SIMD_EXT_ADD_PAIRWISE_LIST
1531#if defined(V8_COMPRESS_POINTERS) || defined(V8_31BIT_SMIS_ON_64BIT_ARCH)
1592 CallRuntime(Runtime::FunctionForId(fid), num_arguments);
1612 template <
bool use_
unsigned_cmp = false>
1617 LoadMap(map, heap_object);
1618 CompareInstanceType<use_unsigned_cmp>(map, temp, type);
1632 template <
bool use_
unsigned_cmp = false>
1634 static_assert(Map::kInstanceTypeOffset < 4096);
1636 if (use_unsigned_cmp) {
1638 CmpU64(type_reg,
Operand(type));
1641 CmpS64(type_reg,
Operand(type));
1658 LoadRoot(r0, index);
1674 CompareTagged(src1, src2);
1679 bool builtin_exit_frame =
false);
1683 CompareRoot(with, index);
1689 CompareRoot(with, index);
1696 unsigned higher_limit);
1698 unsigned higher_limit,
Label* on_in_range);
1709 if (!
v8_flags.native_code_counters)
return;
1710 EmitIncrementCounter(counter, value, scratch1, scratch2);
1716 if (!
v8_flags.native_code_counters)
return;
1717 EmitDecrementCounter(counter, value, scratch1, scratch2);
1727 Label* stack_overflow);
1780 LoadNativeContextSlot(dst, Context::GLOBAL_PROXY_INDEX);
1797 bne(not_smi_label );
1800#if !defined(V8_COMPRESS_POINTERS) && !defined(V8_31BIT_SMIS_ON_64BIT_ARCH)
1806#if V8_TARGET_LITTLE_ENDIAN
1807#define SmiWordOffset(offset) (offset + kSystemPointerSize / 2)
1809#define SmiWordOffset(offset) offset
1839 template <
typename Field>
1841 int shift = Field::kShift;
1842 int mask = Field::kMask >> Field::kShift;
1843 if (base::bits::IsPowerOfTwo(
mask + 1)) {
1844 ExtractBitRange(dst, src, Field::kShift + Field::kSize - 1,
1846 }
else if (shift != 0) {
1847 ShiftLeftU64(dst, src,
Operand(shift));
1854 template <
typename Field>
1856 DecodeField<Field>(
reg,
reg);
1873 Label* flags_need_processing);
1912 int num_double_arguments);
1950 Register function_address,
1951 ExternalReference thunk_ref, Register thunk_arg,
1952 int slots_to_drop_on_return,
1956#define ACCESS_MASM(masm) masm->
static constexpr int kFixedSlotCountAboveFp
void LoadAndExtend32x2ULE(Simd128Register dst, const MemOperand &mem, Register scratch)
void I16x8DotI8x16S(Simd128Register dst, Simd128Register src1, Simd128Register src2, Simd128Register scratch)
void DivFloat32(DoubleRegister dst, const MemOperand &opnd, DoubleRegister scratch)
void F32x4UConvertI32x4(Simd128Register dst, Simd128Register src, Simd128Register scratch1, Register scratch2)
void LoadS32(Register dst, Register src)
void JumpIfRoot(Register with, RootIndex index, Label *if_equal)
void AssertFeedbackVector(Register object) NOOP_UNLESS_DEBUG_CODE
void Prologue(Register base, int prologue_offset=0)
void Abort(AbortReason reason)
void Push(Register src1, Register src2, Register src3, Register src4, Register src5)
void I32x4TruncSatF64x2SZero(Simd128Register dst, Simd128Register src, Simd128Register scratch)
void PushAll(RegList registers)
void MovToFloatParameters(DoubleRegister src1, DoubleRegister src2)
void MulHighS32(Register dst, Register src1, Register src2)
void ModS32(Register dst, Register src1, Register src2)
void F32x4ReplaceLane(Simd128Register dst, Simd128Register src1, DoubleRegister src2, uint8_t imm_lane_idx, Register scratch)
void NearestIntF32(DoubleRegister dst, DoubleRegister src)
void StoreLane8LE(Simd128Register src, const MemOperand &mem, int lane, Register scratch)
void LoadStackLimit(Register destination, StackLimitKind kind)
void ShiftRightU64(Register dst, Register src, Register val, const Operand &val2=Operand::Zero())
void SubU64(Register dst, const MemOperand &opnd)
void LoadReceiver(Register dest)
void StoreV128(Simd128Register src, const MemOperand &mem, Register scratch)
void And(Register dst, const MemOperand &opnd)
void MulHighU64(Register dst, Register src1, Register src2)
void Pop(Register src1, Register src2, Register src3)
void InitializeRootRegister()
void LoadTaggedField(const Register &destination, const MemOperand &field_operand, const Register &scratch=no_reg)
void Push(Tagged< TaggedIndex > index)
void SwapFloat32(MemOperand src, MemOperand dst, DoubleRegister scratch)
void CallJSFunction(Register function_object, uint16_t argument_count)
void AndP(Register dst, Register src, const Operand &opnd)
void S128Select(Simd128Register dst, Simd128Register src1, Simd128Register src2, Simd128Register mask)
void ShiftRightU32(Register dst, Register src, Register val, const Operand &val2=Operand::Zero())
void I32x4BitMask(Register dst, Simd128Register src, Register scratch1, Simd128Register scratch2)
void MulS32(Register dst, Register src1)
void AddU64(Register dst, int imm)
void StoreU8(Register src, const MemOperand &mem, Register scratch=r0)
void LoadF32AsF64(DoubleRegister dst, const MemOperand &opnd)
void SubS64(Register dst, Register src, const Operand &imm)
void LoadAndSplat64x2LE(Simd128Register dst, const MemOperand &mem, Register scratch)
void RecordWrite(Register object, Register slot_address, Register value, LinkRegisterStatus lr_status, SaveFPRegsMode save_fp, SmiCheck smi_check=SmiCheck::kInline)
void LoadV32ZeroLE(Simd128Register dst, const MemOperand &mem, Register scratch)
void ConvertDoubleToInt64(const Register dst, const DoubleRegister double_input, FPRoundingMode rounding_mode=kRoundToZero)
void TestCodeIsMarkedForDeoptimization(Register code, Register scratch)
void AtomicExchangeU8(Register addr, Register value, Register output, Register scratch)
void AssertMap(Register object) NOOP_UNLESS_DEBUG_CODE
void DecodeField(Register reg)
void JumpIfIsInRange(Register value, Register scratch, unsigned lower_limit, unsigned higher_limit, Label *on_in_range)
void MulHighU32(Register dst, Register src1, Register src2)
void I16x8ReplaceLane(Simd128Register dst, Simd128Register src1, Register src2, uint8_t imm_lane_idx, Register=r0)
int LeaveFrame(StackFrame::Type type, int stack_adjustment=0)
void ShiftLeftU32(Register dst, Register src, Register val, const Operand &val2=Operand::Zero())
void I16x8Q15MulRSatS(Simd128Register dst, Simd128Register src1, Simd128Register src2, Simd128Register scratch1, Simd128Register scratch2, Simd128Register scratch3)
void SubFloat32(DoubleRegister dst, const MemOperand &opnd, DoubleRegister scratch)
void CallRuntime(Runtime::FunctionId fid)
void XorP(Register dst, Register src)
void LoadF64LE(DoubleRegister dst, const MemOperand &opnd, Register scratch)
void LoadAndSplat16x8LE(Simd128Register dst, const MemOperand &me, Register scratch)
int CalculateStackPassedWords(int num_reg_arguments, int num_double_arguments)
int PushCallerSaved(SaveFPRegsMode fp_mode, Register scratch, Register exclusion1=no_reg, Register exclusion2=no_reg, Register exclusion3=no_reg)
void StoreTaggedField(const Register &value, const MemOperand &dst_field_operand, const Register &scratch=no_reg)
void SubS64(Register dst, const Operand &imm)
void Call(Address target, RelocInfo::Mode rmode, Condition cond=al)
void mov(Register dst, Register src)
void PopCommonFrame(Register marker_reg=no_reg)
void AddU32(Register dst, const MemOperand &opnd)
void RotateInsertSelectBits(Register dst, Register src, const Operand &startBit, const Operand &endBit, const Operand &shiftAmt, bool zeroBits)
void ConvertUnsignedIntToDouble(DoubleRegister dst, Register src)
void ConvertInt64ToFloat(DoubleRegister double_dst, Register src)
void MultiPopV128(DoubleRegList dregs, Register scratch, Register location=sp)
void Move(Register dst, Register src, Condition cond=al)
MemOperand StackLimitAsMemOperand(StackLimitKind kind)
int CallCFunction(Register function, int num_reg_arguments, int num_double_arguments, SetIsolateDataSlots set_isolate_data_slots=SetIsolateDataSlots::kYes, bool has_function_descriptor=ABI_USES_FUNCTION_DESCRIPTORS, Label *return_label=nullptr)
void I8x16UConvertI16x8(Simd128Register dst, Simd128Register src1, Simd128Register src2, Simd128Register scratch)
void StoreU16LE(Register src, const MemOperand &mem, Register scratch=r0)
void MulS64(Register dst, const Operand &opnd)
void DecodeField(Register dst, Register src)
void I16x8BitMask(Register dst, Simd128Register src, Register scratch1, Simd128Register scratch2)
void AssertFunction(Register object) NOOP_UNLESS_DEBUG_CODE
void CmpF32(DoubleRegister src1, const MemOperand &src2)
void I8x16GeU(Simd128Register dst, Simd128Register src1, Simd128Register src2, Simd128Register scratch)
void MulHighU32(Register dst, Register src1, const MemOperand &src2)
void LoadU32(Register dst, Register src)
void CmpU32(Register dst, const MemOperand &opnd)
void F32x4Splat(Simd128Register dst, Simd128Register src)
void AssertGeneratorObject(Register object) NOOP_UNLESS_DEBUG_CODE
static int CallSizeNotPredictableCodeSize(Address target, RelocInfo::Mode rmode, Condition cond=al)
void SubS64(Register dst, Register src1, Register src2)
void ConvertFloat32ToUnsignedInt32(const Register result, const DoubleRegister double_input, FPRoundingMode rounding_mode=kRoundToZero)
void StoreReceiver(Register rec)
void JumpIfNotRoot(Register with, RootIndex index, Label *if_not_equal)
void MulS64(Register dst, Register src)
void Pop(Register src1, Register src2, Register src3, Register src4)
void MovFloatToInt(Register dst, DoubleRegister src)
void SwapSimd128(MemOperand src, MemOperand dst, Simd128Register scratch)
void AddS32(Register dst, Register src)
void CompareLogicalChar(const MemOperand &opnd1, const MemOperand &opnd2, const Operand &length)
void ModS32(Register dst, Register src1, const MemOperand &src2)
void V128AnyTrue(Register dst, Simd128Register src, Register scratch)
void LoadEntryFromBuiltin(Builtin builtin, Register destination)
void OrP(Register dst, const Operand &opnd)
void LoadU32LE(Register dst, const MemOperand &opnd, Register scratch=no_reg)
void DivFloat64(DoubleRegister dst, const MemOperand &opnd, DoubleRegister scratch)
void F32x4SConvertI32x4(Simd128Register dst, Simd128Register src, Simd128Register scratch1, Register scratch2)
void Or(Register dst, const Operand &opnd)
void PushStandardFrame(Register function_reg)
void CountTrailingZerosU32(Register dst, Register src, Register scratch_pair=r0)
void LoadAndSub32(Register dst, Register src, const MemOperand &opnd)
void AtomicCmpExchangeHelper(Register addr, Register output, Register old_value, Register new_value, int start, int end, int shift_amount, int offset, Register temp0, Register temp1)
void AddS64(const MemOperand &opnd, const Operand &imm)
void SubF32(DoubleRegister dst, DoubleRegister lhs, DoubleRegister rhs)
void CmpF64(DoubleRegister src1, const MemOperand &src2)
void TestIfSmi(MemOperand value)
void Or(Register dst, Register src1, Register src2)
void LoadLane16LE(Simd128Register dst, const MemOperand &mem, int lane, Register scratch)
void ExtractBitRange(Register dst, Register src, int rangeStart, int rangeEnd)
void CompareRoot(Register obj, RootIndex index)
void MulHighS32(Register dst, Register src1, const Operand &src2)
void MovIntToFloat(DoubleRegister dst, Register src)
void CmpS64(Register dst, const MemOperand &opnd)
void AddS32(Register dst, const Operand &imm)
void LoadU64LE(Register dst, const MemOperand &mem, Register scratch=no_reg)
void StoreU32LE(Register src, const MemOperand &mem, Register scratch=no_reg)
void ShiftRightS32(Register dst, Register src, Register shift, const Operand &val2=Operand::Zero())
void I64x2ReplaceLane(Simd128Register dst, Simd128Register src1, Register src2, uint8_t imm_lane_idx, Register=r0)
void TestIfInt32(Register value)
void StoreU32(Register src, const MemOperand &mem, Register scratch=no_reg)
void Move(Register dst, Tagged< Smi > smi)
void LoadAndExtend32x2SLE(Simd128Register dst, const MemOperand &mem, Register scratch)
void mov(Register dst, const Operand &src)
void Move(Register dst, const MemOperand &src)
void RecordWriteField(Register object, int offset, Register value, Register slot_address, LinkRegisterStatus lr_status, SaveFPRegsMode save_fp, SmiCheck smi_check=SmiCheck::kInline)
void SubS32(Register dst, const Operand &imm)
int CallCFunction(ExternalReference function, int num_reg_arguments, int num_double_arguments, SetIsolateDataSlots set_isolate_data_slots=SetIsolateDataSlots::kYes, bool has_function_descriptor=ABI_USES_FUNCTION_DESCRIPTORS, Label *return_label=nullptr)
void I32x4GeU(Simd128Register dst, Simd128Register src1, Simd128Register src2, Simd128Register scratch)
void Call(Handle< Code > code, RelocInfo::Mode rmode=RelocInfo::CODE_TARGET, Condition cond=al)
void ExtractBit(Register dst, Register src, uint32_t bitNumber)
void StoreReturnAddressAndCall(Register target)
void CompareObjectType(Register heap_object, Register map, Register type_reg, InstanceType type)
void LeaveExitFrame(Register scratch)
void StackOverflowCheck(Register num_args, Register scratch, Label *stack_overflow)
void DivU32(Register dst, Register src1, const MemOperand &src2)
void AssertFeedbackVector(Register object, Register scratch) NOOP_UNLESS_DEBUG_CODE
void CallBuiltinByIndex(Register builtin_index, Register target)
void I16x8Splat(Simd128Register dst, Register src)
void SubS32(Register dst, const MemOperand &opnd)
void LoadRootRelative(Register destination, int32_t offset) final
void AtomicCmpExchangeU16(Register addr, Register output, Register old_value, Register new_value, Register temp0, Register temp1)
void JumpIfSmi(Register value, Label *smi_label)
void TruncF64(DoubleRegister dst, DoubleRegister src)
void LoadRoot(Register destination, RootIndex index, Condition cond)
void LoadPC(Register dst)
static int ActivationFrameAlignment()
void BranchRelativeOnIdxHighP(Register dst, Register inc, Label *L)
void SubS32(Register dst, Register src, const Operand &imm)
void Push(Handle< HeapObject > handle)
void PrepareCallCFunction(int num_reg_arguments, Register scratch)
void CallCodeObject(Register code_object)
void CallEphemeronKeyBarrier(Register object, Register slot_address, SaveFPRegsMode fp_mode)
void LoadLane64LE(Simd128Register dst, const MemOperand &mem, int lane, Register scratch)
void LoadTaggedSignedField(Register destination, MemOperand field_operand)
void CmpTagged(const Register &src1, const Register &src2)
void CmpS32(Register dst, const Operand &opnd)
void ModU64(Register dst, Register src1, Register src2)
void LoadS8(Register dst, const MemOperand &opnd)
void AssertUnreachable(AbortReason reason) NOOP_UNLESS_DEBUG_CODE
void AddU32(Register dst, const Operand &imm)
void I32x4UConvertF32x4(Simd128Register dst, Simd128Register src, Simd128Register scratch1, Register scratch2)
void ConvertFloat32ToUnsignedInt64(const Register result, const DoubleRegister double_input, FPRoundingMode rounding_mode=kRoundToZero)
void AndP(Register dst, const Operand &opnd)
void ShiftLeftU64(Register dst, Register src, const Operand &val)
void I32x4ExtractLane(Register dst, Simd128Register src, uint8_t imm_lane_idx, Register=r0)
void LoadCompressedMap(Register destination, Register object)
void SwapDouble(DoubleRegister src, DoubleRegister dst, DoubleRegister scratch)
void LoadRootRegisterOffset(Register destination, intptr_t offset) final
void SubS64(Register dst, Register src)
void CanonicalizeNaN(const DoubleRegister value)
void Branch(Condition c, const Operand &opnd)
void PopAll(DoubleRegList registers, int stack_slot_size=kDoubleSize)
void SubU32(Register dst, const MemOperand &opnd)
void AssertSmi(Register object) NOOP_UNLESS_DEBUG_CODE
void LoadCodeInstructionStart(Register destination, Register code_object, CodeEntrypointTag tag=kDefaultCodeEntrypointTag)
void TryInlineTruncateDoubleToI(Register result, DoubleRegister double_input, Label *done)
void Xor(Register dst, const MemOperand &opnd)
void SmiUntag(Register dst, Register src)
void LoadAndExtend8x8SLE(Simd128Register dst, const MemOperand &mem, Register scratch)
void AddU64(Register dst, const MemOperand &opnd)
void Xor(Register dst, const Operand &opnd)
void I32x4SConvertF32x4(Simd128Register dst, Simd128Register src, Simd128Register scratch1, Register scratch2)
void LoadFeedbackVectorFlagsAndJumpIfNeedsProcessing(Register flags, Register feedback_vector, CodeKind current_code_kind, Label *flags_need_processing)
void MulS64(Register dst, Register src1, Register src2)
void LoadFeedbackVector(Register dst, Register closure, Register scratch, Label *fbv_undef)
void DivF64(DoubleRegister dst, DoubleRegister lhs, DoubleRegister rhs)
void AddU64(Register dst, Register src)
void CmpS32(Register dst, const MemOperand &opnd)
void EmitIncrementCounter(StatsCounter *counter, int value, Register scratch1, Register scratch2)
void I32x4DotI16x8S(Simd128Register dst, Simd128Register src1, Simd128Register src2, Simd128Register scratch)
void ModU32(Register dst, Register src1, Register src2)
void AndP(Register dst, Register src1, Register src2)
void StoreV128LE(Simd128Register src, const MemOperand &mem, Register scratch1, Register scratch2)
void AddS64(Register dst, Register src1, Register src2)
void SwapDouble(MemOperand src, MemOperand dst, DoubleRegister scratch)
void SwapFloat32(DoubleRegister src, DoubleRegister dst, DoubleRegister scratch)
void InvokeFunctionCode(Register function, Register new_target, Register expected_parameter_count, Register actual_parameter_count, InvokeType type)
void Mul32WithOverflowIfCCUnequal(Register dst, Register src1, const Operand &src2)
void CmpAndSwap64(Register old_val, Register new_val, const MemOperand &opnd)
void ExtractBitMask(Register dst, Register src, uintptr_t mask, RCBit rc=LeaveRC)
void ConvertUnsignedIntToFloat(DoubleRegister dst, Register src)
void StoreLane16LE(Simd128Register src, const MemOperand &mem, int lane, Register scratch)
int RequiredStackSizeForCallerSaved(SaveFPRegsMode fp_mode, Register exclusion1=no_reg, Register exclusion2=no_reg, Register exclusion3=no_reg) const
void DoubleMax(DoubleRegister result_reg, DoubleRegister left_reg, DoubleRegister right_reg)
void I64x2ExtractLane(Register dst, Simd128Register src, uint8_t imm_lane_idx, Register=r0)
void MultiPopDoubles(DoubleRegList dregs, Register location=sp)
void Jump(const ExternalReference &reference)
void LoadF32(DoubleRegister result, T value, Register scratch)
void ShiftLeftU64(Register dst, Register src, Register val, const Operand &val2=Operand::Zero())
void StoreF64LE(DoubleRegister src, const MemOperand &opnd, Register scratch)
MemOperand ExternalReferenceAsOperand(IsolateFieldId id)
void IsObjectType(Register object, Register scratch1, Register scratch2, InstanceType type)
void InvokePrologue(Register expected_parameter_count, Register actual_parameter_count, InvokeType type)
void DivS32(Register dst, Register src1, Register src2)
void LoadS32LE(Register dst, const MemOperand &opnd, Register scratch=no_reg)
void AddS64(Register dst, Register src)
void EnforceStackAlignment()
void Push(Register src1, Register src2, Register src3)
void AssertConstructor(Register object, Register scratch) NOOP_UNLESS_DEBUG_CODE
void AddF64(DoubleRegister dst, DoubleRegister lhs, DoubleRegister rhs)
void I16x8ExtractLaneS(Register dst, Simd128Register src, uint8_t imm_lane_idx, Register scratch)
void ModS64(Register dst, Register src1, const MemOperand &src2)
void StoreF32LE(DoubleRegister src, const MemOperand &opnd, Register scratch)
void LoadOnConditionP(Condition cond, Register dst, Register src)
void MovDoubleToInt64(Register dst, DoubleRegister src)
void PushAll(DoubleRegList registers, int stack_slot_size=kDoubleSize)
void ConvertFloat32ToInt32(const Register result, const DoubleRegister double_input, FPRoundingMode rounding_mode)
void ReplaceClosureCodeWithOptimizedCode(Register optimized_code, Register closure, Register scratch1, Register slot_address)
void I8x16Shuffle(Simd128Register dst, Simd128Register src1, Simd128Register src2, uint64_t high, uint64_t low, Register scratch1, Register scratch2, Simd128Register scratch3)
void Sqrt(DoubleRegister result, DoubleRegister input)
void AssertZeroExtended(Register reg) NOOP_UNLESS_DEBUG_CODE
void AddS64(Register dst, Register src, int32_t imm)
void EnterExitFrame(Register scratch, int stack_space, StackFrame::Type frame_type)
void ConvertDoubleToUnsignedInt32(const Register dst, const DoubleRegister double_input, FPRoundingMode rounding_mode=kRoundToZero)
void And(Register dst, Register src1, Register src2)
void Zero(const MemOperand &dest1, const MemOperand &dest2)
void LoadAndTest32(Register dst, const MemOperand &opnd)
void SwapP(MemOperand src, MemOperand dst, Register scratch_0, Register scratch_1)
void SetRoundingMode(FPRoundingMode RN)
void BailoutIfDeoptimized(Register scratch)
void Check(Condition cond, AbortReason reason, CRegister cr=cr7)
void I32x4DotI8x16AddS(Simd128Register dst, Simd128Register src1, Simd128Register src2, Simd128Register src3, Simd128Register scratch1, Simd128Register scratch2)
void LoadU8(Register dst, const MemOperand &opnd)
void And(Register dst, const Operand &opnd)
void SmiTag(Register dst, Register src)
void CallJSEntry(Register target)
void DivU64(Register dst, Register src1, const MemOperand &src2)
void SubS64(Register dst, const MemOperand &opnd)
void SwapSimd128(Simd128Register src, MemOperand dst, Simd128Register scratch)
MemOperand ExternalReferenceAsOperand(ExternalReference reference, Register scratch)
void And(Register dst, Register src)
void Zero(const MemOperand &dest)
void IncrementCounter(StatsCounter *counter, int value, Register scratch1, Register scratch2)
void AddU64(Register dst, Register src1, Register src2)
void I16x8ExtractLaneU(Register dst, Simd128Register src, uint8_t imm_lane_idx, Register=r0)
void SwapP(Register src, MemOperand dst, Register scratch)
void PushCommonFrame(Register marker_reg=no_reg)
void MovFromFloatParameter(DoubleRegister dst)
void LoadAndSub64(Register dst, Register src, const MemOperand &opnd)
void JumpIfEqual(Register x, int32_t y, Label *dest)
void Not32(Register dst, Register src=no_reg)
void SwapDouble(DoubleRegister src, MemOperand dst, DoubleRegister scratch)
void GetLabelAddress(Register dst, Label *target)
void LoadU16(Register dst, const MemOperand &opnd)
void LoadGlobalProxy(Register dst)
void MulHighS64(Register dst, Register src1, Register src2)
void Assert(Condition cond, AbortReason reason, CRegister cr=cr7) NOOP_UNLESS_DEBUG_CODE
void DecompressTaggedSigned(Register destination, MemOperand field_operand)
void MulHighS64(Register dst, Register src1, const MemOperand &src2)
void AddS32(Register dst, const MemOperand &opnd)
void StoreLane32LE(Simd128Register src, const MemOperand &mem, int lane, Register scratch)
void SubS32(Register dst, Register src1, Register src2)
void Move(Register dst, Handle< HeapObject > source, RelocInfo::Mode rmode=RelocInfo::FULL_EMBEDDED_OBJECT)
void AddS32(Register dst, Register src1, Register src2)
void JumpToExternalReference(const ExternalReference &builtin, bool builtin_exit_frame=false)
void ConvertInt64ToDouble(DoubleRegister double_dst, Register src)
Operand ClearedValue() const
void MulF32(DoubleRegister dst, DoubleRegister lhs, DoubleRegister rhs)
void LoadS16(Register dst, Register src)
void LoadF64(DoubleRegister dst, const MemOperand &opnd)
void SwapSimd128(Simd128Register src, Simd128Register dst, Simd128Register scratch)
void DivU32(Register dst, Register src1, Register src2)
void DivS64(Register dst, Register src1, Register src2)
void I32x4Splat(Simd128Register dst, Register src)
void InvokeFunctionWithNewTarget(Register function, Register new_target, Register actual_parameter_count, InvokeType type)
void MulF64(DoubleRegister dst, DoubleRegister lhs, DoubleRegister rhs)
void MovToFloatParameter(DoubleRegister src)
void Jump(Register target, Condition cond=al)
void BindExceptionHandler(Label *label)
void CmpS64(Register src1, Register src2)
void LoadAndSplat8x16LE(Simd128Register dst, const MemOperand &mem, Register scratch)
void FloatMin(DoubleRegister result_reg, DoubleRegister left_reg, DoubleRegister right_reg)
void MultiPushF64OrV128(DoubleRegList dregs, Register scratch, Register location=sp)
void ConvertUnsignedInt64ToDouble(DoubleRegister double_dst, Register src)
void ClearRightImm(Register dst, Register src, const Operand &val)
void MovToFloatResult(DoubleRegister src)
void LoadAndTest32(Register dst, Register src)
void CountTrailingZerosU64(Register dst, Register src, Register scratch_pair=r0)
void PushRoot(RootIndex index)
void MovInt64ToDouble(DoubleRegister dst, Register src)
void Pop(Register src1, Register src2)
void Switch(Register scrach, Register reg, int case_base_value, Label **labels, int num_labels)
void EnterFrame(StackFrame::Type type, bool load_constant_pool_pointer_reg=false)
void InvokeFunction(Register function, Register expected_parameter_count, Register actual_parameter_count, InvokeType type)
void TestIfSmi(Register value)
void StubPrologue(StackFrame::Type type, Register base=no_reg, int prologue_offset=0)
void TruncateDoubleToI(Isolate *isolate, Zone *zone, Register result, DoubleRegister double_input, StubCallMode stub_mode)
void Popcnt32(Register dst, Register src)
void CmpS64(Register dst, const Operand &opnd)
void SwapP(Register src, Register dst, Register scratch)
void ShiftRightU32(Register dst, Register src, const Operand &val)
void CompareRange(Register value, Register scratch, unsigned lower_limit, unsigned higher_limit)
void S128Const(Simd128Register dst, uint64_t high, uint64_t low, Register scratch1, Register scratch2)
void JumpCodeObject(Register code_object, JumpMode jump_mode=JumpMode::kJump)
void CmpU32(Register src1, Register src2)
void PushArray(Register array, Register size, Register scratch, Register scratch2, PushArrayOrder order=kNormal)
void DecrementCounter(StatsCounter *counter, int value, Register scratch1, Register scratch2)
void OrP(Register dst, Register src1, Register src2)
void I64x2Splat(Simd128Register dst, Register src)
void LoadLane32LE(Simd128Register dst, const MemOperand &mem, int lane, Register scratch)
void I8x16ExtractLaneU(Register dst, Simd128Register src, uint8_t imm_lane_idx, Register=r0)
void SwapFloat32(DoubleRegister src, MemOperand dst, DoubleRegister scratch)
void StoreLane64LE(Simd128Register src, const MemOperand &mem, int lane, Register scratch)
void MulHighS32(Register dst, Register src1, const MemOperand &src2)
void BranchOnCount(Register r1, Label *l)
void JumpIfCodeIsTurbofanned(Register code, Register scratch, Label *if_turbofanned)
void EmitDecrementCounter(StatsCounter *counter, int value, Register scratch1, Register scratch2)
void LoadU8(Register dst, Register src)
void ModU64(Register dst, Register src1, const MemOperand &src2)
void MulS64(Register dst, const MemOperand &opnd)
void DivU64(Register dst, Register src1, Register src2)
void LoadFromConstantsTable(Register destination, int constant_index) final
void SmiUntag(Register reg)
void AddU32(Register dst, Register src1, Register src2)
MemOperand EntryFromBuiltinAsOperand(Builtin builtin)
void SubU32(Register dst, Register src1, Register src2)
void StoreU16(Register src, const MemOperand &mem, Register scratch=r0)
void F64x2ReplaceLane(Simd128Register dst, Simd128Register src1, DoubleRegister src2, uint8_t imm_lane_idx, Register scratch)
void CompareObjectTypeRange(Register heap_object, Register map, Register type_reg, Register scratch, InstanceType lower_limit, InstanceType higher_limit)
void ConvertDoubleToInt32(const Register dst, const DoubleRegister double_input, FPRoundingMode rounding_mode=kRoundToZero)
void AssertNotSmi(Register object) NOOP_UNLESS_DEBUG_CODE
void CeilF32(DoubleRegister dst, DoubleRegister src)
void ConvertIntToDouble(DoubleRegister dst, Register src)
void ComputeCodeStartAddress(Register dst)
void MaybeSaveRegisters(RegList registers)
void LoadV128LE(DoubleRegister dst, const MemOperand &mem, Register scratch0, Register scratch1)
void AllocateStackSpace(int bytes)
void DivS32(Register dst, Register src1, const MemOperand &src2)
void LoadTaggedRoot(Register destination, RootIndex index)
void SubF64(DoubleRegister dst, DoubleRegister lhs, DoubleRegister rhs)
DISALLOW_IMPLICIT_CONSTRUCTORS(MacroAssembler)
void FloorF64(DoubleRegister dst, DoubleRegister src)
void LoadPositive32(Register result, Register input)
void LoadPositiveP(Register result, Register input)
void CompareInstanceType(Register map, Register type_reg, InstanceType type)
void JumpIfNotSmi(Register value, Label *not_smi_label)
void MultiPush(RegList regs, Register location=sp)
void AddF32(DoubleRegister dst, DoubleRegister lhs, DoubleRegister rhs)
void ModU32(Register dst, Register src1, const MemOperand &src2)
void I32x4ReplaceLane(Simd128Register dst, Simd128Register src1, Register src2, uint8_t imm_lane_idx, Register=r0)
void SmiToInt32(Register smi)
void JumpJSFunction(Register function_object, JumpMode jump_mode=JumpMode::kJump)
void LoadU16LE(Register dst, const MemOperand &opnd)
void CountLeadingZerosU32(Register dst, Register src, Register scratch_pair=r0)
void ShiftRightS32(Register dst, Register src, const Operand &val)
void CheckDebugHook(Register fun, Register new_target, Register expected_parameter_count, Register actual_parameter_count)
void LoadAndExtend8x8ULE(Simd128Register dst, const MemOperand &mem, Register scratch)
void Jump(intptr_t target, RelocInfo::Mode rmode, Condition cond=al)
void AtomicExchangeHelper(Register addr, Register value, Register output, int start, int end, int shift_amount, int offset, Register scratch)
void F64x2PromoteLowF32x4(Simd128Register dst, Simd128Register src, Simd128Register scratch1, Register scratch2, Register scratch3, Register scratch4)
void Sqrt(DoubleRegister result, const MemOperand &input)
void TestBitRange(Register value, int rangeStart, int rangeEnd, Register scratch=r0)
void LoadAndExtend16x4ULE(Simd128Register dst, const MemOperand &mem, Register scratch)
void push(DoubleRegister src)
void ShiftLeftU32(Register dst, Register src, const Operand &val)
Condition LoadFeedbackVectorFlagsAndCheckIfNeedsProcessing(Register flags, Register feedback_vector, CodeKind current_code_kind)
void LoadAndTestP(Register dst, const MemOperand &opnd)
int CallCFunction(ExternalReference function, int num_arguments, SetIsolateDataSlots set_isolate_data_slots=SetIsolateDataSlots::kYes, bool has_function_descriptor=ABI_USES_FUNCTION_DESCRIPTORS, Label *return_label=nullptr)
void LoadF32LE(DoubleRegister dst, const MemOperand &opnd, Register scratch)
void CallRuntime(const Runtime::Function *f, int num_arguments)
void LoadWeakValue(Register out, Register in, Label *target_if_cleared)
void CallBuiltin(Builtin builtin, Condition cond=al)
void Popcnt64(Register dst, Register src)
void SubFloat64(DoubleRegister dst, const MemOperand &opnd, DoubleRegister scratch)
void SubS32(Register dst, Register src, int32_t imm)
void ConvertUnsignedInt64ToFloat(DoubleRegister double_dst, Register src)
void Pop(Register src1, Register src2, Register src3, Register src4, Register src5)
void F32x4ExtractLane(DoubleRegister dst, Simd128Register src, uint8_t imm_lane_idx, Register=r0)
void CanonicalizeNaN(const DoubleRegister dst, const DoubleRegister src)
void I16x8UConvertI32x4(Simd128Register dst, Simd128Register src1, Simd128Register src2, Simd128Register scratch)
void I16x8SConvertI32x4(Simd128Register dst, Simd128Register src1, Simd128Register src2)
void I8x16BitMask(Register dst, Simd128Register src, Register scratch1, Register scratch2, Simd128Register scratch3)
void GenerateTailCallToReturnedCode(Runtime::FunctionId function_id)
void LoadAndSplat32x4LE(Simd128Register dst, const MemOperand &mem, Register scratch)
void StoreF64(DoubleRegister dst, const MemOperand &opnd)
void I64x2BitMask(Register dst, Simd128Register src, Register scratch1, Simd128Register scratch2)
void StoreMultipleP(Register dst1, Register dst2, const MemOperand &mem)
void StoreU64LE(Register src, const MemOperand &mem, Register scratch=no_reg)
void AssertJSAny(Register object, Register map_tmp, Register tmp, AbortReason abort_reason) NOOP_UNLESS_DEBUG_CODE
void Push(Tagged< Smi > smi)
void FloorF32(DoubleRegister dst, DoubleRegister src)
void LoadSmiLiteral(Register dst, Tagged< Smi > smi)
void Xor(Register dst, Register src)
void Cmp(Register dst, int32_t src)
void DivS64(Register dst, Register src1, const MemOperand &src2)
void IncrementalMarkingRecordWriteHelper(Register object, Register value, Register address)
void DivF32(DoubleRegister dst, DoubleRegister lhs, DoubleRegister rhs)
void F32x4DemoteF64x2Zero(Simd128Register dst, Simd128Register src, Simd128Register scratch1, Register scratch2, Register scratch3, Register scratch4)
void AssertFeedbackCell(Register object, Register scratch) NOOP_UNLESS_DEBUG_CODE
void OrP(Register dst, Register src)
void Or(Register dst, Register src)
void CallForDeoptimization(Builtin target, int deopt_id, Label *exit, DeoptimizeKind kind, Label *ret, Label *jump_deoptimization_entry_label)
void Xor(Register dst, Register src1, Register src2)
void CountLeadingZerosU64(Register dst, Register src, Register scratch_pair=r0)
void CmpSmiLiteral(Register src1, Tagged< Smi > smi, Register scratch)
void DropArgumentsAndPushNewReceiver(Register argc, Register receiver)
void CompareTagged(Register src1, T src2)
void JumpIfCodeIsMarkedForDeoptimization(Register code, Register scratch, Label *if_marked_for_deoptimization)
void LoadF32(DoubleRegister dst, const MemOperand &opnd)
void LoadMultipleW(Register dst1, Register dst2, const MemOperand &mem)
void Or(Register dst, const MemOperand &opnd)
void NotP(Register dst, Register src=no_reg)
void AllocateStackSpace(Register bytes)
void LoadEntryFromBuiltinIndex(Register builtin_index, Register target)
void ConvertDoubleToUnsignedInt64(const Register dst, const DoubleRegister double_input, FPRoundingMode rounding_mode=kRoundToZero)
void MoveChar(const MemOperand &opnd1, const MemOperand &opnd2, const Operand &length)
void AddFloat32(DoubleRegister dst, const MemOperand &opnd, DoubleRegister scratch)
void LoadAndExtend16x4SLE(Simd128Register dst, const MemOperand &mem, Register scratch)
void MulHighU32(Register dst, Register src1, const Operand &src2)
void SmiToInt32(Register dst, Register src)
void XorP(Register dst, Register src, const Operand &opnd)
void RestoreFrameStateForTailCall()
void StoreU64(Register src, const MemOperand &mem, Register scratch=no_reg)
void MulFloat64(DoubleRegister dst, const MemOperand &opnd, DoubleRegister scratch)
void MultiPop(RegList regs, Register location=sp)
void SubS64(Register dst, Register src, int32_t imm)
void OrP(Register dst, const MemOperand &opnd)
void LoadS16LE(Register dst, const MemOperand &opnd)
void Move(DoubleRegister dst, DoubleRegister src)
void AddFloat64(DoubleRegister dst, const MemOperand &opnd, DoubleRegister scratch)
void LoadMultipleP(Register dst1, Register dst2, const MemOperand &mem)
void ExclusiveOrChar(const MemOperand &opnd1, const MemOperand &opnd2, const Operand &length)
void JumpIfLessThan(Register x, int32_t y, Label *dest)
void Push(Register src1, Register src2, Register src3, Register src4)
void AddS64(Register dst, Register src, const Operand &imm)
void AssertBoundFunction(Register object) NOOP_UNLESS_DEBUG_CODE
void CeilF64(DoubleRegister dst, DoubleRegister src)
void MulS32(Register dst, const Operand &src1)
void CmpU32(Register src1, const Operand &opnd)
void TestBitMask(Register value, uintptr_t mask, Register scratch=r0)
int PopCallerSaved(SaveFPRegsMode fp_mode, Register scratch, Register exclusion1=no_reg, Register exclusion2=no_reg, Register exclusion3=no_reg)
void SmiTag(Register reg)
void XorP(Register dst, const Operand &opnd)
void Not64(Register dst, Register src=no_reg)
void AddU64(Register dst, const Operand &imm)
void SubS32(Register dst, Register src)
void LoadS32(Register dst, const MemOperand &opnd, Register scratch=no_reg)
void CmpU64(Register dst, const MemOperand &opnd)
void LoadS8(Register dst, Register src)
void CmpU64(Register src1, Register src2)
void I16x8GeU(Simd128Register dst, Simd128Register src1, Simd128Register src2, Simd128Register scratch)
void CompareInstanceTypeRange(Register map, Register type_reg, Register scratch, InstanceType lower_limit, InstanceType higher_limit)
void F64x2ExtractLane(DoubleRegister dst, Simd128Register src, uint8_t imm_lane_idx, Register=r0)
void OptimizeCodeOrTailCallOptimizedCodeSlot(Register flags, Register feedback_vector)
void pop(DoubleRegister dst)
void LoadIsolateField(Register dst, IsolateFieldId id)
void LoadU64(Register dst, const MemOperand &mem, Register scratch=no_reg)
void Mul32WithOverflowIfCCUnequal(Register dst, Register src1, const MemOperand &src2)
void ShiftRightU64(Register dst, Register src, const Operand &val)
void MaybeRestoreRegisters(RegList registers)
void CallRecordWriteStub(Register object, Register slot_address, SaveFPRegsMode fp_mode, StubCallMode mode=StubCallMode::kCallBuiltinPointer)
void StoreF32(DoubleRegister dst, const MemOperand &opnd)
void ConvertFloat32ToInt64(const Register dst, const DoubleRegister double_input, FPRoundingMode rounding_mode=kRoundToZero)
void AddS64(Register dst, const Operand &imm)
void Call(Register target)
void MulS32(Register dst, const MemOperand &src1)
void CmpF64(DoubleRegister src1, DoubleRegister src2)
void PrepareCallCFunction(int num_reg_arguments, int num_double_registers, Register scratch)
void LoadF64(DoubleRegister result, T value, Register scratch)
void TryLoadOptimizedOsrCode(Register scratch_and_result, CodeKind min_opt_level, Register feedback_vector, FeedbackSlot slot, Label *on_result, Label::Distance distance)
void Jump(Address target, RelocInfo::Mode rmode, Condition cond=al)
void ShiftRightS64(Register dst, Register src, const Operand &val)
void I8x16Splat(Simd128Register dst, Register src)
void Drop(Register count, Register scratch=r0)
void I8x16ReplaceLane(Simd128Register dst, Simd128Register src1, Register src2, uint8_t imm_lane_idx, Register=r0)
void AssertUndefinedOrAllocationSite(Register object, Register scratch) NOOP_UNLESS_DEBUG_CODE
void Jump(Handle< Code > code, RelocInfo::Mode rmode, Condition cond=al)
void Move(Register dst, ExternalReference reference)
void CompareTaggedRoot(Register obj, RootIndex index)
void LoadAndTestP(Register dst, Register src)
void FloatMax(DoubleRegister result_reg, DoubleRegister left_reg, DoubleRegister right_reg)
void F64x2Splat(Simd128Register dst, Simd128Register src)
void ShiftRightS64(Register dst, Register src, Register shift, const Operand &val2=Operand::Zero())
void StoreMultipleW(Register dst1, Register dst2, const MemOperand &mem)
void ConvertIntToFloat(DoubleRegister dst, Register src)
void MultiPushV128(DoubleRegList dregs, Register scratch, Register location=sp)
void OrP(Register dst, Register src, const Operand &opnd)
void NearestIntF64(DoubleRegister dst, DoubleRegister src)
void LoadU16(Register dst, Register src)
void SmiUntagField(Register dst, const MemOperand &src)
void PopAll(RegList registers)
void TruncF32(DoubleRegister dst, DoubleRegister src)
void DecompressTagged(const Register &destination, Tagged_t immediate)
void MulHighU64(Register dst, Register src1, const MemOperand &src2)
void DecompressTagged(Register destination, Register source)
void DecompressTagged(Register destination, MemOperand field_operand)
Condition CheckSmi(Register src)
void DecompressTaggedSigned(Register destination, Register src)
void AddS32(Register dst, Register src, int32_t imm)
void StoreRootRelative(int32_t offset, Register value) final
void DoubleMin(DoubleRegister result_reg, DoubleRegister left_reg, DoubleRegister right_reg)
void Push(Register src1, Register src2)
void CmpF32(DoubleRegister src1, DoubleRegister src2)
void StoreU64(const MemOperand &mem, const Operand &opnd, Register scratch=no_reg)
void CmpU64(Register src1, const Operand &opnd)
void I64x2Mul(Simd128Register dst, Simd128Register src1, Simd128Register src2, Register scratch1, Register scratch2, Register scratch3)
void LoadMap(Register destination, Register object)
void MovFromFloatResult(DoubleRegister dst)
void CmpP(Register src1, T src2)
void SmiUntag(Register dst, const MemOperand &src)
void CmpAndSwap(Register old_val, Register new_val, const MemOperand &opnd)
void TailCallRuntime(Runtime::FunctionId fid)
void MultiPopF64OrV128(DoubleRegList dregs, Register scratch, Register location=sp)
void XorP(Register dst, const MemOperand &opnd)
void SmiToPtrArrayOffset(Register dst, Register src)
void CallRuntime(Runtime::FunctionId fid, int num_arguments)
void TestBit(Register value, int bitNumber, Register scratch=r0)
void LoadNativeContextSlot(Register dst, int index)
void I8x16SConvertI16x8(Simd128Register dst, Simd128Register src1, Simd128Register src2)
void CallRecordWriteStubSaveRegisters(Register object, Register slot_address, SaveFPRegsMode fp_mode, StubCallMode mode=StubCallMode::kCallBuiltinPointer)
void AtomicCmpExchangeU8(Register addr, Register output, Register old_value, Register new_value, Register temp0, Register temp1)
void AddS32(const MemOperand &opnd, const Operand &imm)
int CallCFunction(Register function, int num_arguments, SetIsolateDataSlots set_isolate_data_slots=SetIsolateDataSlots::kYes, bool has_function_descriptor=ABI_USES_FUNCTION_DESCRIPTORS, Label *return_label=nullptr)
void MulS32(Register dst, Register src1, Register src2)
void TailCallBuiltin(Builtin builtin, Condition cond=al)
void XorP(Register dst, Register src1, Register src2)
void AddS64(Register dst, const MemOperand &opnd)
void MulFloat32(DoubleRegister dst, const MemOperand &opnd, DoubleRegister scratch)
void Mul32WithOverflowIfCCUnequal(Register dst, Register src1, Register src2)
void AtomicExchangeU16(Register addr, Register value, Register output, Register scratch)
void I32x4TruncSatF64x2UZero(Simd128Register dst, Simd128Register src, Simd128Register scratch)
void LoadS16(Register dst, const MemOperand &mem, Register scratch=no_reg)
void LoadLane8LE(Simd128Register dst, const MemOperand &mem, int lane, Register scratch)
void LoadRoot(Register destination, RootIndex index) override
void I8x16ExtractLaneS(Register dst, Simd128Register src, uint8_t imm_lane_idx, Register scratch)
void CheckPageFlag(Register object, Register scratch, int mask, Condition cc, Label *condition_met)
void LoadV128(Simd128Register dst, const MemOperand &mem, Register scratch)
void CmpS32(Register src1, Register src2)
void LoadU32(Register dst, const MemOperand &opnd, Register scratch=no_reg)
void ModS64(Register dst, Register src1, Register src2)
void AndP(Register dst, const MemOperand &opnd)
void I8x16Swizzle(Simd128Register dst, Simd128Register src1, Simd128Register src2, Register scratch1, Register scratch2, Simd128Register scratch3)
void AndP(Register dst, Register src)
void DropArguments(Register count)
void LoadTaggedFieldWithoutDecompressing(const Register &destination, const MemOperand &field_operand, const Register &scratch=no_reg)
void AssertCallableFunction(Register object) NOOP_UNLESS_DEBUG_CODE
void MultiPushDoubles(DoubleRegList dregs, Register location=sp)
void LoadV64ZeroLE(Simd128Register dst, const MemOperand &mem, Register scratch)
void AddS32(Register dst, Register src, const Operand &imm)
#define NOOP_UNLESS_DEBUG_CODE
#define COMPRESS_POINTERS_BOOL
#define ABI_USES_FUNCTION_DESCRIPTORS
DirectHandle< Object > new_target
RoundingMode rounding_mode
ZoneVector< RpoNumber > & result
#define PROTOTYPE_SIMD_ALL_TRUE(name)
#define SIMD_UNOP_LIST(V)
#define SIMD_ALL_TRUE_LIST(V)
#define PROTOTYPE_SIMD_QFM(name)
#define PROTOTYPE_SIMD_BINOP(name)
#define PROTOTYPE_SIMD_SHIFT(name)
#define SIMD_BINOP_LIST(V)
#define SIMD_SHIFT_LIST(V)
#define SIMD_EXT_ADD_PAIRWISE_LIST(V)
#define PROTOTYPE_SIMD_EXT_ADD_PAIRWISE(name)
#define PROTOTYPE_SIMD_UNOP(name)
#define SIMD_EXT_MUL_LIST(V)
#define PROTOTYPE_SIMD_ADD_SUB_SAT(name)
#define PROTOTYPE_SIMD_EXT_MUL(name)
#define SIMD_ADD_SUB_SAT_LIST(V)
RegListBase< RegisterT > registers
InstructionOperand destination
constexpr Register no_reg
constexpr Register kRootRegister
MemOperand ExitFrameCallerStackSlotOperand(int index)
const int kStackFrameExtraParamSlot
constexpr int kSystemPointerSizeLog2
MemOperand FieldMemOperand(Register object, int offset)
constexpr int kSystemPointerSize
constexpr bool SmiValuesAre31Bits()
V8_EXPORT_PRIVATE FlagValues v8_flags
constexpr bool SmiValuesAre32Bits()
constexpr int kBitsPerSystemPointer
constexpr Register kPtrComprCageBaseRegister
void CallApiFunctionAndReturn(MacroAssembler *masm, bool with_profiling, Register function_address, ExternalReference thunk_ref, Register thunk_arg, int slots_to_drop_on_return, MemOperand *argc_operand, MemOperand return_value_operand)
Register GetRegisterThatIsNotOneOf(Register reg1, Register reg2=no_reg, Register reg3=no_reg, Register reg4=no_reg, Register reg5=no_reg, Register reg6=no_reg)
constexpr int kDoubleSize
MemOperand ExitFrameStackSlotOperand(int offset)
#define DCHECK_GE(v1, v2)
#define DCHECK(condition)
#define V8_EXPORT_PRIVATE
bool pending_double_scratch_register_use