Documentation ¶
Overview ¶
Deprecated:已弃用
Index ¶
- Constants
- Variables
- func AllocReg(nodes [][]TextNode, regrun *RegRun, sserun *SseRegRun, vtr *vRegToReg, ...)
- func AutoName() string
- func MovIrToAsm(to *AstToAsm, irnode ir.IrNode, sbt *ast.Sbt, vreg *VReg, stack *Stack, ...)
- func Op2IrAutoToAsm(to *AstToAsm, irnode ir.IrNode, tmpreg *RegEnum, sbt *ast.Sbt, vreg *VReg, ...) bool
- func Op2IrToAsm(to *AstToAsm, op ir.OPEnum, dest, src string, destTyp, srcTyp ir.ArgEnum, ...)
- func OpImmIntAndAndStackVarDestTmp(varname, immint string, tmpreg *RegEnum, op ir.OPEnum, sbt *ast.Sbt, ...)
- func OpStackVarAndImmFloatDestTmp(to *AstToAsm, varname, immfloat string, tmpreg *RegEnum, op ir.OPEnum, ...)
- func OpStackVarAndStackVarDestTmp(varname1, varname2 string, tmpreg *RegEnum, op ir.OPEnum, sbt *ast.Sbt, ...)
- func OpTmpAndImmFloatDestStackVar(to *AstToAsm, varname, immfloat string, tmpreg *RegEnum, op ir.OPEnum, ...)
- func OpTmpAndImmFloatDestTmp(to *AstToAsm, immfloat string, tmpreg *RegEnum, op ir.OPEnum, vreg *VReg, ...)
- func OpTmpAndImmFloatDestVarToAsm(to *AstToAsm, varname, immfloat string, tmpreg *RegEnum, op ir.OPEnum, ...)
- func OpTmpAndImmIntDestStackVar(varname, immint string, tmpreg *RegEnum, op ir.OPEnum, stack *Stack, ...)
- func OpTmpAndImmIntDestTmp(immint string, tmpreg *RegEnum, op ir.OPEnum, vreg *VReg, ret *[]TextNode)
- func OpTmpAndImmIntDestVarToAsm(varname, immint string, tmpreg *RegEnum, op ir.OPEnum, vreg *VReg, ...)
- func OpTmpAndStackVarDestStackVar(src, dest string, tmpreg *RegEnum, op ir.OPEnum, sbt *ast.Sbt, stack *Stack, ...)
- func OpTmpAndStackVarDestTmp(varname string, tmpreg *RegEnum, op ir.OPEnum, sbt *ast.Sbt, stack *Stack, ...)
- func OpTmpAndVarDestTmp(varname string, tmpreg *RegEnum, op ir.OPEnum, sbt *ast.Sbt, vreg *VReg, ...)
- func OpTmpAndVarDestVar(varname1, varname2 string, tmpreg *RegEnum, op ir.OPEnum, sbt *ast.Sbt, ...)
- func OpVarAndImmFloatDestTmpIrToAsm(to *AstToAsm, varname, immfloat string, tmpreg *RegEnum, op ir.OPEnum, ...)
- func OpVarAndImmIntDestTmpIrToAsm(varname, immint string, tmpreg *RegEnum, op ir.OPEnum, vreg *VReg, ...)
- func OpVarAndVarDestTmp(varname1, varname2 string, tmpreg *RegEnum, op ir.OPEnum, sbt *ast.Sbt, ...)
- func ParserNode(to *AstToAsm, nodes []ast.Node, sbt *ast.Sbt, stack *Stack, vreg *VReg, ...) [][]TextNode
- type AmExprKind
- type AssignKind
- type AstToAsm
- type AutoData
- type Data
- type DataKindEnum
- type DataNode
- type FloatData
- type FuncKind
- type IntData
- type Label
- type RegEnum
- type RegRun
- type SrcMemDestReg
- type SrcNumDestMem
- type SrcNumDestReg
- type SrcNumDestRegOffset
- type SrcRegDestMem
- type SrcRegDestReg
- type SrcRegDestRegOffset
- type SrcRegMemDestReg
- type SrcRegOffsetDestReg
- type SseRegRun
- type Stack
- type StackAllocKind
- type StackFreeKind
- type StackVarInfo
- type StackVarMovKind
- type Text
- type TextKindEnum
- type TextNode
- func ParserFuncASSIGN(to *AstToAsm, node *ast.ASSIGNNode, vreg *VReg, sbt *ast.Sbt, stack *Stack) TextNode
- func SetVar(to *AstToAsm, name, value string, sbt *ast.Sbt, vreg *VReg) TextNode
- func StackAllocText(size int64) TextNode
- func StackFreeText(size int64) TextNode
- func StackSetVar(to *AstToAsm, offset int64, name string, value string, sbt *ast.Sbt, ...) TextNode
- type TextTypeEnum
- type VReg
- type VRegUseInfo
- type VarMovKind
- type VrmSizeEnum
Constants ¶
const ( IncludeRun = ` include 'win64a.inc' ` Exit = "invoke ExitProcess,0\n" )
Variables ¶
var Debug string
var Deferfunc func() = utils.Deferfunc
var ( RegEnumStrMap = [...]string{ NoReg: "no reg", RAX: "rax", RBX: "rbx", RCX: "rcx", RDX: "rdx", RSP: "rsp", RBP: "rbp", RSI: "rsi", RDI: "rdi", R8: "R8", R9: "r9", R10: "r10", R11: "r11", R12: "r12", R13: "r13", R14: "r14", R15: "r15", Xmm0: "xmm0", Xmm1: "xmm1", Xmm2: "xmm2", Xmm3: "xmm3", Xmm4: "xmm4", Xmm5: "xmm5", Xmm6: "xmm6", Xmm7: "xmm7", } )
var ( TextKindEnumStrMap = [...]string{ NoAsm: "NoAsm", ADD: "add", ADDSS: "addss", LEA: "lea", MOV: "mov", MOVSS: "movss", SUB: "sub", SUBSS: "subss", } )
var ( TextTypeEnumStrMap [MaxTextTypeEnum]string = [MaxTextTypeEnum]string{ TypeSrcMemDestReg: "SrcMemDestReg", TypeSrcRegDestMem: "SrcRegDestMem", TypeSrcNumDestReg: "SrcNumDestReg", TypeSrcRegDestReg: "SrcRegDestReg", TypeSrcRegOffsetDestReg: "SrcRegOffsetDestReg", TypeSrcRegDestRegOffset: "SrcRegDestRegOffset", TypeSrcNumDestRegOffset: "SrcNumDestRegOffset", TypeSrcRegMemDestReg: "SrcRegMemDestReg", Labels: "Label", ASSIGN: "ASSIGN", StackAlloc: "StackAlloc", StackFree: "StackFree", StackVarMov: "StackVarMov", Func: "Func", } )
var ( VrmSizeEnumStrTable = [...]string{ // contains filtered or unexported fields } )
Functions ¶
func AllocReg ¶
func AllocReg(nodes [][]TextNode, regrun *RegRun, sserun *SseRegRun, vtr *vRegToReg, vt vregToRegTable, Thread bool)
AllocReg为虚拟寄存器分配实际寄存器
func MovIrToAsm ¶
func MovIrToAsm(to *AstToAsm, irnode ir.IrNode, sbt *ast.Sbt, vreg *VReg, stack *Stack, ret *[]TextNode)
MovIrToAsm 将mov ir转换为asm
func Op2IrAutoToAsm ¶
func Op2IrAutoToAsm(to *AstToAsm, irnode ir.IrNode, tmpreg *RegEnum, sbt *ast.Sbt, vreg *VReg, stack *Stack, ret *[]TextNode, i int) bool
Op2IrAutoToAsm判断ir是不是形如 op<dest,src,dest> 或op<src,dest,dest>的ir,如果是,转换为asm返回true,否则返回false
func Op2IrToAsm ¶
func Op2IrToAsm(to *AstToAsm, op ir.OPEnum, dest, src string, destTyp, srcTyp ir.ArgEnum, tmpreg *RegEnum, sbt *ast.Sbt, vreg *VReg, stack *Stack, ret *[]TextNode, i int)
Op2IrToAsm 将一个源操作数和目的操作数一样 的ir转换为asm
func OpImmIntAndAndStackVarDestTmp ¶
func OpImmIntAndAndStackVarDestTmp(varname, immint string, tmpreg *RegEnum, op ir.OPEnum, sbt *ast.Sbt, stack *Stack, vreg *VReg, ret *[]TextNode, i int)
OpImmIntAndAndStackVarDestTmp将形如 op<immint,stackvar,tmp>或op<stackvar,immint,tmp>的ir转换为asm
func OpStackVarAndImmFloatDestTmp ¶
func OpStackVarAndImmFloatDestTmp(to *AstToAsm, varname, immfloat string, tmpreg *RegEnum, op ir.OPEnum, stack *Stack, vreg *VReg, ret *[]TextNode, i int)
OpStackVarAndImmFloatDestTmp 将形如 op<stackvar,immfloat,tmp> 或op<immfloat,stackvar,tmp>的ir转换为asm
func OpStackVarAndStackVarDestTmp ¶
func OpStackVarAndStackVarDestTmp(varname1, varname2 string, tmpreg *RegEnum, op ir.OPEnum, sbt *ast.Sbt, stack *Stack, vreg *VReg, ret *[]TextNode, i int)
OpStackVarAndStackVarDestTmp 将形如 op<stackvar,stackvar,tmp> 的ir转换为asm
func OpTmpAndImmFloatDestStackVar ¶
func OpTmpAndImmFloatDestStackVar(to *AstToAsm, varname, immfloat string, tmpreg *RegEnum, op ir.OPEnum, stack *Stack, vreg *VReg, ret *[]TextNode)
OpTmpAndImmFloatDestStackVar 将形如 op<tmp,immfloat,stackvar> 或op<immfloat,tmp,stackvar>的ir转换为asm
func OpTmpAndImmFloatDestTmp ¶
func OpTmpAndImmFloatDestTmp(to *AstToAsm, immfloat string, tmpreg *RegEnum, op ir.OPEnum, vreg *VReg, ret *[]TextNode)
OpTmpAndImmFloatDestTmp 将形如 op<tmp,immfloat,tmp> 或op<immfloat,tmp,tmp>的ir转换为asm
func OpTmpAndImmFloatDestVarToAsm ¶
func OpTmpAndImmFloatDestVarToAsm(to *AstToAsm, varname, immfloat string, tmpreg *RegEnum, op ir.OPEnum, vreg *VReg, ret *[]TextNode)
OpTmpAndImmFloatDestVarToAsm将形如 op<tmp,immfloat,var>或op<immfloat,tmp,var>的ir转换为asm
func OpTmpAndImmIntDestStackVar ¶
func OpTmpAndImmIntDestStackVar(varname, immint string, tmpreg *RegEnum, op ir.OPEnum, stack *Stack, vreg *VReg, ret *[]TextNode)
OpTmpAndImmIntDestStackVar将形如 op<tmp,immint,stackvar>或op<immint,tmp,stackvar>的ir转换为asm
func OpTmpAndImmIntDestTmp ¶
func OpTmpAndImmIntDestTmp(immint string, tmpreg *RegEnum, op ir.OPEnum, vreg *VReg, ret *[]TextNode)
OpTmpAndImmIntDestTmp将形如 op<tmp,immint,tmp>或op<immint,tmp,tmp>的ir转换为asm
func OpTmpAndImmIntDestVarToAsm ¶
func OpTmpAndImmIntDestVarToAsm(varname, immint string, tmpreg *RegEnum, op ir.OPEnum, vreg *VReg, ret *[]TextNode)
OpTmpAndImmIntDestVarToAsm将形如 op<tmp,immint,var>或op<immint,tmp,var>的ir转换为asm
func OpTmpAndStackVarDestStackVar ¶
func OpTmpAndStackVarDestStackVar(src, dest string, tmpreg *RegEnum, op ir.OPEnum, sbt *ast.Sbt, stack *Stack, vreg *VReg, ret *[]TextNode)
OpTmpAndStackVarDestStackVar 将形如 op<tmp,stackvar,stackvar> 或op<stackvar,tmp,stackvar>的ir转换为asm (将两个源操作数和目的操作数不一样)
func OpTmpAndStackVarDestTmp ¶
func OpTmpAndStackVarDestTmp(varname string, tmpreg *RegEnum, op ir.OPEnum, sbt *ast.Sbt, stack *Stack, vreg *VReg, ret *[]TextNode)
OpTmpAndStackVarDestTmp将形如 op<tmp,stackvar,tmp>或op<immint,stackvar,tmo>的ir转换为asm
func OpTmpAndVarDestTmp ¶
func OpTmpAndVarDestTmp(varname string, tmpreg *RegEnum, op ir.OPEnum, sbt *ast.Sbt, vreg *VReg, ret *[]TextNode)
OpTmpAndVarDestTmp将形如 op<tmp,var,tmp>或op<var,tmp,tmp>的ir转换为asm
func OpTmpAndVarDestVar ¶
func OpTmpAndVarDestVar(varname1, varname2 string, tmpreg *RegEnum, op ir.OPEnum, sbt *ast.Sbt, vreg *VReg, ret *[]TextNode)
OpTmpAndVarDestVar将形如 op<var,tmp,var> 或op<tmp,var,var>的ir转换为asm
func OpVarAndImmFloatDestTmpIrToAsm ¶
func OpVarAndImmFloatDestTmpIrToAsm(to *AstToAsm, varname, immfloat string, tmpreg *RegEnum, op ir.OPEnum, vreg *VReg, ret *[]TextNode, i int)
OpVarAndImmFloatDestTmpIrToAsm将形如 op<var,immfloat,tmp>或op<immfloat,var,tmp>的ir转换为asm
func OpVarAndImmIntDestTmpIrToAsm ¶
func OpVarAndImmIntDestTmpIrToAsm(varname, immint string, tmpreg *RegEnum, op ir.OPEnum, vreg *VReg, ret *[]TextNode, i int)
OpVarAndImmIntDestTmpIrToAsm将形如 op<var,immint,tmp>或op<immint,var,tmp>的ir转换为asm
Types ¶
type AmExprKind ¶
type AmExprKind struct {
// contains filtered or unexported fields
}
运算组合指令
func NewAmExprKind ¶
func NewAmExprKind(nodes []TextNode) AmExprKind
func (AmExprKind) Asm ¶
func (text AmExprKind) Asm() string
func (AmExprKind) GetVRegUseInfo ¶
func (text AmExprKind) GetVRegUseInfo() VRegUseInfo
func (AmExprKind) String ¶
func (text AmExprKind) String() string
func (AmExprKind) Type ¶
func (text AmExprKind) Type() TextTypeEnum
type AssignKind ¶
type AssignKind struct {
// contains filtered or unexported fields
}
赋值组合指令
func NewAssignKind ¶
func NewAssignKind(nodes []TextNode) AssignKind
func (AssignKind) Asm ¶
func (text AssignKind) Asm() string
func (AssignKind) GetVRegUseInfo ¶
func (text AssignKind) GetVRegUseInfo() VRegUseInfo
func (AssignKind) String ¶
func (text AssignKind) String() string
func (AssignKind) Type ¶
func (text AssignKind) Type() TextTypeEnum
type AstToAsm ¶
type AstToAsm struct { Texts *Text Datas *Data Regrun *RegRun Sserun *SseRegRun Stack *Stack VReg *VReg Thread bool }
func NewAstToAsm ¶
type DataNode ¶
type DataNode interface { Kind() DataKindEnum String() string Asm() string }
type FloatData ¶
float型数据
func NewFloatDate ¶
func (*FloatData) Kind ¶
func (data *FloatData) Kind() DataKindEnum
type FuncKind ¶
type FuncKind struct {
// contains filtered or unexported fields
}
函数组合指令
func NewFuncKind ¶
func (FuncKind) GetVRegUseInfo ¶
func (text FuncKind) GetVRegUseInfo() VRegUseInfo
func (FuncKind) Type ¶
func (text FuncKind) Type() TextTypeEnum
type IntData ¶
int型数据
func NewIntDate ¶
func (*IntData) Kind ¶
func (data *IntData) Kind() DataKindEnum
type Label ¶
type Label struct {
Name string
}
func (*Label) GetVRegUseInfo ¶
func (text *Label) GetVRegUseInfo() VRegUseInfo
func (*Label) Type ¶
func (text *Label) Type() TextTypeEnum
type RegRun ¶
type SrcMemDestReg ¶
type SrcMemDestReg struct { Mem string Reg RegEnum Kind TextKindEnum }
func NewSrcMemDestReg ¶
func NewSrcMemDestReg(dest RegEnum, src string, Kind TextKindEnum) *SrcMemDestReg
func (*SrcMemDestReg) Asm ¶
func (text *SrcMemDestReg) Asm() string
func (*SrcMemDestReg) GetVRegUseInfo ¶
func (text *SrcMemDestReg) GetVRegUseInfo() VRegUseInfo
func (*SrcMemDestReg) String ¶
func (text *SrcMemDestReg) String() string
func (*SrcMemDestReg) Type ¶
func (text *SrcMemDestReg) Type() TextTypeEnum
type SrcNumDestMem ¶
type SrcNumDestMem struct { Mem string Num string Kind TextKindEnum }
func NewSrcNumDestMem ¶
func NewSrcNumDestMem(dest string, src string, Kind TextKindEnum) *SrcNumDestMem
func (*SrcNumDestMem) Asm ¶
func (text *SrcNumDestMem) Asm() string
func (*SrcNumDestMem) GetVRegUseInfo ¶
func (text *SrcNumDestMem) GetVRegUseInfo() VRegUseInfo
func (*SrcNumDestMem) String ¶
func (text *SrcNumDestMem) String() string
func (*SrcNumDestMem) Type ¶
func (text *SrcNumDestMem) Type() TextTypeEnum
type SrcNumDestReg ¶
type SrcNumDestReg struct { Num string Reg RegEnum Kind TextKindEnum }
func NewSrcNumDestReg ¶
func NewSrcNumDestReg(dest RegEnum, src string, Kind TextKindEnum) *SrcNumDestReg
func (*SrcNumDestReg) Asm ¶
func (text *SrcNumDestReg) Asm() string
func (*SrcNumDestReg) GetVRegUseInfo ¶
func (text *SrcNumDestReg) GetVRegUseInfo() VRegUseInfo
func (*SrcNumDestReg) String ¶
func (text *SrcNumDestReg) String() string
func (*SrcNumDestReg) Type ¶
func (text *SrcNumDestReg) Type() TextTypeEnum
type SrcNumDestRegOffset ¶
type SrcNumDestRegOffset struct { Src string Dest RegEnum Offset int64 Kind TextKindEnum }
func NewSrcNumDestRegOffset ¶
func NewSrcNumDestRegOffset(Dest RegEnum, Src string, offset int64, Kind TextKindEnum) *SrcNumDestRegOffset
func (*SrcNumDestRegOffset) Asm ¶
func (text *SrcNumDestRegOffset) Asm() string
func (*SrcNumDestRegOffset) GetVRegUseInfo ¶
func (text *SrcNumDestRegOffset) GetVRegUseInfo() VRegUseInfo
func (*SrcNumDestRegOffset) String ¶
func (text *SrcNumDestRegOffset) String() string
func (*SrcNumDestRegOffset) Type ¶
func (text *SrcNumDestRegOffset) Type() TextTypeEnum
type SrcRegDestMem ¶
type SrcRegDestMem struct { Mem string Reg RegEnum Kind TextKindEnum }
func NewSrcRegDestMem ¶
func NewSrcRegDestMem(dest string, src RegEnum, Kind TextKindEnum) *SrcRegDestMem
func (*SrcRegDestMem) Asm ¶
func (text *SrcRegDestMem) Asm() string
func (*SrcRegDestMem) GetVRegUseInfo ¶
func (text *SrcRegDestMem) GetVRegUseInfo() VRegUseInfo
func (*SrcRegDestMem) String ¶
func (text *SrcRegDestMem) String() string
func (*SrcRegDestMem) Type ¶
func (text *SrcRegDestMem) Type() TextTypeEnum
type SrcRegDestReg ¶
type SrcRegDestReg struct { Src RegEnum Dest RegEnum Kind TextKindEnum }
func NewSrcRegDestReg ¶
func NewSrcRegDestReg(Dest, Src RegEnum, Kind TextKindEnum) *SrcRegDestReg
func (*SrcRegDestReg) Asm ¶
func (text *SrcRegDestReg) Asm() string
func (*SrcRegDestReg) GetVRegUseInfo ¶
func (text *SrcRegDestReg) GetVRegUseInfo() VRegUseInfo
func (*SrcRegDestReg) String ¶
func (text *SrcRegDestReg) String() string
func (*SrcRegDestReg) Type ¶
func (text *SrcRegDestReg) Type() TextTypeEnum
type SrcRegDestRegOffset ¶
type SrcRegDestRegOffset struct { Src RegEnum Dest RegEnum Offset int64 Kind TextKindEnum }
func NewSrcRegDestRegOffset ¶
func NewSrcRegDestRegOffset(Dest, Src RegEnum, offset int64, Kind TextKindEnum) *SrcRegDestRegOffset
func (*SrcRegDestRegOffset) Asm ¶
func (text *SrcRegDestRegOffset) Asm() string
func (*SrcRegDestRegOffset) GetVRegUseInfo ¶
func (text *SrcRegDestRegOffset) GetVRegUseInfo() VRegUseInfo
func (*SrcRegDestRegOffset) String ¶
func (text *SrcRegDestRegOffset) String() string
func (*SrcRegDestRegOffset) Type ¶
func (text *SrcRegDestRegOffset) Type() TextTypeEnum
type SrcRegMemDestReg ¶
type SrcRegMemDestReg struct { Src RegEnum Dest RegEnum Kind TextKindEnum }
func NewSrcRegMemDestReg ¶
func NewSrcRegMemDestReg(Dest, Src RegEnum, Kind TextKindEnum) *SrcRegMemDestReg
func (*SrcRegMemDestReg) Asm ¶
func (text *SrcRegMemDestReg) Asm() string
func (*SrcRegMemDestReg) GetVRegUseInfo ¶
func (text *SrcRegMemDestReg) GetVRegUseInfo() VRegUseInfo
func (*SrcRegMemDestReg) String ¶
func (text *SrcRegMemDestReg) String() string
func (*SrcRegMemDestReg) Type ¶
func (text *SrcRegMemDestReg) Type() TextTypeEnum
type SrcRegOffsetDestReg ¶
type SrcRegOffsetDestReg struct { Src RegEnum Dest RegEnum Offset int64 Kind TextKindEnum }
func NewSrcRegOffsetDestReg ¶
func NewSrcRegOffsetDestReg(Dest, Src RegEnum, offset int64, Kind TextKindEnum) *SrcRegOffsetDestReg
func (*SrcRegOffsetDestReg) Asm ¶
func (text *SrcRegOffsetDestReg) Asm() string
func (*SrcRegOffsetDestReg) GetVRegUseInfo ¶
func (text *SrcRegOffsetDestReg) GetVRegUseInfo() VRegUseInfo
func (*SrcRegOffsetDestReg) String ¶
func (text *SrcRegOffsetDestReg) String() string
func (*SrcRegOffsetDestReg) Type ¶
func (text *SrcRegOffsetDestReg) Type() TextTypeEnum
type SseRegRun ¶
type SseRegRun struct { Thread bool Xmm0 bool Xmm1 bool Xmm2 bool Xmm3 bool Xmm4 bool Xmm5 bool Xmm6 bool Xmm7 bool // contains filtered or unexported fields }
func NewSseRegRun ¶
type StackAllocKind ¶
type StackAllocKind struct {
// contains filtered or unexported fields
}
栈分配组合指令
func NewStackAllocKind ¶
func NewStackAllocKind(nodes []TextNode) StackAllocKind
func (StackAllocKind) Asm ¶
func (text StackAllocKind) Asm() string
func (StackAllocKind) GetVRegUseInfo ¶
func (text StackAllocKind) GetVRegUseInfo() VRegUseInfo
func (StackAllocKind) String ¶
func (text StackAllocKind) String() string
func (StackAllocKind) Type ¶
func (text StackAllocKind) Type() TextTypeEnum
type StackFreeKind ¶
type StackFreeKind struct {
// contains filtered or unexported fields
}
栈释放组合指令
func NewStackFreeKind ¶
func NewStackFreeKind(nodes []TextNode) StackFreeKind
func (StackFreeKind) Asm ¶
func (text StackFreeKind) Asm() string
func (StackFreeKind) GetVRegUseInfo ¶
func (text StackFreeKind) GetVRegUseInfo() VRegUseInfo
func (StackFreeKind) String ¶
func (text StackFreeKind) String() string
func (StackFreeKind) Type ¶
func (text StackFreeKind) Type() TextTypeEnum
type StackVarInfo ¶
type StackVarInfo struct {
// contains filtered or unexported fields
}
栈变量信息
func NewStackVarInfo ¶
func NewStackVarInfo(offset int64) StackVarInfo
func (StackVarInfo) IsZero ¶
func (info StackVarInfo) IsZero() bool
type StackVarMovKind ¶
type StackVarMovKind struct {
// contains filtered or unexported fields
}
栈变量mov组合指令
func NewStackVarMovKind ¶
func NewStackVarMovKind(nodes []TextNode) StackVarMovKind
func (StackVarMovKind) Asm ¶
func (text StackVarMovKind) Asm() string
func (StackVarMovKind) GetVRegUseInfo ¶
func (text StackVarMovKind) GetVRegUseInfo() VRegUseInfo
func (StackVarMovKind) String ¶
func (text StackVarMovKind) String() string
func (StackVarMovKind) Type ¶
func (text StackVarMovKind) Type() TextTypeEnum
type TextKindEnum ¶
type TextKindEnum int
const ( NoAsm TextKindEnum = iota ADD ADDSS LEA MOV MOVSS SUB SUBSS )
func (TextKindEnum) String ¶
func (enum TextKindEnum) String() string
type TextNode ¶
type TextNode interface { //Type返回go类型 Type() TextTypeEnum String() string //Asm返回对应汇编指令(能用于fasm汇编器) Asm() string GetVRegUseInfo() VRegUseInfo }
TextNode是指令接口,代表汇编指令
func ParserFuncASSIGN ¶
func ParserFuncASSIGN(to *AstToAsm, node *ast.ASSIGNNode, vreg *VReg, sbt *ast.Sbt, stack *Stack) TextNode
转换函数内赋值节点为汇编代码
type TextTypeEnum ¶
type TextTypeEnum int
const ( TypeSrcMemDestReg TextTypeEnum = iota TypeSrcRegDestMem TypeSrcNumDestReg TypeSrcRegDestReg TypeSrcRegOffsetDestReg TypeSrcRegDestRegOffset TypeSrcNumDestRegOffset TypeSrcRegMemDestReg TypeSrcNumDestMem Labels MinMany ASSIGN StackAlloc StackFree StackVarMov Func AmExpr VarMov MaxMany MaxTextTypeEnum )
func (TextTypeEnum) String ¶
func (enum TextTypeEnum) String() string
type VReg ¶
type VReg = virtualReg
VReg是虚拟寄存器分配器
func (*VReg) GetX86Reg ¶
func (v *VReg) GetX86Reg(bit VrmSizeEnum) RegEnum
GetX86Reg获取一个X86的虚拟寄存器 - bit是寄存器大小
type VRegUseInfo ¶
VRegUseInfo表示一个虚拟寄存器使用信息
func NewVRegUseInfo ¶
func NewVRegUseInfo(X86 int16, SSE int16) VRegUseInfo
NewVRegUseInfo创建一个虚拟寄存器使用信息
func (VRegUseInfo) Add ¶
func (v VRegUseInfo) Add(a VRegUseInfo) VRegUseInfo
Add 将两个虚拟寄存器使用信息(v , a)相加,并返回和
type VarMovKind ¶
type VarMovKind struct {
// contains filtered or unexported fields
}
变量mov组合指令
func NewVarMovKind ¶
func NewVarMovKind(nodes []TextNode) VarMovKind
func (VarMovKind) Asm ¶
func (text VarMovKind) Asm() string
func (VarMovKind) GetVRegUseInfo ¶
func (text VarMovKind) GetVRegUseInfo() VRegUseInfo
func (VarMovKind) String ¶
func (text VarMovKind) String() string
func (VarMovKind) Type ¶
func (text VarMovKind) Type() TextTypeEnum
type VrmSizeEnum ¶
type VrmSizeEnum int8
func (VrmSizeEnum) String ¶
func (enum VrmSizeEnum) String() string