XVSEQH X3, X2, X4 // 448c0074
XVSEQW X3, X2, X4 // 440c0174
XVSEQV X3, X2, X4 // 448c0174
+
+ // VPCNT{B,H,W,V}, XVPCNT{B,H,W,V} instruction
+ VPCNTB V1, V2 // 22209c72
+ VPCNTH V1, V2 // 22249c72
+ VPCNTW V1, V2 // 22289c72
+ VPCNTV V1, V2 // 222c9c72
+ XVPCNTB X3, X2 // 62209c76
+ XVPCNTH X3, X2 // 62249c76
+ XVPCNTW X3, X2 // 62289c76
+ XVPCNTV X3, X2 // 622c9c76
{AMOVVF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 9, 4, 0, 0},
{AMOVF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 9, 4, 0, 0},
{AMOVD, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 9, 4, 0, 0},
+ {AVPCNTB, C_VREG, C_NONE, C_NONE, C_VREG, C_NONE, 9, 4, 0, 0},
+ {AXVPCNTB, C_XREG, C_NONE, C_NONE, C_XREG, C_NONE, 9, 4, 0, 0},
{AFMADDF, C_FREG, C_FREG, C_NONE, C_FREG, C_NONE, 39, 4, 0, 0},
{AFMADDF, C_FREG, C_FREG, C_FREG, C_FREG, C_NONE, 39, 4, 0, 0},
opset(AXVSEQH, r0)
opset(AXVSEQW, r0)
opset(AXVSEQV, r0)
+
+ case AVPCNTB:
+ opset(AVPCNTH, r0)
+ opset(AVPCNTW, r0)
+ opset(AVPCNTV, r0)
+
+ case AXVPCNTB:
+ opset(AXVPCNTH, r0)
+ opset(AXVPCNTW, r0)
+ opset(AXVPCNTV, r0)
}
}
}
return 0x46b9 << 10 // ftintrne.l.s
case AFTINTRNEVD:
return 0x46ba << 10 // ftintrne.l.d
+ case AVPCNTB:
+ return 0x1ca708 << 10 // vpcnt.b
+ case AVPCNTH:
+ return 0x1ca709 << 10 // vpcnt.h
+ case AVPCNTW:
+ return 0x1ca70a << 10 // vpcnt.w
+ case AVPCNTV:
+ return 0x1ca70b << 10 // vpcnt.v
+ case AXVPCNTB:
+ return 0x1da708 << 10 // xvpcnt.b
+ case AXVPCNTH:
+ return 0x1da709 << 10 // xvpcnt.h
+ case AXVPCNTW:
+ return 0x1da70a << 10 // xvpcnt.w
+ case AXVPCNTV:
+ return 0x1da70b << 10 // xvpcnt.v
}
c.ctxt.Diag("bad rr opcode %v", a)