#!/usr/bin/env python3
"""
Note: The contents of the current file have been automatically
generated by the "utils/hermes_bytecode_structs_parser.py"
script

Please do not edit it manually. 👍
"""

from typing import List, Set, Dict, Union, Optional, Sequence, Any

# Imports from the current diretory
from .def_classes import *

_instructions: List[Instruction] = []

Reg8 = OperandType('Reg8', 'uint8_t')
Reg32 = OperandType('Reg32', 'uint32_t')
UInt8 = OperandType('UInt8', 'uint8_t')
UInt16 = OperandType('UInt16', 'uint16_t')
UInt32 = OperandType('UInt32', 'uint32_t')
Addr8 = OperandType('Addr8', 'int8_t')
Addr32 = OperandType('Addr32', 'int32_t')
Imm32 = OperandType('Imm32', 'int32_t')
Double = OperandType('Double', 'double')

Unreachable = Instruction('Unreachable', 0, [], globals())

NewObjectWithBuffer = Instruction(
    'NewObjectWithBuffer', 1, [Reg8, UInt16, UInt16], globals()
)

NewObjectWithBufferLong = Instruction(
    'NewObjectWithBufferLong', 2, [Reg8, UInt32, UInt32], globals()
)

NewObjectWithBufferAndParent = Instruction(
    'NewObjectWithBufferAndParent', 3, [Reg8, Reg8, UInt32, UInt32], globals()
)

NewObject = Instruction('NewObject', 4, [Reg8], globals())

NewObjectWithParent = Instruction(
    'NewObjectWithParent', 5, [Reg8, Reg8], globals()
)

NewArrayWithBuffer = Instruction(
    'NewArrayWithBuffer', 6, [Reg8, UInt16, UInt16, UInt16], globals()
)

NewArrayWithBufferLong = Instruction(
    'NewArrayWithBufferLong', 7, [Reg8, UInt16, UInt16, UInt32], globals()
)

NewArray = Instruction('NewArray', 8, [Reg8, UInt16], globals())

NewFastArray = Instruction('NewFastArray', 9, [Reg8, UInt16], globals())

FastArrayLength = Instruction('FastArrayLength', 10, [Reg8, Reg8], globals())

FastArrayLoad = Instruction('FastArrayLoad', 11, [Reg8, Reg8, Reg8], globals())

FastArrayStore = Instruction(
    'FastArrayStore', 12, [Reg8, Reg8, Reg8], globals()
)

FastArrayPush = Instruction('FastArrayPush', 13, [Reg8, Reg8], globals())

FastArrayAppend = Instruction('FastArrayAppend', 14, [Reg8, Reg8], globals())

CacheNewObject = Instruction(
    'CacheNewObject', 15, [Reg8, Reg8, UInt32, UInt8], globals()
)

Mov = Instruction('Mov', 16, [Reg8, Reg8], globals())

MovLong = Instruction('MovLong', 17, [Reg32, Reg32], globals())

Negate = Instruction('Negate', 18, [Reg8, Reg8], globals())

Not = Instruction('Not', 19, [Reg8, Reg8], globals())

BitNot = Instruction('BitNot', 20, [Reg8, Reg8], globals())

TypeOf = Instruction('TypeOf', 21, [Reg8, Reg8], globals())

Eq = Instruction('Eq', 22, [Reg8, Reg8, Reg8], globals())

StrictEq = Instruction('StrictEq', 23, [Reg8, Reg8, Reg8], globals())

Neq = Instruction('Neq', 24, [Reg8, Reg8, Reg8], globals())

StrictNeq = Instruction('StrictNeq', 25, [Reg8, Reg8, Reg8], globals())

Less = Instruction('Less', 26, [Reg8, Reg8, Reg8], globals())

LessEq = Instruction('LessEq', 27, [Reg8, Reg8, Reg8], globals())

Greater = Instruction('Greater', 28, [Reg8, Reg8, Reg8], globals())

