go/src/cmd/internal/obj/ppc64/asm9.go

type ctxt9

const r0iszero

const PFX_R_ABS

const PFX_R_PCREL

const NOP

type Optab

var optab

var optabBase

type PrefixableOptab

var prefixableOptab

var oprange

var xcmp

var pfxEnabled

var buildOpCfg

// padding bytes to add to align code as requested.
func addpad(pc, a int64, ctxt *obj.Link, cursym *obj.LSym) int {}

func span9(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {}

func isint32(v int64) bool {}

func isuint32(v uint64) bool {}

func (c *ctxt9) aclassreg(reg int16) int {}

func (c *ctxt9) aclass(a *obj.Addr) int {}

func prasm(p *obj.Prog) {}

func (c *ctxt9) oplook(p *obj.Prog) *Optab {}

// Compare two operand types (ex C_REG, or C_U15CON)
// and return true if b is compatible with a.
//
// Argument comparison isn't reflexitive, so care must be taken.
// a is the argument type as found in optab, b is the argument as
// fitted by aclass.
func cmp(a int, b int) bool {}

// Used when sorting the optab. Sorting is
// done in a way so that the best choice of
// opcode/operand combination is considered first.
func optabLess(i, j int) bool {}

// Add an entry to the opcode table for
// a new opcode b0 with the same operand combinations
// as opcode a.
func opset(a, b0 obj.As) {}

// Determine if the build configuration requires a TOC pointer.
// It is assumed this always called after buildop.
func NeedTOCpointer(ctxt *obj.Link) bool {}

// Build the opcode table
func buildop(ctxt *obj.Link) {}

func OPVXX1(o uint32, xo uint32, oe uint32) uint32 {}

func OPVXX2(o uint32, xo uint32, oe uint32) uint32 {}

func OPVXX2VA(o uint32, xo uint32, oe uint32) uint32 {}

func OPVXX3(o uint32, xo uint32, oe uint32) uint32 {}

func OPVXX4(o uint32, xo uint32, oe uint32) uint32 {}

func OPDQ(o uint32, xo uint32, oe uint32) uint32 {}

func OPVX(o uint32, xo uint32, oe uint32, rc uint32) uint32 {}

func OPVC(o uint32, xo uint32, oe uint32, rc uint32) uint32 {}

func OPVCC(o uint32, xo uint32, oe uint32, rc uint32) uint32 {}

func OPCC(o uint32, xo uint32, rc uint32) uint32 {}

/* Generate MD-form opcode */
func OPMD(o, xo, rc uint32) uint32 {}

/* the order is dest, a/s, b/imm for both arithmetic and logical operations. */
func AOP_RRR(op uint32, d uint32, a uint32, b uint32) uint32 {}

/* VX-form 2-register operands, r/none/r */
func AOP_RR(op uint32, d uint32, a uint32) uint32 {}

/* VA-form 4-register operands */
func AOP_RRRR(op uint32, d uint32, a uint32, b uint32, c uint32) uint32 {}

func AOP_IRR(op uint32, d uint32, a uint32, simm uint32) uint32 {}

/* VX-form 2-register + UIM operands */
func AOP_VIRR(op uint32, d uint32, a uint32, simm uint32) uint32 {}

/* VX-form 2-register + ST + SIX operands */
func AOP_IIRR(op uint32, d uint32, a uint32, sbit uint32, simm uint32) uint32 {}

/* VA-form 3-register + SHB operands */
func AOP_IRRR(op uint32, d uint32, a uint32, b uint32, simm uint32) uint32 {}

/* VX-form 1-register + SIM operands */
func AOP_IR(op uint32, d uint32, simm uint32) uint32 {}

/* XX1-form 3-register operands, 1 VSR operand */
func AOP_XX1(op uint32, r uint32, a uint32, b uint32) uint32 {}

/* XX2-form 3-register operands, 2 VSR operands */
func AOP_XX2(op uint32, xt uint32, a uint32, xb uint32) uint32 {}

/* XX3-form 3 VSR operands */
func AOP_XX3(op uint32, xt uint32, xa uint32, xb uint32) uint32 {}

/* XX3-form 3 VSR operands + immediate */
func AOP_XX3I(op uint32, xt uint32, xa uint32, xb uint32, c uint32) uint32 {}

/* XX4-form, 4 VSR operands */
func AOP_XX4(op uint32, xt uint32, xa uint32, xb uint32, xc uint32) uint32 {}

/* DQ-form, VSR register, register + offset operands */
func AOP_DQ(op uint32, xt uint32, a uint32, b uint32) uint32 {}

/* Z23-form, 3-register operands + CY field */
func AOP_Z23I(op uint32, d uint32, a uint32, b uint32, c uint32) uint32 {}

/* X-form, 3-register operands + EH field */
func AOP_RRRI(op uint32, d uint32, a uint32, b uint32, c uint32) uint32 {}

func LOP_RRR(op uint32, a uint32, s uint32, b uint32) uint32 {}

func LOP_IRR(op uint32, a uint32, s uint32, uimm uint32) uint32 {}

func OP_BR(op uint32, li uint32, aa uint32) uint32 {}

func OP_BC(op uint32, bo uint32, bi uint32, bd uint32, aa uint32) uint32 {}

func OP_BCR(op uint32, bo uint32, bi uint32) uint32 {}

func OP_RLW(op uint32, a uint32, s uint32, sh uint32, mb uint32, me uint32) uint32 {}

func AOP_EXTSWSLI(op uint32, a uint32, s uint32, sh uint32) uint32 {}

func AOP_ISEL(op uint32, t uint32, a uint32, b uint32, bc uint32) uint32 {}

/* MD-form 2-register, 2 6-bit immediate operands */
func AOP_MD(op uint32, a uint32, s uint32, sh uint32, m uint32) uint32 {}

/* MDS-form 3-register, 1 6-bit immediate operands. rsh argument is a register. */
func AOP_MDS(op, to, from, rsh, m uint32) uint32 {}

func AOP_PFX_00_8LS(r, ie uint32) uint32 {}

func AOP_PFX_10_MLS(r, ie uint32) uint32 {}

const OP_ADD

const OP_ADDI

const OP_ADDIS

const OP_ANDI

const OP_EXTSB

const OP_EXTSH

const OP_EXTSW

const OP_ISEL

const OP_MCRF

const OP_MCRFS

const OP_MCRXR

const OP_MFCR

const OP_MFFS

const OP_MFSPR

const OP_MFSR

const OP_MFSRIN

const OP_MTCRF

const OP_MTFSF

const OP_MTFSFI

const OP_MTSPR

const OP_MTSR

const OP_MTSRIN

const OP_MULLW

const OP_MULLD

const OP_OR

const OP_ORI

const OP_ORIS

const OP_XORI

const OP_XORIS

const OP_RLWINM

const OP_RLWNM

const OP_SUBF

const OP_RLDIC

const OP_RLDICR

const OP_RLDICL

const OP_RLDCL

const OP_EXTSWSLI

const OP_SETB

func pfxadd(rt, ra int16, r uint32, imm32 int64) (uint32, uint32) {}

func pfxload(a obj.As, reg int16, base int16, r uint32) (uint32, uint32) {}

func pfxstore(a obj.As, reg int16, base int16, r uint32) (uint32, uint32) {}

func oclass(a *obj.Addr) int {}

const D_FORM

const DS_FORM

// This function determines when a non-indexed load or store is D or
// DS form for use in finding the size of the offset field in the instruction.
// The size is needed when setting the offset value in the instruction
// and when generating relocation for that field.
// DS form instructions include: ld, ldu, lwa, std, stdu.  All other
// loads and stores with an offset field are D form.  This function should
// only be called with the same opcodes as are handled by opstore and opload.
func (c *ctxt9) opform(insn uint32) int {}

// Encode instructions and create relocation for accessing s+d according to the
// instruction op with source or destination (as appropriate) register reg.
func (c *ctxt9) symbolAccess(s *obj.LSym, d int64, reg int16, op uint32, reuse bool) (o1, o2 uint32, rel *obj.Reloc) {}

// Determine the mask begin (mb) and mask end (me) values
// for a valid word rotate mask. A valid 32 bit mask is of
// the form 1+0*1+ or 0*1+0*.
//
// Note, me is inclusive.
func decodeMask32(mask uint32) (mb, me uint32, valid bool) {}

// Decompose a mask of contiguous bits into a begin (mb) and
// end (me) value.
//
// 64b mask values cannot wrap on any valid PPC64 instruction.
// Only masks of the form 0*1+0* are valid.
//
// Note, me is inclusive.
func decodeMask64(mask int64) (mb, me uint32, valid bool) {}

// Load the lower 16 bits of a constant into register r.
func loadl16(r int, d int64) uint32 {}

// Load the upper 16 bits of a 32b constant into register r.
func loadu32(r int, d int64) uint32 {}

func high16adjusted(d int32) uint16 {}

func asmout(c *ctxt9, p *obj.Prog, o *Optab, out *[5]uint32) {}

func (c *ctxt9) vregoff(a *obj.Addr) int64 {}

func (c *ctxt9) regoff(a *obj.Addr) int32 {}

func (c *ctxt9) oprrr(a obj.As) uint32 {}

func (c *ctxt9) opirrr(a obj.As) uint32 {}

func (c *ctxt9) opiirr(a obj.As) uint32 {}

func (c *ctxt9) opirr(a obj.As) uint32 {}

/*
 * load o(a),d
 */
func (c *ctxt9) opload(a obj.As) uint32 {}

/*
 * indexed load a(b),d
 */
func (c *ctxt9) oploadx(a obj.As) uint32 {}

/*
 * store s,o(d)
 */
func (c *ctxt9) opstore(a obj.As) uint32 {}

/*
 * indexed store s,a(b)
 */
func (c *ctxt9) opstorex(a obj.As) uint32 {}