+#define MVFW(R0, F0, F1) \
+ movi_f %F0 0.5 \
+ movr_f_w %R0 %F0 \
+ movr_w_f %F1 %R0 \
+ beqr_f fw##R0##F0##F1 %F0 %F1 \
+ calli @abort \
+fw##R0##F0##F1:
+#define FW(R0, R1, R2, R3, R4, R5, F0, F1, F2, F3, F4, F5) \
+ MVFW(R0, F0, F1) \
+ MVFW(R1, F1, F2) \
+ MVFW(R2, F2, F3) \
+ MVFW(R3, F3, F4) \
+ MVFW(R4, F4, F5) \
+ MVFW(R5, F5, F0)
+#define MVFWI(R0, F0, F1) \
+ movi_f %F1 0.25 \
+ movi_f_w %R0 0.25 \
+ movr_w_f %F0 %R0 \
+ beqr_f ifw##R0##F0##F1 %F0 %F1 \
+ calli @abort \
+ifw##R0##F0##F1:
+#define FWI(R0, R1, R2, R3, R4, R5, F0, F1, F2, F3, F4, F5) \
+ MVFWI(R0, F0, F1) \
+ MVFWI(R1, F1, F2) \
+ MVFWI(R2, F2, F3) \
+ MVFWI(R3, F3, F4) \
+ MVFWI(R4, F4, F5) \
+ MVFWI(R5, F5, F0)
+
+#if __WORDSIZE == 32
+# define MVDW(R0, R1, F0, F1) \
+ movi_d %F0 0.5 \
+ movr_d_ww %R0 %R1 %F0 \
+ movr_ww_d %F1 %R0 %R1 \
+ beqr_d dw##R0##R1##F0##F1 %F0 %F1 \
+ calli @abort \
+dw##R0##R1##F0##F1:
+# define DW(R0, R1, R2, R3, R4, R5, F0, F1, F2, F3, F4, F5) \
+ MVDW(R0, R1, F0, F1) \
+ MVDW(R1, R2, F1, F2) \
+ MVDW(R2, R3, F2, F3) \
+ MVDW(R3, R4, F3, F4) \
+ MVDW(R4, R5, F4, F5) \
+ MVDW(R5, R0, F5, F0)
+# define MVDWI(R0, R1, F0, F1) \
+ movi_d %F1 0.25 \
+ movi_d_ww %R0 %R1 0.25 \
+ movr_ww_d %F0 %R0 %R1 \
+ beqr_d idw##R0##R1##F0##F1 %F0 %F1 \
+ calli @abort \
+idw##R0##R1##F0##F1:
+# define DWI(R0, R1, R2, R3, R4, R5, F0, F1, F2, F3, F4, F5) \
+ MVDWI(R0, R1, F0, F1) \
+ MVDWI(R1, R2, F1, F2) \
+ MVDWI(R2, R3, F2, F3) \
+ MVDWI(R3, R4, F3, F4) \
+ MVDWI(R4, R5, F4, F5) \
+ MVDWI(R5, R0, F5, F0)
+#else
+# define MVDW(R0, F0, F1) \
+ movi_d %F0 0.5 \
+ movr_d_w %R0 %F0 \
+ movr_w_d %F1 %R0 \
+ beqr_d dw##R0##F0##F1 %F0 %F1 \
+ calli @abort \
+dw##R0##F0##F1:
+# define DW(R0, R1, R2, R3, R4, R5, F0, F1, F2, F3, F4, F5) \
+ MVDW(R0, F0, F1) \
+ MVDW(R1, F1, F2) \
+ MVDW(R2, F2, F3) \
+ MVDW(R3, F3, F4) \
+ MVDW(R4, F4, F5) \
+ MVDW(R5, F5, F0)
+# define MVDWI(R0, F0, F1) \
+ movi_d %F1 0.25 \
+ movi_d_w %R0 0.25 \
+ movr_w_d %F0 %R0 \
+ beqr_d idw##R0##F0##F1 %F0 %F1 \
+ calli @abort \
+idw##R0##F0##F1:
+# define DWI(R0, R1, R2, R3, R4, R5, F0, F1, F2, F3, F4, F5) \
+ MVDWI(R0, F0, F1) \
+ MVDWI(R1, F1, F2) \
+ MVDWI(R2, F2, F3) \
+ MVDWI(R3, F3, F4) \
+ MVDWI(R4, F4, F5) \
+ MVDWI(R5, F5, F0)
+#endif
+
+#define MVWFI(F0, F1) \
+ movi_f %F1 0.25 \
+ movi_w_f %F0 0x3e800000 \
+ beqr_f iwf##F0##F1 %F0 %F1 \
+ calli @abort \
+iwf##F0##F1:
+#define WFI(F0, F1, F2, F3, F4, F5) \
+ MVWFI(F0, F1) \
+ MVWFI(F1, F2) \
+ MVWFI(F2, F3) \
+ MVWFI(F3, F4) \
+ MVWFI(F4, F5) \
+ MVWFI(F5, F0)
+
+#if __WORDSIZE == 32
+# define MVWDI(F0, F1) \
+ movi_d %F1 0.5 \
+ movi_ww_d %F0 0 0x3fe00000 \
+ beqr_d iwwd##F0##F1 %F0 %F1 \
+ calli @abort \
+iwwd##F0##F1:
+# define WDI(F0, F1, F2, F3, F4, F5) \
+ MVWDI(F0, F1) \
+ MVWDI(F1, F2) \
+ MVWDI(F2, F3) \
+ MVWDI(F3, F4) \
+ MVWDI(F4, F5) \
+ MVWDI(F5, F0)
+#else
+# define MVWDI(F0, F1) \
+ movi_d %F1 0.5 \
+ movi_w_d %F0 0x3fe0000000000000 \
+ beqr_d iwd##F0##F1 %F0 %F1 \
+ calli @abort \
+iwd##F0##F1:
+#define WDI(F0, F1, F2, F3, F4, F5) \
+ MVWDI(F0, F1) \
+ MVWDI(F1, F2) \
+ MVWDI(F2, F3) \
+ MVWDI(F3, F4) \
+ MVWDI(F4, F5) \
+ MVWDI(F5, F0)
+#endif
+