MSA vectors are accessed in big endianness.
Per the "MIPS® SIMD Architecture" (MD00926 rev 1.03):
3.1 Registers Layout
MSA vectors are stored in memory starting from the 0th element at
the lowest byte address. The byte order of each element follows the
big- or little-endian convention of the system configuration.
Use the explicit big-endian variants of cpu_ld/st_data*().
Running files in tests/tcg/mips/user/ase/msa shows:
NLOC.B | PASS: 80 | FAIL: 0 | elapsed time: 0.21 ms |
NLOC.H | PASS: 80 | FAIL: 0 | elapsed time: 0.22 ms |
NLOC.W | PASS: 80 | FAIL: 0 | elapsed time: 0.18 ms |
NLOC.D | PASS: 80 | FAIL: 0 | elapsed time: 0.18 ms |
NLZC.B | PASS: 80 | FAIL: 0 | elapsed time: 0.19 ms |
NLZC.H | PASS: 80 | FAIL: 0 | elapsed time: 0.18 ms |
NLZC.W | PASS: 80 | FAIL: 0 | elapsed time: 0.21 ms |
NLZC.D | PASS: 80 | FAIL: 0 | elapsed time: 0.18 ms |
PCNT.B | PASS: 80 | FAIL: 0 | elapsed time: 0.17 ms |
PCNT.H | PASS: 80 | FAIL: 0 | elapsed time: 0.19 ms |
PCNT.W | PASS: 80 | FAIL: 0 | elapsed time: 0.18 ms |
PCNT.D | PASS: 80 | FAIL: 0 | elapsed time: 0.19 ms |
BINSL.B | PASS: 112 | FAIL: 0 | elapsed time: 0.57 ms |
BINSL.H | PASS: 112 | FAIL: 0 | elapsed time: 0.57 ms |
BINSL.W | PASS: 112 | FAIL: 0 | elapsed time: 0.57 ms |
BINSL.D | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
BINSR.B | PASS: 112 | FAIL: 0 | elapsed time: 0.57 ms |
BINSR.H | PASS: 112 | FAIL: 0 | elapsed time: 0.58 ms |
BINSR.W | PASS: 112 | FAIL: 0 | elapsed time: 0.58 ms |
BINSR.D | PASS: 112 | FAIL: 0 | elapsed time: 0.57 ms |
BMNZ.V | PASS: 112 | FAIL: 0 | elapsed time: 0.65 ms |
BMZ.V | PASS: 112 | FAIL: 0 | elapsed time: 0.59 ms |
BSEL.V | PASS: 112 | FAIL: 0 | elapsed time: 0.60 ms |
BCLR.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
BCLR.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
BCLR.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
BCLR.D | PASS: 80 | FAIL: 0 | elapsed time: 0.31 ms |
BNEG.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
BNEG.H | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
BNEG.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
BNEG.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
BSET.B | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
BSET.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
BSET.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
BSET.D | PASS: 80 | FAIL: 0 | elapsed time: 0.33 ms |
MADD_Q.H | PASS: 112 | FAIL: 0 | elapsed time: 0.60 ms |
MADD_Q.W | PASS: 112 | FAIL: 0 | elapsed time: 0.83 ms |
MADDR_Q.H | PASS: 112 | FAIL: 0 | elapsed time: 0.62 ms |
MADDR_Q.W | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
MSUB_Q.H | PASS: 112 | FAIL: 0 | elapsed time: 0.57 ms |
MSUB_Q.W | PASS: 112 | FAIL: 0 | elapsed time: 0.57 ms |
MSUBR_Q.H | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
MSUBR_Q.W | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
MUL_Q.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MUL_Q.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MULR_Q.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MULR_Q.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
FMAX_A.W | PASS: 80 | FAIL: 0 | elapsed time: 0.36 ms |
FMAX_A.D | PASS: 80 | FAIL: 0 | elapsed time: 0.34 ms |
FMAX.W | PASS: 80 | FAIL: 0 | elapsed time: 0.33 ms |
FMAX.D | PASS: 80 | FAIL: 0 | elapsed time: 0.34 ms |
FMIN_A.W | PASS: 80 | FAIL: 0 | elapsed time: 0.36 ms |
FMIN_A.D | PASS: 80 | FAIL: 0 | elapsed time: 0.34 ms |
FMIN.W | PASS: 80 | FAIL: 0 | elapsed time: 0.35 ms |
FMIN.D | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
ADD_A.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ADD_A.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ADD_A.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ADD_A.D | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
ADDS_A.B | PASS: 80 | FAIL: 0 | elapsed time: 0.31 ms |
ADDS_A.H | PASS: 80 | FAIL: 0 | elapsed time: 0.33 ms |
ADDS_A.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ADDS_A.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ADDS_S.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ADDS_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ADDS_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.80 ms |
ADDS_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
ADDS_U.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ADDS_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ADDS_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ADDS_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ADDV.B | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
ADDV.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ADDV.W | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
ADDV.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
HADD_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
HADD_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
HADD_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
HADD_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
HADD_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.33 ms |
HADD_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
AVE_S.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
AVE_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
AVE_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
AVE_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
AVE_U.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
AVE_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
AVE_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
AVE_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
AVER_S.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
AVER_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
AVER_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
AVER_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
AVER_U.B | PASS: 80 | FAIL: 0 | elapsed time: 0.31 ms |
AVER_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
AVER_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
AVER_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
CEQ.B | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
CEQ.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
CEQ.W | PASS: 80 | FAIL: 0 | elapsed time: 0.38 ms |
CEQ.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
CLE_S.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
CLE_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
CLE_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
CLE_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
CLE_U.B | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
CLE_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
CLE_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.34 ms |
CLE_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
CLT_S.B | PASS: 80 | FAIL: 0 | elapsed time: 0.34 ms |
CLT_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
CLT_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
CLT_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
CLT_U.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
CLT_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.34 ms |
CLT_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
CLT_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
DIV_S.B | PASS: 80 | FAIL: 0 | elapsed time: 0.31 ms |
DIV_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
DIV_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
DIV_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
DIV_U.B | PASS: 80 | FAIL: 0 | elapsed time: 0.39 ms |
DIV_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.31 ms |
DIV_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
DIV_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
DOTP_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
DOTP_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.35 ms |
DOTP_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
DOTP_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
DOTP_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.34 ms |
DOTP_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
DPADD_S.H | PASS: 112 | FAIL: 0 | elapsed time: 0.59 ms |
DPADD_S.W | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
DPADD_S.D | PASS: 112 | FAIL: 0 | elapsed time: 0.58 ms |
DPADD_U.H | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
DPADD_U.W | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
DPADD_U.D | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
DPSUB_S.H | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
DPSUB_S.W | PASS: 112 | FAIL: 0 | elapsed time: 0.57 ms |
DPSUB_S.D | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
DPSUB_U.H | PASS: 112 | FAIL: 0 | elapsed time: 0.58 ms |
DPSUB_U.W | PASS: 112 | FAIL: 0 | elapsed time: 0.59 ms |
DPSUB_U.D | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
MAX_A.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MAX_A.H | PASS: 80 | FAIL: 0 | elapsed time: 0.31 ms |
MAX_A.W | PASS: 80 | FAIL: 0 | elapsed time: 0.33 ms |
MAX_A.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MAX_S.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MAX_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MAX_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MAX_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.35 ms |
MAX_U.B | PASS: 80 | FAIL: 0 | elapsed time: 0.35 ms |
MAX_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MAX_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
MAX_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MIN_A.B | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
MIN_A.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MIN_A.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MIN_A.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MIN_S.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MIN_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.33 ms |
MIN_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MIN_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MIN_U.B | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
MIN_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MIN_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MIN_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
MOD_S.B | PASS: 80 | FAIL: 0 | elapsed time: 0.31 ms |
MOD_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.31 ms |
MOD_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MOD_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MOD_U.B | PASS: 80 | FAIL: 0 | elapsed time: 0.37 ms |
MOD_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
MOD_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MOD_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MADDV.B | PASS: 112 | FAIL: 0 | elapsed time: 0.57 ms |
MADDV.H | PASS: 112 | FAIL: 0 | elapsed time: 0.63 ms |
MADDV.W | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
MADDV.D | PASS: 112 | FAIL: 0 | elapsed time: 0.57 ms |
MSUBV.B | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
MSUBV.H | PASS: 112 | FAIL: 0 | elapsed time: 0.65 ms |
MSUBV.W | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
MSUBV.D | PASS: 112 | FAIL: 0 | elapsed time: 0.65 ms |
MULV.B | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
MULV.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MULV.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
MULV.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ASUB_S.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ASUB_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ASUB_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ASUB_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ASUB_U.B | PASS: 80 | FAIL: 0 | elapsed time: 0.44 ms |
ASUB_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
ASUB_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ASUB_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
HSUB_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
HSUB_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
HSUB_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
HSUB_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
HSUB_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
HSUB_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
SUBS_S.B | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
SUBS_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.38 ms |
SUBS_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
SUBS_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SUBS_U.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SUBS_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.34 ms |
SUBS_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
SUBS_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SUBSUS_U.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SUBSUS_U.H | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
SUBSUS_U.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SUBSUS_U.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SUBSUU_S.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SUBSUU_S.H | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
SUBSUU_S.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SUBSUU_S.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SUBV.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SUBV.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SUBV.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SUBV.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ILVEV.B | PASS: 80 | FAIL: 0 | elapsed time: 0.35 ms |
ILVEV.H | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
ILVEV.W | PASS: 80 | FAIL: 0 | elapsed time: 0.31 ms |
ILVEV.D | PASS: 80 | FAIL: 0 | elapsed time: 0.34 ms |
ILVOD.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ILVOD.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ILVOD.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ILVOD.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ILVL.B | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
ILVL.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ILVL.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ILVL.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ILVR.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ILVR.H | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
ILVR.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
ILVR.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
AND.V | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
NOR.V | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
OR.V | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
XOR.V | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
MOVE.V | PASS: 80 | FAIL: 0 | elapsed time: 0.18 ms |
PCKEV.B | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
PCKEV.H | PASS: 112 | FAIL: 0 | elapsed time: 0.56 ms |
PCKEV.W | PASS: 112 | FAIL: 0 | elapsed time: 0.68 ms |
PCKEV.D | PASS: 112 | FAIL: 0 | elapsed time: 0.57 ms |
PCKOD.B | PASS: 112 | FAIL: 0 | elapsed time: 0.61 ms |
PCKOD.H | PASS: 112 | FAIL: 0 | elapsed time: 0.62 ms |
PCKOD.W | PASS: 112 | FAIL: 0 | elapsed time: 0.58 ms |
PCKOD.D | PASS: 112 | FAIL: 0 | elapsed time: 0.58 ms |
VSHF.B | PASS: 112 | FAIL: 0 | elapsed time: 0.57 ms |
VSHF.H | PASS: 112 | FAIL: 0 | elapsed time: 0.57 ms |
VSHF.W | PASS: 112 | FAIL: 0 | elapsed time: 0.62 ms |
VSHF.D | PASS: 112 | FAIL: 0 | elapsed time: 0.57 ms |
SLL.B | PASS: 80 | FAIL: 0 | elapsed time: 0.34 ms |
SLL.H | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SLL.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SLL.D | PASS: 80 | FAIL: 0 | elapsed time: 0.38 ms |
SRA.B | PASS: 80 | FAIL: 0 | elapsed time: 0.31 ms |
SRA.H | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
SRA.W | PASS: 80 | FAIL: 0 | elapsed time: 0.37 ms |
SRA.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SRAR.B | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
SRAR.H | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
SRAR.W | PASS: 80 | FAIL: 0 | elapsed time: 0.31 ms |
SRAR.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SRL.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SRL.H | PASS: 80 | FAIL: 0 | elapsed time: 0.32 ms |
SRL.W | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SRL.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SRLR.B | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
SRLR.H | PASS: 80 | FAIL: 0 | elapsed time: 0.29 ms |
SRLR.W | PASS: 80 | FAIL: 0 | elapsed time: 0.31 ms |
SRLR.D | PASS: 80 | FAIL: 0 | elapsed time: 0.30 ms |
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/mips/tcg/msa_helper.c | 51 ++++++++++++++++++++++--------------
1 file changed, 31 insertions(+), 20 deletions(-)
diff --git a/target/mips/tcg/msa_helper.c b/target/mips/tcg/msa_helper.c
index f554b3d10ee..d6ce17abf9a 100644
--- a/target/mips/tcg/msa_helper.c
+++ b/target/mips/tcg/msa_helper.c
@@ -8231,8 +8231,8 @@ void helper_msa_ld_b(CPUMIPSState *env, uint32_t wd,
uint64_t d0, d1;
/* Load 8 bytes at a time. Vector element ordering makes this LE. */
- d0 = cpu_ldq_le_data_ra(env, addr + 0, ra);
- d1 = cpu_ldq_le_data_ra(env, addr + 8, ra);
+ d0 = cpu_ldq_be_data_ra(env, addr + 0, ra);
+ d1 = cpu_ldq_be_data_ra(env, addr + 8, ra);
pwd->d[0] = d0;
pwd->d[1] = d1;
}
@@ -8248,9 +8248,9 @@ void helper_msa_ld_h(CPUMIPSState *env, uint32_t wd,
* Load 8 bytes at a time. Use little-endian load, then for
* big-endian target, we must then swap the four halfwords.
*/
- d0 = cpu_ldq_le_data_ra(env, addr + 0, ra);
- d1 = cpu_ldq_le_data_ra(env, addr + 8, ra);
- if (mips_env_is_bigendian(env)) {
+ d0 = cpu_ldq_be_data_ra(env, addr + 0, ra);
+ d1 = cpu_ldq_be_data_ra(env, addr + 8, ra);
+ if (!mips_env_is_bigendian(env)) {
d0 = bswap16x4(d0);
d1 = bswap16x4(d1);
}
@@ -8269,9 +8269,9 @@ void helper_msa_ld_w(CPUMIPSState *env, uint32_t wd,
* Load 8 bytes at a time. Use little-endian load, then for
* big-endian target, we must then bswap the two words.
*/
- d0 = cpu_ldq_le_data_ra(env, addr + 0, ra);
- d1 = cpu_ldq_le_data_ra(env, addr + 8, ra);
- if (mips_env_is_bigendian(env)) {
+ d0 = cpu_ldq_be_data_ra(env, addr + 0, ra);
+ d1 = cpu_ldq_be_data_ra(env, addr + 8, ra);
+ if (!mips_env_is_bigendian(env)) {
d0 = bswap32x2(d0);
d1 = bswap32x2(d1);
}
@@ -8286,8 +8286,12 @@ void helper_msa_ld_d(CPUMIPSState *env, uint32_t wd,
uintptr_t ra = GETPC();
uint64_t d0, d1;
- d0 = cpu_ldq_data_ra(env, addr + 0, ra);
- d1 = cpu_ldq_data_ra(env, addr + 8, ra);
+ d0 = cpu_ldq_be_data_ra(env, addr + 0, ra);
+ d1 = cpu_ldq_be_data_ra(env, addr + 8, ra);
+ if (!mips_env_is_bigendian(env)) {
+ d0 = bswap64(d0);
+ d1 = bswap64(d1);
+ }
pwd->d[0] = d0;
pwd->d[1] = d1;
}
@@ -8320,8 +8324,8 @@ void helper_msa_st_b(CPUMIPSState *env, uint32_t wd,
ensure_writable_pages(env, addr, mmu_idx, ra);
/* Store 8 bytes at a time. Vector element ordering makes this LE. */
- cpu_stq_le_data_ra(env, addr + 0, pwd->d[0], ra);
- cpu_stq_le_data_ra(env, addr + 8, pwd->d[1], ra);
+ cpu_stq_be_data_ra(env, addr + 0, pwd->d[0], ra);
+ cpu_stq_be_data_ra(env, addr + 8, pwd->d[1], ra);
}
void helper_msa_st_h(CPUMIPSState *env, uint32_t wd,
@@ -8337,12 +8341,12 @@ void helper_msa_st_h(CPUMIPSState *env, uint32_t wd,
/* Store 8 bytes at a time. See helper_msa_ld_h. */
d0 = pwd->d[0];
d1 = pwd->d[1];
- if (mips_env_is_bigendian(env)) {
+ if (!mips_env_is_bigendian(env)) {
d0 = bswap16x4(d0);
d1 = bswap16x4(d1);
}
- cpu_stq_le_data_ra(env, addr + 0, d0, ra);
- cpu_stq_le_data_ra(env, addr + 8, d1, ra);
+ cpu_stq_be_data_ra(env, addr + 0, d0, ra);
+ cpu_stq_be_data_ra(env, addr + 8, d1, ra);
}
void helper_msa_st_w(CPUMIPSState *env, uint32_t wd,
@@ -8358,12 +8362,12 @@ void helper_msa_st_w(CPUMIPSState *env, uint32_t wd,
/* Store 8 bytes at a time. See helper_msa_ld_w. */
d0 = pwd->d[0];
d1 = pwd->d[1];
- if (mips_env_is_bigendian(env)) {
+ if (!mips_env_is_bigendian(env)) {
d0 = bswap32x2(d0);
d1 = bswap32x2(d1);
}
- cpu_stq_le_data_ra(env, addr + 0, d0, ra);
- cpu_stq_le_data_ra(env, addr + 8, d1, ra);
+ cpu_stq_be_data_ra(env, addr + 0, d0, ra);
+ cpu_stq_be_data_ra(env, addr + 8, d1, ra);
}
void helper_msa_st_d(CPUMIPSState *env, uint32_t wd,
@@ -8372,9 +8376,16 @@ void helper_msa_st_d(CPUMIPSState *env, uint32_t wd,
wr_t *pwd = &(env->active_fpu.fpr[wd].wr);
int mmu_idx = mips_env_mmu_index(env);
uintptr_t ra = GETPC();
+ uint64_t d0, d1;
ensure_writable_pages(env, addr, mmu_idx, GETPC());
- cpu_stq_data_ra(env, addr + 0, pwd->d[0], ra);
- cpu_stq_data_ra(env, addr + 8, pwd->d[1], ra);
+ d0 = pwd->d[0];
+ d1 = pwd->d[1];
+ if (!mips_env_is_bigendian(env)) {
+ d0 = bswap64(d0);
+ d1 = bswap64(d1);
+ }
+ cpu_stq_be_data_ra(env, addr + 0, d0, ra);
+ cpu_stq_be_data_ra(env, addr + 8, d1, ra);
}
--
2.51.0
© 2016 - 2025 Red Hat, Inc.