forked from mirrors/gecko-dev
I saw something like a 5% improvement to the Elm, React, and React-Redux subtests of speedometer with this, with maybe a 1% overall Speedometer improvement, although the confidence is lower. Differential Revision: https://phabricator.services.mozilla.com/D158983
3754 lines
70 KiB
YAML
3754 lines
70 KiB
YAML
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
# [SMDOC] LIR Opcodes
|
|
# =======================
|
|
# This file defines all LIR opcodes as well as LIR opcode class
|
|
# definitions. It is parsed by GenerateLIRFiles.py at build time to
|
|
# create LIROpsGenerated.h. Each opcode consists of a
|
|
# name and a set of attributes that are described below. Unless
|
|
# marked as required, attributes are optional.
|
|
#
|
|
# name [required]
|
|
# ====
|
|
# Opcode name.
|
|
# Possible values:
|
|
# - opcode string: used as the name for LIR opcode.
|
|
#
|
|
# gen_boilerplate
|
|
# ===============
|
|
# Used to decide to generate LIR boilerplate.
|
|
# - true (default): auto generate boilerplate for this LIR opcode
|
|
# - false: do not generate boilerplate for this LIR opcode
|
|
#
|
|
# result_type
|
|
# ===========
|
|
# Specifies the result type that is produced by this LIR instruction.
|
|
# The result type can be any of the following: WordSized, BoxedValue,
|
|
# or Int64.
|
|
# - attribute not specified (default): there is no result produced
|
|
# by this LIR instruction
|
|
# - result type: sets result type for this LIR instruction
|
|
#
|
|
# operands
|
|
# ========
|
|
# A list of operands to the LIR node. Each operand will be
|
|
# passed into and set in the instruction's constructor. A simple getter
|
|
# will also be auto generated for the operand. Each operand in the
|
|
# following list is defined by its name and an type.
|
|
# The type can be WordSized, BoxedValue, or Int64.
|
|
#
|
|
# For example:
|
|
# operands:
|
|
# lhs: BoxedValue
|
|
# rhs: WordSized
|
|
#
|
|
# Will result in:
|
|
# explicit LInstanceOfV(const LBoxAllocation& lhs, const LAllocation& rhs)
|
|
# : LInstructionHelper(classOpcode) {
|
|
# setBoxOperand(lhsIndex, lhs);
|
|
# setOperand(rhsIndex, rhs);
|
|
# }
|
|
# const LAllocation* rhs() { return getOperand(0); }
|
|
#
|
|
# static const size_t lhsIndex = 0;
|
|
# static const size_t rhsIndex = BOX_PIECES;
|
|
#
|
|
# - attribute not specified (default): no code generated
|
|
# - list of operand names with their types: operand getters and setters
|
|
# are generated and passed into the constructor
|
|
#
|
|
# arguments
|
|
# =========
|
|
# A list of non-LIR node arguments to the LIR op class constructor
|
|
# that are passed along with the operands. The arguments require
|
|
# both a name and a full type signature for each item in the list.
|
|
#
|
|
# For example:
|
|
# offset: size_t
|
|
# type: MIRType
|
|
#
|
|
# For each argument a private variable declaration will be autogenerated
|
|
# in the LIR op class, as well as simple accessor for that variable. The
|
|
# above arguments list will result in the following declarations and
|
|
# accessors:
|
|
#
|
|
# size_t offset_;
|
|
# MIRType type_;
|
|
#
|
|
# size_t offset() const { return offset_; }
|
|
# MIRType type() const { return type_; }
|
|
#
|
|
# - attribute not specified (default): no code generated
|
|
# - argument list: argument names and their full type signature
|
|
#
|
|
# num_temps
|
|
# ========
|
|
# Specifies the number of temporary virtual registers, LDefinitions, used by
|
|
# this LIR op.
|
|
# - attribute not specified (default): number of temps is set to 0
|
|
# - number of LDefinition temps: sets number of temps max 15
|
|
#
|
|
# call_instruction
|
|
# ================
|
|
# Used to define call instructions.
|
|
# - attribute not specified (default): no code generated
|
|
# - true: generates a call to setIsCall in the op's constructor
|
|
#
|
|
# mir_op
|
|
# ======
|
|
# If a LIR instruction corresponds one-to-one with a particular MIR
|
|
# instruction, this will generate a method that returns that MIR
|
|
# instruction.
|
|
# - attribute not specified (default): no code generated
|
|
# - true: generates a method to return MIR instruction
|
|
# - mir string: returns this specified MIR instruction
|
|
#
|
|
|
|
- name: Phi
|
|
gen_boilerplate: false
|
|
|
|
- name: Box
|
|
gen_boilerplate: false
|
|
|
|
- name: OsiPoint
|
|
gen_boilerplate: false
|
|
|
|
- name: MoveGroup
|
|
gen_boilerplate: false
|
|
|
|
# Constant 32-bit integer.
|
|
- name: Integer
|
|
result_type: WordSized
|
|
arguments:
|
|
i32: int32_t
|
|
|
|
# Constant 64-bit integer.
|
|
- name: Integer64
|
|
result_type: Int64
|
|
arguments:
|
|
i64: int64_t
|
|
|
|
# Constant pointer.
|
|
- name: Pointer
|
|
result_type: WordSized
|
|
arguments:
|
|
gcptr: gc::Cell*
|
|
|
|
# Constant double.
|
|
- name: Double
|
|
result_type: WordSized
|
|
arguments:
|
|
value: double
|
|
|
|
# Constant float32.
|
|
- name: Float32
|
|
result_type: WordSized
|
|
arguments:
|
|
value: float
|
|
|
|
- name: Value
|
|
gen_boilerplate: false
|
|
|
|
- name: NurseryObject
|
|
result_type: WordSized
|
|
mir_op: true
|
|
|
|
# Formal argument for a function, returning a box. Formal arguments are
|
|
# initially read from the stack.
|
|
- name: Parameter
|
|
result_type: BoxedValue
|
|
|
|
# Stack offset for a word-sized immutable input value to a frame.
|
|
- name: Callee
|
|
result_type: WordSized
|
|
|
|
- name: IsConstructing
|
|
result_type: WordSized
|
|
|
|
- name: Goto
|
|
gen_boilerplate: false
|
|
|
|
- name: NewArray
|
|
gen_boilerplate: false
|
|
|
|
- name: NewArrayDynamicLength
|
|
result_type: WordSized
|
|
operands:
|
|
length: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: NewIterator
|
|
result_type: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: NewTypedArray
|
|
result_type: WordSized
|
|
num_temps: 2
|
|
mir_op: true
|
|
|
|
- name: NewTypedArrayDynamicLength
|
|
result_type: WordSized
|
|
operands:
|
|
length: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: NewTypedArrayFromArray
|
|
result_type: WordSized
|
|
operands:
|
|
array: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: NewTypedArrayFromArrayBuffer
|
|
result_type: WordSized
|
|
operands:
|
|
arrayBuffer: WordSized
|
|
byteOffset: BoxedValue
|
|
length: BoxedValue
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: NewObject
|
|
gen_boilerplate: false
|
|
|
|
- name: NewPlainObject
|
|
result_type: WordSized
|
|
num_temps: 3
|
|
mir_op: true
|
|
|
|
- name: NewArrayObject
|
|
result_type: WordSized
|
|
num_temps: 2
|
|
mir_op: true
|
|
|
|
# Allocates a new NamedLambdaObject.
|
|
#
|
|
# This instruction generates two possible instruction sets:
|
|
# (1) An inline allocation of the call object is attempted.
|
|
# (2) Otherwise, a callVM create a new object.
|
|
#
|
|
- name: NewNamedLambdaObject
|
|
result_type: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
# Allocates a new CallObject.
|
|
#
|
|
# This instruction generates two possible instruction sets:
|
|
# (1) If the call object is extensible, this is a callVM to create the
|
|
# call object.
|
|
# (2) Otherwise, an inline allocation of the call object is attempted.
|
|
#
|
|
- name: NewCallObject
|
|
result_type: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: NewStringObject
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: InitElemGetterSetter
|
|
operands:
|
|
object: WordSized
|
|
id: BoxedValue
|
|
value: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
# Takes in an Object and a Value.
|
|
- name: MutateProto
|
|
operands:
|
|
object: WordSized
|
|
value: BoxedValue
|
|
call_instruction: true
|
|
|
|
- name: InitPropGetterSetter
|
|
operands:
|
|
object: WordSized
|
|
value: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: CheckOverRecursed
|
|
mir_op: true
|
|
|
|
- name: WasmTrap
|
|
mir_op: true
|
|
|
|
- name: WasmReinterpret
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmReinterpretFromI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmReinterpretToI64
|
|
gen_boilerplate: false
|
|
|
|
- name: Rotate
|
|
gen_boilerplate: false
|
|
|
|
- name: RotateI64
|
|
gen_boilerplate: false
|
|
|
|
- name: InterruptCheck
|
|
mir_op: true
|
|
|
|
- name: WasmInterruptCheck
|
|
operands:
|
|
instance: WordSized
|
|
mir_op: true
|
|
|
|
- name: TypeOfV
|
|
result_type: WordSized
|
|
operands:
|
|
input: BoxedValue
|
|
num_temps: 1
|
|
mir_op: TypeOf
|
|
|
|
- name: TypeOfO
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
mir_op: TypeOf
|
|
|
|
- name: TypeOfName
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
mir_op: true
|
|
|
|
- name: TypeOfIsNonPrimitiveV
|
|
result_type: WordSized
|
|
operands:
|
|
input: BoxedValue
|
|
num_temps: 1
|
|
mir_op: TypeOfIs
|
|
|
|
- name: TypeOfIsNonPrimitiveO
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
mir_op: TypeOfIs
|
|
|
|
- name: TypeOfIsPrimitive
|
|
result_type: WordSized
|
|
operands:
|
|
input: BoxedValue
|
|
mir_op: TypeOfIs
|
|
|
|
- name: ToAsyncIter
|
|
result_type: WordSized
|
|
operands:
|
|
iterator: WordSized
|
|
nextMethod: BoxedValue
|
|
call_instruction: true
|
|
|
|
- name: ToPropertyKeyCache
|
|
result_type: BoxedValue
|
|
operands:
|
|
input: BoxedValue
|
|
mir_op: true
|
|
|
|
# Allocate an object for |new| on the caller-side,
|
|
# when there is no templateObject or prototype known
|
|
- name: CreateThis
|
|
result_type: BoxedValue
|
|
operands:
|
|
callee: WordSized
|
|
newTarget: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
# Allocate a new arguments object for the frame.
|
|
- name: CreateArgumentsObject
|
|
result_type: WordSized
|
|
operands:
|
|
callObject: WordSized
|
|
num_temps: 3
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: CreateInlinedArgumentsObject
|
|
gen_boilerplate: false
|
|
|
|
- name: GetInlinedArgument
|
|
gen_boilerplate: false
|
|
|
|
- name: GetInlinedArgumentHole
|
|
gen_boilerplate: false
|
|
|
|
# Get argument from arguments object.
|
|
- name: GetArgumentsObjectArg
|
|
result_type: BoxedValue
|
|
operands:
|
|
argsObject: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
# Set argument on arguments object.
|
|
- name: SetArgumentsObjectArg
|
|
operands:
|
|
argsObject: WordSized
|
|
value: BoxedValue
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
# Load an element from an arguments object.
|
|
- name: LoadArgumentsObjectArg
|
|
result_type: BoxedValue
|
|
operands:
|
|
argsObject: WordSized
|
|
index: WordSized
|
|
num_temps: 1
|
|
|
|
# Load an element from an arguments object. Handles out-of-bounds accesses.
|
|
- name: LoadArgumentsObjectArgHole
|
|
result_type: BoxedValue
|
|
operands:
|
|
argsObject: WordSized
|
|
index: WordSized
|
|
num_temps: 1
|
|
|
|
# Return true if the element exists in the arguments object.
|
|
- name: InArgumentsObjectArg
|
|
result_type: WordSized
|
|
operands:
|
|
argsObject: WordSized
|
|
index: WordSized
|
|
num_temps: 1
|
|
|
|
# Return |arguments.length| unless it has been overridden.
|
|
- name: ArgumentsObjectLength
|
|
result_type: WordSized
|
|
operands:
|
|
argsObject: WordSized
|
|
|
|
# Create an array from an arguments object.
|
|
- name: ArrayFromArgumentsObject
|
|
result_type: WordSized
|
|
operands:
|
|
argsObject: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
# Guard that the given flags are not set on the arguments object.
|
|
- name: GuardArgumentsObjectFlags
|
|
operands:
|
|
argsObject: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
# If the Value is an Object, return unbox(Value).
|
|
# Otherwise, return the other Object.
|
|
- name: ReturnFromCtor
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
object: WordSized
|
|
|
|
- name: BoxNonStrictThis
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
mir_op: true
|
|
|
|
- name: ImplicitThis
|
|
result_type: BoxedValue
|
|
operands:
|
|
env: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
# Writes a typed argument for a function call to the frame's argument vector.
|
|
- name: StackArgT
|
|
operands:
|
|
arg: WordSized
|
|
arguments:
|
|
# Index into frame-scope argument vector.
|
|
argslot: uint32_t
|
|
type: MIRType
|
|
|
|
# Writes a typed argument for a function call to the frame's argument vector.
|
|
- name: StackArgV
|
|
operands:
|
|
value: BoxedValue
|
|
arguments:
|
|
# Index into frame-scope argument vector.
|
|
argslot: uint32_t
|
|
|
|
- name: CallGeneric
|
|
gen_boilerplate: false
|
|
|
|
- name: CallKnown
|
|
gen_boilerplate: false
|
|
|
|
- name: CallNative
|
|
gen_boilerplate: false
|
|
|
|
- name: CallDOMNative
|
|
gen_boilerplate: false
|
|
|
|
- name: Bail
|
|
|
|
- name: Unreachable
|
|
gen_boilerplate: false
|
|
|
|
- name: EncodeSnapshot
|
|
|
|
- name: UnreachableResultV
|
|
gen_boilerplate: false
|
|
|
|
- name: UnreachableResultT
|
|
result_type: WordSized
|
|
|
|
- name: GetDOMProperty
|
|
gen_boilerplate: false
|
|
|
|
- name: GetDOMMemberV
|
|
gen_boilerplate: false
|
|
|
|
- name: GetDOMMemberT
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
mir_op: GetDOMMember
|
|
|
|
- name: SetDOMProperty
|
|
gen_boilerplate: false
|
|
|
|
- name: LoadDOMExpandoValue
|
|
result_type: BoxedValue
|
|
operands:
|
|
proxy: WordSized
|
|
mir_op: true
|
|
|
|
- name: LoadDOMExpandoValueGuardGeneration
|
|
result_type: BoxedValue
|
|
operands:
|
|
proxy: WordSized
|
|
mir_op: true
|
|
|
|
- name: LoadDOMExpandoValueIgnoreGeneration
|
|
result_type: BoxedValue
|
|
operands:
|
|
proxy: WordSized
|
|
mir_op: true
|
|
|
|
- name: GuardDOMExpandoMissingOrGuardShape
|
|
operands:
|
|
input: BoxedValue
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: ApplyArgsGeneric
|
|
gen_boilerplate: false
|
|
|
|
- name: ApplyArgsObj
|
|
gen_boilerplate: false
|
|
|
|
- name: ApplyArrayGeneric
|
|
gen_boilerplate: false
|
|
|
|
- name: ConstructArgsGeneric
|
|
gen_boilerplate: false
|
|
|
|
- name: ConstructArrayGeneric
|
|
gen_boilerplate: false
|
|
|
|
- name: TestIAndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: TestI64AndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: TestDAndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: TestFAndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: TestBIAndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: TestOAndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: TestVAndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: Compare
|
|
gen_boilerplate: false
|
|
|
|
- name: CompareI64
|
|
gen_boilerplate: false
|
|
|
|
- name: CompareI64AndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: CompareAndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: CompareD
|
|
result_type: WordSized
|
|
operands:
|
|
left: WordSized
|
|
right: WordSized
|
|
mir_op: Compare
|
|
|
|
- name: CompareF
|
|
result_type: WordSized
|
|
operands:
|
|
left: WordSized
|
|
right: WordSized
|
|
mir_op: Compare
|
|
|
|
- name: CompareDAndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: CompareFAndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: CompareS
|
|
result_type: WordSized
|
|
operands:
|
|
left: WordSized
|
|
right: WordSized
|
|
mir_op: Compare
|
|
|
|
- name: CompareSInline
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
arguments:
|
|
constant: JSLinearString*
|
|
mir_op: Compare
|
|
|
|
- name: CompareBigInt
|
|
result_type: WordSized
|
|
operands:
|
|
left: WordSized
|
|
right: WordSized
|
|
num_temps: 3
|
|
mir_op: Compare
|
|
|
|
- name: CompareBigIntInt32
|
|
result_type: WordSized
|
|
operands:
|
|
left: WordSized
|
|
right: WordSized
|
|
num_temps: 2
|
|
mir_op: Compare
|
|
|
|
- name: CompareBigIntDouble
|
|
result_type: WordSized
|
|
operands:
|
|
left: WordSized
|
|
right: WordSized
|
|
call_instruction: true
|
|
mir_op: Compare
|
|
|
|
- name: CompareBigIntString
|
|
result_type: WordSized
|
|
operands:
|
|
left: WordSized
|
|
right: WordSized
|
|
call_instruction: true
|
|
mir_op: Compare
|
|
|
|
- name: BitAndAndBranch
|
|
gen_boilerplate: false
|
|
|
|
# Takes a value and tests whether it is null, undefined, or is an object that
|
|
# emulates |undefined|, as determined by the JSCLASS_EMULATES_UNDEFINED class
|
|
# flag on unwrapped objects. See also js::EmulatesUndefined.
|
|
- name: IsNullOrLikeUndefinedV
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
num_temps: 1
|
|
mir_op: Compare
|
|
|
|
# Takes an object pointer and tests whether it is an object that emulates
|
|
# |undefined|, as above.
|
|
- name: IsNullOrLikeUndefinedT
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
mir_op: Compare
|
|
|
|
# Takes a value and tests whether it is null.
|
|
- name: IsNull
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
mir_op: Compare
|
|
|
|
# Takes a value and tests whether it is undefined.
|
|
- name: IsUndefined
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
mir_op: Compare
|
|
|
|
- name: IsNullOrLikeUndefinedAndBranchV
|
|
gen_boilerplate: false
|
|
|
|
- name: IsNullOrLikeUndefinedAndBranchT
|
|
gen_boilerplate: false
|
|
|
|
- name: IsNullAndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: IsUndefinedAndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: SameValueDouble
|
|
result_type: WordSized
|
|
operands:
|
|
left: WordSized
|
|
right: WordSized
|
|
num_temps: 1
|
|
|
|
- name: SameValue
|
|
result_type: WordSized
|
|
operands:
|
|
lhs: BoxedValue
|
|
rhs: BoxedValue
|
|
|
|
# Not operation on an integer.
|
|
- name: NotI
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
|
|
# Not operation on an int64.
|
|
- name: NotI64
|
|
result_type: WordSized
|
|
operands:
|
|
inputI64: Int64
|
|
|
|
# Not operation on a double.
|
|
- name: NotD
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
mir_op: Not
|
|
|
|
# Not operation on a float32.
|
|
- name: NotF
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
mir_op: Not
|
|
|
|
# Not operation on a BigInt.
|
|
- name: NotBI
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
mir_op: Not
|
|
|
|
# Boolean complement operation on an object.
|
|
- name: NotO
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
mir_op: Not
|
|
|
|
# Boolean complement operation on a value.
|
|
- name: NotV
|
|
result_type: WordSized
|
|
operands:
|
|
input: BoxedValue
|
|
num_temps: 2
|
|
mir_op: Not
|
|
|
|
- name: BitNotI
|
|
gen_boilerplate: false
|
|
|
|
- name: BitNotI64
|
|
gen_boilerplate: false
|
|
|
|
- name: BitOpI
|
|
gen_boilerplate: false
|
|
|
|
- name: BitOpI64
|
|
gen_boilerplate: false
|
|
|
|
- name: ShiftI
|
|
gen_boilerplate: false
|
|
|
|
- name: ShiftI64
|
|
gen_boilerplate: false
|
|
|
|
- name: SignExtendInt32
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
arguments:
|
|
mode: MSignExtendInt32::Mode
|
|
|
|
- name: SignExtendInt64
|
|
gen_boilerplate: false
|
|
|
|
- name: UrshD
|
|
gen_boilerplate: false
|
|
|
|
- name: Return
|
|
gen_boilerplate: false
|
|
|
|
- name: Throw
|
|
operands:
|
|
value: BoxedValue
|
|
call_instruction: true
|
|
|
|
- name: MinMaxI
|
|
gen_boilerplate: false
|
|
|
|
- name: MinMaxD
|
|
gen_boilerplate: false
|
|
|
|
- name: MinMaxF
|
|
gen_boilerplate: false
|
|
|
|
- name: MinMaxArrayI
|
|
gen_boilerplate: false
|
|
|
|
- name: MinMaxArrayD
|
|
gen_boilerplate: false
|
|
|
|
# Negative of integer
|
|
- name: NegI
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
|
|
# Negative of an int64
|
|
- name: NegI64
|
|
result_type: Int64
|
|
operands:
|
|
num: Int64
|
|
|
|
# Negative of double
|
|
- name: NegD
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
|
|
# Negative of float32
|
|
- name: NegF
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
|
|
# Absolute value of an integer.
|
|
- name: AbsI
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
mir_op: Abs
|
|
|
|
# Absolute value of a double.
|
|
- name: AbsD
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
|
|
# Absolute value of a float32.
|
|
- name: AbsF
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
|
|
- name: CopySignD
|
|
gen_boilerplate: false
|
|
|
|
- name: CopySignF
|
|
gen_boilerplate: false
|
|
|
|
# Count leading zeroes on an int32.
|
|
- name: ClzI
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
mir_op: Clz
|
|
|
|
# Count leading zeroes on an int64.
|
|
- name: ClzI64
|
|
result_type: Int64
|
|
operands:
|
|
num: Int64
|
|
mir_op: Clz
|
|
|
|
# Count trailing zeroes on an int32.
|
|
- name: CtzI
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
mir_op: Ctz
|
|
|
|
# Count trailing zeroes on an int64.
|
|
- name: CtzI64
|
|
result_type: Int64
|
|
operands:
|
|
num: Int64
|
|
mir_op: Ctz
|
|
|
|
# Count population on an int32.
|
|
- name: PopcntI
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
num_temps: 1
|
|
mir_op: Popcnt
|
|
|
|
# Count population on an int64.
|
|
- name: PopcntI64
|
|
result_type: Int64
|
|
operands:
|
|
num: Int64
|
|
num_temps: 1
|
|
mir_op: Popcnt
|
|
|
|
- name: SqrtD
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
|
|
- name: SqrtF
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
|
|
- name: Atan2D
|
|
gen_boilerplate: false
|
|
|
|
- name: Hypot
|
|
gen_boilerplate: false
|
|
|
|
# Double raised to an integer power.
|
|
- name: PowI
|
|
result_type: WordSized
|
|
operands:
|
|
value: WordSized
|
|
power: WordSized
|
|
call_instruction: true
|
|
|
|
# Integer raised to an integer power.
|
|
- name: PowII
|
|
result_type: WordSized
|
|
operands:
|
|
value: WordSized
|
|
power: WordSized
|
|
num_temps: 2
|
|
mir_op: Pow
|
|
|
|
# Double raised to a double power.
|
|
- name: PowD
|
|
result_type: WordSized
|
|
operands:
|
|
value: WordSized
|
|
power: WordSized
|
|
call_instruction: true
|
|
|
|
# Constant of a power of two raised to an integer power.
|
|
- name: PowOfTwoI
|
|
result_type: WordSized
|
|
operands:
|
|
power: WordSized
|
|
arguments:
|
|
base: uint32_t
|
|
|
|
# Sign value of an integer.
|
|
- name: SignI
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
|
|
# Sign value of an integer.
|
|
- name: SignD
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
|
|
# Sign value of a double with expected int32 result.
|
|
- name: SignDI
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
num_temps: 1
|
|
|
|
- name: MathFunctionD
|
|
gen_boilerplate: false
|
|
|
|
- name: MathFunctionF
|
|
gen_boilerplate: false
|
|
|
|
- name: AddI
|
|
gen_boilerplate: false
|
|
|
|
- name: AddI64
|
|
gen_boilerplate: false
|
|
|
|
- name: SubI
|
|
gen_boilerplate: false
|
|
|
|
- name: SubI64
|
|
gen_boilerplate: false
|
|
|
|
- name: MulI64
|
|
gen_boilerplate: false
|
|
|
|
- name: MathD
|
|
gen_boilerplate: false
|
|
|
|
- name: MathF
|
|
gen_boilerplate: false
|
|
|
|
- name: ModD
|
|
gen_boilerplate: false
|
|
|
|
- name: ModPowTwoD
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmBuiltinModD
|
|
result_type: WordSized
|
|
operands:
|
|
lhs: WordSized
|
|
rhs: WordSized
|
|
instance: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: BigIntAdd
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntSub
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntMul
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntDiv
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntMod
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntPow
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntBitAnd
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntBitOr
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntBitXor
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntLsh
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntRsh
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntIncrement
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntDecrement
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntNegate
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntBitNot
|
|
gen_boilerplate: false
|
|
|
|
# Adds two string, returning a string.
|
|
- name: Concat
|
|
result_type: WordSized
|
|
operands:
|
|
lhs: WordSized
|
|
rhs: WordSized
|
|
num_temps: 5
|
|
|
|
# Get uint16 character code from a string.
|
|
- name: CharCodeAt
|
|
result_type: WordSized
|
|
operands:
|
|
str: WordSized
|
|
index: WordSized
|
|
num_temps: 2
|
|
|
|
# Convert uint16 character code to a string.
|
|
- name: FromCharCode
|
|
result_type: WordSized
|
|
operands:
|
|
code: WordSized
|
|
|
|
# Convert uint32 code point to a string.
|
|
- name: FromCodePoint
|
|
result_type: WordSized
|
|
operands:
|
|
codePoint: WordSized
|
|
num_temps: 2
|
|
|
|
# Search for the first index of the search string.
|
|
- name: StringIndexOf
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
searchString: WordSized
|
|
call_instruction: true
|
|
|
|
# Test if a string starts with the search string
|
|
- name: StringStartsWith
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
searchString: WordSized
|
|
call_instruction: true
|
|
|
|
# Test if a string starts with the constant search string
|
|
- name: StringStartsWithInline
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
arguments:
|
|
searchString: JSLinearString*
|
|
num_temps: 1
|
|
|
|
# Test if a string ends with the search string
|
|
- name: StringEndsWith
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
searchString: WordSized
|
|
call_instruction: true
|
|
|
|
# Test if a string ends with the constant search string
|
|
- name: StringEndsWithInline
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
arguments:
|
|
searchString: JSLinearString*
|
|
num_temps: 1
|
|
|
|
# Calls the ToLowerCase case conversion function. Inlines the case conversion
|
|
# when possible.
|
|
- name: StringToLowerCase
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
num_temps: 5
|
|
mir_op: StringConvertCase
|
|
|
|
# Calls the ToUpperCase case conversion function.
|
|
- name: StringToUpperCase
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
call_instruction: true
|
|
mir_op: StringConvertCase
|
|
|
|
- name: StringSplit
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
separator: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: Substr
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
begin: WordSized
|
|
length: WordSized
|
|
num_temps: 3
|
|
mir_op: StringSplit
|
|
|
|
- name: Int32ToDouble
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
|
|
- name: Float32ToDouble
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
|
|
- name: DoubleToFloat32
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
|
|
- name: Int32ToFloat32
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
|
|
# Convert a value to a double.
|
|
- name: ValueToDouble
|
|
result_type: WordSized
|
|
operands:
|
|
input: BoxedValue
|
|
mir_op: ToDouble
|
|
|
|
# Convert a value to a float32.
|
|
- name: ValueToFloat32
|
|
result_type: WordSized
|
|
operands:
|
|
input: BoxedValue
|
|
mir_op: ToFloat32
|
|
|
|
- name: ValueToInt32
|
|
gen_boilerplate: false
|
|
|
|
# Convert a value to a BigInt.
|
|
- name: ValueToBigInt
|
|
result_type: WordSized
|
|
operands:
|
|
input: BoxedValue
|
|
mir_op: ToBigInt
|
|
|
|
# Convert a double to an int32.
|
|
# Input: floating-point Register
|
|
# Output: 32-bit integer
|
|
# Bailout: if the double cannot be converted to an integer.
|
|
- name: DoubleToInt32
|
|
result_type: WordSized
|
|
operands:
|
|
in: WordSized
|
|
mir_op: ToNumberInt32
|
|
|
|
# Convert a float32 to an int32.
|
|
# Input: floating-point Register
|
|
# Output: 32-bit integer
|
|
# Bailout: if the float32 cannot be converted to an integer.
|
|
- name: Float32ToInt32
|
|
result_type: WordSized
|
|
operands:
|
|
in: WordSized
|
|
mir_op: ToNumberInt32
|
|
|
|
# Truncates a double to an int32.
|
|
# Input: floating-point Register
|
|
# Output: 32-bit integer
|
|
# Bailout: if the double when converted to an integer exceeds the int32
|
|
# bounds. No bailout for NaN or negative zero.
|
|
- name: DoubleToIntegerInt32
|
|
result_type: WordSized
|
|
operands:
|
|
in: WordSized
|
|
mir_op: ToIntegerInt32
|
|
|
|
# Truncates a float to an int32.
|
|
# Input: floating-point Register
|
|
# Output: 32-bit integer
|
|
# Bailout: if the double when converted to an integer exceeds the int32
|
|
# bounds. No bailout for NaN or negative zero.
|
|
- name: Float32ToIntegerInt32
|
|
result_type: WordSized
|
|
operands:
|
|
in: WordSized
|
|
mir_op: ToIntegerInt32
|
|
|
|
# Convert a double to a truncated int32.
|
|
# Input: floating-point Register
|
|
# Output: 32-bit integer
|
|
- name: TruncateDToInt32
|
|
result_type: WordSized
|
|
operands:
|
|
in: WordSized
|
|
num_temps: 1
|
|
mir_op: TruncateToInt32
|
|
|
|
# Convert a double to a truncated int32 with instance offset because we need it
|
|
# for the slow ool path.
|
|
- name: WasmBuiltinTruncateDToInt32
|
|
result_type: WordSized
|
|
operands:
|
|
in: WordSized
|
|
instance: WordSized
|
|
num_temps: 1
|
|
mir_op: WasmBuiltinTruncateToInt32
|
|
|
|
# Convert a float32 to a truncated int32.
|
|
# Input: floating-point Register
|
|
# Output: 32-bit integer
|
|
- name: TruncateFToInt32
|
|
result_type: WordSized
|
|
operands:
|
|
in: WordSized
|
|
num_temps: 1
|
|
mir_op: TruncateToInt32
|
|
|
|
# Convert a float32 to a truncated int32 with instance offset because we need
|
|
# it for the slow ool path.
|
|
- name: WasmBuiltinTruncateFToInt32
|
|
result_type: WordSized
|
|
operands:
|
|
in: WordSized
|
|
instance: WordSized
|
|
num_temps: 1
|
|
mir_op: WasmBuiltinTruncateToInt32
|
|
|
|
- name: WasmTruncateToInt32
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
mir_op: true
|
|
|
|
- name: WrapInt64ToInt32
|
|
result_type: WordSized
|
|
operands:
|
|
input: Int64
|
|
mir_op: true
|
|
|
|
- name: ExtendInt32ToInt64
|
|
result_type: Int64
|
|
operands:
|
|
input: WordSized
|
|
mir_op: true
|
|
|
|
# Convert a boolean value to a string.
|
|
- name: BooleanToString
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
mir_op: ToString
|
|
|
|
# Convert an integer hosted on one definition to a string with a function call.
|
|
- name: IntToString
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
mir_op: ToString
|
|
|
|
# Convert a double hosted on one definition to a string with a function call.
|
|
- name: DoubleToString
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
num_temps: 1
|
|
mir_op: ToString
|
|
|
|
# Convert a primitive to a string with a function call.
|
|
- name: ValueToString
|
|
result_type: WordSized
|
|
operands:
|
|
input: BoxedValue
|
|
num_temps: 1
|
|
mir_op: ToString
|
|
|
|
- name: PowHalfD
|
|
gen_boilerplate: false
|
|
|
|
- name: NaNToZero
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: OsrEntry
|
|
gen_boilerplate: false
|
|
|
|
# Materialize a Value stored in an interpreter frame for OSR.
|
|
- name: OsrValue
|
|
result_type: BoxedValue
|
|
operands:
|
|
entry: WordSized
|
|
mir_op: true
|
|
|
|
# Materialize a JSObject env chain stored in an interpreter frame for OSR.
|
|
- name: OsrEnvironmentChain
|
|
result_type: WordSized
|
|
operands:
|
|
entry: WordSized
|
|
mir_op: true
|
|
|
|
# Materialize a JSObject env chain stored in an interpreter frame for OSR.
|
|
- name: OsrReturnValue
|
|
result_type: BoxedValue
|
|
operands:
|
|
entry: WordSized
|
|
mir_op: true
|
|
|
|
- name: OsrArgumentsObject
|
|
result_type: WordSized
|
|
operands:
|
|
entry: WordSized
|
|
mir_op: true
|
|
|
|
- name: RegExp
|
|
result_type: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: RegExpMatcher
|
|
result_type: BoxedValue
|
|
operands:
|
|
regexp: WordSized
|
|
string: WordSized
|
|
lastIndex: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: RegExpSearcher
|
|
result_type: WordSized
|
|
operands:
|
|
regexp: WordSized
|
|
string: WordSized
|
|
lastIndex: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: RegExpTester
|
|
result_type: WordSized
|
|
operands:
|
|
regexp: WordSized
|
|
string: WordSized
|
|
lastIndex: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: RegExpPrototypeOptimizable
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: RegExpInstanceOptimizable
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
proto: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: GetFirstDollarIndex
|
|
result_type: WordSized
|
|
operands:
|
|
str: WordSized
|
|
num_temps: 3
|
|
|
|
- name: StringReplace
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
pattern: WordSized
|
|
replacement: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: BinaryValueCache
|
|
result_type: BoxedValue
|
|
operands:
|
|
lhs: BoxedValue
|
|
rhs: BoxedValue
|
|
# Takes two temps: these are intended to be FloatReg0 and FloatReg1
|
|
# to allow the actual cache code to safely clobber those values without
|
|
# save and restore.
|
|
num_temps: 2
|
|
mir_op: BinaryCache
|
|
|
|
- name: BinaryBoolCache
|
|
result_type: WordSized
|
|
operands:
|
|
lhs: BoxedValue
|
|
rhs: BoxedValue
|
|
# Takes two temps: these are intendend to be FloatReg0 and FloatReg1
|
|
# To allow the actual cache code to safely clobber those values without
|
|
# save and restore.
|
|
num_temps: 2
|
|
mir_op: BinaryCache
|
|
|
|
- name: UnaryCache
|
|
result_type: BoxedValue
|
|
operands:
|
|
input: BoxedValue
|
|
mir_op_cast: true
|
|
|
|
- name: ModuleMetadata
|
|
result_type: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: DynamicImport
|
|
result_type: WordSized
|
|
operands:
|
|
specifier: BoxedValue
|
|
options: BoxedValue
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: Lambda
|
|
result_type: WordSized
|
|
operands:
|
|
environmentChain: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: FunctionWithProto
|
|
result_type: WordSized
|
|
operands:
|
|
envChain: WordSized
|
|
prototype: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: SetFunName
|
|
result_type: WordSized
|
|
operands:
|
|
fun: WordSized
|
|
name: BoxedValue
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: KeepAliveObject
|
|
operands:
|
|
object: WordSized
|
|
|
|
# Load the "slots" member out of a JSObject.
|
|
# Input: JSObject pointer
|
|
# Output: slots pointer
|
|
- name: Slots
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
|
|
# Load the "elements" member out of a JSObject.
|
|
# Input: JSObject pointer
|
|
# Output: elements pointer
|
|
- name: Elements
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
mir_op: true
|
|
|
|
# Load the initialized length from an elements header.
|
|
- name: InitializedLength
|
|
result_type: WordSized
|
|
operands:
|
|
elements: WordSized
|
|
|
|
# Store to the initialized length in an elements header. Note the input is an
|
|
# *index*, one less than the desired initialized length.
|
|
- name: SetInitializedLength
|
|
operands:
|
|
elements: WordSized
|
|
index: WordSized
|
|
|
|
# Load the length from an elements header.
|
|
- name: ArrayLength
|
|
result_type: WordSized
|
|
operands:
|
|
elements: WordSized
|
|
|
|
# Store to the length in an elements header. Note the input is an *index*,
|
|
# one less than the desired length.
|
|
- name: SetArrayLength
|
|
operands:
|
|
elements: WordSized
|
|
index: WordSized
|
|
|
|
# Load the "length" property of a function.
|
|
- name: FunctionLength
|
|
result_type: WordSized
|
|
operands:
|
|
function: WordSized
|
|
|
|
# Load the "name" property of a function.
|
|
- name: FunctionName
|
|
result_type: WordSized
|
|
operands:
|
|
function: WordSized
|
|
|
|
- name: GetNextEntryForIterator
|
|
result_type: WordSized
|
|
operands:
|
|
iter: WordSized
|
|
result: WordSized
|
|
num_temps: 3
|
|
mir_op: true
|
|
|
|
- name: ArrayBufferByteLength
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
|
|
- name: ArrayBufferViewLength
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
mir_op: true
|
|
|
|
# Read the byteOffset of an array buffer view.
|
|
- name: ArrayBufferViewByteOffset
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
|
|
# Load an array buffer view's elements vector.
|
|
- name: ArrayBufferViewElements
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
|
|
# Return the element size of a typed array.
|
|
- name: TypedArrayElementSize
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
|
|
- name: GuardHasAttachedArrayBuffer
|
|
operands:
|
|
object: WordSized
|
|
num_temps: 1
|
|
|
|
# Double to IntPtr, eligible for accessing into a TypedArray or DataView. If
|
|
# the index isn't exactly representable as an IntPtr, depending on the
|
|
# supportOOB flag on the MIR instruction, either bail out or produce an IntPtr
|
|
# which is equivalent to an OOB access.
|
|
- name: GuardNumberToIntPtrIndex
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
mir_op: true
|
|
|
|
# Bailout if index >= length.
|
|
- name: BoundsCheck
|
|
operands:
|
|
index: WordSized
|
|
length: WordSized
|
|
mir_op: true
|
|
|
|
- name: BoundsCheckRange
|
|
gen_boilerplate: false
|
|
|
|
# Bailout if index < minimum.
|
|
- name: BoundsCheckLower
|
|
operands:
|
|
index: WordSized
|
|
mir_op: true
|
|
|
|
- name: SpectreMaskIndex
|
|
result_type: WordSized
|
|
operands:
|
|
index: WordSized
|
|
length: WordSized
|
|
mir_op: true
|
|
|
|
- name: LoadElementV
|
|
gen_boilerplate: false
|
|
|
|
- name: InArray
|
|
result_type: WordSized
|
|
operands:
|
|
elements: WordSized
|
|
index: WordSized
|
|
initLength: WordSized
|
|
mir_op: true
|
|
|
|
- name: GuardElementNotHole
|
|
operands:
|
|
elements: WordSized
|
|
index: WordSized
|
|
|
|
- name: LoadElementHole
|
|
gen_boilerplate: false
|
|
|
|
- name: StoreElementV
|
|
gen_boilerplate: false
|
|
|
|
- name: StoreElementT
|
|
gen_boilerplate: false
|
|
|
|
- name: StoreHoleValueElement
|
|
operands:
|
|
elements: WordSized
|
|
index: WordSized
|
|
|
|
# Like LStoreElementV, but supports indexes >= initialized length.
|
|
- name: StoreElementHoleV
|
|
operands:
|
|
object: WordSized
|
|
elements: WordSized
|
|
index: WordSized
|
|
value: BoxedValue
|
|
num_temps: 1
|
|
mir_op: StoreElementHole
|
|
|
|
# Like LStoreElementT, but supports indexes >= initialized length.
|
|
- name: StoreElementHoleT
|
|
operands:
|
|
object: WordSized
|
|
elements: WordSized
|
|
index: WordSized
|
|
value: WordSized
|
|
num_temps: 1
|
|
mir_op: StoreElementHole
|
|
|
|
- name: ArrayPopShift
|
|
gen_boilerplate: false
|
|
|
|
- name: ArrayPush
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
value: BoxedValue
|
|
num_temps: 2
|
|
mir_op: true
|
|
|
|
- name: ArraySlice
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
begin: WordSized
|
|
end: WordSized
|
|
num_temps: 2
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: ArgumentsSlice
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
begin: WordSized
|
|
end: WordSized
|
|
num_temps: 2
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: FrameArgumentsSlice
|
|
result_type: WordSized
|
|
operands:
|
|
begin: WordSized
|
|
count: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: InlineArgumentsSlice
|
|
gen_boilerplate: false
|
|
|
|
- name: NormalizeSliceTerm
|
|
result_type: WordSized
|
|
operands:
|
|
value: WordSized
|
|
length: WordSized
|
|
mir_op: true
|
|
|
|
- name: ArrayJoin
|
|
result_type: WordSized
|
|
operands:
|
|
array: WordSized
|
|
separator: WordSized
|
|
num_temps: 1
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: LoadUnboxedScalar
|
|
result_type: WordSized
|
|
operands:
|
|
elements: WordSized
|
|
index: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: LoadUnboxedBigInt
|
|
gen_boilerplate: false
|
|
|
|
- name: LoadDataViewElement
|
|
gen_boilerplate: false
|
|
|
|
- name: LoadTypedArrayElementHole
|
|
result_type: BoxedValue
|
|
operands:
|
|
object: WordSized
|
|
index: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: LoadTypedArrayElementHoleBigInt
|
|
gen_boilerplate: false
|
|
|
|
- name: StoreUnboxedScalar
|
|
operands:
|
|
elements: WordSized
|
|
index: WordSized
|
|
value: WordSized
|
|
mir_op: true
|
|
|
|
- name: StoreUnboxedBigInt
|
|
gen_boilerplate: false
|
|
|
|
- name: StoreDataViewElement
|
|
gen_boilerplate: false
|
|
|
|
- name: StoreTypedArrayElementHole
|
|
operands:
|
|
elements: WordSized
|
|
length: WordSized
|
|
index: WordSized
|
|
value: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: StoreTypedArrayElementHoleBigInt
|
|
gen_boilerplate: false
|
|
|
|
- name: AtomicIsLockFree
|
|
result_type: WordSized
|
|
operands:
|
|
value: WordSized
|
|
|
|
- name: CompareExchangeTypedArrayElement
|
|
gen_boilerplate: false
|
|
|
|
- name: AtomicExchangeTypedArrayElement
|
|
gen_boilerplate: false
|
|
|
|
- name: AtomicTypedArrayElementBinop
|
|
gen_boilerplate: false
|
|
|
|
- name: AtomicTypedArrayElementBinopForEffect
|
|
gen_boilerplate: false
|
|
|
|
- name: AtomicLoad64
|
|
gen_boilerplate: false
|
|
|
|
- name: AtomicStore64
|
|
gen_boilerplate: false
|
|
|
|
- name: CompareExchangeTypedArrayElement64
|
|
gen_boilerplate: false
|
|
|
|
- name: AtomicExchangeTypedArrayElement64
|
|
gen_boilerplate: false
|
|
|
|
- name: AtomicTypedArrayElementBinop64
|
|
gen_boilerplate: false
|
|
|
|
- name: AtomicTypedArrayElementBinopForEffect64
|
|
gen_boilerplate: false
|
|
|
|
- name: EffectiveAddress
|
|
result_type: WordSized
|
|
operands:
|
|
base: WordSized
|
|
index: WordSized
|
|
mir_op: true
|
|
|
|
- name: ClampIToUint8
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
|
|
- name: ClampDToUint8
|
|
result_type: WordSized
|
|
operands:
|
|
in: WordSized
|
|
num_temps: 1
|
|
|
|
- name: ClampVToUint8
|
|
result_type: WordSized
|
|
operands:
|
|
input: BoxedValue
|
|
num_temps: 1
|
|
mir_op: ClampToUint8
|
|
|
|
# Load a boxed value from an object's fixed slot.
|
|
- name: LoadFixedSlotV
|
|
result_type: BoxedValue
|
|
operands:
|
|
object: WordSized
|
|
mir_op: LoadFixedSlot
|
|
|
|
# Load a typed value from an object's fixed slot.
|
|
- name: LoadFixedSlotT
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
mir_op: LoadFixedSlot
|
|
|
|
- name: LoadFixedSlotAndUnbox
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
mir_op: true
|
|
|
|
- name: LoadDynamicSlotAndUnbox
|
|
result_type: WordSized
|
|
operands:
|
|
slots: WordSized
|
|
mir_op: true
|
|
|
|
- name: LoadElementAndUnbox
|
|
result_type: WordSized
|
|
operands:
|
|
elements: WordSized
|
|
index: WordSized
|
|
mir_op: true
|
|
|
|
- name: AddAndStoreSlot
|
|
operands:
|
|
object: WordSized
|
|
value: BoxedValue
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: AllocateAndStoreSlot
|
|
operands:
|
|
object: WordSized
|
|
value: BoxedValue
|
|
num_temps: 2
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: AddSlotAndCallAddPropHook
|
|
operands:
|
|
object: WordSized
|
|
value: BoxedValue
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
# Store a boxed value to an object's fixed slot.
|
|
- name: StoreFixedSlotV
|
|
operands:
|
|
obj: WordSized
|
|
value: BoxedValue
|
|
mir_op: StoreFixedSlot
|
|
|
|
# Store a typed value to an object's fixed slot.
|
|
- name: StoreFixedSlotT
|
|
operands:
|
|
obj: WordSized
|
|
value: WordSized
|
|
mir_op: StoreFixedSlot
|
|
|
|
# Note, Name ICs always return a Value. There are no V/T variants.
|
|
- name: GetNameCache
|
|
result_type: BoxedValue
|
|
operands:
|
|
envObj: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: CallGetIntrinsicValue
|
|
result_type: BoxedValue
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: GetPropSuperCache
|
|
result_type: BoxedValue
|
|
operands:
|
|
obj: WordSized
|
|
receiver: BoxedValue
|
|
id: BoxedValue
|
|
mir_op: true
|
|
|
|
# Patchable jump to stubs generated for a GetProperty cache, which loads a
|
|
# boxed value.
|
|
- name: GetPropertyCache
|
|
result_type: BoxedValue
|
|
operands:
|
|
value: BoxedValue
|
|
id: BoxedValue
|
|
mir_op: true
|
|
|
|
- name: BindNameCache
|
|
result_type: WordSized
|
|
operands:
|
|
environmentChain: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: CallBindVar
|
|
result_type: WordSized
|
|
operands:
|
|
environmentChain: WordSized
|
|
mir_op: true
|
|
|
|
# Load a value from an object's dslots or a slots vector.
|
|
- name: LoadDynamicSlotV
|
|
result_type: BoxedValue
|
|
operands:
|
|
in: WordSized
|
|
mir_op: LoadDynamicSlot
|
|
|
|
# Store a value to an object's dslots or a slots vector.
|
|
- name: StoreDynamicSlotV
|
|
operands:
|
|
slots: WordSized
|
|
value: BoxedValue
|
|
mir_op: StoreDynamicSlot
|
|
|
|
# Store a typed value to an object's dslots or a slots vector. This has a
|
|
# few advantages over LStoreDynamicSlotV:
|
|
# 1) We can bypass storing the type tag if the slot has the same type as
|
|
# the value.
|
|
# 2) Better Register allocation: we can store constants and FP regs directly
|
|
# without requiring a second Register for the value.
|
|
- name: StoreDynamicSlotT
|
|
operands:
|
|
slots: WordSized
|
|
value: WordSized
|
|
mir_op: StoreDynamicSlot
|
|
|
|
# Read length field of a JSString*.
|
|
- name: StringLength
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
|
|
# Take the floor of a double precision number and converts it to an int32.
|
|
# Implements Math.floor().
|
|
- name: Floor
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
|
|
# Take the floor of a single precision number and converts it to an int32.
|
|
# Implements Math.floor().
|
|
- name: FloorF
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
|
|
# Take the ceiling of a double precision number and converts it to an int32.
|
|
# Implements Math.ceil().
|
|
- name: Ceil
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
|
|
# Take the ceiling of a single precision number and converts it to an int32.
|
|
# Implements Math.ceil().
|
|
- name: CeilF
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
|
|
# Round a double precision number and converts it to an int32.
|
|
# Implements Math.round().
|
|
- name: Round
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
# Round a single precision number and converts it to an int32.
|
|
# Implements Math.round().
|
|
- name: RoundF
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
num_temps: 1
|
|
mir_op: Round
|
|
|
|
# Truncates a double precision number and converts it to an int32.
|
|
# Implements Math.trunc().
|
|
- name: Trunc
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
|
|
# Truncates a single precision number and converts it to an int32.
|
|
# Implements Math.trunc().
|
|
- name: TruncF
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
|
|
# Rounds a double precision number accordingly to mir()->roundingMode(),
|
|
# and keeps a double output.
|
|
- name: NearbyInt
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
mir_op: true
|
|
|
|
# Rounds a single precision number accordingly to mir()->roundingMode(),
|
|
# and keeps a single output.
|
|
- name: NearbyIntF
|
|
result_type: WordSized
|
|
operands:
|
|
num: WordSized
|
|
mir_op: NearbyInt
|
|
|
|
# Load a function's call environment.
|
|
- name: FunctionEnvironment
|
|
result_type: WordSized
|
|
operands:
|
|
function: WordSized
|
|
|
|
- name: HomeObject
|
|
result_type: WordSized
|
|
operands:
|
|
function: WordSized
|
|
|
|
- name: HomeObjectSuperBase
|
|
result_type: BoxedValue
|
|
operands:
|
|
homeObject: WordSized
|
|
|
|
- name: NewLexicalEnvironmentObject
|
|
result_type: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: NewClassBodyEnvironmentObject
|
|
result_type: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: NewVarEnvironmentObject
|
|
result_type: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: MegamorphicSetElement
|
|
operands:
|
|
object: WordSized
|
|
index: BoxedValue
|
|
value: BoxedValue
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: CallDeleteProperty
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
call_instruction: true
|
|
mir_op: DeleteProperty
|
|
|
|
- name: CallDeleteElement
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
index: BoxedValue
|
|
call_instruction: true
|
|
mir_op: DeleteElement
|
|
|
|
- name: ValueToIterator
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
call_instruction: true
|
|
mir_op: ValueToIterator
|
|
|
|
# Patchable jump to stubs generated for a SetProperty cache.
|
|
- name: SetPropertyCache
|
|
operands:
|
|
object: WordSized
|
|
id: BoxedValue
|
|
value: BoxedValue
|
|
# Takes an additional temp: this is intendend to be FloatReg0 to allow the
|
|
# actual cache code to safely clobber that value without save and restore.
|
|
num_temps: 2
|
|
mir_op: true
|
|
|
|
- name: GetIteratorCache
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
num_temps: 2
|
|
mir_op: true
|
|
|
|
- name: OptimizeSpreadCallCache
|
|
result_type: BoxedValue
|
|
operands:
|
|
value: BoxedValue
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: IteratorMore
|
|
result_type: BoxedValue
|
|
operands:
|
|
iterator: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: IsNoIterAndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: IteratorEnd
|
|
operands:
|
|
object: WordSized
|
|
num_temps: 3
|
|
mir_op: true
|
|
|
|
- name: CloseIterCache
|
|
operands:
|
|
iter: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
# Read the number of actual arguments.
|
|
- name: ArgumentsLength
|
|
result_type: WordSized
|
|
|
|
# Load a value from the actual arguments.
|
|
- name: GetFrameArgument
|
|
result_type: BoxedValue
|
|
operands:
|
|
index: WordSized
|
|
|
|
# Load a value from the actual arguments.
|
|
# Returns undefined if |index| is larger-or-equals to |length|. Bails out if
|
|
# |index| is negative.
|
|
- name: GetFrameArgumentHole
|
|
result_type: BoxedValue
|
|
operands:
|
|
index: WordSized
|
|
length: WordSized
|
|
num_temps: 1
|
|
|
|
# Create the rest parameter.
|
|
- name: Rest
|
|
result_type: WordSized
|
|
operands:
|
|
numActuals: WordSized
|
|
num_temps: 3
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: Int32ToIntPtr
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
mir_op: true
|
|
|
|
- name: NonNegativeIntPtrToInt32
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
|
|
- name: IntPtrToDouble
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
|
|
- name: AdjustDataViewLength
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
mir_op: true
|
|
|
|
# Convert a Boolean to an Int64, following ToBigInt.
|
|
- name: BooleanToInt64
|
|
result_type: Int64
|
|
operands:
|
|
input: WordSized
|
|
mir_op: ToInt64
|
|
|
|
# Convert a String to an Int64, following ToBigInt.
|
|
- name: StringToInt64
|
|
result_type: Int64
|
|
operands:
|
|
input: WordSized
|
|
mir_op: ToInt64
|
|
|
|
# Simulate ToBigInt on a Value and produce a matching Int64.
|
|
- name: ValueToInt64
|
|
result_type: Int64
|
|
operands:
|
|
input: BoxedValue
|
|
num_temps: 1
|
|
mir_op: ToInt64
|
|
|
|
# Truncate a BigInt to an unboxed int64.
|
|
- name: TruncateBigIntToInt64
|
|
result_type: Int64
|
|
operands:
|
|
input: WordSized
|
|
mir_op: true
|
|
|
|
# Create a new BigInt* from an unboxed int64.
|
|
- name: Int64ToBigInt
|
|
result_type: WordSized
|
|
operands:
|
|
input: Int64
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
# Generational write barrier used when writing an object to another object.
|
|
- name: PostWriteBarrierO
|
|
operands:
|
|
object: WordSized
|
|
value: WordSized
|
|
num_temps: 1
|
|
mir_op: PostWriteBarrier
|
|
|
|
# Generational write barrier used when writing a string to an object.
|
|
- name: PostWriteBarrierS
|
|
operands:
|
|
object: WordSized
|
|
value: WordSized
|
|
num_temps: 1
|
|
mir_op: PostWriteBarrier
|
|
|
|
# Generational write barrier used when writing a BigInt to an object.
|
|
- name: PostWriteBarrierBI
|
|
operands:
|
|
object: WordSized
|
|
value: WordSized
|
|
num_temps: 1
|
|
mir_op: PostWriteBarrier
|
|
|
|
# Generational write barrier used when writing a value to another object.
|
|
- name: PostWriteBarrierV
|
|
operands:
|
|
object: WordSized
|
|
value: BoxedValue
|
|
num_temps: 1
|
|
mir_op: PostWriteBarrier
|
|
|
|
# Generational write barrier used when writing an object to another object's
|
|
# elements.
|
|
- name: PostWriteElementBarrierO
|
|
operands:
|
|
object: WordSized
|
|
value: WordSized
|
|
index: WordSized
|
|
num_temps: 1
|
|
mir_op: PostWriteElementBarrier
|
|
|
|
# Generational write barrier used when writing a string to an object's
|
|
# elements.
|
|
- name: PostWriteElementBarrierS
|
|
operands:
|
|
object: WordSized
|
|
value: WordSized
|
|
index: WordSized
|
|
num_temps: 1
|
|
mir_op: PostWriteElementBarrier
|
|
|
|
# Generational write barrier used when writing a BigInt to an object's
|
|
# elements.
|
|
- name: PostWriteElementBarrierBI
|
|
operands:
|
|
object: WordSized
|
|
value: WordSized
|
|
index: WordSized
|
|
num_temps: 1
|
|
mir_op: PostWriteElementBarrier
|
|
|
|
# Generational write barrier used when writing a value to another object's
|
|
# elements.
|
|
- name: PostWriteElementBarrierV
|
|
operands:
|
|
object: WordSized
|
|
index: WordSized
|
|
value: BoxedValue
|
|
num_temps: 1
|
|
mir_op: PostWriteElementBarrier
|
|
|
|
# Assert in debug mode that a post write barrier can be elided.
|
|
- name: AssertCanElidePostWriteBarrier
|
|
operands:
|
|
object: WordSized
|
|
value: BoxedValue
|
|
num_temps: 1
|
|
|
|
# Guard against an object's identity.
|
|
- name: GuardObjectIdentity
|
|
operands:
|
|
input: WordSized
|
|
expected: WordSized
|
|
mir_op: true
|
|
|
|
# Guard against an function's identity.
|
|
- name: GuardSpecificFunction
|
|
operands:
|
|
input: WordSized
|
|
expected: WordSized
|
|
|
|
- name: GuardSpecificAtom
|
|
operands:
|
|
str: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: GuardSpecificSymbol
|
|
operands:
|
|
symbol: WordSized
|
|
mir_op: true
|
|
|
|
- name: GuardStringToIndex
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
|
|
- name: GuardStringToInt32
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
num_temps: 1
|
|
|
|
- name: GuardStringToDouble
|
|
result_type: WordSized
|
|
operands:
|
|
string: WordSized
|
|
num_temps: 2
|
|
|
|
- name: GuardShape
|
|
result_type: WordSized
|
|
operands:
|
|
in: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: GuardProto
|
|
operands:
|
|
object: WordSized
|
|
expected: WordSized
|
|
num_temps: 1
|
|
|
|
- name: GuardNullProto
|
|
operands:
|
|
object: WordSized
|
|
num_temps: 1
|
|
|
|
- name: GuardIsNativeObject
|
|
operands:
|
|
object: WordSized
|
|
num_temps: 1
|
|
|
|
- name: GuardIsProxy
|
|
operands:
|
|
object: WordSized
|
|
num_temps: 1
|
|
|
|
- name: GuardIsNotProxy
|
|
operands:
|
|
object: WordSized
|
|
num_temps: 1
|
|
|
|
- name: GuardIsNotDOMProxy
|
|
operands:
|
|
proxy: WordSized
|
|
num_temps: 1
|
|
|
|
- name: ProxyGet
|
|
result_type: BoxedValue
|
|
operands:
|
|
proxy: WordSized
|
|
num_temps: 1
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: ProxyGetByValue
|
|
result_type: BoxedValue
|
|
operands:
|
|
proxy: WordSized
|
|
id: BoxedValue
|
|
call_instruction: true
|
|
|
|
- name: ProxyHasProp
|
|
result_type: BoxedValue
|
|
operands:
|
|
proxy: WordSized
|
|
id: BoxedValue
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: ProxySet
|
|
operands:
|
|
proxy: WordSized
|
|
rhs: BoxedValue
|
|
num_temps: 1
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: ProxySetByValue
|
|
operands:
|
|
proxy: WordSized
|
|
id: BoxedValue
|
|
rhs: BoxedValue
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: CallSetArrayLength
|
|
operands:
|
|
obj: WordSized
|
|
rhs: BoxedValue
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: MegamorphicLoadSlot
|
|
result_type: BoxedValue
|
|
operands:
|
|
object: WordSized
|
|
num_temps: 3
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: MegamorphicLoadSlotByValue
|
|
result_type: BoxedValue
|
|
operands:
|
|
object: WordSized
|
|
id: BoxedValue
|
|
num_temps: 2
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: MegamorphicStoreSlot
|
|
result_type: BoxedValue
|
|
operands:
|
|
object: WordSized
|
|
rhs: BoxedValue
|
|
num_temps: 3
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: MegamorphicHasProp
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
id: BoxedValue
|
|
num_temps: 3
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: GuardIsNotArrayBufferMaybeShared
|
|
operands:
|
|
object: WordSized
|
|
num_temps: 1
|
|
|
|
- name: GuardIsTypedArray
|
|
operands:
|
|
object: WordSized
|
|
num_temps: 1
|
|
|
|
- name: GuardNoDenseElements
|
|
operands:
|
|
in: WordSized
|
|
num_temps: 1
|
|
|
|
- name: InCache
|
|
result_type: WordSized
|
|
operands:
|
|
lhs: BoxedValue
|
|
rhs: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: HasOwnCache
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
id: BoxedValue
|
|
mir_op: true
|
|
|
|
- name: CheckPrivateFieldCache
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
id: BoxedValue
|
|
mir_op: true
|
|
|
|
- name: NewPrivateName
|
|
result_type: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: InstanceOfO
|
|
result_type: WordSized
|
|
operands:
|
|
lhs: WordSized
|
|
rhs: WordSized
|
|
mir_op: InstanceOf
|
|
|
|
- name: InstanceOfV
|
|
result_type: WordSized
|
|
operands:
|
|
lhs: BoxedValue
|
|
rhs: WordSized
|
|
mir_op: InstanceOf
|
|
|
|
- name: InstanceOfCache
|
|
gen_boilerplate: false
|
|
|
|
- name: IsCallableO
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
mir_op: IsCallable
|
|
|
|
- name: IsCallableV
|
|
result_type: WordSized
|
|
operands:
|
|
object: BoxedValue
|
|
num_temps: 1
|
|
mir_op: IsCallable
|
|
|
|
- name: IsConstructor
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
mir_op: true
|
|
|
|
- name: IsCrossRealmArrayConstructor
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
|
|
- name: IsArrayO
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
mir_op: IsArray
|
|
|
|
- name: IsArrayV
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
num_temps: 1
|
|
mir_op: IsArray
|
|
|
|
- name: IsTypedArray
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
mir_op: true
|
|
|
|
- name: IsObject
|
|
result_type: WordSized
|
|
operands:
|
|
object: BoxedValue
|
|
mir_op: true
|
|
|
|
- name: IsObjectAndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: IsNullOrUndefined
|
|
result_type: WordSized
|
|
operands:
|
|
input: BoxedValue
|
|
mir_op: true
|
|
|
|
- name: IsNullOrUndefinedAndBranch
|
|
gen_boilerplate: false
|
|
|
|
- name: HasClass
|
|
result_type: WordSized
|
|
operands:
|
|
lhs: WordSized
|
|
mir_op: true
|
|
|
|
- name: GuardToClass
|
|
result_type: WordSized
|
|
operands:
|
|
lhs: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: GuardToFunction
|
|
result_type: WordSized
|
|
operands:
|
|
lhs: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: ObjectClassToString
|
|
result_type: WordSized
|
|
operands:
|
|
lhs: WordSized
|
|
num_temps: 1
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: WasmSelect
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmSelectI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmCompareAndSelect
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAddOffset
|
|
result_type: WordSized
|
|
operands:
|
|
base: WordSized
|
|
mir_op: true
|
|
|
|
- name: WasmAddOffset64
|
|
result_type: Int64
|
|
operands:
|
|
base: Int64
|
|
mir_op: WasmAddOffset
|
|
|
|
- name: WasmBoundsCheck
|
|
result_type: WordSized
|
|
operands:
|
|
ptr: WordSized
|
|
boundsCheckLimit: WordSized
|
|
mir_op: true
|
|
|
|
- name: WasmBoundsCheck64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmExtendU32Index
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
mir_op: true
|
|
|
|
- name: WasmWrapU32Index
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
mir_op: true
|
|
|
|
- name: WasmAlignmentCheck
|
|
operands:
|
|
ptr: WordSized
|
|
mir_op: true
|
|
|
|
- name: WasmAlignmentCheck64
|
|
operands:
|
|
ptr: Int64
|
|
mir_op: WasmAlignmentCheck
|
|
|
|
- name: WasmLoadInstance
|
|
result_type: WordSized
|
|
operands:
|
|
instance: WordSized
|
|
mir_op: true
|
|
|
|
- name: WasmLoadInstance64
|
|
result_type: Int64
|
|
operands:
|
|
instance: WordSized
|
|
mir_op: WasmLoadInstance
|
|
|
|
- name: WasmHeapBase
|
|
result_type: WordSized
|
|
operands:
|
|
instance: WordSized
|
|
mir_op: true
|
|
|
|
- name: WasmLoad
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmLoadI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmStore
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmStoreI64
|
|
gen_boilerplate: false
|
|
|
|
- name: AsmJSLoadHeap
|
|
result_type: WordSized
|
|
operands:
|
|
ptr: WordSized
|
|
boundsCheckLimit: WordSized
|
|
memoryBase: WordSized
|
|
mir_op: true
|
|
|
|
- name: AsmJSStoreHeap
|
|
result_type: WordSized
|
|
operands:
|
|
ptr: WordSized
|
|
value: WordSized
|
|
boundsCheckLimit: WordSized
|
|
memoryBase: WordSized
|
|
mir_op: true
|
|
|
|
- name: WasmCompareExchangeHeap
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmFence
|
|
|
|
- name: WasmAtomicExchangeHeap
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicBinopHeap
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicBinopHeapForEffect
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmLoadSlot
|
|
result_type: WordSized
|
|
operands:
|
|
containerRef: WordSized
|
|
arguments:
|
|
offset: size_t
|
|
type: MIRType
|
|
|
|
- name: WasmLoadSlotI64
|
|
result_type: Int64
|
|
operands:
|
|
containerRef: WordSized
|
|
arguments:
|
|
offset: size_t
|
|
|
|
- name: WasmStoreSlot
|
|
operands:
|
|
value: WordSized
|
|
containerRef: WordSized
|
|
arguments:
|
|
offset: size_t
|
|
type: MIRType
|
|
|
|
- name: WasmStoreSlotI64
|
|
operands:
|
|
value: Int64
|
|
containerRef: WordSized
|
|
arguments:
|
|
offset: size_t
|
|
|
|
- name: WasmLoadTableElement
|
|
result_type: WordSized
|
|
operands:
|
|
elements: WordSized
|
|
index: WordSized
|
|
|
|
- name: WasmDerivedPointer
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmDerivedIndexPointer
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmStoreRef
|
|
operands:
|
|
instance: WordSized
|
|
valueAddr: WordSized
|
|
value: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: WasmParameter
|
|
result_type: WordSized
|
|
|
|
- name: WasmParameterI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmReturn
|
|
operands:
|
|
rval: WordSized
|
|
instance: WordSized
|
|
|
|
- name: WasmReturnI64
|
|
operands:
|
|
rval: Int64
|
|
instance: WordSized
|
|
|
|
- name: WasmReturnVoid
|
|
operands:
|
|
rval: WordSized
|
|
|
|
- name: WasmStackArg
|
|
operands:
|
|
arg: WordSized
|
|
mir_op: true
|
|
|
|
- name: WasmStackArgI64
|
|
operands:
|
|
arg: Int64
|
|
mir_op: WasmStackArg
|
|
|
|
- name: WasmNullConstant
|
|
result_type: WordSized
|
|
|
|
- name: WasmCallIndirectAdjunctSafepoint
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmCall
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmCallLandingPrePad
|
|
mir_op: true
|
|
|
|
- name: WasmRegisterResult
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmRegisterPairResult
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmStackResultArea
|
|
result_type: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: WasmStackResult
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmStackResult64
|
|
gen_boilerplate: false
|
|
|
|
- name: AssertRangeI
|
|
gen_boilerplate: false
|
|
|
|
- name: AssertRangeD
|
|
gen_boilerplate: false
|
|
|
|
- name: AssertRangeF
|
|
gen_boilerplate: false
|
|
|
|
- name: AssertRangeV
|
|
gen_boilerplate: false
|
|
|
|
- name: AssertClass
|
|
operands:
|
|
input: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: AssertShape
|
|
operands:
|
|
input: WordSized
|
|
mir_op: true
|
|
|
|
- name: GuardValue
|
|
operands:
|
|
input: BoxedValue
|
|
mir_op: true
|
|
|
|
- name: GuardNullOrUndefined
|
|
operands:
|
|
input: BoxedValue
|
|
mir_op: true
|
|
|
|
- name: GuardIsNotObject
|
|
operands:
|
|
input: BoxedValue
|
|
mir_op: true
|
|
|
|
- name: GuardFunctionFlags
|
|
operands:
|
|
function: WordSized
|
|
mir_op: true
|
|
|
|
- name: GuardFunctionIsNonBuiltinCtor
|
|
operands:
|
|
function: WordSized
|
|
num_temps: 1
|
|
|
|
- name: GuardFunctionKind
|
|
operands:
|
|
function: WordSized
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: GuardFunctionScript
|
|
operands:
|
|
function: WordSized
|
|
mir_op: true
|
|
|
|
- name: IncrementWarmUpCounter
|
|
num_temps: 1
|
|
mir_op: true
|
|
|
|
- name: LexicalCheck
|
|
operands:
|
|
input: BoxedValue
|
|
mir_op: true
|
|
|
|
- name: ThrowRuntimeLexicalError
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: ThrowMsg
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: GlobalDeclInstantiation
|
|
mir_op: true
|
|
|
|
- name: MemoryBarrier
|
|
gen_boilerplate: false
|
|
|
|
- name: Debugger
|
|
num_temps: 1
|
|
call_instruction: true
|
|
|
|
- name: NewTarget
|
|
result_type: BoxedValue
|
|
|
|
- name: Random
|
|
gen_boilerplate: false
|
|
|
|
- name: CheckReturn
|
|
result_type: BoxedValue
|
|
operands:
|
|
returnValue: BoxedValue
|
|
thisValue: BoxedValue
|
|
|
|
- name: CheckIsObj
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
mir_op: true
|
|
|
|
- name: CheckObjCoercible
|
|
operands:
|
|
value: BoxedValue
|
|
|
|
- name: CheckClassHeritage
|
|
operands:
|
|
heritage: BoxedValue
|
|
num_temps: 2
|
|
|
|
- name: CheckThis
|
|
operands:
|
|
value: BoxedValue
|
|
|
|
- name: CheckThisReinit
|
|
operands:
|
|
thisValue: BoxedValue
|
|
|
|
- name: Generator
|
|
result_type: WordSized
|
|
operands:
|
|
callee: WordSized
|
|
environmentChain: WordSized
|
|
argsObject: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: AsyncResolve
|
|
result_type: WordSized
|
|
operands:
|
|
generator: WordSized
|
|
valueOrReason: BoxedValue
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: AsyncAwait
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
generator: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: CanSkipAwait
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: MaybeExtractAwaitValue
|
|
result_type: BoxedValue
|
|
operands:
|
|
value: BoxedValue
|
|
canSkip: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: DebugCheckSelfHosted
|
|
operands:
|
|
value: BoxedValue
|
|
call_instruction: true
|
|
|
|
- name: FinishBoundFunctionInit
|
|
operands:
|
|
bound: WordSized
|
|
target: WordSized
|
|
argCount: WordSized
|
|
num_temps: 2
|
|
|
|
- name: IsPackedArray
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
num_temps: 1
|
|
|
|
- name: GuardArrayIsPacked
|
|
operands:
|
|
array: WordSized
|
|
num_temps: 2
|
|
mir_op: true
|
|
|
|
- name: GetPrototypeOf
|
|
result_type: BoxedValue
|
|
operands:
|
|
target: WordSized
|
|
|
|
- name: ObjectWithProto
|
|
result_type: WordSized
|
|
operands:
|
|
prototype: BoxedValue
|
|
call_instruction: true
|
|
|
|
- name: ObjectStaticProto
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
|
|
- name: BuiltinObject
|
|
result_type: WordSized
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: SuperFunction
|
|
result_type: BoxedValue
|
|
operands:
|
|
callee: WordSized
|
|
num_temps: 1
|
|
|
|
- name: InitHomeObject
|
|
result_type: WordSized
|
|
operands:
|
|
function: WordSized
|
|
homeObject: BoxedValue
|
|
|
|
- name: IsTypedArrayConstructor
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
|
|
- name: LoadValueTag
|
|
result_type: WordSized
|
|
operands:
|
|
value: BoxedValue
|
|
|
|
- name: GuardTagNotEqual
|
|
operands:
|
|
lhs: WordSized
|
|
rhs: WordSized
|
|
|
|
- name: LoadWrapperTarget
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
|
|
- name: GuardHasGetterSetter
|
|
operands:
|
|
object: WordSized
|
|
num_temps: 3
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: GuardIsExtensible
|
|
operands:
|
|
object: WordSized
|
|
num_temps: 1
|
|
|
|
- name: GuardInt32IsNonNegative
|
|
operands:
|
|
index: WordSized
|
|
|
|
- name: GuardIndexIsNotDenseElement
|
|
operands:
|
|
object: WordSized
|
|
index: WordSized
|
|
num_temps: 2
|
|
|
|
- name: GuardIndexIsValidUpdateOrAdd
|
|
operands:
|
|
object: WordSized
|
|
index: WordSized
|
|
num_temps: 2
|
|
|
|
- name: CallAddOrUpdateSparseElement
|
|
operands:
|
|
object: WordSized
|
|
index: WordSized
|
|
value: BoxedValue
|
|
call_instruction: true
|
|
mir_op: true
|
|
|
|
- name: CallGetSparseElement
|
|
result_type: BoxedValue
|
|
operands:
|
|
object: WordSized
|
|
index: WordSized
|
|
call_instruction: true
|
|
|
|
- name: CallNativeGetElement
|
|
result_type: BoxedValue
|
|
operands:
|
|
object: WordSized
|
|
index: WordSized
|
|
call_instruction: true
|
|
|
|
- name: CallNativeGetElementSuper
|
|
result_type: BoxedValue
|
|
operands:
|
|
object: WordSized
|
|
index: WordSized
|
|
receiver: BoxedValue
|
|
call_instruction: true
|
|
|
|
- name: CallObjectHasSparseElement
|
|
result_type: WordSized
|
|
operands:
|
|
object: WordSized
|
|
index: WordSized
|
|
num_temps: 2
|
|
call_instruction: true
|
|
|
|
- name: BigIntAsIntN
|
|
result_type: WordSized
|
|
operands:
|
|
bits: WordSized
|
|
input: WordSized
|
|
call_instruction: true
|
|
|
|
- name: BigIntAsIntN64
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntAsIntN32
|
|
gen_boilerplate: false
|
|
|
|
- name: GuardNonGCThing
|
|
operands:
|
|
input: BoxedValue
|
|
|
|
- name: ToHashableNonGCThing
|
|
result_type: BoxedValue
|
|
operands:
|
|
input: BoxedValue
|
|
num_temps: 1
|
|
|
|
- name: ToHashableString
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
|
|
- name: ToHashableValue
|
|
result_type: BoxedValue
|
|
operands:
|
|
input: BoxedValue
|
|
num_temps: 1
|
|
|
|
- name: HashNonGCThing
|
|
result_type: WordSized
|
|
operands:
|
|
input: BoxedValue
|
|
num_temps: 1
|
|
|
|
- name: HashString
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
num_temps: 1
|
|
|
|
- name: HashSymbol
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
|
|
- name: HashBigInt
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
num_temps: 3
|
|
|
|
- name: HashObject
|
|
result_type: WordSized
|
|
operands:
|
|
setObject: WordSized
|
|
input: BoxedValue
|
|
num_temps: 4
|
|
|
|
- name: HashValue
|
|
result_type: WordSized
|
|
operands:
|
|
setObject: WordSized
|
|
input: BoxedValue
|
|
num_temps: 4
|
|
|
|
- name: SetObjectHasNonBigInt
|
|
result_type: WordSized
|
|
operands:
|
|
setObject: WordSized
|
|
input: BoxedValue
|
|
hash: WordSized
|
|
num_temps: 2
|
|
|
|
- name: SetObjectHasBigInt
|
|
result_type: WordSized
|
|
operands:
|
|
setObject: WordSized
|
|
input: BoxedValue
|
|
hash: WordSized
|
|
num_temps: 4
|
|
|
|
- name: SetObjectHasValue
|
|
result_type: WordSized
|
|
operands:
|
|
setObject: WordSized
|
|
input: BoxedValue
|
|
hash: WordSized
|
|
num_temps: 4
|
|
|
|
- name: SetObjectHasValueVMCall
|
|
result_type: WordSized
|
|
call_instruction: true
|
|
operands:
|
|
setObject: WordSized
|
|
input: BoxedValue
|
|
|
|
- name: MapObjectHasNonBigInt
|
|
result_type: WordSized
|
|
operands:
|
|
mapObject: WordSized
|
|
input: BoxedValue
|
|
hash: WordSized
|
|
num_temps: 2
|
|
|
|
- name: MapObjectHasBigInt
|
|
result_type: WordSized
|
|
operands:
|
|
mapObject: WordSized
|
|
input: BoxedValue
|
|
hash: WordSized
|
|
num_temps: 4
|
|
|
|
- name: MapObjectHasValue
|
|
result_type: WordSized
|
|
operands:
|
|
mapObject: WordSized
|
|
input: BoxedValue
|
|
hash: WordSized
|
|
num_temps: 4
|
|
|
|
- name: MapObjectHasValueVMCall
|
|
result_type: WordSized
|
|
call_instruction: true
|
|
operands:
|
|
mapObject: WordSized
|
|
input: BoxedValue
|
|
|
|
- name: MapObjectGetNonBigInt
|
|
result_type: BoxedValue
|
|
operands:
|
|
mapObject: WordSized
|
|
input: BoxedValue
|
|
hash: WordSized
|
|
num_temps: 2
|
|
|
|
- name: MapObjectGetBigInt
|
|
result_type: BoxedValue
|
|
operands:
|
|
mapObject: WordSized
|
|
input: BoxedValue
|
|
hash: WordSized
|
|
num_temps: 4
|
|
|
|
- name: MapObjectGetValue
|
|
result_type: BoxedValue
|
|
operands:
|
|
mapObject: WordSized
|
|
input: BoxedValue
|
|
hash: WordSized
|
|
num_temps: 4
|
|
|
|
- name: MapObjectGetValueVMCall
|
|
result_type: BoxedValue
|
|
call_instruction: true
|
|
operands:
|
|
mapObject: WordSized
|
|
input: BoxedValue
|
|
|
|
- name: BigIntAsUintN
|
|
result_type: WordSized
|
|
operands:
|
|
bits: WordSized
|
|
input: WordSized
|
|
call_instruction: true
|
|
|
|
- name: BigIntAsUintN64
|
|
gen_boilerplate: false
|
|
|
|
- name: BigIntAsUintN32
|
|
gen_boilerplate: false
|
|
|
|
- name: IonToWasmCall
|
|
gen_boilerplate: false
|
|
|
|
- name: IonToWasmCallV
|
|
gen_boilerplate: false
|
|
|
|
- name: IonToWasmCallI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmBoxValue
|
|
result_type: WordSized
|
|
operands:
|
|
input: BoxedValue
|
|
|
|
- name: WasmAnyRefFromJSObject
|
|
result_type: WordSized
|
|
operands:
|
|
input: WordSized
|
|
|
|
# Constant Simd128
|
|
- name: Simd128
|
|
result_type: WordSized
|
|
arguments:
|
|
simd128: SimdConstant
|
|
|
|
- name: WasmTernarySimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmBinarySimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmBinarySimd128WithConstant
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmVariableShiftSimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmConstantShiftSimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmSignReplicationSimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmShuffleSimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmPermuteSimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmReplaceLaneSimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmReplaceInt64LaneSimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmScalarToSimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmInt64ToSimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmUnarySimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmReduceSimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmReduceAndBranchSimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmReduceSimd128ToInt64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmLoadLaneSimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmStoreLaneSimd128
|
|
gen_boilerplate: false
|
|
|
|
- name: Unbox
|
|
gen_boilerplate: false
|
|
|
|
- name: UnboxFloatingPoint
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmUint32ToDouble
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmUint32ToFloat32
|
|
gen_boilerplate: false
|
|
|
|
- name: DivI
|
|
gen_boilerplate: false
|
|
|
|
- name: ModI
|
|
gen_boilerplate: false
|
|
|
|
- name: DivPowTwoI
|
|
gen_boilerplate: false
|
|
|
|
- name: ModPowTwoI
|
|
gen_boilerplate: false
|
|
|
|
- name: TableSwitch
|
|
gen_boilerplate: false
|
|
|
|
- name: TableSwitchV
|
|
gen_boilerplate: false
|
|
|
|
- name: MulI
|
|
gen_boilerplate: false
|
|
|
|
#ifdef JS_CODEGEN_X86
|
|
- name: BoxFloatingPoint
|
|
gen_boilerplate: false
|
|
|
|
- name: DivOrModI64
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivOrModI64
|
|
gen_boilerplate: false
|
|
|
|
- name: DivOrModConstantI
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivOrMod
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivOrModConstant
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmTruncateToInt64
|
|
gen_boilerplate: false
|
|
|
|
- name: Int64ToFloatingPoint
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicLoadI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicStoreI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmCompareExchangeI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicBinopI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicExchangeI64
|
|
gen_boilerplate: false
|
|
#endif
|
|
|
|
#ifdef JS_CODEGEN_X64
|
|
- name: DivOrModI64
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivOrModI64
|
|
gen_boilerplate: false
|
|
|
|
- name: DivOrModConstantI
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivOrMod
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivOrModConstant
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmTruncateToInt64
|
|
gen_boilerplate: false
|
|
|
|
- name: Int64ToFloatingPoint
|
|
gen_boilerplate: false
|
|
#endif
|
|
|
|
#ifdef JS_CODEGEN_ARM
|
|
- name: BoxFloatingPoint
|
|
gen_boilerplate: false
|
|
|
|
- name: DivOrModI64
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivOrModI64
|
|
gen_boilerplate: false
|
|
|
|
- name: SoftDivI
|
|
gen_boilerplate: false
|
|
|
|
- name: SoftModI
|
|
gen_boilerplate: false
|
|
|
|
- name: ModMaskI
|
|
gen_boilerplate: false
|
|
|
|
- name: UDiv
|
|
gen_boilerplate: false
|
|
|
|
- name: UMod
|
|
gen_boilerplate: false
|
|
|
|
- name: SoftUDivOrMod
|
|
gen_boilerplate: false
|
|
|
|
- name: Int64ToFloatingPointCall
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmTruncateToInt64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicLoadI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicStoreI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmCompareExchangeI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicBinopI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicExchangeI64
|
|
gen_boilerplate: false
|
|
#endif
|
|
|
|
#ifdef JS_CODEGEN_ARM64
|
|
- name: DivOrModI64
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivOrModI64
|
|
gen_boilerplate: false
|
|
|
|
- name: DivConstantI
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivConstantI
|
|
gen_boilerplate: false
|
|
|
|
- name: ModMaskI
|
|
gen_boilerplate: false
|
|
|
|
- name: UDiv
|
|
gen_boilerplate: false
|
|
|
|
- name: UMod
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmTruncateToInt64
|
|
gen_boilerplate: false
|
|
|
|
- name: Int64ToFloatingPoint
|
|
gen_boilerplate: false
|
|
#endif
|
|
|
|
#ifdef JS_CODEGEN_MIPS32
|
|
- name: BoxFloatingPoint
|
|
gen_boilerplate: false
|
|
|
|
- name: DivOrModI64
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivOrModI64
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivOrMod
|
|
gen_boilerplate: false
|
|
|
|
- name: ModMaskI
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmTruncateToInt64
|
|
gen_boilerplate: false
|
|
|
|
- name: Int64ToFloatingPoint
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmUnalignedLoad
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmUnalignedLoadI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmUnalignedStore
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmUnalignedStoreI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicLoadI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicStoreI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmCompareExchangeI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicBinopI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicExchangeI64
|
|
gen_boilerplate: false
|
|
#endif
|
|
|
|
#ifdef JS_CODEGEN_MIPS64
|
|
- name: DivOrModI64
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivOrMod
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivOrModI64
|
|
gen_boilerplate: false
|
|
|
|
- name: ModMaskI
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmTruncateToInt64
|
|
gen_boilerplate: false
|
|
|
|
- name: Int64ToFloatingPoint
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmUnalignedLoad
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmUnalignedLoadI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmUnalignedStore
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmUnalignedStoreI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmCompareExchangeI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicBinopI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicExchangeI64
|
|
gen_boilerplate: false
|
|
#endif
|
|
|
|
#ifdef JS_CODEGEN_LOONG64
|
|
- name: DivOrModI64
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivOrMod
|
|
gen_boilerplate: false
|
|
|
|
- name: UDivOrModI64
|
|
gen_boilerplate: false
|
|
|
|
- name: ModMaskI
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmTruncateToInt64
|
|
gen_boilerplate: false
|
|
|
|
- name: Int64ToFloatingPoint
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmCompareExchangeI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicBinopI64
|
|
gen_boilerplate: false
|
|
|
|
- name: WasmAtomicExchangeI64
|
|
gen_boilerplate: false
|
|
#endif
|