Skip to content

Latest commit

 

History

History
738 lines (386 loc) · 10.7 KB

bytecodes.rst

File metadata and controls

738 lines (386 loc) · 10.7 KB

Ignition Bytecodes 的详细解释

FIXME: I copied the bytecode list from design doc, url is https://docs.google.com/document/d/11T2CRex9hXxoJwbYqVQ32yIPMh0uouUZLdyrtmMoL44 We should check the source to make sure the doc is up to date.

FIXME 目前注意到实际代码中的字节码与文档中的差异较大了,需要重新调整下内容。

每个字节码需要分析到什么程度的模版:

  1. 口语解释这个 bytecode 是要做什么。
  2. 指出具体的代码实现的位置。
  3. 指出在从AST生成Bytecode的过程中的特殊之处,aka 与 AST / 前端的关系。如果没有的话写没有。
  4. 指出与 TurboFan 中的函数的关系。如果没有的话写没有。
  5. 指出与 Runtime 中的函数的关系。列调用的清单进行说明。
  6. 列出与其它字节码的逻辑关系,以及约束。
  7. 给出一个JS代码的例子,生成这个 bytecode,进行讲解。
  8. 加分项:在 turbofan 中如何被翻译。

TODO: 更新目录,保持跟V8最新代码一致。

Prefix Bytecodes

Wide

TODO

ExtraWide

TODO

Accumulator Load

LdaZero

TODO

LdaSmi

TODO

LdaUndefined

TODO

LdaNull

TODO

LdaTheHole

TODO

LdaTrue

TODO

LdaFalse

TODO

LdaConstant

TODO

Load/Store Globals

LdaGlobal

TODO

LdaGlobalInsideTypeof

TODO

StaGlobalSloppy

TODO 可能已经被删除

StaGlobalStrict

TODO 可能已经被删除

Context operations

PushContext

TODO

PopContext

TODO

LdaContextSlot

TODO

StaContextSlot

TODO

Unary Operators

Inc

TODO

Dec

TODO

LogicalNot

TODO

TypeOf

TODO

DeletePropertyStrict

TODO

DeletePropertySloppy

TODO

Control Flow

Jump

TODO

JumpConstant

TODO

JumpIfTrue

TODO

JumpIfTrueConstant

TODO

JumpIfFalse

TODO

JumpIfFalseConstant

TODO

JumpIfToBooleanTrue

TODO

JumpIfToBooleanTrueConstant

TODO

JumpIfToBooleanFalse

TODO

JumpIfToBooleanFalseConstant

TODO

JumpIfNull

TODO

JumpIfNullConstant

TODO

JumpIfUndefined

TODO

JumpIfUndefinedConstant

TODO

JumpIfNotHole

TODO

JumpIfNotHoleConstant

TODO

Load-Store lookup slots

LdaLookupSlot

TODO

LdaLookupSlotInsideTypeof

TODO

StaLookupSlotSloppy

TODO

StaLookupSlotStrict

TODO

Register Transfers

Ldar

TODO

Mov

TODO

Star

TODO

LoadIC operations

LoadIC

TODO

KeyedLoadIC

TODO

StoreIC operations

StoreICSloppy

TODO

StoreICStrict

TODO

KeyedStoreICSloppy

TODO

Binary Operators

Add

TODO

Sub

TODO

Mul

TODO

Div

TODO

Mod

TODO

BitwiseOr

TODO

BitwiseXor

TODO

BitwiseAnd

TODO

ShiftLeft

TODO

ShiftRight

TODO

ShiftRightLogical

TODO

For..in support

ForInPrepare

TODO

ForInDone

TODO

ForInNext

TODO

ForInStep

TODO

Stack guard check

StackCheck

TODO

Non-local flow control

Throw

TODO

ReThrow

TODO

Return

TODO

Illegal bytecode

Illegal

TODO

Calls

Call

TODO

TailCall

TODO

CallRuntime

TODO

CallRuntimeForPair

TODO

CallJSRuntime

TODO

Intrinsics

InvokeIntrinsic

TODO

New operator

New

TODO

Test Operators

TestEqual

TODO

TestNotEqual

TODO

TestEqualStrict

TODO

TestLessThan

TODO

TestGreaterThan

TODO

TestLessThanOrEqual

TODO

TestGreaterThanOrEqual

TODO

TestInstanceOf

TODO

TestIn

TODO

Cast operators

ToName

TODO

ToNumber

TODO

ToObject

TODO

Literals

CreateRegExpLiteral

TODO

CreateArrayLiteral

TODO

CreateObjectLiteral

TODO

Closure allocation

CreateClosure

TODO

Arguments allocation

CreateMappedArguments

TODO

CreateUnmappedArguments

TODO

CreateRestParameter

TODO

Debugger Support

DebugBreak0

TODO

DebugBreak1

TODO

DebugBreak2

TODO

DebugBreak3

TODO

DebugBreak4

TODO

DebugBreak5

TODO

DebugBreak6

TODO

DebugBreakWide

TODO

DebugBreakExtraWide

TODO