GreaterEq = Instruction('GreaterEq', 29, [Reg8, Reg8, Reg8], globals())

Add = Instruction('Add', 30, [Reg8, Reg8, Reg8], globals())

AddN = Instruction('AddN', 31, [Reg8, Reg8, Reg8], globals())

AddS = Instruction('AddS', 32, [Reg8, Reg8, Reg8], globals())

Mul = Instruction('Mul', 33, [Reg8, Reg8, Reg8], globals())

MulN = Instruction('MulN', 34, [Reg8, Reg8, Reg8], globals())

Div = Instruction('Div', 35, [Reg8, Reg8, Reg8], globals())

DivN = Instruction('DivN', 36, [Reg8, Reg8, Reg8], globals())

Mod = Instruction('Mod', 37, [Reg8, Reg8, Reg8], globals())

Sub = Instruction('Sub', 38, [Reg8, Reg8, Reg8], globals())

SubN = Instruction('SubN', 39, [Reg8, Reg8, Reg8], globals())

LShift = Instruction('LShift', 40, [Reg8, Reg8, Reg8], globals())

RShift = Instruction('RShift', 41, [Reg8, Reg8, Reg8], globals())

URshift = Instruction('URshift', 42, [Reg8, Reg8, Reg8], globals())

BitAnd = Instruction('BitAnd', 43, [Reg8, Reg8, Reg8], globals())

BitXor = Instruction('BitXor', 44, [Reg8, Reg8, Reg8], globals())

BitOr = Instruction('BitOr', 45, [Reg8, Reg8, Reg8], globals())

Inc = Instruction('Inc', 46, [Reg8, Reg8], globals())

Dec = Instruction('Dec', 47, [Reg8, Reg8], globals())

InstanceOf = Instruction('InstanceOf', 48, [Reg8, Reg8, Reg8], globals())

IsIn = Instruction('IsIn', 49, [Reg8, Reg8, Reg8], globals())

PrivateIsIn = Instruction(
    'PrivateIsIn', 50, [Reg8, Reg8, Reg8, Reg8], globals()
)

TypeOfIs = Instruction('TypeOfIs', 51, [Reg8, Reg8, UInt16], globals())

GetParentEnvironment = Instruction(
    'GetParentEnvironment', 52, [Reg8, UInt8], globals()
)

GetEnvironment = Instruction(
    'GetEnvironment', 53, [Reg8, Reg8, UInt8], globals()
)

GetClosureEnvironment = Instruction(
    'GetClosureEnvironment', 54, [Reg8, Reg8], globals()
)

StoreToEnvironment = Instruction(
    'StoreToEnvironment', 55, [Reg8, UInt8, Reg8], globals()
)

StoreToEnvironmentL = Instruction(
    'StoreToEnvironmentL', 56, [Reg8, UInt16, Reg8], globals()
)

StoreNPToEnvironment = Instruction(
    'StoreNPToEnvironment', 57, [Reg8, UInt8, Reg8], globals()
)

StoreNPToEnvironmentL = Instruction(
    'StoreNPToEnvironmentL', 58, [Reg8, UInt16, Reg8], globals()
)

LoadFromEnvironment = Instruction(
    'LoadFromEnvironment', 59, [Reg8, Reg8, UInt8], globals()
)

LoadFromEnvironmentL = Instruction(
    'LoadFromEnvironmentL', 60, [Reg8, Reg8, UInt16], globals()
)

GetGlobalObject = Instruction('GetGlobalObject', 61, [Reg8], globals())

GetNewTarget = Instruction('GetNewTarget', 62, [Reg8], globals())

LoadParentNoTraps = Instruction(
    'LoadParentNoTraps', 63, [Reg8, Reg8], globals()
)

CreateFunctionEnvironment = Instruction(
    'CreateFunctionEnvironment', 64, [Reg8, UInt8], globals()
)

CreateTopLevelEnvironment = Instruction(
    'CreateTopLevelEnvironment', 65, [Reg8, UInt32], globals()
)

CreateEnvironment = Instruction(
    'CreateEnvironment', 66, [Reg8, Reg8, UInt32], globals()
)

DeclareGlobalVar = Instruction('DeclareGlobalVar', 67, [UInt32], globals())

DeclareGlobalVar.operands[0].operand_meaning = OperandMeaning.string_id

GetByIdShort = Instruction(
    'GetByIdShort', 68, [Reg8, Reg8, UInt8, UInt8], globals()
)

GetById = Instruction('GetById', 69, [Reg8, Reg8, UInt8, UInt16], globals())

GetByIdLong = Instruction(
    'GetByIdLong', 70, [Reg8, Reg8, UInt8, UInt32], globals()
)

GetByIdShort.operands[3].operand_meaning = OperandMeaning.string_id

GetById.operands[3].operand_meaning = OperandMeaning.string_id

GetByIdLong.operands[3].operand_meaning = OperandMeaning.string_id

GetByIdWithReceiverLong = Instruction(
    'GetByIdWithReceiverLong', 71, [Reg8, Reg8, UInt8, Reg8, UInt32], globals()
)

GetByIdWithReceiverLong.operands[4].operand_meaning = OperandMeaning.string_id

TryGetById = Instruction(
    'TryGetById', 72, [Reg8, Reg8, UInt8, UInt16], globals()
)

TryGetByIdLong = Instruction(
    'TryGetByIdLong', 73, [Reg8, Reg8, UInt8, UInt32], globals()
)

TryGetById.operands[3].operand_meaning = OperandMeaning.string_id

TryGetByIdLong.operands[3].operand_meaning = OperandMeaning.string_id

PutByIdLoose = Instruction(
    'PutByIdLoose', 74, [Reg8, Reg8, UInt8, UInt16], globals()
)

PutByIdStrict = Instruction(
    'PutByIdStrict', 75, [Reg8, Reg8, UInt8, UInt16], globals()
)

PutByIdLooseLong = Instruction(
    'PutByIdLooseLong', 76, [Reg8, Reg8, UInt8, UInt32], globals()
)

PutByIdStrictLong = Instruction(
    'PutByIdStrictLong', 77, [Reg8, Reg8, UInt8, UInt32], globals()
)

PutByIdLoose.operands[3].operand_meaning = OperandMeaning.string_id

PutByIdStrict.operands[3].operand_meaning = OperandMeaning.string_id

PutByIdLooseLong.operands[3].operand_meaning = OperandMeaning.string_id

PutByIdStrictLong.operands[3].operand_meaning = OperandMeaning.string_id

TryPutByIdLoose = Instruction(
    'TryPutByIdLoose', 78, [Reg8, Reg8, UInt8, UInt16], globals()
)

TryPutByIdStrict = Instruction(
    'TryPutByIdStrict', 79, [Reg8, Reg8, UInt8, UInt16], globals()
)

TryPutByIdLooseLong = Instruction(
    'TryPutByIdLooseLong', 80, [Reg8, Reg8, UInt8, UInt32], globals()
)

TryPutByIdStrictLong = Instruction(
    'TryPutByIdStrictLong', 81, [Reg8, Reg8, UInt8, UInt32], globals()
)

TryPutByIdLoose.operands[3].operand_meaning = OperandMeaning.string_id

TryPutByIdStrict.operands[3].operand_meaning = OperandMeaning.string_id

TryPutByIdLooseLong.operands[3].operand_meaning = OperandMeaning.string_id

TryPutByIdStrictLong.operands[3].operand_meaning = OperandMeaning.string_id

PutOwnBySlotIdx = Instruction(
    'PutOwnBySlotIdx', 82, [Reg8, Reg8, UInt8], globals()
)

