const ( BranchUnlikely = BranchPrediction(-1) BranchUnknown = BranchPrediction(0) BranchLikely = BranchPrediction(+1) )
const ( // These values are arranged in what seems to be order of increasing alignment importance. // Currently only a few are relevant. Implicitly, they are all in a loop. HotNotFlowIn Hotness = 1 << iota // This block is only reached by branches HotInitial // In the block order, the first one for a given loop. Not necessarily topological header. HotPgo // By PGO-based heuristics, this block occurs in a hot loop HotNot = 0 HotInitialNotFlowIn = HotInitial | HotNotFlowIn // typically first block of a rotated loop, loop is entered with a branch (not to this block). No PGO HotPgoInitial = HotPgo | HotInitial // special case; single block loop, initial block is header block has a flow-in entry, but PGO says it is hot HotPgoInitialNotFLowIn = HotPgo | HotInitial | HotNotFlowIn // PGO says it is hot, and the loop is rotated so flow enters loop with a branch )
const ( ScorePhi = iota // towards top of block ScoreArg // must occur at the top of the entry block ScoreInitMem // after the args - used as mark by debug info generation ScoreReadTuple // must occur immediately after tuple-generating insn (or call) ScoreNilCheck ScoreMemory ScoreReadFlags ScoreDefault ScoreFlags ScoreControl // towards bottom of block )
const ( // When used to lookup up definitions in a sparse tree, // these adjustments to a block's entry (+adjust) and // exit (-adjust) numbers allow a distinction to be made // between assignments (typically branch-dependent // conditionals) occurring "before" the block (e.g., as inputs // to the block and its phi functions), "within" the block, // and "after" the block. AdjustBefore = -1 // defined before phi AdjustWithin = 0 // defined by phi AdjustAfter = 1 // defined within block )
MaxStruct is the maximum number of fields a struct can have and still be SSAable.
const MaxStruct = 4
var AuxMark auxMark
var BlockEnd = &Value{ ID: -20000, Op: OpInvalid, Aux: StringToAux("BlockEnd"), }
var BlockStart = &Value{ ID: -10000, Op: OpInvalid, Aux: StringToAux("BlockStart"), }
var BuildDebug int
var BuildDump map[string]bool = make(map[string]bool) // names of functions to dump after initial build of ssa
var BuildStats int
var BuildTest int
var FuncEnd = &Value{ ID: -30000, Op: OpInvalid, Aux: StringToAux("FuncEnd"), }
var GenssaDump map[string]bool = make(map[string]bool) // names of functions to dump after ssa has been converted to asm
Debug output
var IntrinsicsDebug int
var IntrinsicsDisable bool
func AutoVar(v *Value) (*ir.Name, int64)
AutoVar returns a *Name and int64 representing the auto variable and offset within it where v should be spilled.
func BuildFuncDebug(ctxt *obj.Link, f *Func, loggingLevel int, stackOffset func(LocalSlot) int32, rval *FuncDebug)
BuildFuncDebug debug information for f, placing the results in "rval". f must be fully processed, so that each Value is where it will be when machine code is emitted.
func BuildFuncDebugNoOptimized(ctxt *obj.Link, f *Func, loggingEnabled bool, stackOffset func(LocalSlot) int32, rval *FuncDebug)
BuildFuncDebugNoOptimized populates a FuncDebug object "rval" with entries corresponding to the register-resident input parameters for the function "f"; it is used when we are compiling without optimization but the register ABI is enabled. For each reg param, it constructs a 2-element location list: the first element holds the input register, and the second element holds the stack location of the param (the assumption being that when optimization is off, each input param reg will be spilled in the prolog). In addition to the register params, here we also build location lists (where appropriate for the ".closureptr" compiler-synthesized variable needed by the debugger for range func bodies.
func CanSSA(t *types.Type) bool
CanSSA reports whether values of type t can be represented as a Value.
func Compile(f *Func)
Compile is the main entry point for this package. Compile modifies f so that on return:
func DecodePPC64RotateMask(sauxint int64) (rotate, mb, me int64, mask uint64)
DecodePPC64RotateMask is the inverse operation of encodePPC64RotateMask. The values returned as mb and me satisfy the POWER ISA definition of MASK(x,y) where MASK(mb,me) = mask.
func DivisionNeedsFixUp(v *Value) bool
DivisionNeedsFixUp reports whether the division needs fix-up code.
func FuncNameABI(n string, a obj.ABI) string
FuncNameABI returns n followed by a comma and the value of a. This is a separate function to allow a single point encoding of the format, which is used in places where there's not a Func yet.
func GetPPC64Shiftmb(auxint int64) int64
func GetPPC64Shiftme(auxint int64) int64
func GetPPC64Shiftsh(auxint int64) int64
func IsGlobalAddr(v *Value) bool
IsGlobalAddr reports whether v is known to be an address of a global (or nil).
func IsInlinableMemmove(dst, src *Value, sz int64, c *Config) bool
func IsMergeCandidate(n *ir.Name) bool
IsMergeCandidate returns true if variable n could participate in stack slot merging. For now we're restricting the set to things to items larger than what CanSSA would allow (approximateky, we disallow things marked as open defer slots so as to avoid complicating liveness analysis.
func IsReadOnlyGlobalAddr(v *Value) bool
IsReadOnlyGlobalAddr reports whether v is known to be an address of a read-only global.
func IsSanitizerSafeAddr(v *Value) bool
IsSanitizerSafeAddr reports whether v is known to be an address that doesn't need instrumentation.
func IsStackAddr(v *Value) bool
IsStackAddr reports whether v is known to be an address of a stack slot.
func IsVarWantedForDebug(n ir.Node) bool
IsVarWantedForDebug returns true if the debug info for the node should be generated. For example, internal variables for range-over-func loops have little value to users, so we don't generate debug info for them.
func LogLargeCopy(funcName string, pos src.XPos, s int64)
func ObjRegForAbiReg(r abi.RegIndex, c *Config) int16
For ABI register index r, returns the register number used in the obj package (assembler).
func ParamAssignmentForArgName(f *Func, name *ir.Name) *abi.ABIParamAssignment
ParamAssignmentForArgName returns the ABIParamAssignment for f's arg with matching name.
func PhaseOption(phase, flag string, val int, valString string) string
PhaseOption sets the specified flag in the specified ssa phase, returning empty string if this was successful or a string explaining the error if it was not. A version of the phase name with "_" replaced by " " is also checked for a match. If the phase name begins a '~' then the rest of the underscores-replaced-with-blanks version is used as a regular expression to match the phase name(s).
Special cases that have turned out to be useful:
See gc/lex.go for dissection of the option string. Example uses:
GO_GCFLAGS=-d=ssa/generic_cse/time,ssa/generic_cse/stats,ssa/generic_cse/debug=3 ./make.bash
BOOT_GO_GCFLAGS=-d='ssa/~^.*scc$/off' GO_GCFLAGS='-d=ssa/~^.*scc$/off' ./make.bash
func PopulateABIInRegArgOps(f *Func)
PopulateABIInRegArgOps examines the entry block of the function and looks for incoming parameters that have missing or partial OpArg{Int,Float}Reg values, inserting additional values in cases where they are missing. Example:
func foo(s string, used int, notused int) int { return len(s) + used }
In the function above, the incoming parameter "used" is fully live, "notused" is not live, and "s" is partially live (only the length field of the string is used). At the point where debug value analysis runs, we might expect to see an entry block with:
b1: v4 = ArgIntReg <uintptr> {s+8} [0] : BX v5 = ArgIntReg <int> {used} [0] : CX
While this is an accurate picture of the live incoming params, we also want to have debug locations for non-live params (or their non-live pieces), e.g. something like
b1: v9 = ArgIntReg <*uint8> {s+0} [0] : AX v4 = ArgIntReg <uintptr> {s+8} [0] : BX v5 = ArgIntReg <int> {used} [0] : CX v10 = ArgIntReg <int> {unused} [0] : DI
This function examines the live OpArg{Int,Float}Reg values and synthesizes new (dead) values for the non-live params or the non-live pieces of partially live params.
func ReachableBlocks(f *Func) []bool
ReachableBlocks returns the reachable blocks in f.
func StmtString(p src.XPos) string
type Abi1RO uint8 // An offset within a parameter's slice of register indices, for abi1.
Aux is an interface to hold miscellaneous data in Blocks and Values.
type Aux interface { CanBeAnSSAAux() }
func StringToAux(s string) Aux
type AuxCall struct { Fn *obj.LSym // contains filtered or unexported fields }
func ClosureAuxCall(paramResultInfo *abi.ABIParamResultInfo) *AuxCall
ClosureAuxCall returns an AuxCall for a closure call.
func InterfaceAuxCall(paramResultInfo *abi.ABIParamResultInfo) *AuxCall
InterfaceAuxCall returns an AuxCall for an interface call.
func OwnAuxCall(fn *obj.LSym, paramResultInfo *abi.ABIParamResultInfo) *AuxCall
OwnAuxCall returns a function's own AuxCall.
func StaticAuxCall(sym *obj.LSym, paramResultInfo *abi.ABIParamResultInfo) *AuxCall
StaticAuxCall returns an AuxCall for a static call.
func (a *AuxCall) ABI() *abi.ABIConfig
func (a *AuxCall) ABIInfo() *abi.ABIParamResultInfo
func (a *AuxCall) ArgWidth() int64
ArgWidth returns the amount of stack needed for all the inputs and outputs of a function or method, including ABI-defined parameter slots and ABI-defined spill slots for register-resident parameters.
The name is taken from the types package's ArgWidth(<function type>), which predated changes to the ABI; this version handles those changes.
func (*AuxCall) CanBeAnSSAAux()
func (a *AuxCall) LateExpansionResultType() *types.Type
LateExpansionResultType returns the result type (including trailing mem) for a call that will be expanded later in the SSA phase.
func (a *AuxCall) NArgs() int64
NArgs returns the number of arguments (including receiver, if there is one).
func (a *AuxCall) NResults() int64
NResults returns the number of results.
func (a *AuxCall) NameOfResult(which int64) *ir.Name
NameOfResult returns the ir.Name of result which (indexed 0, 1, etc).
func (a *AuxCall) OffsetOfArg(which int64) int64
OffsetOfArg returns the SP offset of argument which (indexed 0, 1, etc). If the call is to a method, the receiver is the first argument (i.e., index 0)
func (a *AuxCall) OffsetOfResult(which int64) int64
OffsetOfResult returns the SP offset of result which (indexed 0, 1, etc).
func (a *AuxCall) ParamAssignmentForResult(which int64) *abi.ABIParamAssignment
ParamAssignmentForResult returns the ABI Parameter assignment for result which (indexed 0, 1, etc).
func (a *AuxCall) Reg(i *regInfo, c *Config) *regInfo
Reg returns the regInfo for a given call, combining the derived in/out register masks with the machine-specific register information in the input i. (The machine-specific regInfo is much handier at the call site than it is when the AuxCall is being constructed, therefore do this lazily).
TODO: there is a Clever Hack that allows pre-generation of a small-ish number of the slices of inputInfo and outputInfo used here, provided that we are willing to reorder the inputs and outputs from calls, so that all integer registers come first, then all floating registers. At this point (active development of register ABI) that is very premature, but if this turns out to be a cost, we could do it.
func (a *AuxCall) RegsOfArg(which int64) []abi.RegIndex
RegsOfArg returns the register(s) used for argument which (indexed 0, 1, etc). If the call is to a method, the receiver is the first argument (i.e., index 0)
func (a *AuxCall) RegsOfResult(which int64) []abi.RegIndex
RegsOfResult returns the register(s) used for result which (indexed 0, 1, etc).
func (a *AuxCall) ResultReg(c *Config) *regInfo
func (a *AuxCall) SizeOfArg(which int64) int64
SizeOfArg returns the size of argument which (indexed 0, 1, etc). If the call is to a method, the receiver is the first argument (i.e., index 0)
func (a *AuxCall) SizeOfResult(which int64) int64
SizeOfResult returns the size of result which (indexed 0, 1, etc).
func (a *AuxCall) String() string
String returns "AuxCall{<fn>}"
func (a *AuxCall) TypeOfArg(which int64) *types.Type
TypeOfArg returns the type of argument which (indexed 0, 1, etc). If the call is to a method, the receiver is the first argument (i.e., index 0)
func (a *AuxCall) TypeOfResult(which int64) *types.Type
TypeOfResult returns the type of result which (indexed 0, 1, etc).
type AuxNameOffset struct { Name *ir.Name Offset int64 }
func (a *AuxNameOffset) CanBeAnSSAAux()
func (a *AuxNameOffset) FrameOffset() int64
func (a *AuxNameOffset) String() string
A BaseAddress represents the address ptr+idx, where ptr is a pointer type and idx is an integer type. idx may be nil, in which case it is treated as 0.
type BaseAddress struct {
// contains filtered or unexported fields
}
Block represents a basic block in the control flow graph of a function.
type Block struct { // A unique identifier for the block. The system will attempt to allocate // these IDs densely, but no guarantees. ID ID // Source position for block's control operation Pos src.XPos // The kind of block this is. Kind BlockKind // Likely direction for branches. // If BranchLikely, Succs[0] is the most likely branch taken. // If BranchUnlikely, Succs[1] is the most likely branch taken. // Ignored if len(Succs) < 2. // Fatal if not BranchUnknown and len(Succs) > 2. Likely BranchPrediction // After flagalloc, records whether flags are live at the end of the block. FlagsLiveAtEnd bool // A block that would be good to align (according to the optimizer's guesses) Hotness Hotness // Subsequent blocks, if any. The number and order depend on the block kind. Succs []Edge // Inverse of successors. // The order is significant to Phi nodes in the block. // TODO: predecessors is a pain to maintain. Can we somehow order phi // arguments by block id and have this field computed explicitly when needed? Preds []Edge // A list of values that determine how the block is exited. The number // and type of control values depends on the Kind of the block. For // instance, a BlockIf has a single boolean control value and BlockExit // has a single memory control value. // // The ControlValues() method may be used to get a slice with the non-nil // control values that can be ranged over. // // Controls[1] must be nil if Controls[0] is nil. Controls [2]*Value // Auxiliary info for the block. Its value depends on the Kind. Aux Aux AuxInt int64 // The unordered set of Values that define the operation of this block. // After the scheduling pass, this list is ordered. Values []*Value // The containing function Func *Func // contains filtered or unexported fields }
func (b *Block) AddControl(v *Value)
AddControl appends a control value to the existing list of control values.
func (b *Block) AddEdgeTo(c *Block)
AddEdgeTo adds an edge from block b to block c.
func (b *Block) AuxIntString() string
func (b *Block) ControlValues() []*Value
ControlValues returns a slice containing the non-nil control values of the block. The index of each control value will be the same as it is in the Controls property and can be used in ReplaceControl calls.
func (b *Block) CopyControls(from *Block)
CopyControls replaces the controls for this block with those from the provided block. The provided block is not modified.
func (b *Block) Fatalf(msg string, args ...interface{})
func (b *Block) FirstPossibleStmtValue() *Value
func (b *Block) HTML() string
func (b *Block) LackingPos() bool
LackingPos indicates whether b is a block whose position should be inherited from its successors. This is true if all the values within it have unreliable positions and if it is "plain", meaning that there is no control flow that is also very likely to correspond to a well-understood source position.
func (b *Block) Log() bool
func (b *Block) Logf(msg string, args ...interface{})
func (b *Block) LongHTML() string
func (b *Block) LongString() string
long form print
func (b *Block) NewValue0(pos src.XPos, op Op, t *types.Type) *Value
NewValue0 returns a new value in the block with no arguments and zero aux values.
func (b *Block) NewValue0A(pos src.XPos, op Op, t *types.Type, aux Aux) *Value
NewValue0A returns a new value in the block with no arguments and an aux value.
func (b *Block) NewValue0I(pos src.XPos, op Op, t *types.Type, auxint int64) *Value
NewValue0I returns a new value in the block with no arguments and an auxint value.
func (b *Block) NewValue0IA(pos src.XPos, op Op, t *types.Type, auxint int64, aux Aux) *Value
NewValue0IA returns a new value in the block with no arguments and both an auxint and aux values.
func (b *Block) NewValue1(pos src.XPos, op Op, t *types.Type, arg *Value) *Value
NewValue1 returns a new value in the block with one argument and zero aux values.
func (b *Block) NewValue1A(pos src.XPos, op Op, t *types.Type, aux Aux, arg *Value) *Value
NewValue1A returns a new value in the block with one argument and an aux value.
func (b *Block) NewValue1I(pos src.XPos, op Op, t *types.Type, auxint int64, arg *Value) *Value
NewValue1I returns a new value in the block with one argument and an auxint value.
func (b *Block) NewValue1IA(pos src.XPos, op Op, t *types.Type, auxint int64, aux Aux, arg *Value) *Value
NewValue1IA returns a new value in the block with one argument and both an auxint and aux values.
func (b *Block) NewValue2(pos src.XPos, op Op, t *types.Type, arg0, arg1 *Value) *Value
NewValue2 returns a new value in the block with two arguments and zero aux values.
func (b *Block) NewValue2A(pos src.XPos, op Op, t *types.Type, aux Aux, arg0, arg1 *Value) *Value
NewValue2A returns a new value in the block with two arguments and one aux values.
func (b *Block) NewValue2I(pos src.XPos, op Op, t *types.Type, auxint int64, arg0, arg1 *Value) *Value
NewValue2I returns a new value in the block with two arguments and an auxint value.
func (b *Block) NewValue2IA(pos src.XPos, op Op, t *types.Type, auxint int64, aux Aux, arg0, arg1 *Value) *Value
NewValue2IA returns a new value in the block with two arguments and both an auxint and aux values.
func (b *Block) NewValue3(pos src.XPos, op Op, t *types.Type, arg0, arg1, arg2 *Value) *Value
NewValue3 returns a new value in the block with three arguments and zero aux values.
func (b *Block) NewValue3A(pos src.XPos, op Op, t *types.Type, aux Aux, arg0, arg1, arg2 *Value) *Value
NewValue3A returns a new value in the block with three argument and an aux value.
func (b *Block) NewValue3I(pos src.XPos, op Op, t *types.Type, auxint int64, arg0, arg1, arg2 *Value) *Value
NewValue3I returns a new value in the block with three arguments and an auxint value.
func (b *Block) NewValue4(pos src.XPos, op Op, t *types.Type, arg0, arg1, arg2, arg3 *Value) *Value
NewValue4 returns a new value in the block with four arguments and zero aux values.
func (b *Block) NewValue4I(pos src.XPos, op Op, t *types.Type, auxint int64, arg0, arg1, arg2, arg3 *Value) *Value
NewValue4I returns a new value in the block with four arguments and auxint value.
func (b *Block) NumControls() int
NumControls returns the number of non-nil control values the block has.
func (b *Block) ReplaceControl(i int, v *Value)
ReplaceControl exchanges the existing control value at the index provided for the new value. The index must refer to a valid control value.
func (b *Block) Reset(kind BlockKind)
Reset sets the block to the provided kind and clears all the blocks control and auxiliary values. Other properties of the block, such as its successors, predecessors and values are left unmodified.
func (b *Block) ResetControls()
ResetControls sets the number of controls for the block to 0.
func (b *Block) SetControl(v *Value)
SetControl removes all existing control values and then adds the control value provided. The number of control values after a call to SetControl will always be 1.
func (b *Block) String() string
short form print
type BlockDebug struct {
// contains filtered or unexported fields
}
BlockKind is the kind of SSA block.
type BlockKind uint8
const ( BlockInvalid BlockKind = iota Block386EQ Block386NE Block386LT Block386LE Block386GT Block386GE Block386OS Block386OC Block386ULT Block386ULE Block386UGT Block386UGE Block386EQF Block386NEF Block386ORD Block386NAN BlockAMD64EQ BlockAMD64NE BlockAMD64LT BlockAMD64LE BlockAMD64GT BlockAMD64GE BlockAMD64OS BlockAMD64OC BlockAMD64ULT BlockAMD64ULE BlockAMD64UGT BlockAMD64UGE BlockAMD64EQF BlockAMD64NEF BlockAMD64ORD BlockAMD64NAN BlockAMD64JUMPTABLE BlockARMEQ BlockARMNE BlockARMLT BlockARMLE BlockARMGT BlockARMGE BlockARMULT BlockARMULE BlockARMUGT BlockARMUGE BlockARMLTnoov BlockARMLEnoov BlockARMGTnoov BlockARMGEnoov BlockARM64EQ BlockARM64NE BlockARM64LT BlockARM64LE BlockARM64GT BlockARM64GE BlockARM64ULT BlockARM64ULE BlockARM64UGT BlockARM64UGE BlockARM64Z BlockARM64NZ BlockARM64ZW BlockARM64NZW BlockARM64TBZ BlockARM64TBNZ BlockARM64FLT BlockARM64FLE BlockARM64FGT BlockARM64FGE BlockARM64LTnoov BlockARM64LEnoov BlockARM64GTnoov BlockARM64GEnoov BlockARM64JUMPTABLE BlockLOONG64EQ BlockLOONG64NE BlockLOONG64LTZ BlockLOONG64LEZ BlockLOONG64GTZ BlockLOONG64GEZ BlockLOONG64FPT BlockLOONG64FPF BlockMIPSEQ BlockMIPSNE BlockMIPSLTZ BlockMIPSLEZ BlockMIPSGTZ BlockMIPSGEZ BlockMIPSFPT BlockMIPSFPF BlockMIPS64EQ BlockMIPS64NE BlockMIPS64LTZ BlockMIPS64LEZ BlockMIPS64GTZ BlockMIPS64GEZ BlockMIPS64FPT BlockMIPS64FPF BlockPPC64EQ BlockPPC64NE BlockPPC64LT BlockPPC64LE BlockPPC64GT BlockPPC64GE BlockPPC64FLT BlockPPC64FLE BlockPPC64FGT BlockPPC64FGE BlockRISCV64BEQ BlockRISCV64BNE BlockRISCV64BLT BlockRISCV64BGE BlockRISCV64BLTU BlockRISCV64BGEU BlockRISCV64BEQZ BlockRISCV64BNEZ BlockRISCV64BLEZ BlockRISCV64BGEZ BlockRISCV64BLTZ BlockRISCV64BGTZ BlockS390XBRC BlockS390XCRJ BlockS390XCGRJ BlockS390XCLRJ BlockS390XCLGRJ BlockS390XCIJ BlockS390XCGIJ BlockS390XCLIJ BlockS390XCLGIJ BlockPlain BlockIf BlockDefer BlockRet BlockRetJmp BlockExit BlockJumpTable BlockFirst )
func (k BlockKind) AuxIntType() string
func (k BlockKind) String() string
type BoundsKind uint8
const ( BoundsIndex BoundsKind = iota // indexing operation, 0 <= idx < len failed BoundsIndexU // ... with unsigned idx BoundsSliceAlen // 2-arg slicing operation, 0 <= high <= len failed BoundsSliceAlenU // ... with unsigned high BoundsSliceAcap // 2-arg slicing operation, 0 <= high <= cap failed BoundsSliceAcapU // ... with unsigned high BoundsSliceB // 2-arg slicing operation, 0 <= low <= high failed BoundsSliceBU // ... with unsigned low BoundsSlice3Alen // 3-arg slicing operation, 0 <= max <= len failed BoundsSlice3AlenU // ... with unsigned max BoundsSlice3Acap // 3-arg slicing operation, 0 <= max <= cap failed BoundsSlice3AcapU // ... with unsigned max BoundsSlice3B // 3-arg slicing operation, 0 <= high <= max failed BoundsSlice3BU // ... with unsigned high BoundsSlice3C // 3-arg slicing operation, 0 <= low <= high failed BoundsSlice3CU // ... with unsigned low BoundsConvert // conversion to array pointer failed BoundsKindCount )
type BranchPrediction int8
ByTopo sorts topologically: target function is on top, followed by inlined functions sorted by filename and line numbers.
type ByTopo []*FuncLines
func (x ByTopo) Len() int
func (x ByTopo) Less(i, j int) bool
func (x ByTopo) Swap(i, j int)
A Cache holds reusable compiler state. It is intended to be re-used for multiple Func compilations.
type Cache struct { ValueToProgAfter []*obj.Prog Liveness interface{} // *gc.livenessFuncCache // contains filtered or unexported fields }
func (c *Cache) Reset()
A Config holds readonly compilation information. It is created once, early during compilation, and shared across all compilations.
type Config struct { PtrSize int64 // 4 or 8; copy of cmd/internal/sys.Arch.PtrSize RegSize int64 // 4 or 8; copy of cmd/internal/sys.Arch.RegSize Types Types ABI1 *abi.ABIConfig // "ABIInternal" under development // TODO change comment when this becomes current ABI0 *abi.ABIConfig GCRegMap []*Register // garbage collector register map, by GC register index FPReg int8 // register number of frame pointer, -1 if not used LinkReg int8 // register number of link register if it is a general purpose register, -1 if not used SoftFloat bool // Race bool // race detector enabled BigEndian bool // UseFMA bool // Use hardware FMA operation // contains filtered or unexported fields }
func NewConfig(arch string, types Types, ctxt *obj.Link, optimize, softfloat bool) *Config
NewConfig returns a new configuration object for the given architecture.
func (c *Config) Ctxt() *obj.Link
func (c *Config) NewFunc(fe Frontend, cache *Cache) *Func
NewFunc returns a new, empty function object. Caller must reset cache before calling NewFunc.
Edge represents a CFG edge. Example edges for b branching to either c or d. (c and d have other predecessors.)
b.Succs = [{c,3}, {d,1}] c.Preds = [?, ?, ?, {b,0}] d.Preds = [?, {b,1}, ?]
These indexes allow us to edit the CFG in constant time. In addition, it informs phi ops in degenerate cases like:
b: if k then c else c c: v = Phi(x, y)
Then the indexes tell you whether x is chosen from the if or else branch from b.
b.Succs = [{c,0},{c,1}] c.Preds = [{b,0},{b,1}]
means x is chosen if k is true.
type Edge struct {
// contains filtered or unexported fields
}
func (e Edge) Block() *Block
func (e Edge) Index() int
func (e Edge) String() string
type Frontend interface { Logger // StringData returns a symbol pointing to the given string's contents. StringData(string) *obj.LSym // Given the name for a compound type, returns the name we should use // for the parts of that compound type. SplitSlot(parent *LocalSlot, suffix string, offset int64, t *types.Type) LocalSlot // Syslook returns a symbol of the runtime function/variable with the // given name. Syslook(string) *obj.LSym // UseWriteBarrier reports whether write barrier is enabled UseWriteBarrier() bool // Func returns the ir.Func of the function being compiled. Func() *ir.Func }
A Func represents a Go func declaration (or function literal) and its body. This package compiles each Func independently. Funcs are single-use; a new Func must be created for every compiled function.
type Func struct { Config *Config // architecture information Cache *Cache // re-usable cache Name string // e.g. NewFunc or (*Func).NumBlocks (no package prefix) Type *types.Type // type signature of the function. Blocks []*Block // unordered set of all basic blocks (note: not indexable by ID) Entry *Block // the entry basic block HTMLWriter *HTMLWriter // html writer, for debugging PrintOrHtmlSSA bool // true if GOSSAFUNC matches, true even if fe.Log() (spew phase results to stdout) is false. There's an odd dependence on this in debug.go for method logf. ABI0 *abi.ABIConfig // A copy, for no-sync access ABI1 *abi.ABIConfig // A copy, for no-sync access ABISelf *abi.ABIConfig // ABI for function being compiled ABIDefault *abi.ABIConfig // ABI for rtcall and other no-parsed-signature/pragma functions. NoSplit bool // true if function is marked as nosplit. Used by schedule check pass. IsPgoHot bool // when register allocation is done, maps value ids to locations RegAlloc []Location // map from LocalSlot to set of Values that we want to store in that slot. NamedValues map[LocalSlot][]*Value // Names is a copy of NamedValues.Keys. We keep a separate list // of keys to make iteration order deterministic. Names []*LocalSlot // Canonicalize root/top-level local slots, and canonicalize their pieces. // Because LocalSlot pieces refer to their parents with a pointer, this ensures that equivalent slots really are equal. CanonicalLocalSlots map[LocalSlot]*LocalSlot CanonicalLocalSplits map[LocalSlotSplitKey]*LocalSlot // RegArgs is a slice of register-memory pairs that must be spilled and unspilled in the uncommon path of function entry. RegArgs []Spill // OwnAux describes parameters and results for this function. OwnAux *AuxCall // CloSlot holds the compiler-synthesized name (".closureptr") // where we spill the closure pointer for range func bodies. CloSlot *ir.Name // contains filtered or unexported fields }
func (f *Func) ConstBool(t *types.Type, c bool) *Value
ConstBool returns an int constant representing its argument.
func (f *Func) ConstEmptyString(t *types.Type) *Value
func (f *Func) ConstFloat32(t *types.Type, c float64) *Value
func (f *Func) ConstFloat64(t *types.Type, c float64) *Value
func (f *Func) ConstInt16(t *types.Type, c int16) *Value
func (f *Func) ConstInt32(t *types.Type, c int32) *Value
func (f *Func) ConstInt64(t *types.Type, c int64) *Value
func (f *Func) ConstInt8(t *types.Type, c int8) *Value
func (f *Func) ConstInterface(t *types.Type) *Value
func (f *Func) ConstNil(t *types.Type) *Value
func (f *Func) ConstOffPtrSP(t *types.Type, c int64, sp *Value) *Value
func (f *Func) ConstSlice(t *types.Type) *Value
func (f *Func) DebugHashMatch() bool
DebugHashMatch returns
base.DebugHashMatch(this function's package.name)
for use in bug isolation. The return value is true unless environment variable GOSSAHASH is set, in which case "it depends". See base.DebugHashMatch for more information.
func (f *Func) DumpFileForPhase(phaseName string) io.WriteCloser
DumpFileForPhase creates a file from the function name and phase name, warning and returning nil if this is not possible.
func (f *Func) Fatalf(msg string, args ...interface{})
func (f *Func) Frontend() Frontend
func (f *Func) HTML(phase string, dot *dotWriter) string
func (f *Func) Idom() []*Block
Idom returns a map from block ID to the immediate dominator of that block. f.Entry.ID maps to nil. Unreachable blocks map to nil as well.
func (f *Func) Log() bool
func (f *Func) LogStat(key string, args ...interface{})
LogStat writes a string key and int value as a warning in a tab-separated format easily handled by spreadsheets or awk. file names, lines, and function names are included to provide enough (?) context to allow item-by-item comparisons across runs. For example: awk 'BEGIN {FS="\t"} $3~/TIME/{sum+=$4} END{print "t(ns)=",sum}' t.log
func (f *Func) Logf(msg string, args ...interface{})
func (f *Func) NameABI() string
NameABI returns the function name followed by comma and the ABI number. This is intended for use with GOSSAFUNC and HTML dumps, and differs from the linker's "<1>" convention because "<" and ">" require shell quoting and are not legal file names (for use with GOSSADIR) on Windows.
func (f *Func) NewBlock(kind BlockKind) *Block
NewBlock allocates a new Block of the given kind and places it at the end of f.Blocks.
func (f *Func) NewLocal(pos src.XPos, typ *types.Type) *ir.Name
NewLocal returns a new anonymous local variable of the given type.
func (f *Func) NumBlocks() int
NumBlocks returns an integer larger than the id of any Block in the Func.
func (f *Func) NumValues() int
NumValues returns an integer larger than the id of any Value in the Func.
func (f *Func) Postorder() []*Block
func (f *Func) Sdom() SparseTree
Sdom returns a sparse tree representing the dominator relationships among the blocks of f.
func (f *Func) SplitArray(name *LocalSlot) *LocalSlot
func (f *Func) SplitComplex(name *LocalSlot) (*LocalSlot, *LocalSlot)
func (f *Func) SplitInt64(name *LocalSlot) (*LocalSlot, *LocalSlot)
func (f *Func) SplitInterface(name *LocalSlot) (*LocalSlot, *LocalSlot)
func (f *Func) SplitSlice(name *LocalSlot) (*LocalSlot, *LocalSlot, *LocalSlot)
func (f *Func) SplitSlot(name *LocalSlot, sfx string, offset int64, t *types.Type) *LocalSlot
func (f *Func) SplitString(name *LocalSlot) (*LocalSlot, *LocalSlot)
func (f *Func) SplitStruct(name *LocalSlot, i int) *LocalSlot
func (f *Func) String() string
func (f *Func) Warnl(pos src.XPos, msg string, args ...interface{})
A FuncDebug contains all the debug information for the variables in a function. Variables are identified by their LocalSlot, which may be the result of decomposing a larger variable.
type FuncDebug struct { // Slots is all the slots used in the debug info, indexed by their SlotID. Slots []LocalSlot // The user variables, indexed by VarID. Vars []*ir.Name // The slots that make up each variable, indexed by VarID. VarSlots [][]SlotID // The location list data, indexed by VarID. Must be processed by PutLocationList. LocationLists [][]byte // Register-resident output parameters for the function. This is filled in at // SSA generation time. RegOutputParams []*ir.Name // Variable declarations that were removed during optimization OptDcl []*ir.Name // Filled in by the user. Translates Block and Value ID to PC. // // NOTE: block is only used if value is BlockStart.ID or BlockEnd.ID. // Otherwise, it is ignored. GetPC func(block, value ID) int64 }
func (debugInfo *FuncDebug) PutLocationList(list []byte, ctxt *obj.Link, listSym, startPC *obj.LSym)
PutLocationList adds list (a location list in its intermediate representation) to listSym.
FuncLines contains source code for a function to be displayed in sources column.
type FuncLines struct { Filename string StartLineno uint Lines []string }
type HTMLWriter struct { Func *Func // contains filtered or unexported fields }
func NewHTMLWriter(path string, f *Func, cfgMask string) *HTMLWriter
func (w *HTMLWriter) Close()
func (w *HTMLWriter) Fatalf(msg string, args ...interface{})
Fatalf reports an error and exits.
func (w *HTMLWriter) Logf(msg string, args ...interface{})
Logf calls the (w *HTMLWriter).Func's Logf method passing along a msg and args.
func (w *HTMLWriter) Printf(msg string, v ...interface{})
func (w *HTMLWriter) WriteAST(phase string, buf *bytes.Buffer)
func (w *HTMLWriter) WriteColumn(phase, title, class, html string)
WriteColumn writes raw HTML in a column headed by title. It is intended for pre- and post-compilation log output.
func (w *HTMLWriter) WriteMultiTitleColumn(phase string, titles []string, class, html string)
func (w *HTMLWriter) WritePhase(phase, title string)
WritePhase writes f in a column headed by title. phase is used for collapsing columns and should be unique across the table.
func (w *HTMLWriter) WriteSources(phase string, all []*FuncLines)
WriteSources writes lines as source code in a column headed by title. phase is used for collapsing columns and should be unique across the table.
func (w *HTMLWriter) WriteString(s string)
type Hotness int8 // Could use negative numbers for specifically non-hot blocks, but don't, yet.
type ID int32
type LocPair [2]Location
func (t LocPair) String() string
type LocResults []Location
func (t LocResults) String() string
A LocalSlot is a location in the stack frame, which identifies and stores part or all of a PPARAM, PPARAMOUT, or PAUTO ONAME node. It can represent a whole variable, part of a larger stack slot, or part of a variable that has been decomposed into multiple stack slots. As an example, a string could have the following configurations:
stack layout LocalSlots Optimizations are disabled. s is on the stack and represented in its entirety. [ ------- s string ---- ] { N: s, Type: string, Off: 0 } s was not decomposed, but the SSA operates on its parts individually, so there is a LocalSlot for each of its fields that points into the single stack slot. [ ------- s string ---- ] { N: s, Type: *uint8, Off: 0 }, {N: s, Type: int, Off: 8} s was decomposed. Each of its fields is in its own stack slot and has its own LocalSLot. [ ptr *uint8 ] [ len int] { N: ptr, Type: *uint8, Off: 0, SplitOf: parent, SplitOffset: 0}, { N: len, Type: int, Off: 0, SplitOf: parent, SplitOffset: 8} parent = &{N: s, Type: string}
type LocalSlot struct { N *ir.Name // an ONAME *ir.Name representing a stack location. Type *types.Type // type of slot Off int64 // offset of slot in N SplitOf *LocalSlot // slot is a decomposition of SplitOf SplitOffset int64 // .. at this offset. }
func (s LocalSlot) String() string
type LocalSlotSplitKey struct { Off int64 // offset of slot in N Type *types.Type // type of slot // contains filtered or unexported fields }
A place that an ssa variable can reside.
type Location interface { String() string // name to use in assembly templates: AX, 16(SP), ... }
type Logger interface { // Logf logs a message from the compiler. Logf(string, ...interface{}) // Log reports whether logging is not a no-op // some logging calls account for more than a few heap allocations. Log() bool // Fatalf reports a compiler error and exits. Fatalf(pos src.XPos, msg string, args ...interface{}) // Warnl writes compiler messages in the form expected by "errorcheck" tests Warnl(pos src.XPos, fmt_ string, args ...interface{}) // Forwards the Debug flags from gc Debug_checknil() bool }
An Op encodes the specific operation that a Value performs. Opcodes' semantics can be modified by the type and aux fields of the Value. For instance, OpAdd can be 32 or 64 bit, signed or unsigned, float or complex, depending on Value.Type. Semantics of each op are described in the opcode files in _gen/*Ops.go. There is one file for generic (architecture-independent) ops and one file for each architecture.
type Op int32
const ( OpInvalid Op = iota Op386ADDSS Op386ADDSD Op386SUBSS Op386SUBSD Op386MULSS Op386MULSD Op386DIVSS Op386DIVSD Op386MOVSSload Op386MOVSDload Op386MOVSSconst Op386MOVSDconst Op386MOVSSloadidx1 Op386MOVSSloadidx4 Op386MOVSDloadidx1 Op386MOVSDloadidx8 Op386MOVSSstore Op386MOVSDstore Op386MOVSSstoreidx1 Op386MOVSSstoreidx4 Op386MOVSDstoreidx1 Op386MOVSDstoreidx8 Op386ADDSSload Op386ADDSDload Op386SUBSSload Op386SUBSDload Op386MULSSload Op386MULSDload Op386DIVSSload Op386DIVSDload Op386ADDL Op386ADDLconst Op386ADDLcarry Op386ADDLconstcarry Op386ADCL Op386ADCLconst Op386SUBL Op386SUBLconst Op386SUBLcarry Op386SUBLconstcarry Op386SBBL Op386SBBLconst Op386MULL Op386MULLconst Op386MULLU Op386HMULL Op386HMULLU Op386MULLQU Op386AVGLU Op386DIVL Op386DIVW Op386DIVLU Op386DIVWU Op386MODL Op386MODW Op386MODLU Op386MODWU Op386ANDL Op386ANDLconst Op386ORL Op386ORLconst Op386XORL Op386XORLconst Op386CMPL Op386CMPW Op386CMPB Op386CMPLconst Op386CMPWconst Op386CMPBconst Op386CMPLload Op386CMPWload Op386CMPBload Op386CMPLconstload Op386CMPWconstload Op386CMPBconstload Op386UCOMISS Op386UCOMISD Op386TESTL Op386TESTW Op386TESTB Op386TESTLconst Op386TESTWconst Op386TESTBconst Op386SHLL Op386SHLLconst Op386SHRL Op386SHRW Op386SHRB Op386SHRLconst Op386SHRWconst Op386SHRBconst Op386SARL Op386SARW Op386SARB Op386SARLconst Op386SARWconst Op386SARBconst Op386ROLL Op386ROLW Op386ROLB Op386ROLLconst Op386ROLWconst Op386ROLBconst Op386ADDLload Op386SUBLload Op386MULLload Op386ANDLload Op386ORLload Op386XORLload Op386ADDLloadidx4 Op386SUBLloadidx4 Op386MULLloadidx4 Op386ANDLloadidx4 Op386ORLloadidx4 Op386XORLloadidx4 Op386NEGL Op386NOTL Op386BSFL Op386BSFW Op386LoweredCtz32 Op386BSRL Op386BSRW Op386BSWAPL Op386SQRTSD Op386SQRTSS Op386SBBLcarrymask Op386SETEQ Op386SETNE Op386SETL Op386SETLE Op386SETG Op386SETGE Op386SETB Op386SETBE Op386SETA Op386SETAE Op386SETO Op386SETEQF Op386SETNEF Op386SETORD Op386SETNAN Op386SETGF Op386SETGEF Op386MOVBLSX Op386MOVBLZX Op386MOVWLSX Op386MOVWLZX Op386MOVLconst Op386CVTTSD2SL Op386CVTTSS2SL Op386CVTSL2SS Op386CVTSL2SD Op386CVTSD2SS Op386CVTSS2SD Op386PXOR Op386LEAL Op386LEAL1 Op386LEAL2 Op386LEAL4 Op386LEAL8 Op386MOVBload Op386MOVBLSXload Op386MOVWload Op386MOVWLSXload Op386MOVLload Op386MOVBstore Op386MOVWstore Op386MOVLstore Op386ADDLmodify Op386SUBLmodify Op386ANDLmodify Op386ORLmodify Op386XORLmodify Op386ADDLmodifyidx4 Op386SUBLmodifyidx4 Op386ANDLmodifyidx4 Op386ORLmodifyidx4 Op386XORLmodifyidx4 Op386ADDLconstmodify Op386ANDLconstmodify Op386ORLconstmodify Op386XORLconstmodify Op386ADDLconstmodifyidx4 Op386ANDLconstmodifyidx4 Op386ORLconstmodifyidx4 Op386XORLconstmodifyidx4 Op386MOVBloadidx1 Op386MOVWloadidx1 Op386MOVWloadidx2 Op386MOVLloadidx1 Op386MOVLloadidx4 Op386MOVBstoreidx1 Op386MOVWstoreidx1 Op386MOVWstoreidx2 Op386MOVLstoreidx1 Op386MOVLstoreidx4 Op386MOVBstoreconst Op386MOVWstoreconst Op386MOVLstoreconst Op386MOVBstoreconstidx1 Op386MOVWstoreconstidx1 Op386MOVWstoreconstidx2 Op386MOVLstoreconstidx1 Op386MOVLstoreconstidx4 Op386DUFFZERO Op386REPSTOSL Op386CALLstatic Op386CALLtail Op386CALLclosure Op386CALLinter Op386DUFFCOPY Op386REPMOVSL Op386InvertFlags Op386LoweredGetG Op386LoweredGetClosurePtr Op386LoweredGetCallerPC Op386LoweredGetCallerSP Op386LoweredNilCheck Op386LoweredWB Op386LoweredPanicBoundsA Op386LoweredPanicBoundsB Op386LoweredPanicBoundsC Op386LoweredPanicExtendA Op386LoweredPanicExtendB Op386LoweredPanicExtendC Op386FlagEQ Op386FlagLT_ULT Op386FlagLT_UGT Op386FlagGT_UGT Op386FlagGT_ULT Op386MOVSSconst1 Op386MOVSDconst1 Op386MOVSSconst2 Op386MOVSDconst2 OpAMD64ADDSS OpAMD64ADDSD OpAMD64SUBSS OpAMD64SUBSD OpAMD64MULSS OpAMD64MULSD OpAMD64DIVSS OpAMD64DIVSD OpAMD64MOVSSload OpAMD64MOVSDload OpAMD64MOVSSconst OpAMD64MOVSDconst OpAMD64MOVSSloadidx1 OpAMD64MOVSSloadidx4 OpAMD64MOVSDloadidx1 OpAMD64MOVSDloadidx8 OpAMD64MOVSSstore OpAMD64MOVSDstore OpAMD64MOVSSstoreidx1 OpAMD64MOVSSstoreidx4 OpAMD64MOVSDstoreidx1 OpAMD64MOVSDstoreidx8 OpAMD64ADDSSload OpAMD64ADDSDload OpAMD64SUBSSload OpAMD64SUBSDload OpAMD64MULSSload OpAMD64MULSDload OpAMD64DIVSSload OpAMD64DIVSDload OpAMD64ADDSSloadidx1 OpAMD64ADDSSloadidx4 OpAMD64ADDSDloadidx1 OpAMD64ADDSDloadidx8 OpAMD64SUBSSloadidx1 OpAMD64SUBSSloadidx4 OpAMD64SUBSDloadidx1 OpAMD64SUBSDloadidx8 OpAMD64MULSSloadidx1 OpAMD64MULSSloadidx4 OpAMD64MULSDloadidx1 OpAMD64MULSDloadidx8 OpAMD64DIVSSloadidx1 OpAMD64DIVSSloadidx4 OpAMD64DIVSDloadidx1 OpAMD64DIVSDloadidx8 OpAMD64ADDQ OpAMD64ADDL OpAMD64ADDQconst OpAMD64ADDLconst OpAMD64ADDQconstmodify OpAMD64ADDLconstmodify OpAMD64SUBQ OpAMD64SUBL OpAMD64SUBQconst OpAMD64SUBLconst OpAMD64MULQ OpAMD64MULL OpAMD64MULQconst OpAMD64MULLconst OpAMD64MULLU OpAMD64MULQU OpAMD64HMULQ OpAMD64HMULL OpAMD64HMULQU OpAMD64HMULLU OpAMD64AVGQU OpAMD64DIVQ OpAMD64DIVL OpAMD64DIVW OpAMD64DIVQU OpAMD64DIVLU OpAMD64DIVWU OpAMD64NEGLflags OpAMD64ADDQcarry OpAMD64ADCQ OpAMD64ADDQconstcarry OpAMD64ADCQconst OpAMD64SUBQborrow OpAMD64SBBQ OpAMD64SUBQconstborrow OpAMD64SBBQconst OpAMD64MULQU2 OpAMD64DIVQU2 OpAMD64ANDQ OpAMD64ANDL OpAMD64ANDQconst OpAMD64ANDLconst OpAMD64ANDQconstmodify OpAMD64ANDLconstmodify OpAMD64ORQ OpAMD64ORL OpAMD64ORQconst OpAMD64ORLconst OpAMD64ORQconstmodify OpAMD64ORLconstmodify OpAMD64XORQ OpAMD64XORL OpAMD64XORQconst OpAMD64XORLconst OpAMD64XORQconstmodify OpAMD64XORLconstmodify OpAMD64CMPQ OpAMD64CMPL OpAMD64CMPW OpAMD64CMPB OpAMD64CMPQconst OpAMD64CMPLconst OpAMD64CMPWconst OpAMD64CMPBconst OpAMD64CMPQload OpAMD64CMPLload OpAMD64CMPWload OpAMD64CMPBload OpAMD64CMPQconstload OpAMD64CMPLconstload OpAMD64CMPWconstload OpAMD64CMPBconstload OpAMD64CMPQloadidx8 OpAMD64CMPQloadidx1 OpAMD64CMPLloadidx4 OpAMD64CMPLloadidx1 OpAMD64CMPWloadidx2 OpAMD64CMPWloadidx1 OpAMD64CMPBloadidx1 OpAMD64CMPQconstloadidx8 OpAMD64CMPQconstloadidx1 OpAMD64CMPLconstloadidx4 OpAMD64CMPLconstloadidx1 OpAMD64CMPWconstloadidx2 OpAMD64CMPWconstloadidx1 OpAMD64CMPBconstloadidx1 OpAMD64UCOMISS OpAMD64UCOMISD OpAMD64BTL OpAMD64BTQ OpAMD64BTCL OpAMD64BTCQ OpAMD64BTRL OpAMD64BTRQ OpAMD64BTSL OpAMD64BTSQ OpAMD64BTLconst OpAMD64BTQconst OpAMD64BTCQconst OpAMD64BTRQconst OpAMD64BTSQconst OpAMD64BTSQconstmodify OpAMD64BTRQconstmodify OpAMD64BTCQconstmodify OpAMD64TESTQ OpAMD64TESTL OpAMD64TESTW OpAMD64TESTB OpAMD64TESTQconst OpAMD64TESTLconst OpAMD64TESTWconst OpAMD64TESTBconst OpAMD64SHLQ OpAMD64SHLL OpAMD64SHLQconst OpAMD64SHLLconst OpAMD64SHRQ OpAMD64SHRL OpAMD64SHRW OpAMD64SHRB OpAMD64SHRQconst OpAMD64SHRLconst OpAMD64SHRWconst OpAMD64SHRBconst OpAMD64SARQ OpAMD64SARL OpAMD64SARW OpAMD64SARB OpAMD64SARQconst OpAMD64SARLconst OpAMD64SARWconst OpAMD64SARBconst OpAMD64SHRDQ OpAMD64SHLDQ OpAMD64ROLQ OpAMD64ROLL OpAMD64ROLW OpAMD64ROLB OpAMD64RORQ OpAMD64RORL OpAMD64RORW OpAMD64RORB OpAMD64ROLQconst OpAMD64ROLLconst OpAMD64ROLWconst OpAMD64ROLBconst OpAMD64ADDLload OpAMD64ADDQload OpAMD64SUBQload OpAMD64SUBLload OpAMD64ANDLload OpAMD64ANDQload OpAMD64ORQload OpAMD64ORLload OpAMD64XORQload OpAMD64XORLload OpAMD64ADDLloadidx1 OpAMD64ADDLloadidx4 OpAMD64ADDLloadidx8 OpAMD64ADDQloadidx1 OpAMD64ADDQloadidx8 OpAMD64SUBLloadidx1 OpAMD64SUBLloadidx4 OpAMD64SUBLloadidx8 OpAMD64SUBQloadidx1 OpAMD64SUBQloadidx8 OpAMD64ANDLloadidx1 OpAMD64ANDLloadidx4 OpAMD64ANDLloadidx8 OpAMD64ANDQloadidx1 OpAMD64ANDQloadidx8 OpAMD64ORLloadidx1 OpAMD64ORLloadidx4 OpAMD64ORLloadidx8 OpAMD64ORQloadidx1 OpAMD64ORQloadidx8 OpAMD64XORLloadidx1 OpAMD64XORLloadidx4 OpAMD64XORLloadidx8 OpAMD64XORQloadidx1 OpAMD64XORQloadidx8 OpAMD64ADDQmodify OpAMD64SUBQmodify OpAMD64ANDQmodify OpAMD64ORQmodify OpAMD64XORQmodify OpAMD64ADDLmodify OpAMD64SUBLmodify OpAMD64ANDLmodify OpAMD64ORLmodify OpAMD64XORLmodify OpAMD64ADDQmodifyidx1 OpAMD64ADDQmodifyidx8 OpAMD64SUBQmodifyidx1 OpAMD64SUBQmodifyidx8 OpAMD64ANDQmodifyidx1 OpAMD64ANDQmodifyidx8 OpAMD64ORQmodifyidx1 OpAMD64ORQmodifyidx8 OpAMD64XORQmodifyidx1 OpAMD64XORQmodifyidx8 OpAMD64ADDLmodifyidx1 OpAMD64ADDLmodifyidx4 OpAMD64ADDLmodifyidx8 OpAMD64SUBLmodifyidx1 OpAMD64SUBLmodifyidx4 OpAMD64SUBLmodifyidx8 OpAMD64ANDLmodifyidx1 OpAMD64ANDLmodifyidx4 OpAMD64ANDLmodifyidx8 OpAMD64ORLmodifyidx1 OpAMD64ORLmodifyidx4 OpAMD64ORLmodifyidx8 OpAMD64XORLmodifyidx1 OpAMD64XORLmodifyidx4 OpAMD64XORLmodifyidx8 OpAMD64ADDQconstmodifyidx1 OpAMD64ADDQconstmodifyidx8 OpAMD64ANDQconstmodifyidx1 OpAMD64ANDQconstmodifyidx8 OpAMD64ORQconstmodifyidx1 OpAMD64ORQconstmodifyidx8 OpAMD64XORQconstmodifyidx1 OpAMD64XORQconstmodifyidx8 OpAMD64ADDLconstmodifyidx1 OpAMD64ADDLconstmodifyidx4 OpAMD64ADDLconstmodifyidx8 OpAMD64ANDLconstmodifyidx1 OpAMD64ANDLconstmodifyidx4 OpAMD64ANDLconstmodifyidx8 OpAMD64ORLconstmodifyidx1 OpAMD64ORLconstmodifyidx4 OpAMD64ORLconstmodifyidx8 OpAMD64XORLconstmodifyidx1 OpAMD64XORLconstmodifyidx4 OpAMD64XORLconstmodifyidx8 OpAMD64NEGQ OpAMD64NEGL OpAMD64NOTQ OpAMD64NOTL OpAMD64BSFQ OpAMD64BSFL OpAMD64BSRQ OpAMD64BSRL OpAMD64CMOVQEQ OpAMD64CMOVQNE OpAMD64CMOVQLT OpAMD64CMOVQGT OpAMD64CMOVQLE OpAMD64CMOVQGE OpAMD64CMOVQLS OpAMD64CMOVQHI OpAMD64CMOVQCC OpAMD64CMOVQCS OpAMD64CMOVLEQ OpAMD64CMOVLNE OpAMD64CMOVLLT OpAMD64CMOVLGT OpAMD64CMOVLLE OpAMD64CMOVLGE OpAMD64CMOVLLS OpAMD64CMOVLHI OpAMD64CMOVLCC OpAMD64CMOVLCS OpAMD64CMOVWEQ OpAMD64CMOVWNE OpAMD64CMOVWLT OpAMD64CMOVWGT OpAMD64CMOVWLE OpAMD64CMOVWGE OpAMD64CMOVWLS OpAMD64CMOVWHI OpAMD64CMOVWCC OpAMD64CMOVWCS OpAMD64CMOVQEQF OpAMD64CMOVQNEF OpAMD64CMOVQGTF OpAMD64CMOVQGEF OpAMD64CMOVLEQF OpAMD64CMOVLNEF OpAMD64CMOVLGTF OpAMD64CMOVLGEF OpAMD64CMOVWEQF OpAMD64CMOVWNEF OpAMD64CMOVWGTF OpAMD64CMOVWGEF OpAMD64BSWAPQ OpAMD64BSWAPL OpAMD64POPCNTQ OpAMD64POPCNTL OpAMD64SQRTSD OpAMD64SQRTSS OpAMD64ROUNDSD OpAMD64VFMADD231SD OpAMD64MINSD OpAMD64MINSS OpAMD64SBBQcarrymask OpAMD64SBBLcarrymask OpAMD64SETEQ OpAMD64SETNE OpAMD64SETL OpAMD64SETLE OpAMD64SETG OpAMD64SETGE OpAMD64SETB OpAMD64SETBE OpAMD64SETA OpAMD64SETAE OpAMD64SETO OpAMD64SETEQstore OpAMD64SETNEstore OpAMD64SETLstore OpAMD64SETLEstore OpAMD64SETGstore OpAMD64SETGEstore OpAMD64SETBstore OpAMD64SETBEstore OpAMD64SETAstore OpAMD64SETAEstore OpAMD64SETEQstoreidx1 OpAMD64SETNEstoreidx1 OpAMD64SETLstoreidx1 OpAMD64SETLEstoreidx1 OpAMD64SETGstoreidx1 OpAMD64SETGEstoreidx1 OpAMD64SETBstoreidx1 OpAMD64SETBEstoreidx1 OpAMD64SETAstoreidx1 OpAMD64SETAEstoreidx1 OpAMD64SETEQF OpAMD64SETNEF OpAMD64SETORD OpAMD64SETNAN OpAMD64SETGF OpAMD64SETGEF OpAMD64MOVBQSX OpAMD64MOVBQZX OpAMD64MOVWQSX OpAMD64MOVWQZX OpAMD64MOVLQSX OpAMD64MOVLQZX OpAMD64MOVLconst OpAMD64MOVQconst OpAMD64CVTTSD2SL OpAMD64CVTTSD2SQ OpAMD64CVTTSS2SL OpAMD64CVTTSS2SQ OpAMD64CVTSL2SS OpAMD64CVTSL2SD OpAMD64CVTSQ2SS OpAMD64CVTSQ2SD OpAMD64CVTSD2SS OpAMD64CVTSS2SD OpAMD64MOVQi2f OpAMD64MOVQf2i OpAMD64MOVLi2f OpAMD64MOVLf2i OpAMD64PXOR OpAMD64POR OpAMD64LEAQ OpAMD64LEAL OpAMD64LEAW OpAMD64LEAQ1 OpAMD64LEAL1 OpAMD64LEAW1 OpAMD64LEAQ2 OpAMD64LEAL2 OpAMD64LEAW2 OpAMD64LEAQ4 OpAMD64LEAL4 OpAMD64LEAW4 OpAMD64LEAQ8 OpAMD64LEAL8 OpAMD64LEAW8 OpAMD64MOVBload OpAMD64MOVBQSXload OpAMD64MOVWload OpAMD64MOVWQSXload OpAMD64MOVLload OpAMD64MOVLQSXload OpAMD64MOVQload OpAMD64MOVBstore OpAMD64MOVWstore OpAMD64MOVLstore OpAMD64MOVQstore OpAMD64MOVOload OpAMD64MOVOstore OpAMD64MOVBloadidx1 OpAMD64MOVWloadidx1 OpAMD64MOVWloadidx2 OpAMD64MOVLloadidx1 OpAMD64MOVLloadidx4 OpAMD64MOVLloadidx8 OpAMD64MOVQloadidx1 OpAMD64MOVQloadidx8 OpAMD64MOVBstoreidx1 OpAMD64MOVWstoreidx1 OpAMD64MOVWstoreidx2 OpAMD64MOVLstoreidx1 OpAMD64MOVLstoreidx4 OpAMD64MOVLstoreidx8 OpAMD64MOVQstoreidx1 OpAMD64MOVQstoreidx8 OpAMD64MOVBstoreconst OpAMD64MOVWstoreconst OpAMD64MOVLstoreconst OpAMD64MOVQstoreconst OpAMD64MOVOstoreconst OpAMD64MOVBstoreconstidx1 OpAMD64MOVWstoreconstidx1 OpAMD64MOVWstoreconstidx2 OpAMD64MOVLstoreconstidx1 OpAMD64MOVLstoreconstidx4 OpAMD64MOVQstoreconstidx1 OpAMD64MOVQstoreconstidx8 OpAMD64DUFFZERO OpAMD64REPSTOSQ OpAMD64CALLstatic OpAMD64CALLtail OpAMD64CALLclosure OpAMD64CALLinter OpAMD64DUFFCOPY OpAMD64REPMOVSQ OpAMD64InvertFlags OpAMD64LoweredGetG OpAMD64LoweredGetClosurePtr OpAMD64LoweredGetCallerPC OpAMD64LoweredGetCallerSP OpAMD64LoweredNilCheck OpAMD64LoweredWB OpAMD64LoweredHasCPUFeature OpAMD64LoweredPanicBoundsA OpAMD64LoweredPanicBoundsB OpAMD64LoweredPanicBoundsC OpAMD64FlagEQ OpAMD64FlagLT_ULT OpAMD64FlagLT_UGT OpAMD64FlagGT_UGT OpAMD64FlagGT_ULT OpAMD64MOVBatomicload OpAMD64MOVLatomicload OpAMD64MOVQatomicload OpAMD64XCHGB OpAMD64XCHGL OpAMD64XCHGQ OpAMD64XADDLlock OpAMD64XADDQlock OpAMD64AddTupleFirst32 OpAMD64AddTupleFirst64 OpAMD64CMPXCHGLlock OpAMD64CMPXCHGQlock OpAMD64ANDBlock OpAMD64ANDLlock OpAMD64ORBlock OpAMD64ORLlock OpAMD64PrefetchT0 OpAMD64PrefetchNTA OpAMD64ANDNQ OpAMD64ANDNL OpAMD64BLSIQ OpAMD64BLSIL OpAMD64BLSMSKQ OpAMD64BLSMSKL OpAMD64BLSRQ OpAMD64BLSRL OpAMD64TZCNTQ OpAMD64TZCNTL OpAMD64LZCNTQ OpAMD64LZCNTL OpAMD64MOVBEWstore OpAMD64MOVBELload OpAMD64MOVBELstore OpAMD64MOVBEQload OpAMD64MOVBEQstore OpAMD64MOVBELloadidx1 OpAMD64MOVBELloadidx4 OpAMD64MOVBELloadidx8 OpAMD64MOVBEQloadidx1 OpAMD64MOVBEQloadidx8 OpAMD64MOVBEWstoreidx1 OpAMD64MOVBEWstoreidx2 OpAMD64MOVBELstoreidx1 OpAMD64MOVBELstoreidx4 OpAMD64MOVBELstoreidx8 OpAMD64MOVBEQstoreidx1 OpAMD64MOVBEQstoreidx8 OpAMD64SARXQ OpAMD64SARXL OpAMD64SHLXQ OpAMD64SHLXL OpAMD64SHRXQ OpAMD64SHRXL OpAMD64SARXLload OpAMD64SARXQload OpAMD64SHLXLload OpAMD64SHLXQload OpAMD64SHRXLload OpAMD64SHRXQload OpAMD64SARXLloadidx1 OpAMD64SARXLloadidx4 OpAMD64SARXLloadidx8 OpAMD64SARXQloadidx1 OpAMD64SARXQloadidx8 OpAMD64SHLXLloadidx1 OpAMD64SHLXLloadidx4 OpAMD64SHLXLloadidx8 OpAMD64SHLXQloadidx1 OpAMD64SHLXQloadidx8 OpAMD64SHRXLloadidx1 OpAMD64SHRXLloadidx4 OpAMD64SHRXLloadidx8 OpAMD64SHRXQloadidx1 OpAMD64SHRXQloadidx8 OpARMADD OpARMADDconst OpARMSUB OpARMSUBconst OpARMRSB OpARMRSBconst OpARMMUL OpARMHMUL OpARMHMULU OpARMCALLudiv OpARMADDS OpARMADDSconst OpARMADC OpARMADCconst OpARMSUBS OpARMSUBSconst OpARMRSBSconst OpARMSBC OpARMSBCconst OpARMRSCconst OpARMMULLU OpARMMULA OpARMMULS OpARMADDF OpARMADDD OpARMSUBF OpARMSUBD OpARMMULF OpARMMULD OpARMNMULF OpARMNMULD OpARMDIVF OpARMDIVD OpARMMULAF OpARMMULAD OpARMMULSF OpARMMULSD OpARMFMULAD OpARMAND OpARMANDconst OpARMOR OpARMORconst OpARMXOR OpARMXORconst OpARMBIC OpARMBICconst OpARMBFX OpARMBFXU OpARMMVN OpARMNEGF OpARMNEGD OpARMSQRTD OpARMSQRTF OpARMABSD OpARMCLZ OpARMREV OpARMREV16 OpARMRBIT OpARMSLL OpARMSLLconst OpARMSRL OpARMSRLconst OpARMSRA OpARMSRAconst OpARMSRR OpARMSRRconst OpARMADDshiftLL OpARMADDshiftRL OpARMADDshiftRA OpARMSUBshiftLL OpARMSUBshiftRL OpARMSUBshiftRA OpARMRSBshiftLL OpARMRSBshiftRL OpARMRSBshiftRA OpARMANDshiftLL OpARMANDshiftRL OpARMANDshiftRA OpARMORshiftLL OpARMORshiftRL OpARMORshiftRA OpARMXORshiftLL OpARMXORshiftRL OpARMXORshiftRA OpARMXORshiftRR OpARMBICshiftLL OpARMBICshiftRL OpARMBICshiftRA OpARMMVNshiftLL OpARMMVNshiftRL OpARMMVNshiftRA OpARMADCshiftLL OpARMADCshiftRL OpARMADCshiftRA OpARMSBCshiftLL OpARMSBCshiftRL OpARMSBCshiftRA OpARMRSCshiftLL OpARMRSCshiftRL OpARMRSCshiftRA OpARMADDSshiftLL OpARMADDSshiftRL OpARMADDSshiftRA OpARMSUBSshiftLL OpARMSUBSshiftRL OpARMSUBSshiftRA OpARMRSBSshiftLL OpARMRSBSshiftRL OpARMRSBSshiftRA OpARMADDshiftLLreg OpARMADDshiftRLreg OpARMADDshiftRAreg OpARMSUBshiftLLreg OpARMSUBshiftRLreg OpARMSUBshiftRAreg OpARMRSBshiftLLreg OpARMRSBshiftRLreg OpARMRSBshiftRAreg OpARMANDshiftLLreg OpARMANDshiftRLreg OpARMANDshiftRAreg OpARMORshiftLLreg OpARMORshiftRLreg OpARMORshiftRAreg OpARMXORshiftLLreg OpARMXORshiftRLreg OpARMXORshiftRAreg OpARMBICshiftLLreg OpARMBICshiftRLreg OpARMBICshiftRAreg OpARMMVNshiftLLreg OpARMMVNshiftRLreg OpARMMVNshiftRAreg OpARMADCshiftLLreg OpARMADCshiftRLreg OpARMADCshiftRAreg OpARMSBCshiftLLreg OpARMSBCshiftRLreg OpARMSBCshiftRAreg OpARMRSCshiftLLreg OpARMRSCshiftRLreg OpARMRSCshiftRAreg OpARMADDSshiftLLreg OpARMADDSshiftRLreg OpARMADDSshiftRAreg OpARMSUBSshiftLLreg OpARMSUBSshiftRLreg OpARMSUBSshiftRAreg OpARMRSBSshiftLLreg OpARMRSBSshiftRLreg OpARMRSBSshiftRAreg OpARMCMP OpARMCMPconst OpARMCMN OpARMCMNconst OpARMTST OpARMTSTconst OpARMTEQ OpARMTEQconst OpARMCMPF OpARMCMPD OpARMCMPshiftLL OpARMCMPshiftRL OpARMCMPshiftRA OpARMCMNshiftLL OpARMCMNshiftRL OpARMCMNshiftRA OpARMTSTshiftLL OpARMTSTshiftRL OpARMTSTshiftRA OpARMTEQshiftLL OpARMTEQshiftRL OpARMTEQshiftRA OpARMCMPshiftLLreg OpARMCMPshiftRLreg OpARMCMPshiftRAreg OpARMCMNshiftLLreg OpARMCMNshiftRLreg OpARMCMNshiftRAreg OpARMTSTshiftLLreg OpARMTSTshiftRLreg OpARMTSTshiftRAreg OpARMTEQshiftLLreg OpARMTEQshiftRLreg OpARMTEQshiftRAreg OpARMCMPF0 OpARMCMPD0 OpARMMOVWconst OpARMMOVFconst OpARMMOVDconst OpARMMOVWaddr OpARMMOVBload OpARMMOVBUload OpARMMOVHload OpARMMOVHUload OpARMMOVWload OpARMMOVFload OpARMMOVDload OpARMMOVBstore OpARMMOVHstore OpARMMOVWstore OpARMMOVFstore OpARMMOVDstore OpARMMOVWloadidx OpARMMOVWloadshiftLL OpARMMOVWloadshiftRL OpARMMOVWloadshiftRA OpARMMOVBUloadidx OpARMMOVBloadidx OpARMMOVHUloadidx OpARMMOVHloadidx OpARMMOVWstoreidx OpARMMOVWstoreshiftLL OpARMMOVWstoreshiftRL OpARMMOVWstoreshiftRA OpARMMOVBstoreidx OpARMMOVHstoreidx OpARMMOVBreg OpARMMOVBUreg OpARMMOVHreg OpARMMOVHUreg OpARMMOVWreg OpARMMOVWnop OpARMMOVWF OpARMMOVWD OpARMMOVWUF OpARMMOVWUD OpARMMOVFW OpARMMOVDW OpARMMOVFWU OpARMMOVDWU OpARMMOVFD OpARMMOVDF OpARMCMOVWHSconst OpARMCMOVWLSconst OpARMSRAcond OpARMCALLstatic OpARMCALLtail OpARMCALLclosure OpARMCALLinter OpARMLoweredNilCheck OpARMEqual OpARMNotEqual OpARMLessThan OpARMLessEqual OpARMGreaterThan OpARMGreaterEqual OpARMLessThanU OpARMLessEqualU OpARMGreaterThanU OpARMGreaterEqualU OpARMDUFFZERO OpARMDUFFCOPY OpARMLoweredZero OpARMLoweredMove OpARMLoweredGetClosurePtr OpARMLoweredGetCallerSP OpARMLoweredGetCallerPC OpARMLoweredPanicBoundsA OpARMLoweredPanicBoundsB OpARMLoweredPanicBoundsC OpARMLoweredPanicExtendA OpARMLoweredPanicExtendB OpARMLoweredPanicExtendC OpARMFlagConstant OpARMInvertFlags OpARMLoweredWB OpARM64ADCSflags OpARM64ADCzerocarry OpARM64ADD OpARM64ADDconst OpARM64ADDSconstflags OpARM64ADDSflags OpARM64SUB OpARM64SUBconst OpARM64SBCSflags OpARM64SUBSflags OpARM64MUL OpARM64MULW OpARM64MNEG OpARM64MNEGW OpARM64MULH OpARM64UMULH OpARM64MULL OpARM64UMULL OpARM64DIV OpARM64UDIV OpARM64DIVW OpARM64UDIVW OpARM64MOD OpARM64UMOD OpARM64MODW OpARM64UMODW OpARM64FADDS OpARM64FADDD OpARM64FSUBS OpARM64FSUBD OpARM64FMULS OpARM64FMULD OpARM64FNMULS OpARM64FNMULD OpARM64FDIVS OpARM64FDIVD OpARM64AND OpARM64ANDconst OpARM64OR OpARM64ORconst OpARM64XOR OpARM64XORconst OpARM64BIC OpARM64EON OpARM64ORN OpARM64MVN OpARM64NEG OpARM64NEGSflags OpARM64NGCzerocarry OpARM64FABSD OpARM64FNEGS OpARM64FNEGD OpARM64FSQRTD OpARM64FSQRTS OpARM64FMIND OpARM64FMINS OpARM64FMAXD OpARM64FMAXS OpARM64REV OpARM64REVW OpARM64REV16 OpARM64REV16W OpARM64RBIT OpARM64RBITW OpARM64CLZ OpARM64CLZW OpARM64VCNT OpARM64VUADDLV OpARM64LoweredRound32F OpARM64LoweredRound64F OpARM64FMADDS OpARM64FMADDD OpARM64FNMADDS OpARM64FNMADDD OpARM64FMSUBS OpARM64FMSUBD OpARM64FNMSUBS OpARM64FNMSUBD OpARM64MADD OpARM64MADDW OpARM64MSUB OpARM64MSUBW OpARM64SLL OpARM64SLLconst OpARM64SRL OpARM64SRLconst OpARM64SRA OpARM64SRAconst OpARM64ROR OpARM64RORW OpARM64RORconst OpARM64RORWconst OpARM64EXTRconst OpARM64EXTRWconst OpARM64CMP OpARM64CMPconst OpARM64CMPW OpARM64CMPWconst OpARM64CMN OpARM64CMNconst OpARM64CMNW OpARM64CMNWconst OpARM64TST OpARM64TSTconst OpARM64TSTW OpARM64TSTWconst OpARM64FCMPS OpARM64FCMPD OpARM64FCMPS0 OpARM64FCMPD0 OpARM64MVNshiftLL OpARM64MVNshiftRL OpARM64MVNshiftRA OpARM64MVNshiftRO OpARM64NEGshiftLL OpARM64NEGshiftRL OpARM64NEGshiftRA OpARM64ADDshiftLL OpARM64ADDshiftRL OpARM64ADDshiftRA OpARM64SUBshiftLL OpARM64SUBshiftRL OpARM64SUBshiftRA OpARM64ANDshiftLL OpARM64ANDshiftRL OpARM64ANDshiftRA OpARM64ANDshiftRO OpARM64ORshiftLL OpARM64ORshiftRL OpARM64ORshiftRA OpARM64ORshiftRO OpARM64XORshiftLL OpARM64XORshiftRL OpARM64XORshiftRA OpARM64XORshiftRO OpARM64BICshiftLL OpARM64BICshiftRL OpARM64BICshiftRA OpARM64BICshiftRO OpARM64EONshiftLL OpARM64EONshiftRL OpARM64EONshiftRA OpARM64EONshiftRO OpARM64ORNshiftLL OpARM64ORNshiftRL OpARM64ORNshiftRA OpARM64ORNshiftRO OpARM64CMPshiftLL OpARM64CMPshiftRL OpARM64CMPshiftRA OpARM64CMNshiftLL OpARM64CMNshiftRL OpARM64CMNshiftRA OpARM64TSTshiftLL OpARM64TSTshiftRL OpARM64TSTshiftRA OpARM64TSTshiftRO OpARM64BFI OpARM64BFXIL OpARM64SBFIZ OpARM64SBFX OpARM64UBFIZ OpARM64UBFX OpARM64MOVDconst OpARM64FMOVSconst OpARM64FMOVDconst OpARM64MOVDaddr OpARM64MOVBload OpARM64MOVBUload OpARM64MOVHload OpARM64MOVHUload OpARM64MOVWload OpARM64MOVWUload OpARM64MOVDload OpARM64LDP OpARM64FMOVSload OpARM64FMOVDload OpARM64MOVDloadidx OpARM64MOVWloadidx OpARM64MOVWUloadidx OpARM64MOVHloadidx OpARM64MOVHUloadidx OpARM64MOVBloadidx OpARM64MOVBUloadidx OpARM64FMOVSloadidx OpARM64FMOVDloadidx OpARM64MOVHloadidx2 OpARM64MOVHUloadidx2 OpARM64MOVWloadidx4 OpARM64MOVWUloadidx4 OpARM64MOVDloadidx8 OpARM64FMOVSloadidx4 OpARM64FMOVDloadidx8 OpARM64MOVBstore OpARM64MOVHstore OpARM64MOVWstore OpARM64MOVDstore OpARM64STP OpARM64FMOVSstore OpARM64FMOVDstore OpARM64MOVBstoreidx OpARM64MOVHstoreidx OpARM64MOVWstoreidx OpARM64MOVDstoreidx OpARM64FMOVSstoreidx OpARM64FMOVDstoreidx OpARM64MOVHstoreidx2 OpARM64MOVWstoreidx4 OpARM64MOVDstoreidx8 OpARM64FMOVSstoreidx4 OpARM64FMOVDstoreidx8 OpARM64MOVBstorezero OpARM64MOVHstorezero OpARM64MOVWstorezero OpARM64MOVDstorezero OpARM64MOVQstorezero OpARM64MOVBstorezeroidx OpARM64MOVHstorezeroidx OpARM64MOVWstorezeroidx OpARM64MOVDstorezeroidx OpARM64MOVHstorezeroidx2 OpARM64MOVWstorezeroidx4 OpARM64MOVDstorezeroidx8 OpARM64FMOVDgpfp OpARM64FMOVDfpgp OpARM64FMOVSgpfp OpARM64FMOVSfpgp OpARM64MOVBreg OpARM64MOVBUreg OpARM64MOVHreg OpARM64MOVHUreg OpARM64MOVWreg OpARM64MOVWUreg OpARM64MOVDreg OpARM64MOVDnop OpARM64SCVTFWS OpARM64SCVTFWD OpARM64UCVTFWS OpARM64UCVTFWD OpARM64SCVTFS OpARM64SCVTFD OpARM64UCVTFS OpARM64UCVTFD OpARM64FCVTZSSW OpARM64FCVTZSDW OpARM64FCVTZUSW OpARM64FCVTZUDW OpARM64FCVTZSS OpARM64FCVTZSD OpARM64FCVTZUS OpARM64FCVTZUD OpARM64FCVTSD OpARM64FCVTDS OpARM64FRINTAD OpARM64FRINTMD OpARM64FRINTND OpARM64FRINTPD OpARM64FRINTZD OpARM64CSEL OpARM64CSEL0 OpARM64CSINC OpARM64CSINV OpARM64CSNEG OpARM64CSETM OpARM64CALLstatic OpARM64CALLtail OpARM64CALLclosure OpARM64CALLinter OpARM64LoweredNilCheck OpARM64Equal OpARM64NotEqual OpARM64LessThan OpARM64LessEqual OpARM64GreaterThan OpARM64GreaterEqual OpARM64LessThanU OpARM64LessEqualU OpARM64GreaterThanU OpARM64GreaterEqualU OpARM64LessThanF OpARM64LessEqualF OpARM64GreaterThanF OpARM64GreaterEqualF OpARM64NotLessThanF OpARM64NotLessEqualF OpARM64NotGreaterThanF OpARM64NotGreaterEqualF OpARM64LessThanNoov OpARM64GreaterEqualNoov OpARM64DUFFZERO OpARM64LoweredZero OpARM64DUFFCOPY OpARM64LoweredMove OpARM64LoweredGetClosurePtr OpARM64LoweredGetCallerSP OpARM64LoweredGetCallerPC OpARM64FlagConstant OpARM64InvertFlags OpARM64LDAR OpARM64LDARB OpARM64LDARW OpARM64STLRB OpARM64STLR OpARM64STLRW OpARM64LoweredAtomicExchange64 OpARM64LoweredAtomicExchange32 OpARM64LoweredAtomicExchange64Variant OpARM64LoweredAtomicExchange32Variant OpARM64LoweredAtomicAdd64 OpARM64LoweredAtomicAdd32 OpARM64LoweredAtomicAdd64Variant OpARM64LoweredAtomicAdd32Variant OpARM64LoweredAtomicCas64 OpARM64LoweredAtomicCas32 OpARM64LoweredAtomicCas64Variant OpARM64LoweredAtomicCas32Variant OpARM64LoweredAtomicAnd8 OpARM64LoweredAtomicOr8 OpARM64LoweredAtomicAnd64 OpARM64LoweredAtomicOr64 OpARM64LoweredAtomicAnd32 OpARM64LoweredAtomicOr32 OpARM64LoweredAtomicAnd8Variant OpARM64LoweredAtomicOr8Variant OpARM64LoweredAtomicAnd64Variant OpARM64LoweredAtomicOr64Variant OpARM64LoweredAtomicAnd32Variant OpARM64LoweredAtomicOr32Variant OpARM64LoweredWB OpARM64LoweredPanicBoundsA OpARM64LoweredPanicBoundsB OpARM64LoweredPanicBoundsC OpARM64PRFM OpARM64DMB OpLOONG64ADDV OpLOONG64ADDVconst OpLOONG64SUBV OpLOONG64SUBVconst OpLOONG64MULV OpLOONG64MULHV OpLOONG64MULHVU OpLOONG64DIVV OpLOONG64DIVVU OpLOONG64REMV OpLOONG64REMVU OpLOONG64ADDF OpLOONG64ADDD OpLOONG64SUBF OpLOONG64SUBD OpLOONG64MULF OpLOONG64MULD OpLOONG64DIVF OpLOONG64DIVD OpLOONG64AND OpLOONG64ANDconst OpLOONG64OR OpLOONG64ORconst OpLOONG64XOR OpLOONG64XORconst OpLOONG64NOR OpLOONG64NORconst OpLOONG64NEGV OpLOONG64NEGF OpLOONG64NEGD OpLOONG64SQRTD OpLOONG64SQRTF OpLOONG64MASKEQZ OpLOONG64MASKNEZ OpLOONG64SLLV OpLOONG64SLLVconst OpLOONG64SRLV OpLOONG64SRLVconst OpLOONG64SRAV OpLOONG64SRAVconst OpLOONG64ROTR OpLOONG64ROTRV OpLOONG64ROTRconst OpLOONG64ROTRVconst OpLOONG64SGT OpLOONG64SGTconst OpLOONG64SGTU OpLOONG64SGTUconst OpLOONG64CMPEQF OpLOONG64CMPEQD OpLOONG64CMPGEF OpLOONG64CMPGED OpLOONG64CMPGTF OpLOONG64CMPGTD OpLOONG64MOVVconst OpLOONG64MOVFconst OpLOONG64MOVDconst OpLOONG64MOVVaddr OpLOONG64MOVBload OpLOONG64MOVBUload OpLOONG64MOVHload OpLOONG64MOVHUload OpLOONG64MOVWload OpLOONG64MOVWUload OpLOONG64MOVVload OpLOONG64MOVFload OpLOONG64MOVDload OpLOONG64MOVBstore OpLOONG64MOVHstore OpLOONG64MOVWstore OpLOONG64MOVVstore OpLOONG64MOVFstore OpLOONG64MOVDstore OpLOONG64MOVBstorezero OpLOONG64MOVHstorezero OpLOONG64MOVWstorezero OpLOONG64MOVVstorezero OpLOONG64MOVBreg OpLOONG64MOVBUreg OpLOONG64MOVHreg OpLOONG64MOVHUreg OpLOONG64MOVWreg OpLOONG64MOVWUreg OpLOONG64MOVVreg OpLOONG64MOVVnop OpLOONG64MOVWF OpLOONG64MOVWD OpLOONG64MOVVF OpLOONG64MOVVD OpLOONG64TRUNCFW OpLOONG64TRUNCDW OpLOONG64TRUNCFV OpLOONG64TRUNCDV OpLOONG64MOVFD OpLOONG64MOVDF OpLOONG64CALLstatic OpLOONG64CALLtail OpLOONG64CALLclosure OpLOONG64CALLinter OpLOONG64DUFFZERO OpLOONG64DUFFCOPY OpLOONG64LoweredZero OpLOONG64LoweredMove OpLOONG64LoweredAtomicLoad8 OpLOONG64LoweredAtomicLoad32 OpLOONG64LoweredAtomicLoad64 OpLOONG64LoweredAtomicStore8 OpLOONG64LoweredAtomicStore32 OpLOONG64LoweredAtomicStore64 OpLOONG64LoweredAtomicStorezero32 OpLOONG64LoweredAtomicStorezero64 OpLOONG64LoweredAtomicExchange32 OpLOONG64LoweredAtomicExchange64 OpLOONG64LoweredAtomicAdd32 OpLOONG64LoweredAtomicAdd64 OpLOONG64LoweredAtomicAddconst32 OpLOONG64LoweredAtomicAddconst64 OpLOONG64LoweredAtomicCas32 OpLOONG64LoweredAtomicCas64 OpLOONG64LoweredNilCheck OpLOONG64FPFlagTrue OpLOONG64FPFlagFalse OpLOONG64LoweredGetClosurePtr OpLOONG64LoweredGetCallerSP OpLOONG64LoweredGetCallerPC OpLOONG64LoweredWB OpLOONG64LoweredPanicBoundsA OpLOONG64LoweredPanicBoundsB OpLOONG64LoweredPanicBoundsC OpMIPSADD OpMIPSADDconst OpMIPSSUB OpMIPSSUBconst OpMIPSMUL OpMIPSMULT OpMIPSMULTU OpMIPSDIV OpMIPSDIVU OpMIPSADDF OpMIPSADDD OpMIPSSUBF OpMIPSSUBD OpMIPSMULF OpMIPSMULD OpMIPSDIVF OpMIPSDIVD OpMIPSAND OpMIPSANDconst OpMIPSOR OpMIPSORconst OpMIPSXOR OpMIPSXORconst OpMIPSNOR OpMIPSNORconst OpMIPSNEG OpMIPSNEGF OpMIPSNEGD OpMIPSABSD OpMIPSSQRTD OpMIPSSQRTF OpMIPSSLL OpMIPSSLLconst OpMIPSSRL OpMIPSSRLconst OpMIPSSRA OpMIPSSRAconst OpMIPSCLZ OpMIPSSGT OpMIPSSGTconst OpMIPSSGTzero OpMIPSSGTU OpMIPSSGTUconst OpMIPSSGTUzero OpMIPSCMPEQF OpMIPSCMPEQD OpMIPSCMPGEF OpMIPSCMPGED OpMIPSCMPGTF OpMIPSCMPGTD OpMIPSMOVWconst OpMIPSMOVFconst OpMIPSMOVDconst OpMIPSMOVWaddr OpMIPSMOVBload OpMIPSMOVBUload OpMIPSMOVHload OpMIPSMOVHUload OpMIPSMOVWload OpMIPSMOVFload OpMIPSMOVDload OpMIPSMOVBstore OpMIPSMOVHstore OpMIPSMOVWstore OpMIPSMOVFstore OpMIPSMOVDstore OpMIPSMOVBstorezero OpMIPSMOVHstorezero OpMIPSMOVWstorezero OpMIPSMOVWfpgp OpMIPSMOVWgpfp OpMIPSMOVBreg OpMIPSMOVBUreg OpMIPSMOVHreg OpMIPSMOVHUreg OpMIPSMOVWreg OpMIPSMOVWnop OpMIPSCMOVZ OpMIPSCMOVZzero OpMIPSMOVWF OpMIPSMOVWD OpMIPSTRUNCFW OpMIPSTRUNCDW OpMIPSMOVFD OpMIPSMOVDF OpMIPSCALLstatic OpMIPSCALLtail OpMIPSCALLclosure OpMIPSCALLinter OpMIPSLoweredAtomicLoad8 OpMIPSLoweredAtomicLoad32 OpMIPSLoweredAtomicStore8 OpMIPSLoweredAtomicStore32 OpMIPSLoweredAtomicStorezero OpMIPSLoweredAtomicExchange OpMIPSLoweredAtomicAdd OpMIPSLoweredAtomicAddconst OpMIPSLoweredAtomicCas OpMIPSLoweredAtomicAnd OpMIPSLoweredAtomicOr OpMIPSLoweredZero OpMIPSLoweredMove OpMIPSLoweredNilCheck OpMIPSFPFlagTrue OpMIPSFPFlagFalse OpMIPSLoweredGetClosurePtr OpMIPSLoweredGetCallerSP OpMIPSLoweredGetCallerPC OpMIPSLoweredWB OpMIPSLoweredPanicBoundsA OpMIPSLoweredPanicBoundsB OpMIPSLoweredPanicBoundsC OpMIPSLoweredPanicExtendA OpMIPSLoweredPanicExtendB OpMIPSLoweredPanicExtendC OpMIPS64ADDV OpMIPS64ADDVconst OpMIPS64SUBV OpMIPS64SUBVconst OpMIPS64MULV OpMIPS64MULVU OpMIPS64DIVV OpMIPS64DIVVU OpMIPS64ADDF OpMIPS64ADDD OpMIPS64SUBF OpMIPS64SUBD OpMIPS64MULF OpMIPS64MULD OpMIPS64DIVF OpMIPS64DIVD OpMIPS64AND OpMIPS64ANDconst OpMIPS64OR OpMIPS64ORconst OpMIPS64XOR OpMIPS64XORconst OpMIPS64NOR OpMIPS64NORconst OpMIPS64NEGV OpMIPS64NEGF OpMIPS64NEGD OpMIPS64ABSD OpMIPS64SQRTD OpMIPS64SQRTF OpMIPS64SLLV OpMIPS64SLLVconst OpMIPS64SRLV OpMIPS64SRLVconst OpMIPS64SRAV OpMIPS64SRAVconst OpMIPS64SGT OpMIPS64SGTconst OpMIPS64SGTU OpMIPS64SGTUconst OpMIPS64CMPEQF OpMIPS64CMPEQD OpMIPS64CMPGEF OpMIPS64CMPGED OpMIPS64CMPGTF OpMIPS64CMPGTD OpMIPS64MOVVconst OpMIPS64MOVFconst OpMIPS64MOVDconst OpMIPS64MOVVaddr OpMIPS64MOVBload OpMIPS64MOVBUload OpMIPS64MOVHload OpMIPS64MOVHUload OpMIPS64MOVWload OpMIPS64MOVWUload OpMIPS64MOVVload OpMIPS64MOVFload OpMIPS64MOVDload OpMIPS64MOVBstore OpMIPS64MOVHstore OpMIPS64MOVWstore OpMIPS64MOVVstore OpMIPS64MOVFstore OpMIPS64MOVDstore OpMIPS64MOVBstorezero OpMIPS64MOVHstorezero OpMIPS64MOVWstorezero OpMIPS64MOVVstorezero OpMIPS64MOVWfpgp OpMIPS64MOVWgpfp OpMIPS64MOVVfpgp OpMIPS64MOVVgpfp OpMIPS64MOVBreg OpMIPS64MOVBUreg OpMIPS64MOVHreg OpMIPS64MOVHUreg OpMIPS64MOVWreg OpMIPS64MOVWUreg OpMIPS64MOVVreg OpMIPS64MOVVnop OpMIPS64MOVWF OpMIPS64MOVWD OpMIPS64MOVVF OpMIPS64MOVVD OpMIPS64TRUNCFW OpMIPS64TRUNCDW OpMIPS64TRUNCFV OpMIPS64TRUNCDV OpMIPS64MOVFD OpMIPS64MOVDF OpMIPS64CALLstatic OpMIPS64CALLtail OpMIPS64CALLclosure OpMIPS64CALLinter OpMIPS64DUFFZERO OpMIPS64DUFFCOPY OpMIPS64LoweredZero OpMIPS64LoweredMove OpMIPS64LoweredAtomicAnd32 OpMIPS64LoweredAtomicOr32 OpMIPS64LoweredAtomicLoad8 OpMIPS64LoweredAtomicLoad32 OpMIPS64LoweredAtomicLoad64 OpMIPS64LoweredAtomicStore8 OpMIPS64LoweredAtomicStore32 OpMIPS64LoweredAtomicStore64 OpMIPS64LoweredAtomicStorezero32 OpMIPS64LoweredAtomicStorezero64 OpMIPS64LoweredAtomicExchange32 OpMIPS64LoweredAtomicExchange64 OpMIPS64LoweredAtomicAdd32 OpMIPS64LoweredAtomicAdd64 OpMIPS64LoweredAtomicAddconst32 OpMIPS64LoweredAtomicAddconst64 OpMIPS64LoweredAtomicCas32 OpMIPS64LoweredAtomicCas64 OpMIPS64LoweredNilCheck OpMIPS64FPFlagTrue OpMIPS64FPFlagFalse OpMIPS64LoweredGetClosurePtr OpMIPS64LoweredGetCallerSP OpMIPS64LoweredGetCallerPC OpMIPS64LoweredWB OpMIPS64LoweredPanicBoundsA OpMIPS64LoweredPanicBoundsB OpMIPS64LoweredPanicBoundsC OpPPC64ADD OpPPC64ADDCC OpPPC64ADDconst OpPPC64ADDCCconst OpPPC64FADD OpPPC64FADDS OpPPC64SUB OpPPC64SUBCC OpPPC64SUBFCconst OpPPC64FSUB OpPPC64FSUBS OpPPC64XSMINJDP OpPPC64XSMAXJDP OpPPC64MULLD OpPPC64MULLW OpPPC64MULLDconst OpPPC64MULLWconst OpPPC64MADDLD OpPPC64MULHD OpPPC64MULHW OpPPC64MULHDU OpPPC64MULHWU OpPPC64FMUL OpPPC64FMULS OpPPC64FMADD OpPPC64FMADDS OpPPC64FMSUB OpPPC64FMSUBS OpPPC64SRAD OpPPC64SRAW OpPPC64SRD OpPPC64SRW OpPPC64SLD OpPPC64SLW OpPPC64ROTL OpPPC64ROTLW OpPPC64CLRLSLWI OpPPC64CLRLSLDI OpPPC64ADDC OpPPC64SUBC OpPPC64ADDCconst OpPPC64SUBCconst OpPPC64ADDE OpPPC64ADDZE OpPPC64SUBE OpPPC64ADDZEzero OpPPC64SUBZEzero OpPPC64SRADconst OpPPC64SRAWconst OpPPC64SRDconst OpPPC64SRWconst OpPPC64SLDconst OpPPC64SLWconst OpPPC64ROTLconst OpPPC64ROTLWconst OpPPC64EXTSWSLconst OpPPC64RLWINM OpPPC64RLWNM OpPPC64RLWMI OpPPC64RLDICL OpPPC64RLDICLCC OpPPC64RLDICR OpPPC64CNTLZD OpPPC64CNTLZDCC OpPPC64CNTLZW OpPPC64CNTTZD OpPPC64CNTTZW OpPPC64POPCNTD OpPPC64POPCNTW OpPPC64POPCNTB OpPPC64FDIV OpPPC64FDIVS OpPPC64DIVD OpPPC64DIVW OpPPC64DIVDU OpPPC64DIVWU OpPPC64MODUD OpPPC64MODSD OpPPC64MODUW OpPPC64MODSW OpPPC64FCTIDZ OpPPC64FCTIWZ OpPPC64FCFID OpPPC64FCFIDS OpPPC64FRSP OpPPC64MFVSRD OpPPC64MTVSRD OpPPC64AND OpPPC64ANDN OpPPC64ANDNCC OpPPC64ANDCC OpPPC64OR OpPPC64ORN OpPPC64ORCC OpPPC64NOR OpPPC64NORCC OpPPC64XOR OpPPC64XORCC OpPPC64EQV OpPPC64NEG OpPPC64NEGCC OpPPC64BRD OpPPC64BRW OpPPC64BRH OpPPC64FNEG OpPPC64FSQRT OpPPC64FSQRTS OpPPC64FFLOOR OpPPC64FCEIL OpPPC64FTRUNC OpPPC64FROUND OpPPC64FABS OpPPC64FNABS OpPPC64FCPSGN OpPPC64ORconst OpPPC64XORconst OpPPC64ANDCCconst OpPPC64ANDconst OpPPC64MOVBreg OpPPC64MOVBZreg OpPPC64MOVHreg OpPPC64MOVHZreg OpPPC64MOVWreg OpPPC64MOVWZreg OpPPC64MOVBZload OpPPC64MOVHload OpPPC64MOVHZload OpPPC64MOVWload OpPPC64MOVWZload OpPPC64MOVDload OpPPC64MOVDBRload OpPPC64MOVWBRload OpPPC64MOVHBRload OpPPC64MOVBZloadidx OpPPC64MOVHloadidx OpPPC64MOVHZloadidx OpPPC64MOVWloadidx OpPPC64MOVWZloadidx OpPPC64MOVDloadidx OpPPC64MOVHBRloadidx OpPPC64MOVWBRloadidx OpPPC64MOVDBRloadidx OpPPC64FMOVDloadidx OpPPC64FMOVSloadidx OpPPC64DCBT OpPPC64MOVDBRstore OpPPC64MOVWBRstore OpPPC64MOVHBRstore OpPPC64FMOVDload OpPPC64FMOVSload OpPPC64MOVBstore OpPPC64MOVHstore OpPPC64MOVWstore OpPPC64MOVDstore OpPPC64FMOVDstore OpPPC64FMOVSstore OpPPC64MOVBstoreidx OpPPC64MOVHstoreidx OpPPC64MOVWstoreidx OpPPC64MOVDstoreidx OpPPC64FMOVDstoreidx OpPPC64FMOVSstoreidx OpPPC64MOVHBRstoreidx OpPPC64MOVWBRstoreidx OpPPC64MOVDBRstoreidx OpPPC64MOVBstorezero OpPPC64MOVHstorezero OpPPC64MOVWstorezero OpPPC64MOVDstorezero OpPPC64MOVDaddr OpPPC64MOVDconst OpPPC64FMOVDconst OpPPC64FMOVSconst OpPPC64FCMPU OpPPC64CMP OpPPC64CMPU OpPPC64CMPW OpPPC64CMPWU OpPPC64CMPconst OpPPC64CMPUconst OpPPC64CMPWconst OpPPC64CMPWUconst OpPPC64ISEL OpPPC64ISELZ OpPPC64SETBC OpPPC64SETBCR OpPPC64Equal OpPPC64NotEqual OpPPC64LessThan OpPPC64FLessThan OpPPC64LessEqual OpPPC64FLessEqual OpPPC64GreaterThan OpPPC64FGreaterThan OpPPC64GreaterEqual OpPPC64FGreaterEqual OpPPC64LoweredGetClosurePtr OpPPC64LoweredGetCallerSP OpPPC64LoweredGetCallerPC OpPPC64LoweredNilCheck OpPPC64LoweredRound32F OpPPC64LoweredRound64F OpPPC64CALLstatic OpPPC64CALLtail OpPPC64CALLclosure OpPPC64CALLinter OpPPC64LoweredZero OpPPC64LoweredZeroShort OpPPC64LoweredQuadZeroShort OpPPC64LoweredQuadZero OpPPC64LoweredMove OpPPC64LoweredMoveShort OpPPC64LoweredQuadMove OpPPC64LoweredQuadMoveShort OpPPC64LoweredAtomicStore8 OpPPC64LoweredAtomicStore32 OpPPC64LoweredAtomicStore64 OpPPC64LoweredAtomicLoad8 OpPPC64LoweredAtomicLoad32 OpPPC64LoweredAtomicLoad64 OpPPC64LoweredAtomicLoadPtr OpPPC64LoweredAtomicAdd32 OpPPC64LoweredAtomicAdd64 OpPPC64LoweredAtomicExchange32 OpPPC64LoweredAtomicExchange64 OpPPC64LoweredAtomicCas64 OpPPC64LoweredAtomicCas32 OpPPC64LoweredAtomicAnd8 OpPPC64LoweredAtomicAnd32 OpPPC64LoweredAtomicOr8 OpPPC64LoweredAtomicOr32 OpPPC64LoweredWB OpPPC64LoweredPubBarrier OpPPC64LoweredPanicBoundsA OpPPC64LoweredPanicBoundsB OpPPC64LoweredPanicBoundsC OpPPC64InvertFlags OpPPC64FlagEQ OpPPC64FlagLT OpPPC64FlagGT OpRISCV64ADD OpRISCV64ADDI OpRISCV64ADDIW OpRISCV64NEG OpRISCV64NEGW OpRISCV64SUB OpRISCV64SUBW OpRISCV64MUL OpRISCV64MULW OpRISCV64MULH OpRISCV64MULHU OpRISCV64LoweredMuluhilo OpRISCV64LoweredMuluover OpRISCV64DIV OpRISCV64DIVU OpRISCV64DIVW OpRISCV64DIVUW OpRISCV64REM OpRISCV64REMU OpRISCV64REMW OpRISCV64REMUW OpRISCV64MOVaddr OpRISCV64MOVDconst OpRISCV64MOVBload OpRISCV64MOVHload OpRISCV64MOVWload OpRISCV64MOVDload OpRISCV64MOVBUload OpRISCV64MOVHUload OpRISCV64MOVWUload OpRISCV64MOVBstore OpRISCV64MOVHstore OpRISCV64MOVWstore OpRISCV64MOVDstore OpRISCV64MOVBstorezero OpRISCV64MOVHstorezero OpRISCV64MOVWstorezero OpRISCV64MOVDstorezero OpRISCV64MOVBreg OpRISCV64MOVHreg OpRISCV64MOVWreg OpRISCV64MOVDreg OpRISCV64MOVBUreg OpRISCV64MOVHUreg OpRISCV64MOVWUreg OpRISCV64MOVDnop OpRISCV64SLL OpRISCV64SLLW OpRISCV64SRA OpRISCV64SRAW OpRISCV64SRL OpRISCV64SRLW OpRISCV64SLLI OpRISCV64SLLIW OpRISCV64SRAI OpRISCV64SRAIW OpRISCV64SRLI OpRISCV64SRLIW OpRISCV64AND OpRISCV64ANDI OpRISCV64NOT OpRISCV64OR OpRISCV64ORI OpRISCV64ROL OpRISCV64ROLW OpRISCV64ROR OpRISCV64RORI OpRISCV64RORIW OpRISCV64RORW OpRISCV64XOR OpRISCV64XORI OpRISCV64SEQZ OpRISCV64SNEZ OpRISCV64SLT OpRISCV64SLTI OpRISCV64SLTU OpRISCV64SLTIU OpRISCV64LoweredRound32F OpRISCV64LoweredRound64F OpRISCV64CALLstatic OpRISCV64CALLtail OpRISCV64CALLclosure OpRISCV64CALLinter OpRISCV64DUFFZERO OpRISCV64DUFFCOPY OpRISCV64LoweredZero OpRISCV64LoweredMove OpRISCV64LoweredAtomicLoad8 OpRISCV64LoweredAtomicLoad32 OpRISCV64LoweredAtomicLoad64 OpRISCV64LoweredAtomicStore8 OpRISCV64LoweredAtomicStore32 OpRISCV64LoweredAtomicStore64 OpRISCV64LoweredAtomicExchange32 OpRISCV64LoweredAtomicExchange64 OpRISCV64LoweredAtomicAdd32 OpRISCV64LoweredAtomicAdd64 OpRISCV64LoweredAtomicCas32 OpRISCV64LoweredAtomicCas64 OpRISCV64LoweredAtomicAnd32 OpRISCV64LoweredAtomicOr32 OpRISCV64LoweredNilCheck OpRISCV64LoweredGetClosurePtr OpRISCV64LoweredGetCallerSP OpRISCV64LoweredGetCallerPC OpRISCV64LoweredWB OpRISCV64LoweredPubBarrier OpRISCV64LoweredPanicBoundsA OpRISCV64LoweredPanicBoundsB OpRISCV64LoweredPanicBoundsC OpRISCV64FADDS OpRISCV64FSUBS OpRISCV64FMULS OpRISCV64FDIVS OpRISCV64FMADDS OpRISCV64FMSUBS OpRISCV64FNMADDS OpRISCV64FNMSUBS OpRISCV64FSQRTS OpRISCV64FNEGS OpRISCV64FMVSX OpRISCV64FCVTSW OpRISCV64FCVTSL OpRISCV64FCVTWS OpRISCV64FCVTLS OpRISCV64FMOVWload OpRISCV64FMOVWstore OpRISCV64FEQS OpRISCV64FNES OpRISCV64FLTS OpRISCV64FLES OpRISCV64LoweredFMAXS OpRISCV64LoweredFMINS OpRISCV64FADDD OpRISCV64FSUBD OpRISCV64FMULD OpRISCV64FDIVD OpRISCV64FMADDD OpRISCV64FMSUBD OpRISCV64FNMADDD OpRISCV64FNMSUBD OpRISCV64FSQRTD OpRISCV64FNEGD OpRISCV64FABSD OpRISCV64FSGNJD OpRISCV64FMVDX OpRISCV64FCVTDW OpRISCV64FCVTDL OpRISCV64FCVTWD OpRISCV64FCVTLD OpRISCV64FCVTDS OpRISCV64FCVTSD OpRISCV64FMOVDload OpRISCV64FMOVDstore OpRISCV64FEQD OpRISCV64FNED OpRISCV64FLTD OpRISCV64FLED OpRISCV64LoweredFMIND OpRISCV64LoweredFMAXD OpS390XFADDS OpS390XFADD OpS390XFSUBS OpS390XFSUB OpS390XFMULS OpS390XFMUL OpS390XFDIVS OpS390XFDIV OpS390XFNEGS OpS390XFNEG OpS390XFMADDS OpS390XFMADD OpS390XFMSUBS OpS390XFMSUB OpS390XLPDFR OpS390XLNDFR OpS390XCPSDR OpS390XFIDBR OpS390XFMOVSload OpS390XFMOVDload OpS390XFMOVSconst OpS390XFMOVDconst OpS390XFMOVSloadidx OpS390XFMOVDloadidx OpS390XFMOVSstore OpS390XFMOVDstore OpS390XFMOVSstoreidx OpS390XFMOVDstoreidx OpS390XADD OpS390XADDW OpS390XADDconst OpS390XADDWconst OpS390XADDload OpS390XADDWload OpS390XSUB OpS390XSUBW OpS390XSUBconst OpS390XSUBWconst OpS390XSUBload OpS390XSUBWload OpS390XMULLD OpS390XMULLW OpS390XMULLDconst OpS390XMULLWconst OpS390XMULLDload OpS390XMULLWload OpS390XMULHD OpS390XMULHDU OpS390XDIVD OpS390XDIVW OpS390XDIVDU OpS390XDIVWU OpS390XMODD OpS390XMODW OpS390XMODDU OpS390XMODWU OpS390XAND OpS390XANDW OpS390XANDconst OpS390XANDWconst OpS390XANDload OpS390XANDWload OpS390XOR OpS390XORW OpS390XORconst OpS390XORWconst OpS390XORload OpS390XORWload OpS390XXOR OpS390XXORW OpS390XXORconst OpS390XXORWconst OpS390XXORload OpS390XXORWload OpS390XADDC OpS390XADDCconst OpS390XADDE OpS390XSUBC OpS390XSUBE OpS390XCMP OpS390XCMPW OpS390XCMPU OpS390XCMPWU OpS390XCMPconst OpS390XCMPWconst OpS390XCMPUconst OpS390XCMPWUconst OpS390XFCMPS OpS390XFCMP OpS390XLTDBR OpS390XLTEBR OpS390XSLD OpS390XSLW OpS390XSLDconst OpS390XSLWconst OpS390XSRD OpS390XSRW OpS390XSRDconst OpS390XSRWconst OpS390XSRAD OpS390XSRAW OpS390XSRADconst OpS390XSRAWconst OpS390XRLLG OpS390XRLL OpS390XRLLconst OpS390XRXSBG OpS390XRISBGZ OpS390XNEG OpS390XNEGW OpS390XNOT OpS390XNOTW OpS390XFSQRT OpS390XFSQRTS OpS390XLOCGR OpS390XMOVBreg OpS390XMOVBZreg OpS390XMOVHreg OpS390XMOVHZreg OpS390XMOVWreg OpS390XMOVWZreg OpS390XMOVDconst OpS390XLDGR OpS390XLGDR OpS390XCFDBRA OpS390XCGDBRA OpS390XCFEBRA OpS390XCGEBRA OpS390XCEFBRA OpS390XCDFBRA OpS390XCEGBRA OpS390XCDGBRA OpS390XCLFEBR OpS390XCLFDBR OpS390XCLGEBR OpS390XCLGDBR OpS390XCELFBR OpS390XCDLFBR OpS390XCELGBR OpS390XCDLGBR OpS390XLEDBR OpS390XLDEBR OpS390XMOVDaddr OpS390XMOVDaddridx OpS390XMOVBZload OpS390XMOVBload OpS390XMOVHZload OpS390XMOVHload OpS390XMOVWZload OpS390XMOVWload OpS390XMOVDload OpS390XMOVWBR OpS390XMOVDBR OpS390XMOVHBRload OpS390XMOVWBRload OpS390XMOVDBRload OpS390XMOVBstore OpS390XMOVHstore OpS390XMOVWstore OpS390XMOVDstore OpS390XMOVHBRstore OpS390XMOVWBRstore OpS390XMOVDBRstore OpS390XMVC OpS390XMOVBZloadidx OpS390XMOVBloadidx OpS390XMOVHZloadidx OpS390XMOVHloadidx OpS390XMOVWZloadidx OpS390XMOVWloadidx OpS390XMOVDloadidx OpS390XMOVHBRloadidx OpS390XMOVWBRloadidx OpS390XMOVDBRloadidx OpS390XMOVBstoreidx OpS390XMOVHstoreidx OpS390XMOVWstoreidx OpS390XMOVDstoreidx OpS390XMOVHBRstoreidx OpS390XMOVWBRstoreidx OpS390XMOVDBRstoreidx OpS390XMOVBstoreconst OpS390XMOVHstoreconst OpS390XMOVWstoreconst OpS390XMOVDstoreconst OpS390XCLEAR OpS390XCALLstatic OpS390XCALLtail OpS390XCALLclosure OpS390XCALLinter OpS390XInvertFlags OpS390XLoweredGetG OpS390XLoweredGetClosurePtr OpS390XLoweredGetCallerSP OpS390XLoweredGetCallerPC OpS390XLoweredNilCheck OpS390XLoweredRound32F OpS390XLoweredRound64F OpS390XLoweredWB OpS390XLoweredPanicBoundsA OpS390XLoweredPanicBoundsB OpS390XLoweredPanicBoundsC OpS390XFlagEQ OpS390XFlagLT OpS390XFlagGT OpS390XFlagOV OpS390XSYNC OpS390XMOVBZatomicload OpS390XMOVWZatomicload OpS390XMOVDatomicload OpS390XMOVBatomicstore OpS390XMOVWatomicstore OpS390XMOVDatomicstore OpS390XLAA OpS390XLAAG OpS390XAddTupleFirst32 OpS390XAddTupleFirst64 OpS390XLAN OpS390XLANfloor OpS390XLAO OpS390XLAOfloor OpS390XLoweredAtomicCas32 OpS390XLoweredAtomicCas64 OpS390XLoweredAtomicExchange32 OpS390XLoweredAtomicExchange64 OpS390XFLOGR OpS390XPOPCNT OpS390XMLGR OpS390XSumBytes2 OpS390XSumBytes4 OpS390XSumBytes8 OpS390XSTMG2 OpS390XSTMG3 OpS390XSTMG4 OpS390XSTM2 OpS390XSTM3 OpS390XSTM4 OpS390XLoweredMove OpS390XLoweredZero OpWasmLoweredStaticCall OpWasmLoweredTailCall OpWasmLoweredClosureCall OpWasmLoweredInterCall OpWasmLoweredAddr OpWasmLoweredMove OpWasmLoweredZero OpWasmLoweredGetClosurePtr OpWasmLoweredGetCallerPC OpWasmLoweredGetCallerSP OpWasmLoweredNilCheck OpWasmLoweredWB OpWasmLoweredConvert OpWasmSelect OpWasmI64Load8U OpWasmI64Load8S OpWasmI64Load16U OpWasmI64Load16S OpWasmI64Load32U OpWasmI64Load32S OpWasmI64Load OpWasmI64Store8 OpWasmI64Store16 OpWasmI64Store32 OpWasmI64Store OpWasmF32Load OpWasmF64Load OpWasmF32Store OpWasmF64Store OpWasmI64Const OpWasmF32Const OpWasmF64Const OpWasmI64Eqz OpWasmI64Eq OpWasmI64Ne OpWasmI64LtS OpWasmI64LtU OpWasmI64GtS OpWasmI64GtU OpWasmI64LeS OpWasmI64LeU OpWasmI64GeS OpWasmI64GeU OpWasmF32Eq OpWasmF32Ne OpWasmF32Lt OpWasmF32Gt OpWasmF32Le OpWasmF32Ge OpWasmF64Eq OpWasmF64Ne OpWasmF64Lt OpWasmF64Gt OpWasmF64Le OpWasmF64Ge OpWasmI64Add OpWasmI64AddConst OpWasmI64Sub OpWasmI64Mul OpWasmI64DivS OpWasmI64DivU OpWasmI64RemS OpWasmI64RemU OpWasmI64And OpWasmI64Or OpWasmI64Xor OpWasmI64Shl OpWasmI64ShrS OpWasmI64ShrU OpWasmF32Neg OpWasmF32Add OpWasmF32Sub OpWasmF32Mul OpWasmF32Div OpWasmF64Neg OpWasmF64Add OpWasmF64Sub OpWasmF64Mul OpWasmF64Div OpWasmI64TruncSatF64S OpWasmI64TruncSatF64U OpWasmI64TruncSatF32S OpWasmI64TruncSatF32U OpWasmF32ConvertI64S OpWasmF32ConvertI64U OpWasmF64ConvertI64S OpWasmF64ConvertI64U OpWasmF32DemoteF64 OpWasmF64PromoteF32 OpWasmI64Extend8S OpWasmI64Extend16S OpWasmI64Extend32S OpWasmF32Sqrt OpWasmF32Trunc OpWasmF32Ceil OpWasmF32Floor OpWasmF32Nearest OpWasmF32Abs OpWasmF32Copysign OpWasmF64Sqrt OpWasmF64Trunc OpWasmF64Ceil OpWasmF64Floor OpWasmF64Nearest OpWasmF64Abs OpWasmF64Copysign OpWasmI64Ctz OpWasmI64Clz OpWasmI32Rotl OpWasmI64Rotl OpWasmI64Popcnt OpAdd8 OpAdd16 OpAdd32 OpAdd64 OpAddPtr OpAdd32F OpAdd64F OpSub8 OpSub16 OpSub32 OpSub64 OpSubPtr OpSub32F OpSub64F OpMul8 OpMul16 OpMul32 OpMul64 OpMul32F OpMul64F OpDiv32F OpDiv64F OpHmul32 OpHmul32u OpHmul64 OpHmul64u OpMul32uhilo OpMul64uhilo OpMul32uover OpMul64uover OpAvg32u OpAvg64u OpDiv8 OpDiv8u OpDiv16 OpDiv16u OpDiv32 OpDiv32u OpDiv64 OpDiv64u OpDiv128u OpMod8 OpMod8u OpMod16 OpMod16u OpMod32 OpMod32u OpMod64 OpMod64u OpAnd8 OpAnd16 OpAnd32 OpAnd64 OpOr8 OpOr16 OpOr32 OpOr64 OpXor8 OpXor16 OpXor32 OpXor64 OpLsh8x8 OpLsh8x16 OpLsh8x32 OpLsh8x64 OpLsh16x8 OpLsh16x16 OpLsh16x32 OpLsh16x64 OpLsh32x8 OpLsh32x16 OpLsh32x32 OpLsh32x64 OpLsh64x8 OpLsh64x16 OpLsh64x32 OpLsh64x64 OpRsh8x8 OpRsh8x16 OpRsh8x32 OpRsh8x64 OpRsh16x8 OpRsh16x16 OpRsh16x32 OpRsh16x64 OpRsh32x8 OpRsh32x16 OpRsh32x32 OpRsh32x64 OpRsh64x8 OpRsh64x16 OpRsh64x32 OpRsh64x64 OpRsh8Ux8 OpRsh8Ux16 OpRsh8Ux32 OpRsh8Ux64 OpRsh16Ux8 OpRsh16Ux16 OpRsh16Ux32 OpRsh16Ux64 OpRsh32Ux8 OpRsh32Ux16 OpRsh32Ux32 OpRsh32Ux64 OpRsh64Ux8 OpRsh64Ux16 OpRsh64Ux32 OpRsh64Ux64 OpEq8 OpEq16 OpEq32 OpEq64 OpEqPtr OpEqInter OpEqSlice OpEq32F OpEq64F OpNeq8 OpNeq16 OpNeq32 OpNeq64 OpNeqPtr OpNeqInter OpNeqSlice OpNeq32F OpNeq64F OpLess8 OpLess8U OpLess16 OpLess16U OpLess32 OpLess32U OpLess64 OpLess64U OpLess32F OpLess64F OpLeq8 OpLeq8U OpLeq16 OpLeq16U OpLeq32 OpLeq32U OpLeq64 OpLeq64U OpLeq32F OpLeq64F OpCondSelect OpAndB OpOrB OpEqB OpNeqB OpNot OpNeg8 OpNeg16 OpNeg32 OpNeg64 OpNeg32F OpNeg64F OpCom8 OpCom16 OpCom32 OpCom64 OpCtz8 OpCtz16 OpCtz32 OpCtz64 OpCtz8NonZero OpCtz16NonZero OpCtz32NonZero OpCtz64NonZero OpBitLen8 OpBitLen16 OpBitLen32 OpBitLen64 OpBswap16 OpBswap32 OpBswap64 OpBitRev8 OpBitRev16 OpBitRev32 OpBitRev64 OpPopCount8 OpPopCount16 OpPopCount32 OpPopCount64 OpRotateLeft64 OpRotateLeft32 OpRotateLeft16 OpRotateLeft8 OpSqrt OpSqrt32 OpFloor OpCeil OpTrunc OpRound OpRoundToEven OpAbs OpCopysign OpMin64F OpMin32F OpMax64F OpMax32F OpFMA OpPhi OpCopy OpConvert OpConstBool OpConstString OpConstNil OpConst8 OpConst16 OpConst32 OpConst64 OpConst32F OpConst64F OpConstInterface OpConstSlice OpInitMem OpArg OpArgIntReg OpArgFloatReg OpAddr OpLocalAddr OpSP OpSB OpSPanchored OpLoad OpDereference OpStore OpMove OpZero OpStoreWB OpMoveWB OpZeroWB OpWBend OpWB OpHasCPUFeature OpPanicBounds OpPanicExtend OpClosureCall OpStaticCall OpInterCall OpTailCall OpClosureLECall OpStaticLECall OpInterLECall OpTailLECall OpSignExt8to16 OpSignExt8to32 OpSignExt8to64 OpSignExt16to32 OpSignExt16to64 OpSignExt32to64 OpZeroExt8to16 OpZeroExt8to32 OpZeroExt8to64 OpZeroExt16to32 OpZeroExt16to64 OpZeroExt32to64 OpTrunc16to8 OpTrunc32to8 OpTrunc32to16 OpTrunc64to8 OpTrunc64to16 OpTrunc64to32 OpCvt32to32F OpCvt32to64F OpCvt64to32F OpCvt64to64F OpCvt32Fto32 OpCvt32Fto64 OpCvt64Fto32 OpCvt64Fto64 OpCvt32Fto64F OpCvt64Fto32F OpCvtBoolToUint8 OpRound32F OpRound64F OpIsNonNil OpIsInBounds OpIsSliceInBounds OpNilCheck OpGetG OpGetClosurePtr OpGetCallerPC OpGetCallerSP OpPtrIndex OpOffPtr OpSliceMake OpSlicePtr OpSliceLen OpSliceCap OpSlicePtrUnchecked OpComplexMake OpComplexReal OpComplexImag OpStringMake OpStringPtr OpStringLen OpIMake OpITab OpIData OpStructMake0 OpStructMake1 OpStructMake2 OpStructMake3 OpStructMake4 OpStructSelect OpArrayMake0 OpArrayMake1 OpArraySelect OpStoreReg OpLoadReg OpFwdRef OpUnknown OpVarDef OpVarLive OpKeepAlive OpInlMark OpInt64Make OpInt64Hi OpInt64Lo OpAdd32carry OpAdd32withcarry OpSub32carry OpSub32withcarry OpAdd64carry OpSub64borrow OpSignmask OpZeromask OpSlicemask OpSpectreIndex OpSpectreSliceIndex OpCvt32Uto32F OpCvt32Uto64F OpCvt32Fto32U OpCvt64Fto32U OpCvt64Uto32F OpCvt64Uto64F OpCvt32Fto64U OpCvt64Fto64U OpSelect0 OpSelect1 OpSelectN OpSelectNAddr OpMakeResult OpAtomicLoad8 OpAtomicLoad32 OpAtomicLoad64 OpAtomicLoadPtr OpAtomicLoadAcq32 OpAtomicLoadAcq64 OpAtomicStore8 OpAtomicStore32 OpAtomicStore64 OpAtomicStorePtrNoWB OpAtomicStoreRel32 OpAtomicStoreRel64 OpAtomicExchange32 OpAtomicExchange64 OpAtomicAdd32 OpAtomicAdd64 OpAtomicCompareAndSwap32 OpAtomicCompareAndSwap64 OpAtomicCompareAndSwapRel32 OpAtomicAnd8 OpAtomicOr8 OpAtomicAnd64 OpAtomicAnd32 OpAtomicOr64 OpAtomicOr32 OpAtomicAdd32Variant OpAtomicAdd64Variant OpAtomicExchange32Variant OpAtomicExchange64Variant OpAtomicCompareAndSwap32Variant OpAtomicCompareAndSwap64Variant OpAtomicAnd8Variant OpAtomicOr8Variant OpAtomicAnd64Variant OpAtomicOr64Variant OpAtomicAnd32Variant OpAtomicOr32Variant OpPubBarrier OpClobber OpClobberReg OpPrefetchCache OpPrefetchCacheStreamed )
func ArgOpAndRegisterFor(r abi.RegIndex, abiConfig *abi.ABIConfig) (Op, int64)
ArgOpAndRegisterFor converts an abi register index into an ssa Op and corresponding arg register index.
func StructMakeOp(nf int) Op
StructMakeOp returns the opcode to construct a struct with the given number of fields.
func (o Op) Asm() obj.As
func (o Op) HasSideEffects() bool
func (o Op) IsCall() bool
func (o Op) IsTailCall() bool
func (o Op) ResultInArg0() bool
func (o Op) Scale() int16
func (o Op) String() string
func (o Op) SymEffect() SymEffect
func (o Op) UnsafePoint() bool
A Register is a machine register, like AX. They are numbered densely from 0 (for each architecture).
type Register struct {
// contains filtered or unexported fields
}
func (r *Register) GCNum() int16
GCNum returns the runtime GC register index of r, or -1 if this register can't contain pointers.
func (r *Register) ObjNum() int16
ObjNum returns the register number from cmd/internal/obj/$ARCH that corresponds to this register.
func (r *Register) String() string
RegisterSet is a bitmap of registers, indexed by Register.num.
type RegisterSet uint64
type SlKeyIdx uint32
type SlotID int32
A SparseTree is a tree of Blocks. It allows rapid ancestor queries, such as whether one block dominates another.
type SparseTree []SparseTreeNode
func (t SparseTree) Child(x *Block) *Block
Child returns a child of x in the dominator tree, or nil if there are none. The choice of first child is arbitrary but repeatable.
func (t SparseTree) IsAncestorEq(x, y *Block) bool
IsAncestorEq reports whether x is an ancestor of or equal to y.
func (t SparseTree) Parent(x *Block) *Block
Parent returns the parent of x in the dominator tree, or nil if x is the function's entry.
func (t SparseTree) Sibling(x *Block) *Block
Sibling returns a sibling of x in the dominator tree (i.e., a node with the same immediate dominator) or nil if there are no remaining siblings in the arbitrary but repeatable order chosen. Because the Child-Sibling order is used to assign entry and exit numbers in the treewalk, those numbers are also consistent with this order (i.e., Sibling(x) has entry number larger than x's exit number).
type SparseTreeNode struct {
// contains filtered or unexported fields
}
func (s *SparseTreeNode) Entry() int32
func (s *SparseTreeNode) Exit() int32
func (s *SparseTreeNode) String() string
type Spill struct { Type *types.Type Offset int64 Reg int16 }
StackOffset encodes whether a value is on the stack and if so, where. It is a 31-bit integer followed by a presence flag at the low-order bit.
type StackOffset int32
A Sym represents a symbolic offset from a base register. Currently a Sym can be one of 3 things:
type Sym interface { CanBeAnSSASym() CanBeAnSSAAux() }
A SymEffect describes the effect that an SSA Value has on the variable identified by the symbol in its Aux field.
type SymEffect int8
const ( SymRead SymEffect = 1 << iota SymWrite SymAddr SymRdWr = SymRead | SymWrite SymNone SymEffect = 0 )
type Types struct { Bool *types.Type Int8 *types.Type Int16 *types.Type Int32 *types.Type Int64 *types.Type UInt8 *types.Type UInt16 *types.Type UInt32 *types.Type UInt64 *types.Type Int *types.Type Float32 *types.Type Float64 *types.Type UInt *types.Type Uintptr *types.Type String *types.Type BytePtr *types.Type // TODO: use unsafe.Pointer instead? Int32Ptr *types.Type UInt32Ptr *types.Type IntPtr *types.Type UintptrPtr *types.Type Float32Ptr *types.Type Float64Ptr *types.Type BytePtrPtr *types.Type }
func NewTypes() *Types
NewTypes creates and populates a Types.
func (t *Types) SetTypPtrs()
SetTypPtrs populates t.
A ValAndOff is used by the several opcodes. It holds both a value and a pointer offset. A ValAndOff is intended to be encoded into an AuxInt field. The zero ValAndOff encodes a value of 0 and an offset of 0. The high 32 bits hold a value. The low 32 bits hold a pointer offset.
type ValAndOff int64
func (x ValAndOff) Off() int32
func (x ValAndOff) Off64() int64
func (x ValAndOff) String() string
func (x ValAndOff) Val() int32
func (x ValAndOff) Val16() int16
func (x ValAndOff) Val64() int64
func (x ValAndOff) Val8() int8
type ValHeap struct {
// contains filtered or unexported fields
}
func (h ValHeap) Len() int
func (h ValHeap) Less(i, j int) bool
func (h *ValHeap) Pop() interface{}
func (h *ValHeap) Push(x interface{})
func (h ValHeap) Swap(i, j int)
A Value represents a value in the SSA representation of the program. The ID and Type fields must not be modified. The remainder may be modified if they preserve the value of the Value (e.g. changing a (mul 2 x) to an (add x x)).
type Value struct { // A unique identifier for the value. For performance we allocate these IDs // densely starting at 1. There is no guarantee that there won't be occasional holes, though. ID ID // The operation that computes this value. See op.go. Op Op // The type of this value. Normally this will be a Go type, but there // are a few other pseudo-types, see ../types/type.go. Type *types.Type // Auxiliary info for this value. The type of this information depends on the opcode and type. // AuxInt is used for integer values, Aux is used for other values. // Floats are stored in AuxInt using math.Float64bits(f). // Unused portions of AuxInt are filled by sign-extending the used portion, // even if the represented value is unsigned. // Users of AuxInt which interpret AuxInt as unsigned (e.g. shifts) must be careful. // Use Value.AuxUnsigned to get the zero-extended value of AuxInt. AuxInt int64 Aux Aux // Arguments of this value Args []*Value // Containing basic block Block *Block // Source position Pos src.XPos // Use count. Each appearance in Value.Args and Block.Controls counts once. Uses int32 // wasm: Value stays on the WebAssembly stack. This value will not get a "register" (WebAssembly variable) // nor a slot on Go stack, and the generation of this value is delayed to its use time. OnWasmStack bool // Is this value in the per-function constant cache? If so, remove from cache before changing it or recycling it. InCache bool // contains filtered or unexported fields }
func IsNewObject(v *Value, select1 []*Value) (mem *Value, ok bool)
IsNewObject reports whether v is a pointer to a freshly allocated & zeroed object, if so, also returns the memory state mem at which v is zero.
func (v *Value) AddArg(w *Value)
If/when midstack inlining is enabled (-l=4), the compiler gets both larger and slower. Not-inlining this method is a help (*Value.reset and *Block.NewValue0 are similar).
func (v *Value) AddArg2(w1, w2 *Value)
func (v *Value) AddArg3(w1, w2, w3 *Value)
func (v *Value) AddArg4(w1, w2, w3, w4 *Value)
func (v *Value) AddArg5(w1, w2, w3, w4, w5 *Value)
func (v *Value) AddArg6(w1, w2, w3, w4, w5, w6 *Value)
func (v *Value) AddArgs(a ...*Value)
func (v *Value) AuxArm64BitField() arm64BitField
func (v *Value) AuxFloat() float64
func (v *Value) AuxInt16() int16
func (v *Value) AuxInt32() int32
func (v *Value) AuxInt8() int8
func (v *Value) AuxUInt8() uint8
func (v *Value) AuxUnsigned() uint64
AuxUnsigned returns v.AuxInt as an unsigned value for OpConst*. v.AuxInt is always sign-extended to 64 bits, even if the represented value is unsigned. This undoes that sign extension.
func (v *Value) AuxValAndOff() ValAndOff
func (v *Value) Fatalf(msg string, args ...interface{})
func (v *Value) HTML() string
func (v *Value) LackingPos() bool
LackingPos indicates whether v is a value that is unlikely to have a correct position assigned to it. Ignoring such values leads to more user-friendly positions assigned to nearby values and the blocks containing them.
func (v *Value) Log() bool
func (v *Value) Logf(msg string, args ...interface{})
func (v *Value) LongHTML() string
func (v *Value) LongString() string
long form print. v# = opcode <type> [aux] args [: reg] (names)
func (v *Value) MemoryArg() *Value
MemoryArg returns the memory argument for the Value. The returned value, if non-nil, will be memory-typed (or a tuple with a memory-typed second part). Otherwise, nil is returned.
func (v *Value) Reg() int16
Reg returns the register assigned to v, in cmd/internal/obj/$ARCH numbering.
func (v *Value) Reg0() int16
Reg0 returns the register assigned to the first output of v, in cmd/internal/obj/$ARCH numbering.
func (v *Value) Reg1() int16
Reg1 returns the register assigned to the second output of v, in cmd/internal/obj/$ARCH numbering.
func (v *Value) RegName() string
func (v *Value) RegTmp() int16
RegTmp returns the temporary register assigned to v, in cmd/internal/obj/$ARCH numbering.
func (v *Value) ResultReg() int16
ResultReg returns the result register assigned to v, in cmd/internal/obj/$ARCH numbering. It is similar to Reg and Reg0, except that it is usable interchangeably for all Value Ops. If you know v.Op, using Reg or Reg0 (as appropriate) will be more efficient.
func (v *Value) SetArg(i int, w *Value)
func (v *Value) SetArgs1(a *Value)
func (v *Value) SetArgs2(a, b *Value)
func (v *Value) SetArgs3(a, b, c *Value)
func (v *Value) String() string
short form print. Just v#.
type VarID int32
A VarLoc describes the storage for part of a user variable.
type VarLoc struct { // The registers this variable is available in. There can be more than // one in various situations, e.g. it's being moved between registers. Registers RegisterSet StackOffset }
A ZeroRegion records parts of an object which are known to be zero. A ZeroRegion only applies to a single memory state. Each bit in mask is set if the corresponding pointer-sized word of the base object is known to be zero. In other words, if mask & (1<<i) != 0, then [base+i*ptrSize, base+(i+1)*ptrSize) is known to be zero.
type ZeroRegion struct {
// contains filtered or unexported fields
}