}
func span6(ctxt *obj.Link, s *obj.LSym) {
- ctxt.Cursym = s
-
if s.P != nil {
return
}
var asmbuf AsmBuf
- for p := ctxt.Cursym.Text; p != nil; p = p.Link {
+ for p := s.Text; p != nil; p = p.Link {
if p.To.Type == obj.TYPE_BRANCH {
if p.Pcond == nil {
p.Pcond = p
p.Rel = nil
p.Pc = int64(c)
- asmbuf.asmins(ctxt, p)
+ asmbuf.asmins(ctxt, s, p)
m := asmbuf.Len()
if int(p.Isize) != m {
p.Isize = uint8(m)
return
}
-func (asmbuf *AsmBuf) relput4(ctxt *obj.Link, p *obj.Prog, a *obj.Addr) {
+func (asmbuf *AsmBuf) relput4(ctxt *obj.Link, cursym *obj.LSym, p *obj.Prog, a *obj.Addr) {
var rel obj.Reloc
v := vaddr(ctxt, p, a, &rel)
if rel.Siz != 4 {
ctxt.Diag("bad reloc")
}
- r := obj.Addrel(ctxt.Cursym)
+ r := obj.Addrel(cursym)
*r = rel
r.Off = int32(p.Pc + int64(asmbuf.Len()))
}
asmbuf.PutInt32(int32(v))
}
-/*
-static void
-relput8(Prog *p, Addr *a)
-{
- vlong v;
- Reloc rel, *r;
-
- v = vaddr(ctxt, p, a, &rel);
- if(rel.siz != 0) {
- r = addrel(ctxt->cursym);
- *r = rel;
- r->siz = 8;
- r->off = p->pc + ctxt->andptr - ctxt->and;
- }
- put8(ctxt, v);
-}
-*/
func vaddr(ctxt *obj.Link, p *obj.Prog, a *obj.Addr, r *obj.Reloc) int64 {
if r != nil {
*r = obj.Reloc{}
return a.Offset
}
-func (asmbuf *AsmBuf) asmandsz(ctxt *obj.Link, p *obj.Prog, a *obj.Addr, r int, rex int, m64 int) {
+func (asmbuf *AsmBuf) asmandsz(ctxt *obj.Link, cursym *obj.LSym, p *obj.Prog, a *obj.Addr, r int, rex int, m64 int) {
var base int
var rel obj.Reloc
goto bad
}
- r := obj.Addrel(ctxt.Cursym)
+ r := obj.Addrel(cursym)
*r = rel
r.Off = int32(p.Pc + int64(asmbuf.Len()))
}
return
}
-func (asmbuf *AsmBuf) asmand(ctxt *obj.Link, p *obj.Prog, a *obj.Addr, ra *obj.Addr) {
- asmbuf.asmandsz(ctxt, p, a, reg[ra.Reg], regrex[ra.Reg], 0)
+func (asmbuf *AsmBuf) asmand(ctxt *obj.Link, cursym *obj.LSym, p *obj.Prog, a *obj.Addr, ra *obj.Addr) {
+ asmbuf.asmandsz(ctxt, cursym, p, a, reg[ra.Reg], regrex[ra.Reg], 0)
}
-func (asmbuf *AsmBuf) asmando(ctxt *obj.Link, p *obj.Prog, a *obj.Addr, o int) {
- asmbuf.asmandsz(ctxt, p, a, o, 0, 0)
+func (asmbuf *AsmBuf) asmando(ctxt *obj.Link, cursym *obj.LSym, p *obj.Prog, a *obj.Addr, o int) {
+ asmbuf.asmandsz(ctxt, cursym, p, a, o, 0, 0)
}
func bytereg(a *obj.Addr, t *uint8) {
asmbuf.Put1(opcode)
}
-func (asmbuf *AsmBuf) doasm(ctxt *obj.Link, p *obj.Prog) {
+func (asmbuf *AsmBuf) doasm(ctxt *obj.Link, cursym *obj.LSym, p *obj.Prog) {
o := opindex[p.As&obj.AMask]
if o == nil {
}
asmbuf.Put1(byte(op))
}
- asmbuf.asmand(ctxt, p, &p.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &p.From, &p.To)
case Zmb_r:
bytereg(&p.From, &p.Ft)
case Zm_r:
asmbuf.Put1(byte(op))
- asmbuf.asmand(ctxt, p, &p.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &p.From, &p.To)
case Zm2_r:
asmbuf.Put2(byte(op), o.op[z+1])
- asmbuf.asmand(ctxt, p, &p.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &p.From, &p.To)
case Zm_r_xm:
asmbuf.mediaop(ctxt, o, op, int(yt.zoffset), z)
- asmbuf.asmand(ctxt, p, &p.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &p.From, &p.To)
case Zm_r_xm_nr:
ctxt.Rexflag = 0
asmbuf.mediaop(ctxt, o, op, int(yt.zoffset), z)
- asmbuf.asmand(ctxt, p, &p.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &p.From, &p.To)
case Zm_r_i_xm:
asmbuf.mediaop(ctxt, o, op, int(yt.zoffset), z)
- asmbuf.asmand(ctxt, p, &p.From, p.From3)
+ asmbuf.asmand(ctxt, cursym, p, &p.From, p.From3)
asmbuf.Put1(byte(p.To.Offset))
case Zibm_r, Zibr_m:
asmbuf.Put1(byte(op))
}
if yt.zcase == Zibr_m {
- asmbuf.asmand(ctxt, p, &p.To, p.From3)
+ asmbuf.asmand(ctxt, cursym, p, &p.To, p.From3)
} else {
- asmbuf.asmand(ctxt, p, p.From3, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, p.From3, &p.To)
}
asmbuf.Put1(byte(p.From.Offset))
ctxt.Diag("asmins: Zaut sb type ADDR")
}
p.From.Type = obj.TYPE_MEM
- asmbuf.asmand(ctxt, p, &p.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &p.From, &p.To)
p.From.Type = obj.TYPE_ADDR
case Zm_o:
asmbuf.Put1(byte(op))
- asmbuf.asmando(ctxt, p, &p.From, int(o.op[z+1]))
+ asmbuf.asmando(ctxt, cursym, p, &p.From, int(o.op[z+1]))
case Zr_m:
asmbuf.Put1(byte(op))
- asmbuf.asmand(ctxt, p, &p.To, &p.From)
+ asmbuf.asmand(ctxt, cursym, p, &p.To, &p.From)
case Zvex_rm_v_r:
asmbuf.asmvex(ctxt, &p.From, p.From3, &p.To, o.op[z], o.op[z+1])
- asmbuf.asmand(ctxt, p, &p.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &p.From, &p.To)
case Zvex_i_r_v:
asmbuf.asmvex(ctxt, p.From3, &p.To, nil, o.op[z], o.op[z+1])
case Zvex_i_rm_v_r:
asmbuf.asmvex(ctxt, &p.From, p.From3, &p.To, o.op[z], o.op[z+1])
- asmbuf.asmand(ctxt, p, &p.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &p.From, &p.To)
asmbuf.Put1(byte(p.From3.Offset))
case Zvex_i_rm_r:
asmbuf.asmvex(ctxt, p.From3, nil, &p.To, o.op[z], o.op[z+1])
- asmbuf.asmand(ctxt, p, p.From3, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, p.From3, &p.To)
asmbuf.Put1(byte(p.From.Offset))
case Zvex_v_rm_r:
asmbuf.asmvex(ctxt, p.From3, &p.From, &p.To, o.op[z], o.op[z+1])
- asmbuf.asmand(ctxt, p, p.From3, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, p.From3, &p.To)
case Zvex_r_v_rm:
asmbuf.asmvex(ctxt, &p.To, p.From3, &p.From, o.op[z], o.op[z+1])
- asmbuf.asmand(ctxt, p, &p.To, &p.From)
+ asmbuf.asmand(ctxt, cursym, p, &p.To, &p.From)
case Zr_m_xm:
asmbuf.mediaop(ctxt, o, op, int(yt.zoffset), z)
- asmbuf.asmand(ctxt, p, &p.To, &p.From)
+ asmbuf.asmand(ctxt, cursym, p, &p.To, &p.From)
case Zr_m_xm_nr:
ctxt.Rexflag = 0
asmbuf.mediaop(ctxt, o, op, int(yt.zoffset), z)
- asmbuf.asmand(ctxt, p, &p.To, &p.From)
+ asmbuf.asmand(ctxt, cursym, p, &p.To, &p.From)
case Zo_m:
asmbuf.Put1(byte(op))
- asmbuf.asmando(ctxt, p, &p.To, int(o.op[z+1]))
+ asmbuf.asmando(ctxt, cursym, p, &p.To, int(o.op[z+1]))
case Zcallindreg:
- r = obj.Addrel(ctxt.Cursym)
+ r = obj.Addrel(cursym)
r.Off = int32(p.Pc)
r.Type = obj.R_CALLIND
r.Siz = 0
case Zo_m64:
asmbuf.Put1(byte(op))
- asmbuf.asmandsz(ctxt, p, &p.To, int(o.op[z+1]), 0, 1)
+ asmbuf.asmandsz(ctxt, cursym, p, &p.To, int(o.op[z+1]), 0, 1)
case Zm_ibo:
asmbuf.Put1(byte(op))
- asmbuf.asmando(ctxt, p, &p.From, int(o.op[z+1]))
+ asmbuf.asmando(ctxt, cursym, p, &p.From, int(o.op[z+1]))
asmbuf.Put1(byte(vaddr(ctxt, p, &p.To, nil)))
case Zibo_m:
asmbuf.Put1(byte(op))
- asmbuf.asmando(ctxt, p, &p.To, int(o.op[z+1]))
+ asmbuf.asmando(ctxt, cursym, p, &p.To, int(o.op[z+1]))
asmbuf.Put1(byte(vaddr(ctxt, p, &p.From, nil)))
case Zibo_m_xm:
z = asmbuf.mediaop(ctxt, o, op, int(yt.zoffset), z)
- asmbuf.asmando(ctxt, p, &p.To, int(o.op[z+1]))
+ asmbuf.asmando(ctxt, cursym, p, &p.To, int(o.op[z+1]))
asmbuf.Put1(byte(vaddr(ctxt, p, &p.From, nil)))
case Z_ib, Zib_:
v = vaddr(ctxt, p, &p.From, nil)
asmbuf.PutInt16(int16(v))
} else {
- asmbuf.relput4(ctxt, p, &p.From)
+ asmbuf.relput4(ctxt, cursym, p, &p.From)
}
case Zo_iw:
ctxt.Rexflag |= regrex[p.To.Reg] & Rxb
asmbuf.Put1(byte(0xb8 + reg[p.To.Reg]))
if rel.Type != 0 {
- r = obj.Addrel(ctxt.Cursym)
+ r = obj.Addrel(cursym)
*r = rel
r.Off = int32(p.Pc + int64(asmbuf.Len()))
}
//p->mark |= 0100;
//print("sign: %llux %v\n", v, p);
asmbuf.Put1(0xc7)
- asmbuf.asmando(ctxt, p, &p.To, 0)
+ asmbuf.asmando(ctxt, cursym, p, &p.To, 0)
asmbuf.PutInt32(int32(v)) // need all 8
} else {
ctxt.Rexflag |= regrex[p.To.Reg] & Rxb
asmbuf.Put1(byte(op + reg[p.To.Reg]))
if rel.Type != 0 {
- r = obj.Addrel(ctxt.Cursym)
+ r = obj.Addrel(cursym)
*r = rel
r.Off = int32(p.Pc + int64(asmbuf.Len()))
}
case Zib_rr:
asmbuf.Put1(byte(op))
- asmbuf.asmand(ctxt, p, &p.To, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &p.To, &p.To)
asmbuf.Put1(byte(vaddr(ctxt, p, &p.From, nil)))
case Z_il, Zil_:
v = vaddr(ctxt, p, a, nil)
asmbuf.PutInt16(int16(v))
} else {
- asmbuf.relput4(ctxt, p, a)
+ asmbuf.relput4(ctxt, cursym, p, a)
}
case Zm_ilo, Zilo_m:
asmbuf.Put1(byte(op))
if yt.zcase == Zilo_m {
a = &p.From
- asmbuf.asmando(ctxt, p, &p.To, int(o.op[z+1]))
+ asmbuf.asmando(ctxt, cursym, p, &p.To, int(o.op[z+1]))
} else {
a = &p.To
- asmbuf.asmando(ctxt, p, &p.From, int(o.op[z+1]))
+ asmbuf.asmando(ctxt, cursym, p, &p.From, int(o.op[z+1]))
}
if o.prefix == Pe {
v = vaddr(ctxt, p, a, nil)
asmbuf.PutInt16(int16(v))
} else {
- asmbuf.relput4(ctxt, p, a)
+ asmbuf.relput4(ctxt, cursym, p, a)
}
case Zil_rr:
asmbuf.Put1(byte(op))
- asmbuf.asmand(ctxt, p, &p.To, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &p.To, &p.To)
if o.prefix == Pe {
v = vaddr(ctxt, p, &p.From, nil)
asmbuf.PutInt16(int16(v))
} else {
- asmbuf.relput4(ctxt, p, &p.From)
+ asmbuf.relput4(ctxt, cursym, p, &p.From)
}
case Z_rp:
case Zclr:
ctxt.Rexflag &^= Pw
asmbuf.Put1(byte(op))
- asmbuf.asmand(ctxt, p, &p.To, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &p.To, &p.To)
case Zcallcon, Zjmpcon:
if yt.zcase == Zcallcon {
} else {
asmbuf.Put1(o.op[z+1])
}
- r = obj.Addrel(ctxt.Cursym)
+ r = obj.Addrel(cursym)
r.Off = int32(p.Pc + int64(asmbuf.Len()))
r.Type = obj.R_PCREL
r.Siz = 4
case Zcallind:
asmbuf.Put2(byte(op), o.op[z+1])
- r = obj.Addrel(ctxt.Cursym)
+ r = obj.Addrel(cursym)
r.Off = int32(p.Pc + int64(asmbuf.Len()))
if p.Mode == 64 {
r.Type = obj.R_PCREL
asmbuf.Put(bpduff1)
}
asmbuf.Put1(byte(op))
- r = obj.Addrel(ctxt.Cursym)
+ r = obj.Addrel(cursym)
r.Off = int32(p.Pc + int64(asmbuf.Len()))
r.Sym = p.To.Sym
r.Add = p.To.Offset
}
asmbuf.Put1(o.op[z+1])
- r = obj.Addrel(ctxt.Cursym)
+ r = obj.Addrel(cursym)
r.Off = int32(p.Pc + int64(asmbuf.Len()))
r.Sym = p.To.Sym
r.Type = obj.R_PCREL
v = vaddr(ctxt, p, &p.From, &rel)
if rel.Siz != 0 {
rel.Siz = uint8(op)
- r = obj.Addrel(ctxt.Cursym)
+ r = obj.Addrel(cursym)
*r = rel
r.Off = int32(p.Pc + int64(asmbuf.Len()))
}
case 1: /* r,m */
asmbuf.Put1(t[0])
- asmbuf.asmando(ctxt, p, &p.To, int(t[1]))
+ asmbuf.asmando(ctxt, cursym, p, &p.To, int(t[1]))
case 2: /* m,r */
asmbuf.Put1(t[0])
- asmbuf.asmando(ctxt, p, &p.From, int(t[1]))
+ asmbuf.asmando(ctxt, cursym, p, &p.From, int(t[1]))
case 3: /* r,m - 2op */
asmbuf.Put2(t[0], t[1])
- asmbuf.asmando(ctxt, p, &p.To, int(t[2]))
+ asmbuf.asmando(ctxt, cursym, p, &p.To, int(t[2]))
ctxt.Rexflag |= regrex[p.From.Reg] & (Rxr | 0x40)
case 4: /* m,r - 2op */
asmbuf.Put2(t[0], t[1])
- asmbuf.asmando(ctxt, p, &p.From, int(t[2]))
+ asmbuf.asmando(ctxt, cursym, p, &p.From, int(t[2]))
ctxt.Rexflag |= regrex[p.To.Reg] & (Rxr | 0x40)
case 5: /* load full pointer, trash heap */
asmbuf.Put2(0x0f, 0xb5)
}
- asmbuf.asmand(ctxt, p, &p.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &p.From, &p.To)
case 6: /* double shift */
if t[0] == Pw {
case obj.TYPE_CONST:
asmbuf.Put2(0x0f, t[0])
- asmbuf.asmandsz(ctxt, p, &p.To, reg[p.From3.Reg], regrex[p.From3.Reg], 0)
+ asmbuf.asmandsz(ctxt, cursym, p, &p.To, reg[p.From3.Reg], regrex[p.From3.Reg], 0)
asmbuf.Put1(byte(p.From.Offset))
case obj.TYPE_REG:
case REG_CL, REG_CX:
asmbuf.Put2(0x0f, t[1])
- asmbuf.asmandsz(ctxt, p, &p.To, reg[p.From3.Reg], regrex[p.From3.Reg], 0)
+ asmbuf.asmandsz(ctxt, cursym, p, &p.To, reg[p.From3.Reg], regrex[p.From3.Reg], 0)
}
}
// instruction.
dst := p.To.Reg
asmbuf.Put1(0xe8)
- r = obj.Addrel(ctxt.Cursym)
+ r = obj.Addrel(cursym)
r.Off = int32(p.Pc + int64(asmbuf.Len()))
r.Type = obj.R_CALL
r.Siz = 4
asmbuf.PutInt32(0)
asmbuf.Put2(0x8B, byte(2<<6|reg[dst]|(reg[dst]<<3)))
- r = obj.Addrel(ctxt.Cursym)
+ r = obj.Addrel(cursym)
r.Off = int32(p.Pc + int64(asmbuf.Len()))
r.Type = obj.R_TLS_IE
r.Siz = 4
pp.From.Scale = 0
asmbuf.Put2(0x65, // GS
0x8B)
- asmbuf.asmand(ctxt, p, &pp.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &pp.From, &p.To)
}
case obj.Hplan9:
if ctxt.Plan9privates == nil {
pp.From.Offset = 0
pp.From.Index = REG_NONE
asmbuf.Put1(0x8B)
- asmbuf.asmand(ctxt, p, &pp.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &pp.From, &p.To)
case obj.Hwindows, obj.Hwindowsgui:
// Windows TLS base is always 0x14(FS).
pp.From.Scale = 0
asmbuf.Put2(0x64, // FS
0x8B)
- asmbuf.asmand(ctxt, p, &pp.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &pp.From, &p.To)
}
break
}
ctxt.Rexflag = Pw | (regrex[p.To.Reg] & Rxr)
asmbuf.Put2(0x8B, byte(0x05|(reg[p.To.Reg]<<3)))
- r = obj.Addrel(ctxt.Cursym)
+ r = obj.Addrel(cursym)
r.Off = int32(p.Pc + int64(asmbuf.Len()))
r.Type = obj.R_TLS_IE
r.Siz = 4
pp.From.Index = REG_NONE
ctxt.Rexflag |= Pw
asmbuf.Put1(0x8B)
- asmbuf.asmand(ctxt, p, &pp.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &pp.From, &p.To)
case obj.Hsolaris: // TODO(rsc): Delete Hsolaris from list. Should not use this code. See progedit in obj6.c.
// TLS base is 0(FS).
ctxt.Rexflag |= Pw
asmbuf.Put2(0x64, // FS
0x8B)
- asmbuf.asmand(ctxt, p, &pp.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &pp.From, &p.To)
case obj.Hwindows, obj.Hwindowsgui:
// Windows TLS base is always 0x28(GS).
ctxt.Rexflag |= Pw
asmbuf.Put2(0x65, // GS
0x8B)
- asmbuf.asmand(ctxt, p, &pp.From, &p.To)
+ asmbuf.asmand(ctxt, cursym, p, &pp.From, &p.To)
}
}
return
breg := byteswapreg(ctxt, &p.To)
if breg != REG_AX {
asmbuf.Put1(0x87) // xchg lhs,bx
- asmbuf.asmando(ctxt, p, &p.From, reg[breg])
+ asmbuf.asmando(ctxt, cursym, p, &p.From, reg[breg])
subreg(&pp, z, breg)
- asmbuf.doasm(ctxt, &pp)
+ asmbuf.doasm(ctxt, cursym, &pp)
asmbuf.Put1(0x87) // xchg lhs,bx
- asmbuf.asmando(ctxt, p, &p.From, reg[breg])
+ asmbuf.asmando(ctxt, cursym, p, &p.From, reg[breg])
} else {
asmbuf.Put1(byte(0x90 + reg[z])) // xchg lsh,ax
subreg(&pp, z, REG_AX)
- asmbuf.doasm(ctxt, &pp)
+ asmbuf.doasm(ctxt, cursym, &pp)
asmbuf.Put1(byte(0x90 + reg[z])) // xchg lsh,ax
}
return
// We certainly don't want to exchange
// with AX if the op is MUL or DIV.
asmbuf.Put1(0x87) // xchg lhs,bx
- asmbuf.asmando(ctxt, p, &p.From, reg[REG_BX])
+ asmbuf.asmando(ctxt, cursym, p, &p.From, reg[REG_BX])
subreg(&pp, z, REG_BX)
- asmbuf.doasm(ctxt, &pp)
+ asmbuf.doasm(ctxt, cursym, &pp)
asmbuf.Put1(0x87) // xchg lhs,bx
- asmbuf.asmando(ctxt, p, &p.From, reg[REG_BX])
+ asmbuf.asmando(ctxt, cursym, p, &p.From, reg[REG_BX])
} else {
asmbuf.Put1(byte(0x90 + reg[z])) // xchg lsh,ax
subreg(&pp, z, REG_AX)
- asmbuf.doasm(ctxt, &pp)
+ asmbuf.doasm(ctxt, cursym, &pp)
asmbuf.Put1(byte(0x90 + reg[z])) // xchg lsh,ax
}
return
breg := byteswapreg(ctxt, &p.From)
if breg != REG_AX {
asmbuf.Put1(0x87) //xchg rhs,bx
- asmbuf.asmando(ctxt, p, &p.To, reg[breg])
+ asmbuf.asmando(ctxt, cursym, p, &p.To, reg[breg])
subreg(&pp, z, breg)
- asmbuf.doasm(ctxt, &pp)
+ asmbuf.doasm(ctxt, cursym, &pp)
asmbuf.Put1(0x87) // xchg rhs,bx
- asmbuf.asmando(ctxt, p, &p.To, reg[breg])
+ asmbuf.asmando(ctxt, cursym, p, &p.To, reg[breg])
} else {
asmbuf.Put1(byte(0x90 + reg[z])) // xchg rsh,ax
subreg(&pp, z, REG_AX)
- asmbuf.doasm(ctxt, &pp)
+ asmbuf.doasm(ctxt, cursym, &pp)
asmbuf.Put1(byte(0x90 + reg[z])) // xchg rsh,ax
}
return
if isax(&p.From) {
asmbuf.Put1(0x87) // xchg rhs,bx
- asmbuf.asmando(ctxt, p, &p.To, reg[REG_BX])
+ asmbuf.asmando(ctxt, cursym, p, &p.To, reg[REG_BX])
subreg(&pp, z, REG_BX)
- asmbuf.doasm(ctxt, &pp)
+ asmbuf.doasm(ctxt, cursym, &pp)
asmbuf.Put1(0x87) // xchg rhs,bx
- asmbuf.asmando(ctxt, p, &p.To, reg[REG_BX])
+ asmbuf.asmando(ctxt, cursym, p, &p.To, reg[REG_BX])
} else {
asmbuf.Put1(byte(0x90 + reg[z])) // xchg rsh,ax
subreg(&pp, z, REG_AX)
- asmbuf.doasm(ctxt, &pp)
+ asmbuf.doasm(ctxt, cursym, &pp)
asmbuf.Put1(byte(0x90 + reg[z])) // xchg rsh,ax
}
return
asmbuf.Put2(0x89, byte(3<<6|reg<<3|reg))
}
-func (asmbuf *AsmBuf) asmins(ctxt *obj.Link, p *obj.Prog) {
+func (asmbuf *AsmBuf) asmins(ctxt *obj.Link, cursym *obj.LSym, p *obj.Prog) {
asmbuf.Reset()
if ctxt.Headtype == obj.Hnacl && p.Mode == 32 {
ctxt.Rexflag = 0
ctxt.Vexflag = 0
mark := asmbuf.Len()
- asmbuf.doasm(ctxt, p)
+ asmbuf.doasm(ctxt, cursym, p)
if ctxt.Rexflag != 0 && ctxt.Vexflag == 0 {
/*
* as befits the whole approach of the architecture,
}
n := asmbuf.Len()
- for i := len(ctxt.Cursym.R) - 1; i >= 0; i-- {
- r := &ctxt.Cursym.R[i]
+ for i := len(cursym.R) - 1; i >= 0; i-- {
+ r := &cursym.R[i]
if int64(r.Off) < p.Pc {
break
}