Functions
            
            
               
                  EncodeBImmediate 
                  function
                  
                  #
               
               
               func EncodeBImmediate(imm int64) (int64, error)
            
            
            
               
                  EncodeCBImmediate 
                  function
                  
                  #
               
               
               func EncodeCBImmediate(imm int64) (int64, error)
            
            
            
               
                  EncodeCJImmediate 
                  function
                  
                  #
               
               
               func EncodeCJImmediate(imm int64) (int64, error)
            
            
            
               
                  EncodeIImmediate 
                  function
                  
                  #
               
               
               func EncodeIImmediate(imm int64) (int64, error)
            
            
            
               
                  EncodeJImmediate 
                  function
                  
                  #
               
               
               func EncodeJImmediate(imm int64) (int64, error)
            
            
            
               
                  EncodeSImmediate 
                  function
                  
                  #
               
               
               func EncodeSImmediate(imm int64) (int64, error)
            
            
            
               
                  EncodeUImmediate 
                  function
                  
                  #
               
               
               func EncodeUImmediate(imm int64) (int64, error)
            
            
            
               
                  InvertBranch 
                  function
                  
                  #
               
               
               InvertBranch inverts the condition of a conditional branch.
               
               func InvertBranch(as obj.As) obj.As
            
            
            
               
                  ParseSuffix 
                  function
                  
                  #
               
               
               func ParseSuffix(prog *obj.Prog, cond string) (err error)
            
            
            
               
                  RegName 
                  function
                  
                  #
               
               
               func RegName(r int) string
            
            
            
               
                  Split32BitImmediate 
                  function
                  
                  #
               
               
               Split32BitImmediate splits a signed 32-bit immediate into a signed 20-bit
upper immediate and a signed 12-bit lower immediate to be added to the upper
result. For example, high may be used in LUI and low in a following ADDI to
generate a full 32-bit constant.
               
               func Split32BitImmediate(imm int64) (low int64, high int64, err error)
            
            
            
               
                  String 
                  method
                  
                  #
               
               
               func (ins *instruction) String() string
            
            
            
               
                  addrToReg 
                  function
                  
                  #
               
               
               addrToReg extracts the register from an Addr, handling special Addr.Names.
               
               func addrToReg(a obj.Addr) int16
            
            
            
               
                  assemble 
                  function
                  
                  #
               
               
               assemble emits machine code.
It is called at the very end of the assembly process.
               
               func assemble(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc)
            
            
            
               
                  buildop 
                  function
                  
                  #
               
               
               func buildop(ctxt *obj.Link)
            
            
            
               
                  containsCall 
                  function
                  
                  #
               
               
               containsCall reports whether the symbol contains a CALL (or equivalent)
