amd64

package
v0.0.0-...-a214d60 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 7, 2024 License: BSD-3-Clause Imports: 10 Imported by: 0

Documentation

Overview

Deprecated:已弃用

Index

Constants

View Source
const (
	IncludeRun = `
	include 'win64a.inc' 
`

	Exit = "invoke	ExitProcess,0\n"
)

Variables

View Source
var Debug string
View Source
var Deferfunc func() = utils.Deferfunc
View Source
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",
	}
)
View Source
var (
	TextKindEnumStrMap = [...]string{
		NoAsm: "NoAsm",
		ADD:   "add",
		ADDSS: "addss",
		LEA:   "lea",
		MOV:   "mov",
		MOVSS: "movss",
		SUB:   "sub",
		SUBSS: "subss",
	}
)
View Source
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",
	}
)
View Source
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 AutoName

func AutoName() string

创建临时名称

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

func OpVarAndVarDestTmp

func OpVarAndVarDestTmp(varname1, varname2 string, tmpreg *RegEnum, op ir.OPEnum, sbt *ast.Sbt, vreg *VReg, ret *[]TextNode, i int)

OpVarAndVarDestTmp将形如 op<var,var,tmp>(src1和src2可以不相同)的ir转换为asm

func ParserNode

func ParserNode(to *AstToAsm, nodes []ast.Node, sbt *ast.Sbt, stack *Stack, vreg *VReg, IsFunc bool, Thread bool) [][]TextNode

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

func NewAstToAsm(Thread bool) *AstToAsm

func (*AstToAsm) Asm

func (to *AstToAsm) Asm() string

func (*AstToAsm) Parser

func (to *AstToAsm) Parser(ast *ast.Tree)

func (*AstToAsm) String

func (to *AstToAsm) String() string

type AutoData

type AutoData struct {
	Name  string
	Value string
	// contains filtered or unexported fields
}

func NewAutoData

func NewAutoData(Value string, size int) *AutoData

创建临时变量

func (*AutoData) Asm

func (data *AutoData) Asm() string

func (*AutoData) Kind

func (data *AutoData) Kind() DataKindEnum

func (*AutoData) String

func (data *AutoData) String() string

type Data

type Data struct {
	Datas []DataNode

	Thread bool
	// contains filtered or unexported fields
}

func NewData

func NewData(Thread bool) *Data

func (*Data) Add

func (data *Data) Add(nodes DataNode)

func (*Data) Asm

func (data *Data) Asm() string

func (*Data) GoString

func (data *Data) GoString() string

func (*Data) Silce

func (data *Data) Silce()

type DataKindEnum

type DataKindEnum int
const (
	Int DataKindEnum = iota
	Float
	Auto
)

type DataNode

type DataNode interface {
	Kind() DataKindEnum
	String() string
	Asm() string
}

func ParserData

func ParserData(node *ast.VarNode) DataNode

解析变量为数据(Asm()可以获得对应汇编代码)

type FloatData

type FloatData struct {
	Name  string
	Value string
}

float型数据

func NewFloatDate

func NewFloatDate(Name string) *FloatData

func (*FloatData) Asm

func (data *FloatData) Asm() string

func (*FloatData) Kind

func (data *FloatData) Kind() DataKindEnum

func (*FloatData) String

func (data *FloatData) String() string

type FuncKind

type FuncKind struct {
	// contains filtered or unexported fields
}

函数组合指令

func NewFuncKind

func NewFuncKind(nodes [][]TextNode) FuncKind

func (FuncKind) Asm

func (text FuncKind) Asm() string

func (FuncKind) GetVRegUseInfo

func (text FuncKind) GetVRegUseInfo() VRegUseInfo

func (FuncKind) String

func (text FuncKind) String() string

func (FuncKind) Type

func (text FuncKind) Type() TextTypeEnum

type IntData

type IntData struct {
	Name  string
	Value string
}

int型数据

func NewIntDate

func NewIntDate(Name string) *IntData

func (*IntData) Asm

func (data *IntData) Asm() string

func (*IntData) Kind

func (data *IntData) Kind() DataKindEnum

func (*IntData) String

func (data *IntData) String() string

type Label

type Label struct {
	Name string
}

func NewLabel

func NewLabel(Name string) *Label

func (*Label) Asm

func (text *Label) Asm() string

func (*Label) GetVRegUseInfo

func (text *Label) GetVRegUseInfo() VRegUseInfo

func (*Label) String

func (text *Label) String() string

func (*Label) Type

func (text *Label) Type() TextTypeEnum

type RegEnum

type RegEnum int64
const (
	NoReg RegEnum = iota
	RAX
	RBX
	RCX
	RDX
	RSP
	RBP
	RSI
	RDI
	R8
	R9
	R10
	R11
	R12
	R13
	R14
	R15

	Xmm0
	Xmm1
	Xmm2
	Xmm3
	Xmm4
	Xmm5
	Xmm6
	Xmm7
)

func (RegEnum) Asm

func (enum RegEnum) Asm() string

func (RegEnum) String

func (enum RegEnum) String() (s string)

type RegRun

type RegRun struct {
	RDI    bool
	RSP    bool
	R8     bool
	RDX    bool
	R9     bool
	RBP    bool
	RSI    bool
	R10    bool
	RCX    bool
	RBX    bool
	Thread bool
	R11    bool
	R12    bool
	R13    bool
	R14    bool
	R15    bool
	RAX    bool
	// contains filtered or unexported fields
}

func NewRegRun

func NewRegRun(Thread bool) *RegRun

func (*RegRun) CloseReg

func (reg *RegRun) CloseReg(regenum RegEnum)

func (*RegRun) RetReg

func (reg *RegRun) RetReg(bits int8) RegEnum

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

func NewSseRegRun(Thread bool) *SseRegRun

func (*SseRegRun) CloseReg

func (reg *SseRegRun) CloseReg(regenum RegEnum)

func (*SseRegRun) RetReg

func (reg *SseRegRun) RetReg() RegEnum

type Stack

type Stack struct {
	// contains filtered or unexported fields
}

栈分配记录

func NewStack

func NewStack(sbt *ast.Sbt) *Stack

func (*Stack) HaveVar

func (s *Stack) HaveVar(name string) StackVarInfo

查询是否记录了变量

  • name是变量名

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 Text

type Text struct {
	Texts  [][]TextNode
	Thread bool
}

func NewText

func NewText(Thread bool) *Text

func (*Text) AddSlice

func (text *Text) AddSlice(nodes [][]TextNode)

func (*Text) Asm

func (text *Text) Asm() string

func (*Text) GoString

func (text *Text) GoString() string

func (*Text) Silce

func (text *Text) Silce()

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

转换函数内赋值节点为汇编代码

func SetVar

func SetVar(to *AstToAsm, name, value string, sbt *ast.Sbt, vreg *VReg) TextNode

func StackAllocText

func StackAllocText(size int64) TextNode

分配函数栈

func StackFreeText

func StackFreeText(size int64) TextNode

释放函数栈

func StackSetVar

func StackSetVar(to *AstToAsm, offset int64, name string, value string, sbt *ast.Sbt, vreg *VReg) 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 NewVReg

func NewVReg() *VReg

NewVReg创建虚拟寄存器分配器

func (*VReg) GetSSEReg

func (v *VReg) GetSSEReg() RegEnum

GetSSEReg获取一个SSE的虚拟寄存器

func (*VReg) GetX86Reg

func (v *VReg) GetX86Reg(bit VrmSizeEnum) RegEnum

GetX86Reg获取一个X86的虚拟寄存器 - bit是寄存器大小

type VRegUseInfo

type VRegUseInfo struct {
	X86 int16 //x86寄存器使用数量
	SSE int16 //sse寄存器使用数量
}

VRegUseInfo表示一个虚拟寄存器使用信息

func NewVRegUseInfo

func NewVRegUseInfo(X86 int16, SSE int16) VRegUseInfo

NewVRegUseInfo创建一个虚拟寄存器使用信息

func (VRegUseInfo) Add

Add 将两个虚拟寄存器使用信息(v , a)相加,并返回和

func (VRegUseInfo) IsZero

func (v VRegUseInfo) IsZero() bool

IsZero返回是否为零值

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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL