src/cmd/internal/obj/mips/obj0.go | 18 ++++++++++-------- diff --git a/src/cmd/internal/obj/mips/obj0.go b/src/cmd/internal/obj/mips/obj0.go index ae9d1282a4accf5a3137094e259844b17d25b2a8..9f689929d2df83152287ddaab4e55d8e9c751141 100644 --- a/src/cmd/internal/obj/mips/obj0.go +++ b/src/cmd/internal/obj/mips/obj0.go @@ -531,20 +531,22 @@ q.Link = p.Link p.Link = q p1 = q.Link - var regOff int16 + var addrOff int64 if c.ctxt.Arch.ByteOrder == binary.BigEndian { - regOff = 1 // load odd register first + addrOff = 4 // swap load/save order } if p.From.Type == obj.TYPE_MEM { reg := REG_F0 + (p.To.Reg-REG_F0)&^1 - p.To.Reg = reg + regOff - q.To.Reg = reg + 1 - regOff - q.From.Offset += 4 + p.To.Reg = reg + q.To.Reg = reg + 1 + p.From.Offset += addrOff + q.From.Offset += 4 - addrOff } else if p.To.Type == obj.TYPE_MEM { reg := REG_F0 + (p.From.Reg-REG_F0)&^1 - p.From.Reg = reg + regOff - q.From.Reg = reg + 1 - regOff - q.To.Offset += 4 + p.From.Reg = reg + q.From.Reg = reg + 1 + p.To.Offset += addrOff + q.To.Offset += 4 - addrOff } } }