instruction. Must be called after progedit.
               
               func containsCall(sym *obj.LSym) bool
            
            
            
               
                  encode 
                  method
                  
                  #
               
               
               func (ins *instruction) encode() (uint32, error)
            
            
            
               
                  encode 
                  function
                  
                  #
               
               
               func encode(a obj.As) *inst
            
            
            
               
                  encodeB 
                  function
                  
                  #
               
               
               encodeB encodes a B-type RISC-V instruction.
               
               func encodeB(ins *instruction) uint32
            
            
            
               
                  encodeBImmediate 
                  function
                  
                  #
               
               
               encodeBImmediate encodes an immediate for a B-type RISC-V instruction.
               
               func encodeBImmediate(imm uint32) uint32
            
            
            
               
                  encodeCBImmediate 
                  function
                  
                  #
               
               
               encodeCBImmediate encodes an immediate for a CB-type RISC-V instruction.
               
               func encodeCBImmediate(imm uint32) uint32
            
            
            
               
                  encodeCJImmediate 
                  function
                  
                  #
               
               
               encodeCJImmediate encodes an immediate for a CJ-type RISC-V instruction.
               
               func encodeCJImmediate(imm uint32) uint32
            
            
            
               
                  encodeI 
                  function
                  
                  #
               
               
               encodeI encodes an I-type RISC-V instruction.
               
               func encodeI(as obj.As, rs1 uint32, rd uint32, imm uint32) uint32
            
            
            
               
                  encodeIF 
                  function
                  
                  #
               
               
               func encodeIF(ins *instruction) uint32
            
            
            
               
                  encodeIII 
                  function
                  
                  #
               
               
               func encodeIII(ins *instruction) uint32
            
            
            
               
                  encodeJ 
                  function
                  
                  #
               
               
               encodeJ encodes a J-type RISC-V instruction.
               
               func encodeJ(ins *instruction) uint32
            
            
            
               
                  encodeJImmediate 
                  function
                  
                  #
               
               
               encodeJImmediate encodes an immediate for a J-type RISC-V instruction.
               
               func encodeJImmediate(imm uint32) uint32
            
            
            
               
                  encodeR 
                  function
                  
                  #
               
               
               encodeR encodes an R-type RISC-V instruction.
               
               func encodeR(as obj.As, rs1 uint32, rs2 uint32, rd uint32, funct3 uint32, funct7 uint32) uint32
            
            
            
               
                  encodeR4 
                  function
                  
                  #
               
               
               encodeR4 encodes an R4-type RISC-V instruction.
               
               func encodeR4(as obj.As, rs1 uint32, rs2 uint32, rs3 uint32, rd uint32, funct3 uint32, funct2 uint32) uint32
            
            
            
               
                  encodeRFF 
                  function
                  
                  #
               
               
               func encodeRFF(ins *instruction) uint32
            
            
            
               
                  encodeRFFF 
                  function
                  
                  #
               
               
               func encodeRFFF(ins *instruction) uint32
            
            
            
               
                  encodeRFFFF 
                  function
                  
                  #
               
               
               func encodeRFFFF(ins *instruction) uint32
            
            
            
               
                  encodeRFFI 
                  function
                  
                  #
               
               
               func encodeRFFI(ins *instruction) uint32
            
            
            
               
                  encodeRFI 
                  function
                  
                  #
               
               
               func encodeRFI(ins *instruction) uint32
            
            
            
               
                  encodeRIF 
                  function
                  
                  #
               
               
               func encodeRIF(ins *instruction) uint32
            
            
            
               
                  encodeRII 
                  function
                  
                  #
               
               
               func encodeRII(ins *instruction) uint32
            
            
            
               
                  encodeRIII 
                  function
                  
                  #
               
               
               func encodeRIII(ins *instruction) uint32
            
            
            
               
                  encodeRawIns 
                  function
                  
                  #
               
               
               func encodeRawIns(ins *instruction) uint32
            
            
            
               
                  encodeS 
                  function
                  
                  #
               
               
               encodeS encodes an S-type RISC-V instruction.
               
               func encodeS(as obj.As, rs1 uint32, rs2 uint32, imm uint32) uint32
            
            
            
               
                  encodeSF 
                  function
                  
                  #
               
               
               func encodeSF(ins *instruction) uint32
            
            
            
               
                  encodeSI 
                  function
                  
                  #
               
               
               func encodeSI(ins *instruction) uint32
            
            
            
               
                  encodeU 
                  function
                  
                  #
               
               
               encodeU encodes a U-type RISC-V instruction.
               
               func encodeU(ins *instruction) uint32
            
            
            
               
                  encodingForAs 
                  function
                  
                  #
               
               
               encodingForAs returns the encoding for an obj.As.
               
               func encodingForAs(as obj.As) (*encoding, error)
            
            
            
               
                  extractBitAndShift 
                  function
                  
                  #
               
               
               extractBitAndShift extracts the specified bit from the given immediate,
before shifting it to the requested position and returning it.
               
               func extractBitAndShift(imm uint32, bit int, pos int) uint32
            
            
            
               
                  immEven 
                  function
                  
                  #
               
               
               immEven checks that the immediate is a multiple of two. If it
is not, an error is returned.
               
               func immEven(x int64) error
            
            
            
               
                  immI 
                  function
                  
                  #
               
               
               immI extracts the signed integer of the specified size from an immediate.
               
               func immI(as obj.As, imm int64, nbits uint) uint32
            
            
            
               
                  immIFits 
                  function
                  
                  #
               
               
               immIFits checks whether the immediate value x fits in nbits bits
as a signed integer. If it does not, an error is returned.
               
               func immIFits(x int64, nbits uint) error
            
            
            
               
                  init 
                  function
                  
                  #
               
               
               func init()
            
            
            
               
                  instructionDataForAs 
                  function
                  
                  #
               
               
               instructionDataForAs returns the instruction data for an obj.As.
               
               func instructionDataForAs(as obj.As) (*instructionData, error)
            
            
            
               
                  instructionForProg 
                  function
                  
                  #
               
               
               instructionForProg returns the default *obj.Prog to instruction mapping.
               
               func instructionForProg(p *obj.Prog) *instruction
            
            
            
               
                  instructionsForLoad 
                  function
                  
                  #
               
               
               instructionsForLoad returns the machine instructions for a load. The load
instruction is specified by as and the base/source register is specified
by rs, instead of the obj.Prog.
               
               func instructionsForLoad(p *obj.Prog, as obj.As, rs int16) []*instruction
            
            
            
               
                  instructionsForMOV 
                  function
                  
                  #
               
               
               instructionsForMOV returns the machine instructions for an *obj.Prog that
