mirror of
https://github.com/golang/go
synced 2024-11-17 18:04:48 -07:00
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: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
f248cd3a07
commit
e61985427e
@ -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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
}
|
}
|
||||||
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) {
|
|||||||
}
|
}
|
||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user