Commit e6198542 authored by Michael Munday's avatar Michael Munday

cmd/internal/obj/s390x: remove param field from optab

The param field isn't useful, we can just use REGSP instead.

Change-Id: I2ac68131c390209cc84e43aa7620ccbf5ae69120
Reviewed-on: https://go-review.googlesource.com/c/go/+/171725
Run-TryBot: Michael Munday <mike.munday@ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent f248cd3a
...@@ -61,356 +61,355 @@ type Optab struct { ...@@ -61,356 +61,355 @@ type Optab struct {
a3 uint8 // From3 a3 uint8 // From3
a4 uint8 // To a4 uint8 // To
type_ int8 type_ int8
param int16 // REGSP for auto variables
} }
var optab = []Optab{ var optab = []Optab{
// instruction, From, Reg, From3, To, type, param // instruction, From, Reg, From3, To, type
Optab{obj.ATEXT, C_ADDR, C_NONE, C_NONE, C_TEXTSIZE, 0, 0}, Optab{obj.ATEXT, C_ADDR, C_NONE, C_NONE, C_TEXTSIZE, 0},
Optab{obj.ATEXT, C_ADDR, C_NONE, C_LCON, C_TEXTSIZE, 0, 0}, Optab{obj.ATEXT, C_ADDR, C_NONE, C_LCON, C_TEXTSIZE, 0},
// move register // move register
Optab{AMOVD, C_REG, C_NONE, C_NONE, C_REG, 1, 0}, Optab{AMOVD, C_REG, C_NONE, C_NONE, C_REG, 1},
Optab{AMOVB, C_REG, C_NONE, C_NONE, C_REG, 1, 0}, Optab{AMOVB, C_REG, C_NONE, C_NONE, C_REG, 1},
Optab{AMOVBZ, C_REG, C_NONE, C_NONE, C_REG, 1, 0}, Optab{AMOVBZ, C_REG, C_NONE, C_NONE, C_REG, 1},
Optab{AMOVW, C_REG, C_NONE, C_NONE, C_REG, 1, 0}, Optab{AMOVW, C_REG, C_NONE, C_NONE, C_REG, 1},
Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_REG, 1, 0}, Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_REG, 1},
Optab{AFMOVD, C_FREG, C_NONE, C_NONE, C_FREG, 1, 0}, Optab{AFMOVD, C_FREG, C_NONE, C_NONE, C_FREG, 1},
Optab{AMOVDBR, C_REG, C_NONE, C_NONE, C_REG, 1, 0}, Optab{AMOVDBR, C_REG, C_NONE, C_NONE, C_REG, 1},
// load constant // load constant
Optab{AMOVD, C_LACON, C_NONE, C_NONE, C_REG, 26, REGSP}, Optab{AMOVD, C_LACON, C_NONE, C_NONE, C_REG, 26},
Optab{AMOVW, C_LACON, C_NONE, C_NONE, C_REG, 26, REGSP}, Optab{AMOVW, C_LACON, C_NONE, C_NONE, C_REG, 26},
Optab{AMOVWZ, C_LACON, C_NONE, C_NONE, C_REG, 26, REGSP}, Optab{AMOVWZ, C_LACON, C_NONE, C_NONE, C_REG, 26},
Optab{AMOVD, C_DCON, C_NONE, C_NONE, C_REG, 3, 0}, Optab{AMOVD, C_DCON, C_NONE, C_NONE, C_REG, 3},
Optab{AMOVW, C_DCON, C_NONE, C_NONE, C_REG, 3, 0}, Optab{AMOVW, C_DCON, C_NONE, C_NONE, C_REG, 3},
Optab{AMOVWZ, C_DCON, C_NONE, C_NONE, C_REG, 3, 0}, Optab{AMOVWZ, C_DCON, C_NONE, C_NONE, C_REG, 3},
Optab{AMOVB, C_DCON, C_NONE, C_NONE, C_REG, 3, 0}, Optab{AMOVB, C_DCON, C_NONE, C_NONE, C_REG, 3},
Optab{AMOVBZ, C_DCON, C_NONE, C_NONE, C_REG, 3, 0}, Optab{AMOVBZ, C_DCON, C_NONE, C_NONE, C_REG, 3},
// store constant // store constant
Optab{AMOVD, C_SCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, Optab{AMOVD, C_SCON, C_NONE, C_NONE, C_LAUTO, 72},
Optab{AMOVD, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, Optab{AMOVD, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72},
Optab{AMOVW, C_SCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, Optab{AMOVW, C_SCON, C_NONE, C_NONE, C_LAUTO, 72},
Optab{AMOVW, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, Optab{AMOVW, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72},
Optab{AMOVWZ, C_SCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, Optab{AMOVWZ, C_SCON, C_NONE, C_NONE, C_LAUTO, 72},
Optab{AMOVWZ, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, Optab{AMOVWZ, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72},
Optab{AMOVB, C_SCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, Optab{AMOVB, C_SCON, C_NONE, C_NONE, C_LAUTO, 72},
Optab{AMOVB, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, Optab{AMOVB, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72},
Optab{AMOVBZ, C_SCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, Optab{AMOVBZ, C_SCON, C_NONE, C_NONE, C_LAUTO, 72},
Optab{AMOVBZ, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, Optab{AMOVBZ, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72},
Optab{AMOVD, C_SCON, C_NONE, C_NONE, C_LOREG, 72, 0}, Optab{AMOVD, C_SCON, C_NONE, C_NONE, C_LOREG, 72},
Optab{AMOVD, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72, 0}, Optab{AMOVD, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72},
Optab{AMOVW, C_SCON, C_NONE, C_NONE, C_LOREG, 72, 0}, Optab{AMOVW, C_SCON, C_NONE, C_NONE, C_LOREG, 72},
Optab{AMOVW, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72, 0}, Optab{AMOVW, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72},
Optab{AMOVWZ, C_SCON, C_NONE, C_NONE, C_LOREG, 72, 0}, Optab{AMOVWZ, C_SCON, C_NONE, C_NONE, C_LOREG, 72},
Optab{AMOVWZ, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72, 0}, Optab{AMOVWZ, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72},
Optab{AMOVB, C_SCON, C_NONE, C_NONE, C_LOREG, 72, 0}, Optab{AMOVB, C_SCON, C_NONE, C_NONE, C_LOREG, 72},
Optab{AMOVB, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72, 0}, Optab{AMOVB, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72},
Optab{AMOVBZ, C_SCON, C_NONE, C_NONE, C_LOREG, 72, 0}, Optab{AMOVBZ, C_SCON, C_NONE, C_NONE, C_LOREG, 72},
Optab{AMOVBZ, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72, 0}, Optab{AMOVBZ, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72},
// store // store
Optab{AMOVD, C_REG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, Optab{AMOVD, C_REG, C_NONE, C_NONE, C_LAUTO, 35},
Optab{AMOVW, C_REG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, Optab{AMOVW, C_REG, C_NONE, C_NONE, C_LAUTO, 35},
Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_LAUTO, 35},
Optab{AMOVBZ, C_REG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, Optab{AMOVBZ, C_REG, C_NONE, C_NONE, C_LAUTO, 35},
Optab{AMOVB, C_REG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, Optab{AMOVB, C_REG, C_NONE, C_NONE, C_LAUTO, 35},
Optab{AMOVDBR, C_REG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, Optab{AMOVDBR, C_REG, C_NONE, C_NONE, C_LAUTO, 35},
Optab{AMOVHBR, C_REG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, Optab{AMOVHBR, C_REG, C_NONE, C_NONE, C_LAUTO, 35},
Optab{AMOVD, C_REG, C_NONE, C_NONE, C_LOREG, 35, 0}, Optab{AMOVD, C_REG, C_NONE, C_NONE, C_LOREG, 35},
Optab{AMOVW, C_REG, C_NONE, C_NONE, C_LOREG, 35, 0}, Optab{AMOVW, C_REG, C_NONE, C_NONE, C_LOREG, 35},
Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_LOREG, 35, 0}, Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_LOREG, 35},
Optab{AMOVBZ, C_REG, C_NONE, C_NONE, C_LOREG, 35, 0}, Optab{AMOVBZ, C_REG, C_NONE, C_NONE, C_LOREG, 35},
Optab{AMOVB, C_REG, C_NONE, C_NONE, C_LOREG, 35, 0}, Optab{AMOVB, C_REG, C_NONE, C_NONE, C_LOREG, 35},
Optab{AMOVDBR, C_REG, C_NONE, C_NONE, C_LOREG, 35, 0}, Optab{AMOVDBR, C_REG, C_NONE, C_NONE, C_LOREG, 35},
Optab{AMOVHBR, C_REG, C_NONE, C_NONE, C_LOREG, 35, 0}, Optab{AMOVHBR, C_REG, C_NONE, C_NONE, C_LOREG, 35},
Optab{AMOVD, C_REG, C_NONE, C_NONE, C_ADDR, 74, 0}, Optab{AMOVD, C_REG, C_NONE, C_NONE, C_ADDR, 74},
Optab{AMOVW, C_REG, C_NONE, C_NONE, C_ADDR, 74, 0}, Optab{AMOVW, C_REG, C_NONE, C_NONE, C_ADDR, 74},
Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_ADDR, 74, 0}, Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_ADDR, 74},
Optab{AMOVBZ, C_REG, C_NONE, C_NONE, C_ADDR, 74, 0}, Optab{AMOVBZ, C_REG, C_NONE, C_NONE, C_ADDR, 74},
Optab{AMOVB, C_REG, C_NONE, C_NONE, C_ADDR, 74, 0}, Optab{AMOVB, C_REG, C_NONE, C_NONE, C_ADDR, 74},
// load // load
Optab{AMOVD, C_LAUTO, C_NONE, C_NONE, C_REG, 36, REGSP}, Optab{AMOVD, C_LAUTO, C_NONE, C_NONE, C_REG, 36},
Optab{AMOVW, C_LAUTO, C_NONE, C_NONE, C_REG, 36, REGSP}, Optab{AMOVW, C_LAUTO, C_NONE, C_NONE, C_REG, 36},
Optab{AMOVWZ, C_LAUTO, C_NONE, C_NONE, C_REG, 36, REGSP}, Optab{AMOVWZ, C_LAUTO, C_NONE, C_NONE, C_REG, 36},
Optab{AMOVBZ, C_LAUTO, C_NONE, C_NONE, C_REG, 36, REGSP}, Optab{AMOVBZ, C_LAUTO, C_NONE, C_NONE, C_REG, 36},
Optab{AMOVB, C_LAUTO, C_NONE, C_NONE, C_REG, 36, REGSP}, Optab{AMOVB, C_LAUTO, C_NONE, C_NONE, C_REG, 36},
Optab{AMOVDBR, C_LAUTO, C_NONE, C_NONE, C_REG, 36, REGSP}, Optab{AMOVDBR, C_LAUTO, C_NONE, C_NONE, C_REG, 36},
Optab{AMOVHBR, C_LAUTO, C_NONE, C_NONE, C_REG, 36, REGSP}, Optab{AMOVHBR, C_LAUTO, C_NONE, C_NONE, C_REG, 36},
Optab{AMOVD, C_LOREG, C_NONE, C_NONE, C_REG, 36, 0}, Optab{AMOVD, C_LOREG, C_NONE, C_NONE, C_REG, 36},
Optab{AMOVW, C_LOREG, C_NONE, C_NONE, C_REG, 36, 0}, Optab{AMOVW, C_LOREG, C_NONE, C_NONE, C_REG, 36},
Optab{AMOVWZ, C_LOREG, C_NONE, C_NONE, C_REG, 36, 0}, Optab{AMOVWZ, C_LOREG, C_NONE, C_NONE, C_REG, 36},
Optab{AMOVBZ, C_LOREG, C_NONE, C_NONE, C_REG, 36, 0}, Optab{AMOVBZ, C_LOREG, C_NONE, C_NONE, C_REG, 36},
Optab{AMOVB, C_LOREG, C_NONE, C_NONE, C_REG, 36, 0}, Optab{AMOVB, C_LOREG, C_NONE, C_NONE, C_REG, 36},
Optab{AMOVDBR, C_LOREG, C_NONE, C_NONE, C_REG, 36, 0}, Optab{AMOVDBR, C_LOREG, C_NONE, C_NONE, C_REG, 36},
Optab{AMOVHBR, C_LOREG, C_NONE, C_NONE, C_REG, 36, 0}, Optab{AMOVHBR, C_LOREG, C_NONE, C_NONE, C_REG, 36},
Optab{AMOVD, C_ADDR, C_NONE, C_NONE, C_REG, 75, 0}, Optab{AMOVD, C_ADDR, C_NONE, C_NONE, C_REG, 75},
Optab{AMOVW, C_ADDR, C_NONE, C_NONE, C_REG, 75, 0}, Optab{AMOVW, C_ADDR, C_NONE, C_NONE, C_REG, 75},
Optab{AMOVWZ, C_ADDR, C_NONE, C_NONE, C_REG, 75, 0}, Optab{AMOVWZ, C_ADDR, C_NONE, C_NONE, C_REG, 75},
Optab{AMOVBZ, C_ADDR, C_NONE, C_NONE, C_REG, 75, 0}, Optab{AMOVBZ, C_ADDR, C_NONE, C_NONE, C_REG, 75},
Optab{AMOVB, C_ADDR, C_NONE, C_NONE, C_REG, 75, 0}, Optab{AMOVB, C_ADDR, C_NONE, C_NONE, C_REG, 75},
// interlocked load and op // interlocked load and op
Optab{ALAAG, C_REG, C_REG, C_NONE, C_LOREG, 99, 0}, Optab{ALAAG, C_REG, C_REG, C_NONE, C_LOREG, 99},
// integer arithmetic // integer arithmetic
Optab{AADD, C_REG, C_REG, C_NONE, C_REG, 2, 0}, Optab{AADD, C_REG, C_REG, C_NONE, C_REG, 2},
Optab{AADD, C_REG, C_NONE, C_NONE, C_REG, 2, 0}, Optab{AADD, C_REG, C_NONE, C_NONE, C_REG, 2},
Optab{AADD, C_LCON, C_REG, C_NONE, C_REG, 22, 0}, Optab{AADD, C_LCON, C_REG, C_NONE, C_REG, 22},
Optab{AADD, C_LCON, C_NONE, C_NONE, C_REG, 22, 0}, Optab{AADD, C_LCON, C_NONE, C_NONE, C_REG, 22},
Optab{AADD, C_LOREG, C_NONE, C_NONE, C_REG, 12, 0}, Optab{AADD, C_LOREG, C_NONE, C_NONE, C_REG, 12},
Optab{AADD, C_LAUTO, C_NONE, C_NONE, C_REG, 12, REGSP}, Optab{AADD, C_LAUTO, C_NONE, C_NONE, C_REG, 12},
Optab{ASUB, C_LCON, C_REG, C_NONE, C_REG, 21, 0}, Optab{ASUB, C_LCON, C_REG, C_NONE, C_REG, 21},
Optab{ASUB, C_LCON, C_NONE, C_NONE, C_REG, 21, 0}, Optab{ASUB, C_LCON, C_NONE, C_NONE, C_REG, 21},
Optab{ASUB, C_LOREG, C_NONE, C_NONE, C_REG, 12, 0}, Optab{ASUB, C_LOREG, C_NONE, C_NONE, C_REG, 12},
Optab{ASUB, C_LAUTO, C_NONE, C_NONE, C_REG, 12, REGSP}, Optab{ASUB, C_LAUTO, C_NONE, C_NONE, C_REG, 12},
Optab{AMULHD, C_REG, C_NONE, C_NONE, C_REG, 4, 0}, Optab{AMULHD, C_REG, C_NONE, C_NONE, C_REG, 4},
Optab{AMULHD, C_REG, C_REG, C_NONE, C_REG, 4, 0}, Optab{AMULHD, C_REG, C_REG, C_NONE, C_REG, 4},
Optab{ADIVW, C_REG, C_REG, C_NONE, C_REG, 2, 0}, Optab{ADIVW, C_REG, C_REG, C_NONE, C_REG, 2},
Optab{ADIVW, C_REG, C_NONE, C_NONE, C_REG, 2, 0}, Optab{ADIVW, C_REG, C_NONE, C_NONE, C_REG, 2},
Optab{ASUB, C_REG, C_REG, C_NONE, C_REG, 10, 0}, Optab{ASUB, C_REG, C_REG, C_NONE, C_REG, 10},
Optab{ASUB, C_REG, C_NONE, C_NONE, C_REG, 10, 0}, Optab{ASUB, C_REG, C_NONE, C_NONE, C_REG, 10},
Optab{ANEG, C_REG, C_NONE, C_NONE, C_REG, 47, 0}, Optab{ANEG, C_REG, C_NONE, C_NONE, C_REG, 47},
Optab{ANEG, C_NONE, C_NONE, C_NONE, C_REG, 47, 0}, Optab{ANEG, C_NONE, C_NONE, C_NONE, C_REG, 47},
// integer logical // integer logical
Optab{AAND, C_REG, C_REG, C_NONE, C_REG, 6, 0}, Optab{AAND, C_REG, C_REG, C_NONE, C_REG, 6},
Optab{AAND, C_REG, C_NONE, C_NONE, C_REG, 6, 0}, Optab{AAND, C_REG, C_NONE, C_NONE, C_REG, 6},
Optab{AAND, C_LCON, C_NONE, C_NONE, C_REG, 23, 0}, Optab{AAND, C_LCON, C_NONE, C_NONE, C_REG, 23},
Optab{AAND, C_LOREG, C_NONE, C_NONE, C_REG, 12, 0}, Optab{AAND, C_LOREG, C_NONE, C_NONE, C_REG, 12},
Optab{AAND, C_LAUTO, C_NONE, C_NONE, C_REG, 12, REGSP}, Optab{AAND, C_LAUTO, C_NONE, C_NONE, C_REG, 12},
Optab{AANDW, C_REG, C_REG, C_NONE, C_REG, 6, 0}, Optab{AANDW, C_REG, C_REG, C_NONE, C_REG, 6},
Optab{AANDW, C_REG, C_NONE, C_NONE, C_REG, 6, 0}, Optab{AANDW, C_REG, C_NONE, C_NONE, C_REG, 6},
Optab{AANDW, C_LCON, C_NONE, C_NONE, C_REG, 24, 0}, Optab{AANDW, C_LCON, C_NONE, C_NONE, C_REG, 24},
Optab{AANDW, C_LOREG, C_NONE, C_NONE, C_REG, 12, 0}, Optab{AANDW, C_LOREG, C_NONE, C_NONE, C_REG, 12},
Optab{AANDW, C_LAUTO, C_NONE, C_NONE, C_REG, 12, REGSP}, Optab{AANDW, C_LAUTO, C_NONE, C_NONE, C_REG, 12},
Optab{ASLD, C_REG, C_NONE, C_NONE, C_REG, 7, 0}, Optab{ASLD, C_REG, C_NONE, C_NONE, C_REG, 7},
Optab{ASLD, C_REG, C_REG, C_NONE, C_REG, 7, 0}, Optab{ASLD, C_REG, C_REG, C_NONE, C_REG, 7},
Optab{ASLD, C_SCON, C_REG, C_NONE, C_REG, 7, 0}, Optab{ASLD, C_SCON, C_REG, C_NONE, C_REG, 7},
Optab{ASLD, C_SCON, C_NONE, C_NONE, C_REG, 7, 0}, Optab{ASLD, C_SCON, C_NONE, C_NONE, C_REG, 7},
// compare and swap // compare and swap
Optab{ACSG, C_REG, C_REG, C_NONE, C_SOREG, 79, 0}, Optab{ACSG, C_REG, C_REG, C_NONE, C_SOREG, 79},
// floating point // floating point
Optab{AFADD, C_FREG, C_NONE, C_NONE, C_FREG, 32, 0}, Optab{AFADD, C_FREG, C_NONE, C_NONE, C_FREG, 32},
Optab{AFABS, C_FREG, C_NONE, C_NONE, C_FREG, 33, 0}, Optab{AFABS, C_FREG, C_NONE, C_NONE, C_FREG, 33},
Optab{AFABS, C_NONE, C_NONE, C_NONE, C_FREG, 33, 0}, Optab{AFABS, C_NONE, C_NONE, C_NONE, C_FREG, 33},
Optab{AFMADD, C_FREG, C_FREG, C_NONE, C_FREG, 34, 0}, Optab{AFMADD, C_FREG, C_FREG, C_NONE, C_FREG, 34},
Optab{AFMUL, C_FREG, C_NONE, C_NONE, C_FREG, 32, 0}, Optab{AFMUL, C_FREG, C_NONE, C_NONE, C_FREG, 32},
Optab{AFMOVD, C_LAUTO, C_NONE, C_NONE, C_FREG, 36, REGSP}, Optab{AFMOVD, C_LAUTO, C_NONE, C_NONE, C_FREG, 36},
Optab{AFMOVD, C_LOREG, C_NONE, C_NONE, C_FREG, 36, 0}, Optab{AFMOVD, C_LOREG, C_NONE, C_NONE, C_FREG, 36},
Optab{AFMOVD, C_ADDR, C_NONE, C_NONE, C_FREG, 75, 0}, Optab{AFMOVD, C_ADDR, C_NONE, C_NONE, C_FREG, 75},
Optab{AFMOVD, C_FREG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, Optab{AFMOVD, C_FREG, C_NONE, C_NONE, C_LAUTO, 35},
Optab{AFMOVD, C_FREG, C_NONE, C_NONE, C_LOREG, 35, 0}, Optab{AFMOVD, C_FREG, C_NONE, C_NONE, C_LOREG, 35},
Optab{AFMOVD, C_FREG, C_NONE, C_NONE, C_ADDR, 74, 0}, Optab{AFMOVD, C_FREG, C_NONE, C_NONE, C_ADDR, 74},
Optab{AFMOVD, C_ZCON, C_NONE, C_NONE, C_FREG, 67, 0}, Optab{AFMOVD, C_ZCON, C_NONE, C_NONE, C_FREG, 67},
Optab{ALDGR, C_REG, C_NONE, C_NONE, C_FREG, 81, 0}, Optab{ALDGR, C_REG, C_NONE, C_NONE, C_FREG, 81},
Optab{ALGDR, C_FREG, C_NONE, C_NONE, C_REG, 81, 0}, Optab{ALGDR, C_FREG, C_NONE, C_NONE, C_REG, 81},
Optab{ACEFBRA, C_REG, C_NONE, C_NONE, C_FREG, 82, 0}, Optab{ACEFBRA, C_REG, C_NONE, C_NONE, C_FREG, 82},
Optab{ACFEBRA, C_FREG, C_NONE, C_NONE, C_REG, 83, 0}, Optab{ACFEBRA, C_FREG, C_NONE, C_NONE, C_REG, 83},
Optab{AFIEBR, C_SCON, C_FREG, C_NONE, C_FREG, 48, 0}, Optab{AFIEBR, C_SCON, C_FREG, C_NONE, C_FREG, 48},
Optab{ACPSDR, C_FREG, C_FREG, C_NONE, C_FREG, 49, 0}, Optab{ACPSDR, C_FREG, C_FREG, C_NONE, C_FREG, 49},
Optab{ALTDBR, C_FREG, C_NONE, C_NONE, C_FREG, 50, 0}, Optab{ALTDBR, C_FREG, C_NONE, C_NONE, C_FREG, 50},
Optab{ATCDB, C_FREG, C_NONE, C_NONE, C_SCON, 51, 0}, Optab{ATCDB, C_FREG, C_NONE, C_NONE, C_SCON, 51},
// load symbol address (plus offset) // load symbol address (plus offset)
Optab{AMOVD, C_SYMADDR, C_NONE, C_NONE, C_REG, 19, 0}, Optab{AMOVD, C_SYMADDR, C_NONE, C_NONE, C_REG, 19},
Optab{AMOVD, C_GOTADDR, C_NONE, C_NONE, C_REG, 93, 0}, Optab{AMOVD, C_GOTADDR, C_NONE, C_NONE, C_REG, 93},
Optab{AMOVD, C_TLS_LE, C_NONE, C_NONE, C_REG, 94, 0}, Optab{AMOVD, C_TLS_LE, C_NONE, C_NONE, C_REG, 94},
Optab{AMOVD, C_TLS_IE, C_NONE, C_NONE, C_REG, 95, 0}, Optab{AMOVD, C_TLS_IE, C_NONE, C_NONE, C_REG, 95},
// system call // system call
Optab{ASYSCALL, C_NONE, C_NONE, C_NONE, C_NONE, 5, 0}, Optab{ASYSCALL, C_NONE, C_NONE, C_NONE, C_NONE, 5},
Optab{ASYSCALL, C_SCON, C_NONE, C_NONE, C_NONE, 77, 0}, Optab{ASYSCALL, C_SCON, C_NONE, C_NONE, C_NONE, 77},
// branch // branch
Optab{ABEQ, C_NONE, C_NONE, C_NONE, C_SBRA, 16, 0}, Optab{ABEQ, C_NONE, C_NONE, C_NONE, C_SBRA, 16},
Optab{ABR, C_NONE, C_NONE, C_NONE, C_LBRA, 11, 0}, Optab{ABR, C_NONE, C_NONE, C_NONE, C_LBRA, 11},
Optab{ABC, C_SCON, C_REG, C_NONE, C_LBRA, 16, 0}, Optab{ABC, C_SCON, C_REG, C_NONE, C_LBRA, 16},
Optab{ABR, C_NONE, C_NONE, C_NONE, C_REG, 18, 0}, Optab{ABR, C_NONE, C_NONE, C_NONE, C_REG, 18},
Optab{ABR, C_REG, C_NONE, C_NONE, C_REG, 18, 0}, Optab{ABR, C_REG, C_NONE, C_NONE, C_REG, 18},
Optab{ABR, C_NONE, C_NONE, C_NONE, C_ZOREG, 15, 0}, Optab{ABR, C_NONE, C_NONE, C_NONE, C_ZOREG, 15},
Optab{ABC, C_NONE, C_NONE, C_NONE, C_ZOREG, 15, 0}, Optab{ABC, C_NONE, C_NONE, C_NONE, C_ZOREG, 15},
Optab{ACMPBEQ, C_REG, C_REG, C_NONE, C_SBRA, 89, 0}, Optab{ACMPBEQ, C_REG, C_REG, C_NONE, C_SBRA, 89},
Optab{ACMPBEQ, C_REG, C_NONE, C_ADDCON, C_SBRA, 90, 0}, Optab{ACMPBEQ, C_REG, C_NONE, C_ADDCON, C_SBRA, 90},
Optab{ACMPBEQ, C_REG, C_NONE, C_SCON, C_SBRA, 90, 0}, Optab{ACMPBEQ, C_REG, C_NONE, C_SCON, C_SBRA, 90},
Optab{ACMPUBEQ, C_REG, C_REG, C_NONE, C_SBRA, 89, 0}, Optab{ACMPUBEQ, C_REG, C_REG, C_NONE, C_SBRA, 89},
Optab{ACMPUBEQ, C_REG, C_NONE, C_ANDCON, C_SBRA, 90, 0}, Optab{ACMPUBEQ, C_REG, C_NONE, C_ANDCON, C_SBRA, 90},
// move on condition // move on condition
Optab{AMOVDEQ, C_REG, C_NONE, C_NONE, C_REG, 17, 0}, Optab{AMOVDEQ, C_REG, C_NONE, C_NONE, C_REG, 17},
// find leftmost one // find leftmost one
Optab{AFLOGR, C_REG, C_NONE, C_NONE, C_REG, 8, 0}, Optab{AFLOGR, C_REG, C_NONE, C_NONE, C_REG, 8},
// population count // population count
Optab{APOPCNT, C_REG, C_NONE, C_NONE, C_REG, 9, 0}, Optab{APOPCNT, C_REG, C_NONE, C_NONE, C_REG, 9},
// compare // compare
Optab{ACMP, C_REG, C_NONE, C_NONE, C_REG, 70, 0}, Optab{ACMP, C_REG, C_NONE, C_NONE, C_REG, 70},
Optab{ACMP, C_REG, C_NONE, C_NONE, C_LCON, 71, 0}, Optab{ACMP, C_REG, C_NONE, C_NONE, C_LCON, 71},
Optab{ACMPU, C_REG, C_NONE, C_NONE, C_REG, 70, 0}, Optab{ACMPU, C_REG, C_NONE, C_NONE, C_REG, 70},
Optab{ACMPU, C_REG, C_NONE, C_NONE, C_LCON, 71, 0}, Optab{ACMPU, C_REG, C_NONE, C_NONE, C_LCON, 71},
Optab{AFCMPO, C_FREG, C_NONE, C_NONE, C_FREG, 70, 0}, Optab{AFCMPO, C_FREG, C_NONE, C_NONE, C_FREG, 70},
Optab{AFCMPO, C_FREG, C_REG, C_NONE, C_FREG, 70, 0}, Optab{AFCMPO, C_FREG, C_REG, C_NONE, C_FREG, 70},
// test under mask // test under mask
Optab{ATMHH, C_REG, C_NONE, C_NONE, C_ANDCON, 91, 0}, Optab{ATMHH, C_REG, C_NONE, C_NONE, C_ANDCON, 91},
// insert program mask // insert program mask
Optab{AIPM, C_REG, C_NONE, C_NONE, C_NONE, 92, 0}, Optab{AIPM, C_REG, C_NONE, C_NONE, C_NONE, 92},
// 32-bit access registers // 32-bit access registers
Optab{AMOVW, C_AREG, C_NONE, C_NONE, C_REG, 68, 0}, Optab{AMOVW, C_AREG, C_NONE, C_NONE, C_REG, 68},
Optab{AMOVWZ, C_AREG, C_NONE, C_NONE, C_REG, 68, 0}, Optab{AMOVWZ, C_AREG, C_NONE, C_NONE, C_REG, 68},
Optab{AMOVW, C_REG, C_NONE, C_NONE, C_AREG, 69, 0}, Optab{AMOVW, C_REG, C_NONE, C_NONE, C_AREG, 69},
Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_AREG, 69, 0}, Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_AREG, 69},
// macros // macros
Optab{ACLEAR, C_LCON, C_NONE, C_NONE, C_LOREG, 96, 0}, Optab{ACLEAR, C_LCON, C_NONE, C_NONE, C_LOREG, 96},
Optab{ACLEAR, C_LCON, C_NONE, C_NONE, C_LAUTO, 96, REGSP}, Optab{ACLEAR, C_LCON, C_NONE, C_NONE, C_LAUTO, 96},
// load/store multiple // load/store multiple
Optab{ASTMG, C_REG, C_REG, C_NONE, C_LOREG, 97, 0}, Optab{ASTMG, C_REG, C_REG, C_NONE, C_LOREG, 97},
Optab{ASTMG, C_REG, C_REG, C_NONE, C_LAUTO, 97, REGSP}, Optab{ASTMG, C_REG, C_REG, C_NONE, C_LAUTO, 97},
Optab{ALMG, C_LOREG, C_REG, C_NONE, C_REG, 98, 0}, Optab{ALMG, C_LOREG, C_REG, C_NONE, C_REG, 98},
Optab{ALMG, C_LAUTO, C_REG, C_NONE, C_REG, 98, REGSP}, Optab{ALMG, C_LAUTO, C_REG, C_NONE, C_REG, 98},
// bytes // bytes
Optab{ABYTE, C_SCON, C_NONE, C_NONE, C_NONE, 40, 0}, Optab{ABYTE, C_SCON, C_NONE, C_NONE, C_NONE, 40},
Optab{AWORD, C_LCON, C_NONE, C_NONE, C_NONE, 40, 0}, Optab{AWORD, C_LCON, C_NONE, C_NONE, C_NONE, 40},
Optab{ADWORD, C_LCON, C_NONE, C_NONE, C_NONE, 31, 0}, Optab{ADWORD, C_LCON, C_NONE, C_NONE, C_NONE, 31},
Optab{ADWORD, C_DCON, C_NONE, C_NONE, C_NONE, 31, 0}, Optab{ADWORD, C_DCON, C_NONE, C_NONE, C_NONE, 31},
// fast synchronization // fast synchronization
Optab{ASYNC, C_NONE, C_NONE, C_NONE, C_NONE, 80, 0}, Optab{ASYNC, C_NONE, C_NONE, C_NONE, C_NONE, 80},
// store clock // store clock
Optab{ASTCK, C_NONE, C_NONE, C_NONE, C_SAUTO, 88, REGSP}, Optab{ASTCK, C_NONE, C_NONE, C_NONE, C_SAUTO, 88},
Optab{ASTCK, C_NONE, C_NONE, C_NONE, C_SOREG, 88, 0}, Optab{ASTCK, C_NONE, C_NONE, C_NONE, C_SOREG, 88},
// storage and storage // storage and storage
Optab{AMVC, C_SCON, C_NONE, C_LOREG, C_LOREG, 84, 0}, Optab{AMVC, C_SCON, C_NONE, C_LOREG, C_LOREG, 84},
Optab{AMVC, C_SCON, C_NONE, C_LOREG, C_LAUTO, 84, REGSP}, Optab{AMVC, C_SCON, C_NONE, C_LOREG, C_LAUTO, 84},
Optab{AMVC, C_SCON, C_NONE, C_LAUTO, C_LAUTO, 84, REGSP}, Optab{AMVC, C_SCON, C_NONE, C_LAUTO, C_LAUTO, 84},
// address // address
Optab{ALARL, C_LCON, C_NONE, C_NONE, C_REG, 85, 0}, Optab{ALARL, C_LCON, C_NONE, C_NONE, C_REG, 85},
Optab{ALARL, C_SYMADDR, C_NONE, C_NONE, C_REG, 85, 0}, Optab{ALARL, C_SYMADDR, C_NONE, C_NONE, C_REG, 85},
Optab{ALA, C_SOREG, C_NONE, C_NONE, C_REG, 86, 0}, Optab{ALA, C_SOREG, C_NONE, C_NONE, C_REG, 86},
Optab{ALA, C_SAUTO, C_NONE, C_NONE, C_REG, 86, REGSP}, Optab{ALA, C_SAUTO, C_NONE, C_NONE, C_REG, 86},
Optab{AEXRL, C_SYMADDR, C_NONE, C_NONE, C_REG, 87, 0}, Optab{AEXRL, C_SYMADDR, C_NONE, C_NONE, C_REG, 87},
// misc // misc
Optab{obj.AUNDEF, C_NONE, C_NONE, C_NONE, C_NONE, 78, 0}, Optab{obj.AUNDEF, C_NONE, C_NONE, C_NONE, C_NONE, 78},
Optab{obj.APCDATA, C_LCON, C_NONE, C_NONE, C_LCON, 0, 0}, Optab{obj.APCDATA, C_LCON, C_NONE, C_NONE, C_LCON, 0},
Optab{obj.AFUNCDATA, C_SCON, C_NONE, C_NONE, C_ADDR, 0, 0}, Optab{obj.AFUNCDATA, C_SCON, C_NONE, C_NONE, C_ADDR, 0},
Optab{obj.ANOP, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0}, Optab{obj.ANOP, C_NONE, C_NONE, C_NONE, C_NONE, 0},
Optab{obj.ANOP, C_SAUTO, C_NONE, C_NONE, C_NONE, 0, 0}, Optab{obj.ANOP, C_SAUTO, C_NONE, C_NONE, C_NONE, 0},
// vector instructions // vector instructions
// VRX store // VRX store
Optab{AVST, C_VREG, C_NONE, C_NONE, C_SOREG, 100, 0}, Optab{AVST, C_VREG, C_NONE, C_NONE, C_SOREG, 100},
Optab{AVST, C_VREG, C_NONE, C_NONE, C_SAUTO, 100, REGSP}, Optab{AVST, C_VREG, C_NONE, C_NONE, C_SAUTO, 100},
Optab{AVSTEG, C_SCON, C_VREG, C_NONE, C_SOREG, 100, 0}, Optab{AVSTEG, C_SCON, C_VREG, C_NONE, C_SOREG, 100},
Optab{AVSTEG, C_SCON, C_VREG, C_NONE, C_SAUTO, 100, REGSP}, Optab{AVSTEG, C_SCON, C_VREG, C_NONE, C_SAUTO, 100},
// VRX load // VRX load
Optab{AVL, C_SOREG, C_NONE, C_NONE, C_VREG, 101, 0}, Optab{AVL, C_SOREG, C_NONE, C_NONE, C_VREG, 101},
Optab{AVL, C_SAUTO, C_NONE, C_NONE, C_VREG, 101, REGSP}, Optab{AVL, C_SAUTO, C_NONE, C_NONE, C_VREG, 101},
Optab{AVLEG, C_SCON, C_NONE, C_SOREG, C_VREG, 101, 0}, Optab{AVLEG, C_SCON, C_NONE, C_SOREG, C_VREG, 101},
Optab{AVLEG, C_SCON, C_NONE, C_SAUTO, C_VREG, 101, REGSP}, Optab{AVLEG, C_SCON, C_NONE, C_SAUTO, C_VREG, 101},
// VRV scatter // VRV scatter
Optab{AVSCEG, C_SCON, C_VREG, C_NONE, C_SOREG, 102, 0}, Optab{AVSCEG, C_SCON, C_VREG, C_NONE, C_SOREG, 102},
Optab{AVSCEG, C_SCON, C_VREG, C_NONE, C_SAUTO, 102, REGSP}, Optab{AVSCEG, C_SCON, C_VREG, C_NONE, C_SAUTO, 102},
// VRV gather // VRV gather
Optab{AVGEG, C_SCON, C_NONE, C_SOREG, C_VREG, 103, 0}, Optab{AVGEG, C_SCON, C_NONE, C_SOREG, C_VREG, 103},
Optab{AVGEG, C_SCON, C_NONE, C_SAUTO, C_VREG, 103, REGSP}, Optab{AVGEG, C_SCON, C_NONE, C_SAUTO, C_VREG, 103},
// VRS element shift/rotate and load gr to/from vr element // VRS element shift/rotate and load gr to/from vr element
Optab{AVESLG, C_SCON, C_VREG, C_NONE, C_VREG, 104, 0}, Optab{AVESLG, C_SCON, C_VREG, C_NONE, C_VREG, 104},
Optab{AVESLG, C_REG, C_VREG, C_NONE, C_VREG, 104, 0}, Optab{AVESLG, C_REG, C_VREG, C_NONE, C_VREG, 104},
Optab{AVESLG, C_SCON, C_NONE, C_NONE, C_VREG, 104, 0}, Optab{AVESLG, C_SCON, C_NONE, C_NONE, C_VREG, 104},
Optab{AVESLG, C_REG, C_NONE, C_NONE, C_VREG, 104, 0}, Optab{AVESLG, C_REG, C_NONE, C_NONE, C_VREG, 104},
Optab{AVLGVG, C_SCON, C_VREG, C_NONE, C_REG, 104, 0}, Optab{AVLGVG, C_SCON, C_VREG, C_NONE, C_REG, 104},
Optab{AVLGVG, C_REG, C_VREG, C_NONE, C_REG, 104, 0}, Optab{AVLGVG, C_REG, C_VREG, C_NONE, C_REG, 104},
Optab{AVLVGG, C_SCON, C_REG, C_NONE, C_VREG, 104, 0}, Optab{AVLVGG, C_SCON, C_REG, C_NONE, C_VREG, 104},
Optab{AVLVGG, C_REG, C_REG, C_NONE, C_VREG, 104, 0}, Optab{AVLVGG, C_REG, C_REG, C_NONE, C_VREG, 104},
// VRS store multiple // VRS store multiple
Optab{AVSTM, C_VREG, C_VREG, C_NONE, C_SOREG, 105, 0}, Optab{AVSTM, C_VREG, C_VREG, C_NONE, C_SOREG, 105},
Optab{AVSTM, C_VREG, C_VREG, C_NONE, C_SAUTO, 105, REGSP}, Optab{AVSTM, C_VREG, C_VREG, C_NONE, C_SAUTO, 105},
// VRS load multiple // VRS load multiple
Optab{AVLM, C_SOREG, C_VREG, C_NONE, C_VREG, 106, 0}, Optab{AVLM, C_SOREG, C_VREG, C_NONE, C_VREG, 106},
Optab{AVLM, C_SAUTO, C_VREG, C_NONE, C_VREG, 106, REGSP}, Optab{AVLM, C_SAUTO, C_VREG, C_NONE, C_VREG, 106},
// VRS store with length // VRS store with length
Optab{AVSTL, C_REG, C_VREG, C_NONE, C_SOREG, 107, 0}, Optab{AVSTL, C_REG, C_VREG, C_NONE, C_SOREG, 107},
Optab{AVSTL, C_REG, C_VREG, C_NONE, C_SAUTO, 107, REGSP}, Optab{AVSTL, C_REG, C_VREG, C_NONE, C_SAUTO, 107},
// VRS load with length // VRS load with length
Optab{AVLL, C_REG, C_NONE, C_SOREG, C_VREG, 108, 0}, Optab{AVLL, C_REG, C_NONE, C_SOREG, C_VREG, 108},
Optab{AVLL, C_REG, C_NONE, C_SAUTO, C_VREG, 108, REGSP}, Optab{AVLL, C_REG, C_NONE, C_SAUTO, C_VREG, 108},
// VRI-a // VRI-a
Optab{AVGBM, C_ANDCON, C_NONE, C_NONE, C_VREG, 109, 0}, Optab{AVGBM, C_ANDCON, C_NONE, C_NONE, C_VREG, 109},
Optab{AVZERO, C_NONE, C_NONE, C_NONE, C_VREG, 109, 0}, Optab{AVZERO, C_NONE, C_NONE, C_NONE, C_VREG, 109},
Optab{AVREPIG, C_ADDCON, C_NONE, C_NONE, C_VREG, 109, 0}, Optab{AVREPIG, C_ADDCON, C_NONE, C_NONE, C_VREG, 109},
Optab{AVREPIG, C_SCON, C_NONE, C_NONE, C_VREG, 109, 0}, Optab{AVREPIG, C_SCON, C_NONE, C_NONE, C_VREG, 109},
Optab{AVLEIG, C_SCON, C_NONE, C_ADDCON, C_VREG, 109, 0}, Optab{AVLEIG, C_SCON, C_NONE, C_ADDCON, C_VREG, 109},
Optab{AVLEIG, C_SCON, C_NONE, C_SCON, C_VREG, 109, 0}, Optab{AVLEIG, C_SCON, C_NONE, C_SCON, C_VREG, 109},
// VRI-b generate mask // VRI-b generate mask
Optab{AVGMG, C_SCON, C_NONE, C_SCON, C_VREG, 110, 0}, Optab{AVGMG, C_SCON, C_NONE, C_SCON, C_VREG, 110},
// VRI-c replicate // VRI-c replicate
Optab{AVREPG, C_UCON, C_VREG, C_NONE, C_VREG, 111, 0}, Optab{AVREPG, C_UCON, C_VREG, C_NONE, C_VREG, 111},
// VRI-d element rotate and insert under mask and // VRI-d element rotate and insert under mask and
// shift left double by byte // shift left double by byte
Optab{AVERIMG, C_SCON, C_VREG, C_VREG, C_VREG, 112, 0}, Optab{AVERIMG, C_SCON, C_VREG, C_VREG, C_VREG, 112},
Optab{AVSLDB, C_SCON, C_VREG, C_VREG, C_VREG, 112, 0}, Optab{AVSLDB, C_SCON, C_VREG, C_VREG, C_VREG, 112},
// VRI-d fp test data class immediate // VRI-d fp test data class immediate
Optab{AVFTCIDB, C_SCON, C_VREG, C_NONE, C_VREG, 113, 0}, Optab{AVFTCIDB, C_SCON, C_VREG, C_NONE, C_VREG, 113},
// VRR-a load reg // VRR-a load reg
Optab{AVLR, C_VREG, C_NONE, C_NONE, C_VREG, 114, 0}, Optab{AVLR, C_VREG, C_NONE, C_NONE, C_VREG, 114},
// VRR-a compare // VRR-a compare
Optab{AVECG, C_VREG, C_NONE, C_NONE, C_VREG, 115, 0}, Optab{AVECG, C_VREG, C_NONE, C_NONE, C_VREG, 115},
// VRR-b // VRR-b
Optab{AVCEQG, C_VREG, C_VREG, C_NONE, C_VREG, 117, 0}, Optab{AVCEQG, C_VREG, C_VREG, C_NONE, C_VREG, 117},
Optab{AVFAEF, C_VREG, C_VREG, C_NONE, C_VREG, 117, 0}, Optab{AVFAEF, C_VREG, C_VREG, C_NONE, C_VREG, 117},
Optab{AVPKSG, C_VREG, C_VREG, C_NONE, C_VREG, 117, 0}, Optab{AVPKSG, C_VREG, C_VREG, C_NONE, C_VREG, 117},
// VRR-c // VRR-c
Optab{AVAQ, C_VREG, C_VREG, C_NONE, C_VREG, 118, 0}, Optab{AVAQ, C_VREG, C_VREG, C_NONE, C_VREG, 118},
Optab{AVAQ, C_VREG, C_NONE, C_NONE, C_VREG, 118, 0}, Optab{AVAQ, C_VREG, C_NONE, C_NONE, C_VREG, 118},
Optab{AVNOT, C_VREG, C_NONE, C_NONE, C_VREG, 118, 0}, Optab{AVNOT, C_VREG, C_NONE, C_NONE, C_VREG, 118},
Optab{AVPDI, C_SCON, C_VREG, C_VREG, C_VREG, 123, 0}, Optab{AVPDI, C_SCON, C_VREG, C_VREG, C_VREG, 123},
// VRR-c shifts // VRR-c shifts
Optab{AVERLLVG, C_VREG, C_VREG, C_NONE, C_VREG, 119, 0}, Optab{AVERLLVG, C_VREG, C_VREG, C_NONE, C_VREG, 119},
Optab{AVERLLVG, C_VREG, C_NONE, C_NONE, C_VREG, 119, 0}, Optab{AVERLLVG, C_VREG, C_NONE, C_NONE, C_VREG, 119},
// VRR-d // VRR-d
// 2 3 1 4 // 2 3 1 4
Optab{AVACQ, C_VREG, C_VREG, C_VREG, C_VREG, 120, 0}, Optab{AVACQ, C_VREG, C_VREG, C_VREG, C_VREG, 120},
// VRR-e // VRR-e
Optab{AVSEL, C_VREG, C_VREG, C_VREG, C_VREG, 121, 0}, Optab{AVSEL, C_VREG, C_VREG, C_VREG, C_VREG, 121},
// VRR-f // VRR-f
Optab{AVLVGP, C_REG, C_REG, C_NONE, C_VREG, 122, 0}, Optab{AVLVGP, C_REG, C_REG, C_NONE, C_VREG, 122},
} }
var oprange [ALAST & obj.AMask][]Optab var oprange [ALAST & obj.AMask][]Optab
...@@ -2929,7 +2928,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -2929,7 +2928,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
d2 := c.vregoff(&p.From) d2 := c.vregoff(&p.From)
b2 := p.From.Reg b2 := p.From.Reg
if b2 == 0 { if b2 == 0 {
b2 = o.param b2 = REGSP
} }
x2 := p.From.Index x2 := p.From.Index
if -DISP20/2 > d2 || d2 >= DISP20/2 { if -DISP20/2 > d2 || d2 >= DISP20/2 {
...@@ -3155,7 +3154,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -3155,7 +3154,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
v := c.regoff(&p.From) v := c.regoff(&p.From)
r := p.From.Reg r := p.From.Reg
if r == 0 { if r == 0 {
r = o.param r = REGSP
} }
i := p.From.Index i := p.From.Index
if v >= 0 && v < DISP12 { if v >= 0 && v < DISP12 {
...@@ -3254,7 +3253,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -3254,7 +3253,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
d2 := c.regoff(&p.To) d2 := c.regoff(&p.To)
b2 := p.To.Reg b2 := p.To.Reg
if b2 == 0 { if b2 == 0 {
b2 = o.param b2 = REGSP
} }
x2 := p.To.Index x2 := p.To.Index
if d2 < -DISP20/2 || d2 >= DISP20/2 { if d2 < -DISP20/2 || d2 >= DISP20/2 {
...@@ -3271,7 +3270,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -3271,7 +3270,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
d2 := c.regoff(&p.From) d2 := c.regoff(&p.From)
b2 := p.From.Reg b2 := p.From.Reg
if b2 == 0 { if b2 == 0 {
b2 = o.param b2 = REGSP
} }
x2 := p.From.Index x2 := p.From.Index
if d2 < -DISP20/2 || d2 >= DISP20/2 { if d2 < -DISP20/2 || d2 >= DISP20/2 {
...@@ -3393,7 +3392,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -3393,7 +3392,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
c.ctxt.Diag("cannot use index register") c.ctxt.Diag("cannot use index register")
} }
if r == 0 { if r == 0 {
r = o.param r = REGSP
} }
var opcode uint32 var opcode uint32
switch p.As { switch p.As {
...@@ -3601,10 +3600,10 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -3601,10 +3600,10 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
b1 := p.To.Reg b1 := p.To.Reg
b2 := p.GetFrom3().Reg b2 := p.GetFrom3().Reg
if b1 == 0 { if b1 == 0 {
b1 = o.param b1 = REGSP
} }
if b2 == 0 { if b2 == 0 {
b2 = o.param b2 = REGSP
} }
d1 := c.regoff(&p.To) d1 := c.regoff(&p.To)
d2 := c.regoff(p.GetFrom3()) d2 := c.regoff(p.GetFrom3())
...@@ -3671,7 +3670,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -3671,7 +3670,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
x := p.From.Index x := p.From.Index
b := p.From.Reg b := p.From.Reg
if b == 0 { if b == 0 {
b = o.param b = REGSP
} }
switch p.As { switch p.As {
case ALA: case ALA:
...@@ -3705,9 +3704,9 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -3705,9 +3704,9 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
opcode = op_STCKF opcode = op_STCKF
} }
v := c.vregoff(&p.To) v := c.vregoff(&p.To)
r := int(p.To.Reg) r := p.To.Reg
if r == 0 { if r == 0 {
r = int(o.param) r = REGSP
} }
zS(opcode, uint32(r), uint32(v), asm) zS(opcode, uint32(r), uint32(v), asm)
...@@ -3827,7 +3826,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -3827,7 +3826,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
offset := c.vregoff(&p.To) offset := c.vregoff(&p.To)
reg := p.To.Reg reg := p.To.Reg
if reg == 0 { if reg == 0 {
reg = o.param reg = REGSP
} }
if length <= 0 { if length <= 0 {
c.ctxt.Diag("cannot CLEAR %d bytes, must be greater than 0", length) c.ctxt.Diag("cannot CLEAR %d bytes, must be greater than 0", length)
...@@ -3873,7 +3872,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -3873,7 +3872,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
offset := c.regoff(&p.To) offset := c.regoff(&p.To)
reg := p.To.Reg reg := p.To.Reg
if reg == 0 { if reg == 0 {
reg = o.param reg = REGSP
} }
if offset < -DISP20/2 || offset >= DISP20/2 { if offset < -DISP20/2 || offset >= DISP20/2 {
if reg != REGTMP { if reg != REGTMP {
...@@ -3900,7 +3899,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -3900,7 +3899,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
offset := c.regoff(&p.From) offset := c.regoff(&p.From)
reg := p.From.Reg reg := p.From.Reg
if reg == 0 { if reg == 0 {
reg = o.param reg = REGSP
} }
if offset < -DISP20/2 || offset >= DISP20/2 { if offset < -DISP20/2 || offset >= DISP20/2 {
if reg != REGTMP { if reg != REGTMP {
...@@ -3963,7 +3962,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -3963,7 +3962,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
} }
b2 := p.To.Reg b2 := p.To.Reg
if b2 == 0 { if b2 == 0 {
b2 = o.param b2 = REGSP
} }
d2 := uint32(c.vregoff(&p.To)) d2 := uint32(c.vregoff(&p.To))
zVRX(op, uint32(v1), uint32(p.To.Index), uint32(b2), d2, m3, asm) zVRX(op, uint32(v1), uint32(p.To.Index), uint32(b2), d2, m3, asm)
...@@ -3977,7 +3976,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -3977,7 +3976,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
} }
b2 := src.Reg b2 := src.Reg
if b2 == 0 { if b2 == 0 {
b2 = o.param b2 = REGSP
} }
d2 := uint32(c.vregoff(src)) d2 := uint32(c.vregoff(src))
zVRX(op, uint32(p.To.Reg), uint32(src.Index), uint32(b2), d2, m3, asm) zVRX(op, uint32(p.To.Reg), uint32(src.Index), uint32(b2), d2, m3, asm)
...@@ -3987,7 +3986,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -3987,7 +3986,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
m3 := uint32(c.vregoff(&p.From)) m3 := uint32(c.vregoff(&p.From))
b2 := p.To.Reg b2 := p.To.Reg
if b2 == 0 { if b2 == 0 {
b2 = o.param b2 = REGSP
} }
d2 := uint32(c.vregoff(&p.To)) d2 := uint32(c.vregoff(&p.To))
zVRV(op, uint32(p.Reg), uint32(p.To.Index), uint32(b2), d2, m3, asm) zVRV(op, uint32(p.Reg), uint32(p.To.Index), uint32(b2), d2, m3, asm)
...@@ -3997,7 +3996,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -3997,7 +3996,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
m3 := uint32(c.vregoff(&p.From)) m3 := uint32(c.vregoff(&p.From))
b2 := p.GetFrom3().Reg b2 := p.GetFrom3().Reg
if b2 == 0 { if b2 == 0 {
b2 = o.param b2 = REGSP
} }
d2 := uint32(c.vregoff(p.GetFrom3())) d2 := uint32(c.vregoff(p.GetFrom3()))
zVRV(op, uint32(p.To.Reg), uint32(p.GetFrom3().Index), uint32(b2), d2, m3, asm) zVRV(op, uint32(p.To.Reg), uint32(p.GetFrom3().Index), uint32(b2), d2, m3, asm)
...@@ -4016,7 +4015,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -4016,7 +4015,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
offset := uint32(c.vregoff(&p.To)) offset := uint32(c.vregoff(&p.To))
reg := p.To.Reg reg := p.To.Reg
if reg == 0 { if reg == 0 {
reg = o.param reg = REGSP
} }
zVRS(op, uint32(p.From.Reg), uint32(p.Reg), uint32(reg), offset, 0, asm) zVRS(op, uint32(p.From.Reg), uint32(p.Reg), uint32(reg), offset, 0, asm)
...@@ -4025,7 +4024,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -4025,7 +4024,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
offset := uint32(c.vregoff(&p.From)) offset := uint32(c.vregoff(&p.From))
reg := p.From.Reg reg := p.From.Reg
if reg == 0 { if reg == 0 {
reg = o.param reg = REGSP
} }
zVRS(op, uint32(p.Reg), uint32(p.To.Reg), uint32(reg), offset, 0, asm) zVRS(op, uint32(p.Reg), uint32(p.To.Reg), uint32(reg), offset, 0, asm)
...@@ -4034,7 +4033,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -4034,7 +4033,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
offset := uint32(c.vregoff(&p.To)) offset := uint32(c.vregoff(&p.To))
reg := p.To.Reg reg := p.To.Reg
if reg == 0 { if reg == 0 {
reg = o.param reg = REGSP
} }
zVRS(op, uint32(p.Reg), uint32(p.From.Reg), uint32(reg), offset, 0, asm) zVRS(op, uint32(p.Reg), uint32(p.From.Reg), uint32(reg), offset, 0, asm)
...@@ -4043,7 +4042,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { ...@@ -4043,7 +4042,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
offset := uint32(c.vregoff(p.GetFrom3())) offset := uint32(c.vregoff(p.GetFrom3()))
reg := p.GetFrom3().Reg reg := p.GetFrom3().Reg
if reg == 0 { if reg == 0 {
reg = o.param reg = REGSP
} }
zVRS(op, uint32(p.To.Reg), uint32(p.From.Reg), uint32(reg), offset, 0, asm) zVRS(op, uint32(p.To.Reg), uint32(p.From.Reg), uint32(reg), offset, 0, asm)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment