+#define STXV(name, access, swap, type, elems) \
+void helper_##name(CPUPPCState *env, uint64_t vsr, \
+ target_ulong addr) \
+{ \
+ type *r; \
+ int i, index, bound, step; \
+ if (msr_le) { \
+ index = elems - 1; \
+ bound = -1; \
+ step = -1; \
+ } else { \
+ index = 0; \
+ bound = elems; \
+ step = 1; \
+ } \
+ r = (type *) &vsr; \
+ for (i = index; i != bound; i += step) { \
+ if (needs_byteswap(env)) { \
+ access(env, addr, swap(r[i]), GETPC()); \
+ } else { \
+ access(env, addr, r[i], GETPC()); \
+ } \
+ addr = addr_add(env, addr, sizeof(type)); \
+ } \
+}