...

Package arch

import "cmd/asm/internal/arch"
Overview
Index

Overview ▾

Package arch defines architecture-specific information and support functions.

Constants

Pseudo-registers whose names are the constant name without the leading R.

const (
    RFP = -(iota + 1)
    RSB
    RSP
    RPC
)

func ARM64RegisterArrangement

func ARM64RegisterArrangement(reg int16, name, arng string) (int64, error)

ARM64RegisterArrangement constructs an ARM64 vector register arrangement.

func ARM64RegisterExtension

func ARM64RegisterExtension(a *obj.Addr, ext string, reg, num int16, isAmount, isIndex bool) error

ARM64RegisterExtension constructs an ARM64 register with extension or arrangement.

func ARM64RegisterListOffset

func ARM64RegisterListOffset(firstReg, regCnt int, arrangement int64) (int64, error)

ARM64RegisterListOffset generates offset encoding according to AArch64 specification.

func ARM64RegisterShift

func ARM64RegisterShift(reg, op, count int16) (int64, error)

ARM64RegisterShift constructs an ARM64 register with shift operation.

func ARM64Suffix

func ARM64Suffix(prog *obj.Prog, cond string) bool

ARM64Suffix handles the special suffix for the ARM64. It returns a boolean to indicate success; failure means cond was unrecognized.

func ARMConditionCodes

func ARMConditionCodes(prog *obj.Prog, cond string) bool

ARMConditionCodes handles the special condition code situation for the ARM. It returns a boolean to indicate success; failure means cond was unrecognized.

func ARMMRCOffset

func ARMMRCOffset(op obj.As, cond string, x0, x1, x2, x3, x4, x5 int64) (offset int64, op0 obj.As, ok bool)

ARMMRCOffset implements the peculiar encoding of the MRC and MCR instructions. The difference between MRC and MCR is represented by a bit high in the word, not in the usual way by the opcode itself. Asm must use AMRC for both instructions, so we return the opcode for MRC so that asm doesn't need to import obj/arm.

func GetARM64SpecialOperand

func GetARM64SpecialOperand(name string) arm64.SpecialOperand

GetARM64SpecialOperand returns the internal representation of a special operand.

func IsARM64ADR

func IsARM64ADR(op obj.As) bool

IsARM64ADR reports whether the op (as defined by an arm64.A* constant) is one of the comparison instructions that require special handling.

func IsARM64CASP

func IsARM64CASP(op obj.As) bool

IsARM64CASP reports whether the op (as defined by an arm64.A* constant) is one of the CASP-like instructions, and its 2nd destination is a register pair that require special handling.

func IsARM64CMP

func IsARM64CMP(op obj.As) bool

IsARM64CMP reports whether the op (as defined by an arm64.A* constant) is one of the comparison instructions that require special handling.

func IsARM64STLXR

func IsARM64STLXR(op obj.As) bool

IsARM64STLXR reports whether the op (as defined by an arm64.A* constant) is one of the STLXR-like instructions that require special handling.

func IsARM64TBL

func IsARM64TBL(op obj.As) bool

IsARM64TBL reports whether the op (as defined by an arm64.A* constant) is one of the TBL-like instructions and one of its inputs does not fit into prog.Reg, so require special handling.

func IsARMBFX

func IsARMBFX(op obj.As) bool

IsARMBFX reports whether the op (as defined by an arm.A* constant) is one the BFX-like instructions which are in the form of "op $width, $LSB, (Reg,) Reg".

func IsARMCMP

func IsARMCMP(op obj.As) bool

IsARMCMP reports whether the op (as defined by an arm.A* constant) is one of the comparison instructions that require special handling.

func IsARMFloatCmp

func IsARMFloatCmp(op obj.As) bool

IsARMFloatCmp reports whether the op is a floating comparison instruction.

func IsARMMRC

func IsARMMRC(op obj.As) bool

IsARMMRC reports whether the op (as defined by an arm.A* constant) is MRC or MCR.

func IsARMMULA

func IsARMMULA(op obj.As) bool

IsARMMULA reports whether the op (as defined by an arm.A* constant) is MULA, MULS, MMULA, MMULS, MULABB, MULAWB or MULAWT, the 4-operand instructions.

func IsARMSTREX

func IsARMSTREX(op obj.As) bool

IsARMSTREX reports whether the op (as defined by an arm.A* constant) is one of the STREX-like instructions that require special handling.

func IsLoong64AMO

func IsLoong64AMO(op obj.As) bool

func IsLoong64CMP

func IsLoong64CMP(op obj.As) bool

IsLoong64CMP reports whether the op (as defined by an loong64.A* constant) is one of the CMP instructions that require special handling.

func IsLoong64MUL

func IsLoong64MUL(op obj.As) bool

IsLoong64MUL reports whether the op (as defined by an loong64.A* constant) is one of the MUL/DIV/REM instructions that require special handling.

func IsLoong64RDTIME

func IsLoong64RDTIME(op obj.As) bool

IsLoong64RDTIME reports whether the op (as defined by an loong64.A* constant) is one of the RDTIMELW/RDTIMEHW/RDTIMED instructions that require special handling.

func IsMIPSCMP

func IsMIPSCMP(op obj.As) bool

IsMIPSCMP reports whether the op (as defined by an mips.A* constant) is one of the CMP instructions that require special handling.

func IsMIPSMUL

func IsMIPSMUL(op obj.As) bool

IsMIPSMUL reports whether the op (as defined by an mips.A* constant) is one of the MUL/DIV/REM/MADD/MSUB instructions that require special handling.

func IsPPC64CMP

func IsPPC64CMP(op obj.As) bool

IsPPC64CMP reports whether the op (as defined by an ppc64.A* constant) is one of the CMP instructions that require special handling.

func IsPPC64NEG

func IsPPC64NEG(op obj.As) bool

IsPPC64NEG reports whether the op (as defined by an ppc64.A* constant) is one of the NEG-like instructions that require special handling.

func IsRISCV64AMO

func IsRISCV64AMO(op obj.As) bool

IsRISCV64AMO reports whether the op (as defined by a riscv.A* constant) is one of the AMO instructions that requires special handling.

func ParseARMCondition

func ParseARMCondition(cond string) (uint8, bool)

ParseARMCondition parses the conditions attached to an ARM instruction. The input is a single string consisting of period-separated condition codes, such as ".P.W". An initial period is ignored.

type Arch

Arch wraps the link architecture object with more architecture-specific information.

type Arch struct {
    *obj.LinkArch
    // Map of instruction names to enumeration.
    Instructions map[string]obj.As
    // Map of register names to enumeration.
    Register map[string]int16
    // Table of register prefix names. These are things like R for R(0) and SPR for SPR(268).
    RegisterPrefix map[string]bool
    // RegisterNumber converts R(10) into arm.REG_R10.
    RegisterNumber func(string, int16) (int16, bool)
    // Instruction is a jump.
    IsJump func(word string) bool
}

func Set

func Set(GOARCH string, shared bool) *Arch

Set configures the architecture specified by GOARCH and returns its representation. It returns nil if GOARCH is not recognized.