e2k: Gen illopc for mirrored ld+st.

Signed-off-by: Denis Drakhnya <numas13@gmail.com>
This commit is contained in:
Denis Drakhnia 2021-04-16 14:39:45 +03:00 committed by Denis Drakhnia
parent 75583b5082
commit 0a0655109a
2 changed files with 123 additions and 92 deletions

View File

@ -1071,34 +1071,34 @@ static AlopDesc alops[] = {
{ X(OP_FXSQRTTXX), ALOPF1, ARGS_XXX, ALOP_SHORT, 0x5d, 1, -1, CHAN_5, { -1 } },
{ X(OP_MOVIF), ALOPF1, ARGS_DSX, ALOP_SHORT, 0x5e, 1, -1, CHAN_14, { -1 } },
{ X(OP_VFSI), ALOPF1, ARGS_SDD, ALOP_SHORT, 0x63, 1, -1, CHAN_14, { -1 } },
{ X(OP_LDCSB), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x68, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDDSB), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x6c, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDESB), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x70, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDFSB), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x74, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDGSB), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x78, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDSSB), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x7c, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDCSH), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x69, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDDSH), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x6d, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDESH), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x71, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDFSH), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x75, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDGSH), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x79, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDSSH), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x7d, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDCSW), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x6a, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDDSW), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x6e, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDESW), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x72, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDFSW), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x76, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDGSW), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x7a, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDSSW), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x7e, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDCSD), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x6b, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDDSD), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x6f, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDESD), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x73, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDFSD), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x77, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDGSD), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x7b, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDSSD), ALOPF1, ARGS_SSD, ALOP_SHORT, 0x7f, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDB), ALOPF1, ARGS_DDD, ALOP_SHORT, 0x64, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDH), ALOPF1, ARGS_DDD, ALOP_SHORT, 0x65, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDW), ALOPF1, ARGS_DDD, ALOP_SHORT, 0x66, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDD), ALOPF1, ARGS_DDD, ALOP_SHORT, 0x67, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDCSB), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x68, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDDSB), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x6c, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDESB), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x70, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDFSB), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x74, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDGSB), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x78, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDSSB), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x7c, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDCSH), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x69, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDDSH), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x6d, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDESH), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x71, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDFSH), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x75, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDGSH), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x79, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDSSH), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x7d, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDCSW), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x6a, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDDSW), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x6e, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDESW), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x72, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDFSW), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x76, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDGSW), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x7a, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDSSW), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x7e, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDCSD), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x6b, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDDSD), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x6f, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDESD), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x73, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDFSD), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x77, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDGSD), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x7b, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDSSD), ALOPF1_MAS, ARGS_SSD, ALOP_SHORT, 0x7f, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDB), ALOPF1_MAS, ARGS_DDD, ALOP_SHORT, 0x64, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDH), ALOPF1_MAS, ARGS_DDD, ALOP_SHORT, 0x65, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDW), ALOPF1_MAS, ARGS_DDD, ALOP_SHORT, 0x66, 1, -1, CHAN_0235, { -1 } },
{ X(OP_LDD), ALOPF1_MAS, ARGS_DDD, ALOP_SHORT, 0x67, 1, -1, CHAN_0235, { -1 } },
{ X(OP_FXSQRTISX), ALOPF2, ARGS_SX, ALOP_SHORT, 0x52, 1, -1, CHAN_5, { -1 }, 0xc0 },
{ X(OP_FXSQRTIDX), ALOPF2, ARGS_DX, ALOP_SHORT, 0x53, 1, -1, CHAN_5, { -1 }, 0xc0 },
{ X(OP_FXSQRTIXX), ALOPF2, ARGS_XX, ALOP_SHORT, 0x57, 1, -1, CHAN_5, { -1 }, 0xc0 },
@ -1392,42 +1392,42 @@ static AlopDesc alops[] = {
{ X(OP_PUNPCKLBH), ALOPF11, ARGS_DDD, ALOP_EXT, 0x01, 1, -1, CHAN_14, { -1 }, 0xc0, 0 },
{ X(OP_PUNPCKLHW), ALOPF11, ARGS_DDD, ALOP_EXT, 0x03, 1, -1, CHAN_14, { -1 }, 0xc0, 0 },
{ X(OP_PUNPCKLWD), ALOPF11, ARGS_DDD, ALOP_EXT, 0x05, 1, -1, CHAN_14, { -1 }, 0xc0, 0 },
{ X(OP_LDGDB), ALOPF11, ARGS_SSD, ALOP_EXT, 0x64, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGDH), ALOPF11, ARGS_SSD, ALOP_EXT, 0x65, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGDW), ALOPF11, ARGS_SSD, ALOP_EXT, 0x66, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGDD), ALOPF11, ARGS_SSD, ALOP_EXT, 0x67, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGDQ), ALOPF11, ARGS_SSQ, ALOP_EXT, 0x79, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCUDB), ALOPF11, ARGS_SSD, ALOP_EXT, 0x60, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCUDH), ALOPF11, ARGS_SSD, ALOP_EXT, 0x61, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCUDW), ALOPF11, ARGS_SSD, ALOP_EXT, 0x62, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCUDD), ALOPF11, ARGS_SSD, ALOP_EXT, 0x63, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCUDQ), ALOPF11, ARGS_SSQ, ALOP_EXT, 0x78, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDAPB), ALOPF11, ARGS_QSD, ALOP_EXT, 0x68, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDAPH), ALOPF11, ARGS_QSD, ALOP_EXT, 0x69, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDAPW), ALOPF11, ARGS_QSD, ALOP_EXT, 0x6a, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDAPD), ALOPF11, ARGS_QSD, ALOP_EXT, 0x6b, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDAPQ), ALOPF11, ARGS_QSQ, ALOP_EXT, 0x7a, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWB), ALOPF11, ARGS_QSD, ALOP_EXT, 0x70, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWD), ALOPF11, ARGS_QSD, ALOP_EXT, 0x73, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWH), ALOPF11, ARGS_QSD, ALOP_EXT, 0x71, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWQ), ALOPF11, ARGS_QSQ, ALOP_EXT, 0x7c, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWW), ALOPF11, ARGS_QSD, ALOP_EXT, 0x72, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPB), ALOPF11, ARGS_QSD, ALOP_EXT, 0x74, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPD), ALOPF11, ARGS_QSD, ALOP_EXT, 0x77, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPH), ALOPF11, ARGS_QSD, ALOP_EXT, 0x75, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPQ), ALOPF11, ARGS_QSQ, ALOP_EXT, 0x7d, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPW), ALOPF11, ARGS_QSD, ALOP_EXT, 0x76, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRB), ALOPF11, ARGS_QSD, ALOP_EXT, 0x6c, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRD), ALOPF11, ARGS_QSD, ALOP_EXT, 0x6f, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRH), ALOPF11, ARGS_QSD, ALOP_EXT, 0x6d, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRQ), ALOPF11, ARGS_QSQ, ALOP_EXT, 0x7b, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRW), ALOPF11, ARGS_QSD, ALOP_EXT, 0x6e, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCSQ), ALOPF11, ARGS_DDQ, ALOP_EXT, 0x42, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDDSQ), ALOPF11, ARGS_DDQ, ALOP_EXT, 0x43, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDESQ), ALOPF11, ARGS_SSQ, ALOP_EXT, 0x44, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDFSQ), ALOPF11, ARGS_DDQ, ALOP_EXT, 0x45, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGSQ), ALOPF11, ARGS_DDQ, ALOP_EXT, 0x46, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDSSQ), ALOPF11, ARGS_DDQ, ALOP_EXT, 0x47, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGDB), ALOPF11_MAS, ARGS_SSD, ALOP_EXT, 0x64, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGDH), ALOPF11_MAS, ARGS_SSD, ALOP_EXT, 0x65, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGDW), ALOPF11_MAS, ARGS_SSD, ALOP_EXT, 0x66, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGDD), ALOPF11_MAS, ARGS_SSD, ALOP_EXT, 0x67, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGDQ), ALOPF11_MAS, ARGS_SSQ, ALOP_EXT, 0x79, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCUDB), ALOPF11_MAS, ARGS_SSD, ALOP_EXT, 0x60, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCUDH), ALOPF11_MAS, ARGS_SSD, ALOP_EXT, 0x61, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCUDW), ALOPF11_MAS, ARGS_SSD, ALOP_EXT, 0x62, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCUDD), ALOPF11_MAS, ARGS_SSD, ALOP_EXT, 0x63, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCUDQ), ALOPF11_MAS, ARGS_SSQ, ALOP_EXT, 0x78, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDAPB), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x68, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDAPH), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x69, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDAPW), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x6a, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDAPD), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x6b, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDAPQ), ALOPF11_MAS, ARGS_QSQ, ALOP_EXT, 0x7a, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWB), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x70, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWD), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x73, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWH), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x71, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWQ), ALOPF11_MAS, ARGS_QSQ, ALOP_EXT, 0x7c, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWW), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x72, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPB), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x74, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPD), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x77, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPH), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x75, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPQ), ALOPF11_MAS, ARGS_QSQ, ALOP_EXT, 0x7d, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPW), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x76, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRB), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x6c, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRD), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x6f, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRH), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x6d, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRQ), ALOPF11_MAS, ARGS_QSQ, ALOP_EXT, 0x7b, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRW), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x6e, 1, 1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCSQ), ALOPF11_MAS, ARGS_DDQ, ALOP_EXT, 0x42, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDDSQ), ALOPF11_MAS, ARGS_DDQ, ALOP_EXT, 0x43, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDESQ), ALOPF11_MAS, ARGS_SSQ, ALOP_EXT, 0x44, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDFSQ), ALOPF11_MAS, ARGS_DDQ, ALOP_EXT, 0x45, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGSQ), ALOPF11_MAS, ARGS_DDQ, ALOP_EXT, 0x46, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDSSQ), ALOPF11_MAS, ARGS_DDQ, ALOP_EXT, 0x47, 1, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_FRCPS), ALOPF12, ARGS_SS, ALOP_EXT, 0x50, 1, -1, CHAN_5, { -1 }, 0xc0, 0xc0 },
{ X(OP_FSQRTS), ALOPF12, ARGS_SS, ALOP_EXT, 0x4c, 1, -1, CHAN_5, { -1 }, 0xc0, 0xc0 },
{ X(OP_FSQRTID), ALOPF12, ARGS_DD, ALOP_EXT, 0x4d, 1, -1, CHAN_5, { -1 }, 0xc0, 0xc0 },
@ -1500,21 +1500,21 @@ static AlopDesc alops[] = {
{ X(OP_CAST), ALOPF11, ARGS_QQQ, ALOP_EXT, 0x55, 2, 2, CHAN_0134, { -1 }, 0xc0, 0 },
{ X(OP_TDTOMP), ALOPF11, ARGS_DDD, ALOP_EXT, 0x53, 2, 2, CHAN_0134, { -1 }, 0xc0, 0 },
{ X(OP_ODTOAP), ALOPF11, ARGS_QDQ, ALOP_EXT, 0x54, 2, 2, CHAN_0134, { -1 }, 0xc0, 0 },
{ X(OP_LDODWB), ALOPF11, ARGS_QSD, ALOP_EXT, 0x70, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWD), ALOPF11, ARGS_QSD, ALOP_EXT, 0x73, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWH), ALOPF11, ARGS_QSD, ALOP_EXT, 0x71, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWQ), ALOPF11, ARGS_QSQ, ALOP_EXT, 0x7c, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWW), ALOPF11, ARGS_QSD, ALOP_EXT, 0x72, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPB), ALOPF11, ARGS_QSD, ALOP_EXT, 0x74, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPD), ALOPF11, ARGS_QSD, ALOP_EXT, 0x77, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPH), ALOPF11, ARGS_QSD, ALOP_EXT, 0x75, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPQ), ALOPF11, ARGS_QSQ, ALOP_EXT, 0x7d, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPW), ALOPF11, ARGS_QSD, ALOP_EXT, 0x76, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRB), ALOPF11, ARGS_QSD, ALOP_EXT, 0x6c, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRD), ALOPF11, ARGS_QSD, ALOP_EXT, 0x6f, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRH), ALOPF11, ARGS_QSD, ALOP_EXT, 0x6d, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRQ), ALOPF11, ARGS_QSQ, ALOP_EXT, 0x7b, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRW), ALOPF11, ARGS_QSD, ALOP_EXT, 0x6e, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWB), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x70, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWD), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x73, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWH), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x71, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWQ), ALOPF11_MAS, ARGS_QSQ, ALOP_EXT, 0x7c, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODWW), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x72, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPB), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x74, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPD), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x77, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPH), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x75, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPQ), ALOPF11_MAS, ARGS_QSQ, ALOP_EXT, 0x7d, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODPW), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x76, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRB), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x6c, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRD), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x6f, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRH), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x6d, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRQ), ALOPF11_MAS, ARGS_QSQ, ALOP_EXT, 0x7b, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDODRW), ALOPF11_MAS, ARGS_QSD, ALOP_EXT, 0x6e, 2, 2, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_GETTD), ALOPF12, ARGS_DD, ALOP_EXT, 0x56, 2, 2, CHAN_03, { -1 }, 0xc0, 0xc0 },
{ X(OP_GETSOD), ALOPF12, ARGS_QQ, ALOP_EXT, 0x5a, 2, 2, CHAN_0134, { -1 }, 0xec, 0xc0 },
{ X(OP_STODPB), ALOPF13, ARGS_QSS, ALOP_EXT, 0x34, 2, 2, CHAN_25, { -1 }, 0xc0 },
@ -1706,18 +1706,18 @@ static AlopDesc alops[] = {
{ X(OP_QPFCMPNLTD), ALOPF11, ARGS_PPP, ALOP_EXT1, 0x7b, 5, -1, CHAN_0134, { -1 }, 0xc5, 0 },
{ X(OP_QPFCMPNLED), ALOPF11, ARGS_PPP, ALOP_EXT1, 0x7b, 5, -1, CHAN_0134, { -1 }, 0xc6, 0 },
{ X(OP_QPFCMPODD), ALOPF11, ARGS_PPP, ALOP_EXT1, 0x7b, 5, -1, CHAN_0134, { -1 }, 0xc7, 0 },
{ X(OP_LDQ), ALOPF11, ARGS_DDQ, ALOP_EXT, 0x41, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDQP), ALOPF11, ARGS_DDP, ALOP_EXT1, 0x61, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGDQP), ALOPF11, ARGS_SSP, ALOP_EXT1, 0x69, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCUDQP), ALOPF11, ARGS_SSP, ALOP_EXT1, 0x68, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCSQP), ALOPF11, ARGS_DDP, ALOP_EXT1, 0x62, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDDSQP), ALOPF11, ARGS_DDP, ALOP_EXT1, 0x63, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDESQP), ALOPF11, ARGS_SSP, ALOP_EXT1, 0x64, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDFSQP), ALOPF11, ARGS_DDP, ALOP_EXT1, 0x65, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGSQP), ALOPF11, ARGS_DDP, ALOP_EXT1, 0x66, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDSSQP), ALOPF11, ARGS_DDP, ALOP_EXT1, 0x67, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDAPQP), ALOPF11, ARGS_QSP, ALOP_EXT1, 0x6a, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDRQP), ALOPF11, ARGS_DDP, ALOP_EXT1, 0x6b, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDQ), ALOPF11_MAS, ARGS_DDQ, ALOP_EXT, 0x41, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDQP), ALOPF11_MAS, ARGS_DDP, ALOP_EXT1, 0x61, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGDQP), ALOPF11_MAS, ARGS_SSP, ALOP_EXT1, 0x69, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCUDQP), ALOPF11_MAS, ARGS_SSP, ALOP_EXT1, 0x68, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDCSQP), ALOPF11_MAS, ARGS_DDP, ALOP_EXT1, 0x62, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDDSQP), ALOPF11_MAS, ARGS_DDP, ALOP_EXT1, 0x63, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDESQP), ALOPF11_MAS, ARGS_SSP, ALOP_EXT1, 0x64, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDFSQP), ALOPF11_MAS, ARGS_DDP, ALOP_EXT1, 0x65, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDGSQP), ALOPF11_MAS, ARGS_DDP, ALOP_EXT1, 0x66, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDSSQP), ALOPF11_MAS, ARGS_DDP, ALOP_EXT1, 0x67, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDAPQP), ALOPF11_MAS, ARGS_QSP, ALOP_EXT1, 0x6a, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_LDRQP), ALOPF11_MAS, ARGS_DDP, ALOP_EXT1, 0x6b, 5, -1, CHAN_0235, { -1 }, 0xc0, 0 },
{ X(OP_QPSGN2MSKB), ALOPF12, ARGS_PS, ALOP_EXT1, 0x3c, 5, -1, CHAN_0134, { -1 }, 0xc0, 0xc0 },
{ X(OP_QPSWITCHW), ALOPF12, ARGS_PP, ALOP_EXT1, 0x3e, 5, -1, CHAN_0134, { -1 }, 0xc0, 0xc0 },
{ X(OP_QPSWITCHD), ALOPF12, ARGS_PP, ALOP_EXT1, 0x3f, 5, -1, CHAN_0134, { -1 }, 0xc0, 0xc0 },

