for i := ppc64.REG_VS0; i <= ppc64.REG_VS63; i++ {
register[obj.Rconv(i)] = int16(i)
}
+ for i := ppc64.REG_A0; i <= ppc64.REG_A7; i++ {
+ register[obj.Rconv(i)] = int16(i)
+ }
for i := ppc64.REG_CR0; i <= ppc64.REG_CR7; i++ {
register[obj.Rconv(i)] = int16(i)
}
if 0 <= n && n <= 7 {
return ppc64.REG_CR0 + n, true
}
+ case "A":
+ if 0 <= n && n <= 8 {
+ return ppc64.REG_A0 + n, true
+ }
case "VS":
if 0 <= n && n <= 63 {
return ppc64.REG_VS0 + n, true
REG_CR6
REG_CR7
+ // MMA accumulator registers, these shadow VSR 0-31
+ // e.g MMAx shadows VSRx*4-VSRx*4+3 or
+ // MMA0 shadows VSR0-VSR3
+ REG_A0
+ REG_A1
+ REG_A2
+ REG_A3
+ REG_A4
+ REG_A5
+ REG_A6
+ REG_A7
+
REG_MSR
REG_FPSCR
REG_CR
C_CREG /* The condition registor (CR) */
C_CRBIT /* A single bit of the CR register (0-31) */
C_SPR /* special processor register */
+ C_AREG /* MMA accumulator register */
C_ZCON /* The constant zero */
C_U1CON /* 1 bit unsigned constant */
C_U2CON /* 2 bit unsigned constant */
"CREG",
"CRBIT",
"SPR",
+ "MREG",
"ZCON",
"U1CON",
"U2CON",
return C_SPR
}
+ if REG_A0 <= reg && reg <= REG_A7 {
+ return C_AREG
+ }
if reg == REG_FPSCR {
return C_FPSCR
}
{obj.Addr{Type: obj.TYPE_REG, Reg: REG_SPR0 + 8}, C_LR},
{obj.Addr{Type: obj.TYPE_REG, Reg: REG_SPR0 + 9}, C_CTR},
{obj.Addr{Type: obj.TYPE_REG, Reg: REG_FPSCR}, C_FPSCR},
+ {obj.Addr{Type: obj.TYPE_REG, Reg: REG_A1}, C_AREG},
// Memory type arguments.
{obj.Addr{Type: obj.TYPE_MEM, Name: obj.NAME_GOTREF}, C_ADDR},
crf := (r - REG_CR0LT) / 4
return fmt.Sprintf("CR%d%s", crf, bits[r%4])
}
+ if REG_A0 <= r && r <= REG_A7 {
+ return fmt.Sprintf("A%d", r-REG_A0)
+ }
if r == REG_CR {
return "CR"
}