PutOwnBySlotIdxLong = Instruction(
    'PutOwnBySlotIdxLong', 83, [Reg8, Reg8, UInt32], globals()
)

GetOwnBySlotIdx = Instruction(
    'GetOwnBySlotIdx', 84, [Reg8, Reg8, UInt8], globals()
)

GetOwnBySlotIdxLong = Instruction(
    'GetOwnBySlotIdxLong', 85, [Reg8, Reg8, UInt32], globals()
)

DefineOwnById = Instruction(
    'DefineOwnById', 86, [Reg8, Reg8, UInt8, UInt16], globals()
)

DefineOwnByIdLong = Instruction(
    'DefineOwnByIdLong', 87, [Reg8, Reg8, UInt8, UInt32], globals()
)

DefineOwnByIdLong.operands[3].operand_meaning = OperandMeaning.string_id

DefineOwnByIndex = Instruction(
    'DefineOwnByIndex', 88, [Reg8, Reg8, UInt8], globals()
)

DefineOwnByIndexL = Instruction(
    'DefineOwnByIndexL', 89, [Reg8, Reg8, UInt32], globals()
)

DefineOwnInDenseArray = Instruction(
    'DefineOwnInDenseArray', 90, [Reg8, Reg8, UInt8], globals()
)

DefineOwnInDenseArrayL = Instruction(
    'DefineOwnInDenseArrayL', 91, [Reg8, Reg8, UInt16], globals()
)

DefineOwnByVal = Instruction(
    'DefineOwnByVal', 92, [Reg8, Reg8, Reg8, UInt8], globals()
)

GetByVal = Instruction('GetByVal', 93, [Reg8, Reg8, Reg8], globals())

GetByIndex = Instruction('GetByIndex', 94, [Reg8, Reg8, UInt8], globals())

GetByValWithReceiver = Instruction(
    'GetByValWithReceiver', 95, [Reg8, Reg8, Reg8, Reg8], globals()
)

PutByValLoose = Instruction('PutByValLoose', 96, [Reg8, Reg8, Reg8], globals())

PutByValStrict = Instruction(
    'PutByValStrict', 97, [Reg8, Reg8, Reg8], globals()
)

PutByValWithReceiver = Instruction(
    'PutByValWithReceiver', 98, [Reg8, Reg8, Reg8, Reg8, UInt8], globals()
)

DelByVal = Instruction('DelByVal', 99, [Reg8, Reg8, Reg8, UInt8], globals())

AddOwnPrivateBySym = Instruction(
    'AddOwnPrivateBySym', 100, [Reg8, Reg8, Reg8], globals()
)

GetOwnPrivateBySym = Instruction(
    'GetOwnPrivateBySym', 101, [Reg8, Reg8, UInt8, Reg8], globals()
)

PutOwnPrivateBySym = Instruction(
    'PutOwnPrivateBySym', 102, [Reg8, Reg8, UInt8, Reg8], globals()
)

DefineOwnGetterSetterByVal = Instruction(
    'DefineOwnGetterSetterByVal',
    103,
    [Reg8, Reg8, Reg8, Reg8, UInt8],
    globals(),
)

GetPNameList = Instruction(
    'GetPNameList', 104, [Reg8, Reg8, Reg8, Reg8], globals()
)

GetNextPName = Instruction(
    'GetNextPName', 105, [Reg8, Reg8, Reg8, Reg8, Reg8], globals()
)

Call = Instruction('Call', 106, [Reg8, Reg8, UInt8], globals())
Call.has_ret_target = True

Construct = Instruction('Construct', 107, [Reg8, Reg8, UInt8], globals())
Construct.has_ret_target = True

Call1 = Instruction('Call1', 108, [Reg8, Reg8, Reg8], globals())
Call1.has_ret_target = True

CallWithNewTarget = Instruction(
    'CallWithNewTarget', 109, [Reg8, Reg8, Reg8, UInt8], globals()
)
CallWithNewTarget.has_ret_target = True

Call2 = Instruction('Call2', 110, [Reg8, Reg8, Reg8, Reg8], globals())
Call2.has_ret_target = True

Call3 = Instruction('Call3', 111, [Reg8, Reg8, Reg8, Reg8, Reg8], globals())
Call3.has_ret_target = True

Call4 = Instruction(
    'Call4', 112, [Reg8, Reg8, Reg8, Reg8, Reg8, Reg8], globals()
)
Call4.has_ret_target = True

CallWithNewTargetLong = Instruction(
    'CallWithNewTargetLong', 113, [Reg8, Reg8, Reg8, Reg8], globals()
)
CallWithNewTargetLong.has_ret_target = True

CallRequire = Instruction('CallRequire', 114, [Reg8, Reg8, UInt32], globals())
CallRequire.has_ret_target = True

CallBuiltin = Instruction('CallBuiltin', 115, [Reg8, UInt8, UInt8], globals())

CallBuiltinLong = Instruction(
    'CallBuiltinLong', 116, [Reg8, UInt8, UInt32], globals()
)

GetBuiltinClosure = Instruction(
    'GetBuiltinClosure', 117, [Reg8, UInt8], globals()
)

Ret = Instruction('Ret', 118, [Reg8], globals())

Catch = Instruction('Catch', 119, [Reg8], globals())

DirectEval = Instruction('DirectEval', 120, [Reg8, Reg8, UInt8], globals())

Throw = Instruction('Throw', 121, [Reg8], globals())

ThrowIfEmpty = Instruction('ThrowIfEmpty', 122, [Reg8, Reg8], globals())

ThrowIfUndefined = Instruction(
    'ThrowIfUndefined', 123, [Reg8, Reg8], globals()
)

ThrowIfThisInitialized = Instruction(
    'ThrowIfThisInitialized', 124, [Reg8], globals()
)

Debugger = Instruction('Debugger', 125, [], globals())

AsyncBreakCheck = Instruction('AsyncBreakCheck', 126, [], globals())

ProfilePoint = Instruction('ProfilePoint', 127, [UInt16], globals())

CreateBaseClass = Instruction(
    'CreateBaseClass', 128, [Reg8, Reg8, Reg8, UInt16], globals()
)

CreateBaseClassLongIndex = Instruction(
    'CreateBaseClassLongIndex', 129, [Reg8, Reg8, Reg8, UInt32], globals()
)

CreateDerivedClass = Instruction(
    'CreateDerivedClass', 130, [Reg8, Reg8, Reg8, Reg8, UInt16], globals()
)

CreateDerivedClassLongIndex = Instruction(
    'CreateDerivedClassLongIndex',
    131,
    [Reg8, Reg8, Reg8, Reg8, UInt32],
    globals(),
)

CreateClosure = Instruction(
    'CreateClosure', 132, [Reg8, Reg8, UInt16], globals()
)

CreateClosureLongIndex = Instruction(
    'CreateClosureLongIndex', 133, [Reg8, Reg8, UInt32], globals()
)

CreateClosure.operands[2].operand_meaning = OperandMeaning.function_id

CreateClosureLongIndex.operands[2].operand_meaning = OperandMeaning.function_id

CreateThisForNew = Instruction(
    'CreateThisForNew', 134, [Reg8, Reg8, UInt8], globals()
)

CreateThisForSuper = Instruction(
    'CreateThisForSuper', 135, [Reg8, Reg8, Reg8, UInt8], globals()
)

SelectObject = Instruction('SelectObject', 136, [Reg8, Reg8, Reg8], globals())

LoadParam = Instruction('LoadParam', 137, [Reg8, UInt8], globals())

LoadParamLong = Instruction('LoadParamLong', 138, [Reg8, UInt32], globals())

LoadConstUInt8 = Instruction('LoadConstUInt8', 139, [Reg8, UInt8], globals())

LoadConstInt = Instruction('LoadConstInt', 140, [Reg8, Imm32], globals())

LoadConstDouble = Instruction(
    'LoadConstDouble', 141, [Reg8, Double], globals()
)

LoadConstBigInt = Instruction(
    'LoadConstBigInt', 142, [Reg8, UInt16], globals()
)

LoadConstBigIntLongIndex = Instruction(
    'LoadConstBigIntLongIndex', 143, [Reg8, UInt32], globals()
)

LoadConstBigInt.operands[1].operand_meaning = OperandMeaning.bigint_id

LoadConstBigIntLongIndex.operands[1].operand_meaning = OperandMeaning.bigint_id

LoadConstString = Instruction(
    'LoadConstString', 144, [Reg8, UInt16], globals()
)

LoadConstStringLongIndex = Instruction(
    'LoadConstStringLongIndex', 145, [Reg8, UInt32], globals()
)

LoadConstString.operands[1].operand_meaning = OperandMeaning.string_id

LoadConstStringLongIndex.operands[1].operand_meaning = OperandMeaning.string_id

LoadConstEmpty = Instruction('LoadConstEmpty', 146, [Reg8], globals())

LoadConstUndefined = Instruction('LoadConstUndefined', 147, [Reg8], globals())

LoadConstNull = Instruction('LoadConstNull', 148, [Reg8], globals())

LoadConstTrue = Instruction('LoadConstTrue', 149, [Reg8], globals())

LoadConstFalse = Instruction('LoadConstFalse', 150, [Reg8], globals())

LoadConstZero = Instruction('LoadConstZero', 151, [Reg8], globals())

CoerceThisNS = Instruction('CoerceThisNS', 152, [Reg8, Reg8], globals())

LoadThisNS = Instruction('LoadThisNS', 153, [Reg8], globals())

ToNumber = Instruction('ToNumber', 154, [Reg8, Reg8], globals())

ToNumeric = Instruction('ToNumeric', 155, [Reg8, Reg8], globals())

ToInt32 = Instruction('ToInt32', 156, [Reg8, Reg8], globals())

AddEmptyString = Instruction('AddEmptyString', 157, [Reg8, Reg8], globals())

CreatePrivateName = Instruction(
    'CreatePrivateName', 158, [Reg8, UInt32], globals()
)

CreatePrivateName.operands[1].operand_meaning = OperandMeaning.string_id

GetArgumentsPropByValLoose = Instruction(
    'GetArgumentsPropByValLoose', 159, [Reg8, Reg8, Reg8], globals()
)

GetArgumentsPropByValStrict = Instruction(
    'GetArgumentsPropByValStrict', 160, [Reg8, Reg8, Reg8], globals()
)

GetArgumentsLength = Instruction(
    'GetArgumentsLength', 161, [Reg8, Reg8], globals()
)

ReifyArgumentsStrict = Instruction(
    'ReifyArgumentsStrict', 162, [Reg8], globals()
)

ReifyArgumentsLoose = Instruction(
    'ReifyArgumentsLoose', 163, [Reg8], globals()
)

ToPropertyKey = Instruction('ToPropertyKey', 164, [Reg8, Reg8], globals())

CreateRegExp = Instruction(
    'CreateRegExp', 165, [Reg8, UInt32, UInt32, UInt32], globals()
)

CreateRegExp.operands[1].operand_meaning = OperandMeaning.string_id

CreateRegExp.operands[2].operand_meaning = OperandMeaning.string_id

UIntSwitchImm = Instruction(
    'UIntSwitchImm', 166, [Reg8, UInt32, Addr32, UInt32, UInt32], globals()
)

StringSwitchImm = Instruction(
    'StringSwitchImm', 167, [Reg8, UInt32, UInt32, Addr32, UInt32], globals()
)

CreateGenerator = Instruction(
    'CreateGenerator', 168, [Reg8, Reg8, UInt16], globals()
)

CreateGeneratorLongIndex = Instruction(
    'CreateGeneratorLongIndex', 169, [Reg8, Reg8, UInt32], globals()
)

CreateGenerator.operands[2].operand_meaning = OperandMeaning.function_id

CreateGeneratorLongIndex.operands[
    2
].operand_meaning = OperandMeaning.function_id

IteratorBegin = Instruction('IteratorBegin', 170, [Reg8, Reg8], globals())

IteratorNext = Instruction('IteratorNext', 171, [Reg8, Reg8, Reg8], globals())

IteratorClose = Instruction('IteratorClose', 172, [Reg8, UInt8], globals())

TypedLoadParent = Instruction('TypedLoadParent', 173, [Reg8, Reg8], globals())

Jmp = Instruction('Jmp', 174, [Addr8], globals())
JmpLong = Instruction('JmpLong', 175, [Addr32], globals())

JmpTrue = Instruction('JmpTrue', 176, [Addr8, Reg8], globals())
JmpTrueLong = Instruction('JmpTrueLong', 177, [Addr32, Reg8], globals())

JmpFalse = Instruction('JmpFalse', 178, [Addr8, Reg8], globals())
JmpFalseLong = Instruction('JmpFalseLong', 179, [Addr32, Reg8], globals())

JmpUndefined = Instruction('JmpUndefined', 180, [Addr8, Reg8], globals())
JmpUndefinedLong = Instruction(
    'JmpUndefinedLong', 181, [Addr32, Reg8], globals()
)

JmpTypeOfIs = Instruction(
    'JmpTypeOfIs', 182, [Addr32, Reg8, UInt16], globals()
)

JLess = Instruction('JLess', 183, [Addr8, Reg8, Reg8], globals())
JLessLong = Instruction('JLessLong', 184, [Addr32, Reg8, Reg8], globals())

JNotLess = Instruction('JNotLess', 185, [Addr8, Reg8, Reg8], globals())
JNotLessLong = Instruction(
    'JNotLessLong', 186, [Addr32, Reg8, Reg8], globals()
)

JLessN = Instruction('JLessN', 187, [Addr8, Reg8, Reg8], globals())
JLessNLong = Instruction('JLessNLong', 188, [Addr32, Reg8, Reg8], globals())

JNotLessN = Instruction('JNotLessN', 189, [Addr8, Reg8, Reg8], globals())
JNotLessNLong = Instruction(
    'JNotLessNLong', 190, [Addr32, Reg8, Reg8], globals()
)

JLessEqual = Instruction('JLessEqual', 191, [Addr8, Reg8, Reg8], globals())
JLessEqualLong = Instruction(
    'JLessEqualLong', 192, [Addr32, Reg8, Reg8], globals()
)

JNotLessEqual = Instruction(
    'JNotLessEqual', 193, [Addr8, Reg8, Reg8], globals()
)
JNotLessEqualLong = Instruction(
    'JNotLessEqualLong', 194, [Addr32, Reg8, Reg8], globals()
)

JLessEqualN = Instruction('JLessEqualN', 195, [Addr8, Reg8, Reg8], globals())
JLessEqualNLong = Instruction(
    'JLessEqualNLong', 196, [Addr32, Reg8, Reg8], globals()
)

JNotLessEqualN = Instruction(
    'JNotLessEqualN', 197, [Addr8, Reg8, Reg8], globals()
)
JNotLessEqualNLong = Instruction(
    'JNotLessEqualNLong', 198, [Addr32, Reg8, Reg8], globals()
)

JGreater = Instruction('JGreater', 199, [Addr8, Reg8, Reg8], globals())
JGreaterLong = Instruction(
    'JGreaterLong', 200, [Addr32, Reg8, Reg8], globals()
)

JNotGreater = Instruction('JNotGreater', 201, [Addr8, Reg8, Reg8], globals())
JNotGreaterLong = Instruction(
    'JNotGreaterLong', 202, [Addr32, Reg8, Reg8], globals()
)