uses a MOV pseudo-instruction.
               
               func instructionsForMOV(p *obj.Prog) []*instruction
            
            
            
               
                  instructionsForOpImmediate 
                  function
                  
                  #
               
               
               instructionsForOpImmediate returns the machine instructions for an immediate
operand. The instruction is specified by as and the source register is
specified by rs, instead of the obj.Prog.
               
               func instructionsForOpImmediate(p *obj.Prog, as obj.As, rs int16) []*instruction
            
            
            
               
                  instructionsForProg 
                  function
                  
                  #
               
               
               instructionsForProg returns the machine instructions for an *obj.Prog.
               
               func instructionsForProg(p *obj.Prog) []*instruction
            
            
            
               
                  instructionsForRotate 
                  function
                  
                  #
               
               
               instructionsForRotate returns the machine instructions for a bitwise rotation.
               
               func instructionsForRotate(p *obj.Prog, ins *instruction) []*instruction
            
            
            
               
                  instructionsForStore 
                  function
                  
                  #
               
               
               instructionsForStore returns the machine instructions for a store. The store
instruction is specified by as and the target/source register is specified
by rd, instead of the obj.Prog.
               
               func instructionsForStore(p *obj.Prog, as obj.As, rd int16) []*instruction
            
            
            
               
                  instructionsForTLS 
                  function
                  
                  #
               
               
               func instructionsForTLS(p *obj.Prog, ins *instruction) []*instruction
            
            
            
               
                  instructionsForTLSLoad 
                  function
                  
                  #
               
               
               func instructionsForTLSLoad(p *obj.Prog) []*instruction
            
            
            
               
                  instructionsForTLSStore 
                  function
                  
                  #
               
               
               func instructionsForTLSStore(p *obj.Prog) []*instruction
            
            
            
               
                  isUnsafePoint 
                  function
                  
                  #
               
               
               func isUnsafePoint(p *obj.Prog) bool
            
            
            
               
                  jalToSym 
                  function
                  
                  #
               
               
               func jalToSym(ctxt *obj.Link, p *obj.Prog, lr int16)
            
            
            
               
                  length 
                  method
                  
                  #
               
               
               func (ins *instruction) length() int
            
            
            
               
                  markRelocs 
                  function
                  
                  #
               
               
               markRelocs marks an obj.Prog that specifies a MOV pseudo-instruction and
requires relocation.
               
               func markRelocs(p *obj.Prog)
            
            
            
               
                  movToLoad 
                  function
                  
                  #
               
               
               movToLoad converts a MOV mnemonic into the corresponding load instruction.
               
               func movToLoad(mnemonic obj.As) obj.As
            
            
            
               
                  movToStore 
                  function
                  
                  #
               
               
               movToStore converts a MOV mnemonic into the corresponding store instruction.
               
               func movToStore(mnemonic obj.As) obj.As
            
            
            
               
                  opSuffixString 
                  function
                  
                  #
               
               
               func opSuffixString(s uint8) string
            
            
            
               
                  pcAlignPadLength 
                  function
                  
                  #
               
               
               func pcAlignPadLength(pc int64, alignedValue int64) int
            
            
            
               
                  preprocess 
                  function
                  
                  #
               
               
               preprocess generates prologue and epilogue code, computes PC-relative branch
and jump offsets, and resolves pseudo-registers.
preprocess is called once per linker symbol.
When preprocess finishes, all instructions in the symbol are either
concrete, real RISC-V instructions or directive pseudo-ops like TEXT,
PCDATA, and FUNCDATA.
               
               func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc)
            
            
            
               
                  progedit 
                  function
                  
                  #
               
               
               progedit is called individually for each *obj.Prog. It normalizes instruction
formats and eliminates as many pseudo-instructions as possible.
               
               func progedit(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc)
            
            
            
               
                  regAddr 
                  function
                  
                  #
               
               
               regAddr extracts a register from an Addr.
               
               func regAddr(a obj.Addr, min uint32, max uint32) uint32
            
            
            
               
                  regF 
                  function
                  
                  #
               
               
               regF returns a float register.
               
               func regF(r uint32) uint32
            
            
            
               
                  regFAddr 
                  function
                  
                  #
               
               
               regFAddr extracts the float register from an Addr.
               
               func regFAddr(a obj.Addr) uint32
            
            
            
               
                  regI 
                  function
                  
                  #
               
               
               regI returns an integer register.
               
               func regI(r uint32) uint32
            
            
            
               
                  regIAddr 
                  function
                  
                  #
               
               
               regIAddr extracts the integer register from an Addr.
               
               func regIAddr(a obj.Addr) uint32
            
            
            
               
                  regV 
                  function
                  
                  #
               
               
               regV returns a vector register.
               
               func regV(r uint32) uint32
            
            
            
               
                  regVal 
                  function
                  
                  #
               
               
               func regVal(r uint32, min uint32, max uint32) uint32
            
            
            
               
                  rmSuffixEncode 
                  function
                  
                  #
               
               
               func rmSuffixEncode(s string) (uint8, error)
            
            
            
               
                  rmSuffixString 
                  function
                  
                  #
               
               
               func rmSuffixString(u uint8) (string, error)
            
            
            
               
                  setPCs 
                  function
                  
                  #
               
               
               setPCs sets the Pc field in all instructions reachable from p.
It uses pc as the initial value and returns the next available pc.
               
               func setPCs(p *obj.Prog, pc int64) int64
            
            
            
               
                  signExtend 
                  function
                  
                  #
               
               
               signExtend sign extends val starting at bit bit.
               
               func signExtend(val int64, bit uint) int64
            
            
            
               
                  stackOffset 
                  function
                  
                  #
               
               
               stackOffset updates Addr offsets based on the current stack size.
The stack looks like:
-------------------
|                 |
|      PARAMs     |
|                 |
|                 |
-------------------
|    Parent RA    |   SP on function entry
-------------------
|                 |
|                 |
|       AUTOs     |
|                 |
|                 |
-------------------
|        RA       |   SP during function execution
-------------------
FixedFrameSize makes other packages aware of the space allocated for RA.
A nicer version of this diagram can be found on slide 21 of the presentation
attached to https://golang.org/issue/16922#issuecomment-243748180.
               
               func stackOffset(a *obj.Addr, stacksize int64)
            
            
            
               
                  stacksplit 
                  function
                  
                  #
               
               
               func stacksplit(ctxt *obj.Link, p *obj.Prog, cursym *obj.LSym, newprog obj.ProgAlloc, framesize int64) *obj.Prog
            
            
            
               
                  usesRegTmp 
                  method
                  
                  #
               
               
               func (ins *instruction) usesRegTmp() bool
            
            
            
               
                  validate 
                  method
                  
                  #
               
               
               func (ins *instruction) validate(ctxt *obj.Link)
            
            
            
               
                  validateB 
                  function
                  
                  #
               
               
               func validateB(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateIF 
                  function
                  
                  #
               
               
               func validateIF(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateIII 
                  function
                  
                  #
               
               
               func validateIII(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateJ 
                  function
                  
                  #
               
               
               func validateJ(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateRFF 
                  function
                  
                  #
               
               
               func validateRFF(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateRFFF 
                  function
                  
                  #
               
               
               func validateRFFF(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateRFFFF 
                  function
                  
                  #
               
               
               func validateRFFFF(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateRFFI 
                  function
                  
                  #
               
               
               func validateRFFI(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateRFI 
                  function
                  
                  #
               
               
               func validateRFI(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateRIF 
                  function
                  
                  #
               
               
               func validateRIF(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateRII 
                  function
                  
                  #
               
               
               func validateRII(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateRIII 
                  function
                  
                  #
               
               
               func validateRIII(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateRaw 
                  function
                  
                  #
               
               
               func validateRaw(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateSF 
                  function
                  
                  #
               
               
               func validateSF(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateSI 
                  function
                  
                  #
               
               
               func validateSI(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  validateU 
                  function
                  
                  #
               
               
               func validateU(ctxt *obj.Link, ins *instruction)
            
            
            
               
                  wantEvenOffset 
                  function
                  
                  #
               
               
               wantEvenOffset checks that the offset is a multiple of two.
               
               func wantEvenOffset(ctxt *obj.Link, ins *instruction, offset int64)
            
            
            
               
                  wantFloatReg 
                  function
                  
                  #
               
               
               wantFloatReg checks that r is a floating-point register.
               
               func wantFloatReg(ctxt *obj.Link, ins *instruction, pos string, r uint32)
            
            
            
               
                  wantImmI 
                  function
                  
                  #
               
               
               func wantImmI(ctxt *obj.Link, ins *instruction, imm int64, nbits uint)
            
            
            
               
                  wantIntReg 
                  function
                  
                  #
               
               
               wantIntReg checks that r is an integer register.
               
               func wantIntReg(ctxt *obj.Link, ins *instruction, pos string, r uint32)
            
            
            
               
                  wantNoneReg 
                  function
                  
                  #
               
               
               func wantNoneReg(ctxt *obj.Link, ins *instruction, pos string, r uint32)
            
            
            
               
                  wantReg 
                  function
                  
                  #
               
               
               func wantReg(ctxt *obj.Link, ins *instruction, pos string, descr string, r uint32, min uint32, max uint32)
            
            
            
               
                  wantVectorReg 
                  function
                  
                  #
               
               
               wantVectorReg checks that r is a vector register.
               
               func wantVectorReg(ctxt *obj.Link, ins *instruction, pos string, r uint32)