On 6/7/21 9:57 AM, Peter Maydell wrote:
+#define DO_LDAVH(OP, ESIZE, TYPE, H, XCHG, EVENACC, ODDACC, TO128) \
+ uint64_t HELPER(glue(mve_, OP))(CPUARMState *env, void *vn, \
+ void *vm, uint64_t a) \
+ { \
+ uint16_t mask = mve_element_mask(env); \
+ unsigned e; \
+ TYPE *n = vn, *m = vm; \
+ Int128 acc = TO128(a); \
This seems to miss the << 8.
Which suggests that the whole thing can be done without Int128:
+ for (e = 0; e < 16 / ESIZE; e++, mask >>= ESIZE) { \
+ if (mask & 1) { \
+ if (e & 1) { \
+ acc = ODDACC(acc, TO128(n[H(e - 1 * XCHG)] * m[H(e)])); \
tmp = n * m;
tmp = (tmp >> 8) + ((tmp >> 7) & 1);
acc ODDACC tmp;
+static bool trans_VRMLALDAVH_S(DisasContext *s, arg_vmlaldav *a)
+{
+ MVEGenDualAccOpFn *fns[] = {
static const, etc.
r~