JGreaterEqual = Instruction(
    'JGreaterEqual', 203, [Addr8, Reg8, Reg8], globals()
)
JGreaterEqualLong = Instruction(
    'JGreaterEqualLong', 204, [Addr32, Reg8, Reg8], globals()
)

JNotGreaterEqual = Instruction(
    'JNotGreaterEqual', 205, [Addr8, Reg8, Reg8], globals()
)
JNotGreaterEqualLong = Instruction(
    'JNotGreaterEqualLong', 206, [Addr32, Reg8, Reg8], globals()
)

JEqual = Instruction('JEqual', 207, [Addr8, Reg8, Reg8], globals())
JEqualLong = Instruction('JEqualLong', 208, [Addr32, Reg8, Reg8], globals())

JNotEqual = Instruction('JNotEqual', 209, [Addr8, Reg8, Reg8], globals())
JNotEqualLong = Instruction(
    'JNotEqualLong', 210, [Addr32, Reg8, Reg8], globals()
)

JStrictEqual = Instruction('JStrictEqual', 211, [Addr8, Reg8, Reg8], globals())
JStrictEqualLong = Instruction(
    'JStrictEqualLong', 212, [Addr32, Reg8, Reg8], globals()
)

JStrictNotEqual = Instruction(
    'JStrictNotEqual', 213, [Addr8, Reg8, Reg8], globals()
)
JStrictNotEqualLong = Instruction(
    'JStrictNotEqualLong', 214, [Addr32, Reg8, Reg8], globals()
)

JmpBuiltinIs = Instruction(
    'JmpBuiltinIs', 215, [Addr8, UInt8, Reg8], globals()
)

JmpBuiltinIsLong = Instruction(
    'JmpBuiltinIsLong', 216, [Addr32, UInt8, Reg8], globals()
)

JmpBuiltinIsNot = Instruction(
    'JmpBuiltinIsNot', 217, [Addr8, UInt8, Reg8], globals()
)

JmpBuiltinIsNotLong = Instruction(
    'JmpBuiltinIsNotLong', 218, [Addr32, UInt8, Reg8], globals()
)

_opcode_to_instruction: Dict[int, Instruction] = {
    v.opcode: v for v in _instructions
}
_name_to_instruction: Dict[str, Instruction] = {
    v.name: v for v in _instructions
}

_builtin_function_names: List[str] = [
    'Array.isArray',
    'Date.UTC',
    'Date.parse',
    'JSON.parse',
    'JSON.stringify',
    'Math.abs',
    'Math.acos',
    'Math.asin',
    'Math.atan',
    'Math.atan2',
    'Math.ceil',
    'Math.cos',
    'Math.exp',
    'Math.floor',
    'Math.hypot',
    'Math.imul',
    'Math.log',
    'Math.max',
    'Math.min',
    'Math.pow',
    'Math.round',
    'Math.sin',
    'Math.sqrt',
    'Math.tan',
    'Math.trunc',
    'Object.create',
    'Object.defineProperties',
    'Object.defineProperty',
    'Object.freeze',
    'Object.getOwnPropertyDescriptor',
    'Object.getOwnPropertyNames',
    'Object.getPrototypeOf',
    'Object.isExtensible',
    'Object.isFrozen',
    'Object.keys',
    'Object.seal',
    'String.fromCharCode',
    'silentSetPrototypeOf',
    'requireFast',
    'getTemplateObject',
    'ensureObject',
    'getMethod',
    'throwTypeError',
    'throwReferenceError',
    'copyDataProperties',
    'copyRestArgs',
    'arraySpread',
    'apply',
    'applyArguments',
    'applyWithNewTarget',
    'exportAll',
    'exponentiationOperator',
    'initRegexNamedGroups',
    'functionPrototypeApply',
    'functionPrototypeCall',
    'spawnAsync',
    'makeAsyncIterator',
]