View File

@ -292,6 +292,7 @@ typedef struct {
typedef enum {
ALOPF_NONE,
ALOPF1,
ALOPF1_MAS,
ALOPF1_MERGE,
ALOPF2,
ALOPF3,
@ -299,6 +300,7 @@ typedef enum {
ALOPF8,
ALOPF10,
ALOPF11,
ALOPF11_MAS,
ALOPF11_MERGE,
ALOPF11_LIT8,
ALOPF12,
@ -2136,9 +2138,11 @@ static ArgSize alop_opn_max_size(Alop *alop, uint8_t src)
case ALOPF_NONE:
break;
case ALOPF1:
case ALOPF1_MAS:
case ALOPF1_MERGE:
case ALOPF7:
case ALOPF11:
case ALOPF11_MAS:
case ALOPF11_MERGE:
case ALOPF11_LIT8:
case ALOPF17:
@ -2279,10 +2283,19 @@ static void gen_alop_save_dst(Alop *alop)
uint8_t dst;
switch (alop->format) {
case ALOPF_NONE:
case ALOPF3:
case ALOPF10:
case ALOPF13:
case ALOPF15:
/* no dst reg */
break;
case ALOPF1:
case ALOPF1_MAS:
case ALOPF1_MERGE:
case ALOPF2:
case ALOPF11:
case ALOPF11_MAS:
case ALOPF11_MERGE:
case ALOPF11_LIT8:
case ALOPF12:
@ -2337,6 +2350,7 @@ static void gen_alop_save_dst(Alop *alop)
#endif
break;
default:
g_assert_not_reached();
break;
}
}
@ -5412,6 +5426,7 @@ static void alop_table_find(DisasContext *ctx, Alop *alop, AlesFlag ales_present
AlopDesc *desc = &alops[index];
switch(desc->alopf) {
case ALOPF1:
case ALOPF1_MAS:
case ALOPF1_MERGE:
case ALOPF3:
case ALOPF10:
@ -5432,6 +5447,7 @@ static void alop_table_find(DisasContext *ctx, Alop *alop, AlesFlag ales_present
&& alop->als.opce1 == 0xc0;
break;
case ALOPF11:
case ALOPF11_MAS:
case ALOPF11_MERGE:
case ALOPF13:
case ALOPF17:
@ -6895,8 +6911,10 @@ static void alop_find_max_reg_indices(Alop *alop, int *max_r_src,
case ALOPF_NONE:
break;
case ALOPF1:
case ALOPF1_MAS:
case ALOPF1_MERGE:
case ALOPF11:
case ALOPF11_MAS:
case ALOPF11_MERGE:
case ALOPF11_LIT8:
check_reg_src(max_r_src, max_b, alop->als.src1);
@ -6942,7 +6960,7 @@ static void alop_find_max_reg_indices(Alop *alop, int *max_r_src,
check_reg_dst(max_r_dst, max_b, alop->als.dst);
break;
default:
e2k_todo(alop->ctx, "check_args %d", alop->format);
g_assert_not_reached();
break;
}
}
@ -7800,6 +7818,19 @@ static void validate_bundle(DisasContext *ctx)
Alop *alop = &ctx->alops[i];
switch (alop->format) {
case ALOPF3:
case ALOPF13:
switch (ctx->alops[i == 2 ? 3 : 0].format) {
case ALOPF1_MAS:
case ALOPF11_MAS:
/* Read and write operations cannot be executed simultaneously
* on the mirrored channels (2+3 or 0+5). */
gen_tr_excp_illopc(alop->ctx);
break;
default:
break;
}
break;
case ALOPF15:
if (!validate_state_reg(ctx, alop->als.dst, true)) {
gen_tr_excp_illopc(alop->ctx);