diff options
Diffstat (limited to 'arch/s390/kernel/dis.c')
| -rw-r--r-- | arch/s390/kernel/dis.c | 145 |
1 files changed, 132 insertions, 13 deletions
diff --git a/arch/s390/kernel/dis.c b/arch/s390/kernel/dis.c index b39b27d68b45..c83726c9fe03 100644 --- a/arch/s390/kernel/dis.c +++ b/arch/s390/kernel/dis.c | |||
| @@ -113,7 +113,7 @@ enum { | |||
| 113 | INSTR_INVALID, | 113 | INSTR_INVALID, |
| 114 | INSTR_E, | 114 | INSTR_E, |
| 115 | INSTR_RIE_R0IU, INSTR_RIE_R0UU, INSTR_RIE_RRP, INSTR_RIE_RRPU, | 115 | INSTR_RIE_R0IU, INSTR_RIE_R0UU, INSTR_RIE_RRP, INSTR_RIE_RRPU, |
| 116 | INSTR_RIE_RRUUU, INSTR_RIE_RUPI, INSTR_RIE_RUPU, | 116 | INSTR_RIE_RRUUU, INSTR_RIE_RUPI, INSTR_RIE_RUPU, INSTR_RIE_RRI0, |
| 117 | INSTR_RIL_RI, INSTR_RIL_RP, INSTR_RIL_RU, INSTR_RIL_UP, | 117 | INSTR_RIL_RI, INSTR_RIL_RP, INSTR_RIL_RU, INSTR_RIL_UP, |
| 118 | INSTR_RIS_R0RDU, INSTR_RIS_R0UU, INSTR_RIS_RURDI, INSTR_RIS_RURDU, | 118 | INSTR_RIS_R0RDU, INSTR_RIS_R0UU, INSTR_RIS_RURDI, INSTR_RIS_RURDU, |
| 119 | INSTR_RI_RI, INSTR_RI_RP, INSTR_RI_RU, INSTR_RI_UP, | 119 | INSTR_RI_RI, INSTR_RI_RP, INSTR_RI_RU, INSTR_RI_UP, |
| @@ -122,13 +122,14 @@ enum { | |||
| 122 | INSTR_RRE_RR, INSTR_RRE_RR_OPT, | 122 | INSTR_RRE_RR, INSTR_RRE_RR_OPT, |
| 123 | INSTR_RRF_0UFF, INSTR_RRF_F0FF, INSTR_RRF_F0FF2, INSTR_RRF_F0FR, | 123 | INSTR_RRF_0UFF, INSTR_RRF_F0FF, INSTR_RRF_F0FF2, INSTR_RRF_F0FR, |
| 124 | INSTR_RRF_FFRU, INSTR_RRF_FUFF, INSTR_RRF_M0RR, INSTR_RRF_R0RR, | 124 | INSTR_RRF_FFRU, INSTR_RRF_FUFF, INSTR_RRF_M0RR, INSTR_RRF_R0RR, |
| 125 | INSTR_RRF_RURR, INSTR_RRF_U0FF, INSTR_RRF_U0RF, INSTR_RRF_U0RR, | 125 | INSTR_RRF_R0RR2, INSTR_RRF_RURR, INSTR_RRF_U0FF, INSTR_RRF_U0RF, |
| 126 | INSTR_RRF_UUFF, INSTR_RRR_F0FF, INSTR_RRS_RRRDU, | 126 | INSTR_RRF_U0RR, INSTR_RRF_UUFF, INSTR_RRR_F0FF, INSTR_RRS_RRRDU, |
| 127 | INSTR_RR_FF, INSTR_RR_R0, INSTR_RR_RR, INSTR_RR_U0, INSTR_RR_UR, | 127 | INSTR_RR_FF, INSTR_RR_R0, INSTR_RR_RR, INSTR_RR_U0, INSTR_RR_UR, |
| 128 | INSTR_RSE_CCRD, INSTR_RSE_RRRD, INSTR_RSE_RURD, | 128 | INSTR_RSE_CCRD, INSTR_RSE_RRRD, INSTR_RSE_RURD, |
| 129 | INSTR_RSI_RRP, | 129 | INSTR_RSI_RRP, |
| 130 | INSTR_RSL_R0RD, | 130 | INSTR_RSL_R0RD, |
| 131 | INSTR_RSY_AARD, INSTR_RSY_CCRD, INSTR_RSY_RRRD, INSTR_RSY_RURD, | 131 | INSTR_RSY_AARD, INSTR_RSY_CCRD, INSTR_RSY_RRRD, INSTR_RSY_RURD, |
| 132 | INSTR_RSY_RDRM, | ||
| 132 | INSTR_RS_AARD, INSTR_RS_CCRD, INSTR_RS_R0RD, INSTR_RS_RRRD, | 133 | INSTR_RS_AARD, INSTR_RS_CCRD, INSTR_RS_R0RD, INSTR_RS_RRRD, |
| 133 | INSTR_RS_RURD, | 134 | INSTR_RS_RURD, |
| 134 | INSTR_RXE_FRRD, INSTR_RXE_RRRD, | 135 | INSTR_RXE_FRRD, INSTR_RXE_RRRD, |
| @@ -139,7 +140,7 @@ enum { | |||
| 139 | INSTR_SIY_IRD, INSTR_SIY_URD, | 140 | INSTR_SIY_IRD, INSTR_SIY_URD, |
| 140 | INSTR_SI_URD, | 141 | INSTR_SI_URD, |
| 141 | INSTR_SSE_RDRD, | 142 | INSTR_SSE_RDRD, |
| 142 | INSTR_SSF_RRDRD, | 143 | INSTR_SSF_RRDRD, INSTR_SSF_RRDRD2, |
| 143 | INSTR_SS_L0RDRD, INSTR_SS_LIRDRD, INSTR_SS_LLRDRD, INSTR_SS_RRRDRD, | 144 | INSTR_SS_L0RDRD, INSTR_SS_LIRDRD, INSTR_SS_LLRDRD, INSTR_SS_RRRDRD, |
| 144 | INSTR_SS_RRRDRD2, INSTR_SS_RRRDRD3, | 145 | INSTR_SS_RRRDRD2, INSTR_SS_RRRDRD3, |
| 145 | INSTR_S_00, INSTR_S_RD, | 146 | INSTR_S_00, INSTR_S_RD, |
| @@ -152,7 +153,7 @@ struct operand { | |||
| 152 | }; | 153 | }; |
| 153 | 154 | ||
| 154 | struct insn { | 155 | struct insn { |
| 155 | const char name[6]; | 156 | const char name[5]; |
| 156 | unsigned char opfrag; | 157 | unsigned char opfrag; |
| 157 | unsigned char format; | 158 | unsigned char format; |
| 158 | }; | 159 | }; |
| @@ -217,6 +218,7 @@ static const unsigned char formats[][7] = { | |||
| 217 | [INSTR_RIE_RRP] = { 0xff, R_8,R_12,J16_16,0,0,0 }, | 218 | [INSTR_RIE_RRP] = { 0xff, R_8,R_12,J16_16,0,0,0 }, |
| 218 | [INSTR_RIE_RRUUU] = { 0xff, R_8,R_12,U8_16,U8_24,U8_32,0 }, | 219 | [INSTR_RIE_RRUUU] = { 0xff, R_8,R_12,U8_16,U8_24,U8_32,0 }, |
| 219 | [INSTR_RIE_RUPI] = { 0xff, R_8,I8_32,U4_12,J16_16,0,0 }, | 220 | [INSTR_RIE_RUPI] = { 0xff, R_8,I8_32,U4_12,J16_16,0,0 }, |
| 221 | [INSTR_RIE_RRI0] = { 0xff, R_8,R_12,I16_16,0,0,0 }, | ||
| 220 | [INSTR_RIL_RI] = { 0x0f, R_8,I32_16,0,0,0,0 }, | 222 | [INSTR_RIL_RI] = { 0x0f, R_8,I32_16,0,0,0,0 }, |
| 221 | [INSTR_RIL_RP] = { 0x0f, R_8,J32_16,0,0,0,0 }, | 223 | [INSTR_RIL_RP] = { 0x0f, R_8,J32_16,0,0,0,0 }, |
| 222 | [INSTR_RIL_RU] = { 0x0f, R_8,U32_16,0,0,0,0 }, | 224 | [INSTR_RIL_RU] = { 0x0f, R_8,U32_16,0,0,0,0 }, |
| @@ -248,6 +250,7 @@ static const unsigned char formats[][7] = { | |||
| 248 | [INSTR_RRF_FUFF] = { 0xff, F_24,F_16,F_28,U4_20,0,0 }, | 250 | [INSTR_RRF_FUFF] = { 0xff, F_24,F_16,F_28,U4_20,0,0 }, |
| 249 | [INSTR_RRF_M0RR] = { 0xff, R_24,R_28,M_16,0,0,0 }, | 251 | [INSTR_RRF_M0RR] = { 0xff, R_24,R_28,M_16,0,0,0 }, |
| 250 | [INSTR_RRF_R0RR] = { 0xff, R_24,R_16,R_28,0,0,0 }, | 252 | [INSTR_RRF_R0RR] = { 0xff, R_24,R_16,R_28,0,0,0 }, |
| 253 | [INSTR_RRF_R0RR2] = { 0xff, R_24,R_28,R_16,0,0,0 }, | ||
| 251 | [INSTR_RRF_RURR] = { 0xff, R_24,R_28,R_16,U4_20,0,0 }, | 254 | [INSTR_RRF_RURR] = { 0xff, R_24,R_28,R_16,U4_20,0,0 }, |
| 252 | [INSTR_RRF_U0FF] = { 0xff, F_24,U4_16,F_28,0,0,0 }, | 255 | [INSTR_RRF_U0FF] = { 0xff, F_24,U4_16,F_28,0,0,0 }, |
| 253 | [INSTR_RRF_U0RF] = { 0xff, R_24,U4_16,F_28,0,0,0 }, | 256 | [INSTR_RRF_U0RF] = { 0xff, R_24,U4_16,F_28,0,0,0 }, |
| @@ -269,6 +272,7 @@ static const unsigned char formats[][7] = { | |||
| 269 | [INSTR_RSY_CCRD] = { 0xff, C_8,C_12,D20_20,B_16,0,0 }, | 272 | [INSTR_RSY_CCRD] = { 0xff, C_8,C_12,D20_20,B_16,0,0 }, |
| 270 | [INSTR_RSY_RRRD] = { 0xff, R_8,R_12,D20_20,B_16,0,0 }, | 273 | [INSTR_RSY_RRRD] = { 0xff, R_8,R_12,D20_20,B_16,0,0 }, |
| 271 | [INSTR_RSY_RURD] = { 0xff, R_8,U4_12,D20_20,B_16,0,0 }, | 274 | [INSTR_RSY_RURD] = { 0xff, R_8,U4_12,D20_20,B_16,0,0 }, |
| 275 | [INSTR_RSY_RDRM] = { 0xff, R_8,D20_20,B_16,U4_12,0,0 }, | ||
| 272 | [INSTR_RS_AARD] = { 0xff, A_8,A_12,D_20,B_16,0,0 }, | 276 | [INSTR_RS_AARD] = { 0xff, A_8,A_12,D_20,B_16,0,0 }, |
| 273 | [INSTR_RS_CCRD] = { 0xff, C_8,C_12,D_20,B_16,0,0 }, | 277 | [INSTR_RS_CCRD] = { 0xff, C_8,C_12,D_20,B_16,0,0 }, |
| 274 | [INSTR_RS_R0RD] = { 0xff, R_8,D_20,B_16,0,0,0 }, | 278 | [INSTR_RS_R0RD] = { 0xff, R_8,D_20,B_16,0,0,0 }, |
| @@ -290,6 +294,7 @@ static const unsigned char formats[][7] = { | |||
| 290 | [INSTR_SI_URD] = { 0xff, D_20,B_16,U8_8,0,0,0 }, | 294 | [INSTR_SI_URD] = { 0xff, D_20,B_16,U8_8,0,0,0 }, |
| 291 | [INSTR_SSE_RDRD] = { 0xff, D_20,B_16,D_36,B_32,0,0 }, | 295 | [INSTR_SSE_RDRD] = { 0xff, D_20,B_16,D_36,B_32,0,0 }, |
| 292 | [INSTR_SSF_RRDRD] = { 0x00, D_20,B_16,D_36,B_32,R_8,0 }, | 296 | [INSTR_SSF_RRDRD] = { 0x00, D_20,B_16,D_36,B_32,R_8,0 }, |
| 297 | [INSTR_SSF_RRDRD2]= { 0x00, R_8,D_20,B_16,D_36,B_32,0 }, | ||
| 293 | [INSTR_SS_L0RDRD] = { 0xff, D_20,L8_8,B_16,D_36,B_32,0 }, | 298 | [INSTR_SS_L0RDRD] = { 0xff, D_20,L8_8,B_16,D_36,B_32,0 }, |
| 294 | [INSTR_SS_LIRDRD] = { 0xff, D_20,L4_8,B_16,D_36,B_32,U4_12 }, | 299 | [INSTR_SS_LIRDRD] = { 0xff, D_20,L4_8,B_16,D_36,B_32,U4_12 }, |
| 295 | [INSTR_SS_LLRDRD] = { 0xff, D_20,L4_8,B_16,D_36,L4_12,B_32 }, | 300 | [INSTR_SS_LLRDRD] = { 0xff, D_20,L4_8,B_16,D_36,L4_12,B_32 }, |
| @@ -300,6 +305,36 @@ static const unsigned char formats[][7] = { | |||
| 300 | [INSTR_S_RD] = { 0xff, D_20,B_16,0,0,0,0 }, | 305 | [INSTR_S_RD] = { 0xff, D_20,B_16,0,0,0,0 }, |
| 301 | }; | 306 | }; |
| 302 | 307 | ||
| 308 | enum { | ||
| 309 | LONG_INSN_ALGHSIK, | ||
| 310 | LONG_INSN_ALHSIK, | ||
| 311 | LONG_INSN_CLFHSI, | ||
| 312 | LONG_INSN_CLGFRL, | ||
| 313 | LONG_INSN_CLGHRL, | ||
| 314 | LONG_INSN_CLGHSI, | ||
| 315 | LONG_INSN_CLHHSI, | ||
| 316 | LONG_INSN_LLGFRL, | ||
| 317 | LONG_INSN_LLGHRL, | ||
| 318 | LONG_INSN_POPCNT, | ||
| 319 | LONG_INSN_RISBHG, | ||
| 320 | LONG_INSN_RISBLG, | ||
| 321 | }; | ||
| 322 | |||
| 323 | static char *long_insn_name[] = { | ||
| 324 | [LONG_INSN_ALGHSIK] = "alghsik", | ||
| 325 | [LONG_INSN_ALHSIK] = "alhsik", | ||
| 326 | [LONG_INSN_CLFHSI] = "clfhsi", | ||
| 327 | [LONG_INSN_CLGFRL] = "clgfrl", | ||
| 328 | [LONG_INSN_CLGHRL] = "clghrl", | ||
| 329 | [LONG_INSN_CLGHSI] = "clghsi", | ||
| 330 | [LONG_INSN_CLHHSI] = "clhhsi", | ||
| 331 | [LONG_INSN_LLGFRL] = "llgfrl", | ||
| 332 | [LONG_INSN_LLGHRL] = "llghrl", | ||
| 333 | [LONG_INSN_POPCNT] = "popcnt", | ||
| 334 | [LONG_INSN_RISBHG] = "risbhg", | ||
| 335 | [LONG_INSN_RISBLG] = "risblk", | ||
| 336 | }; | ||
| 337 | |||
| 303 | static struct insn opcode[] = { | 338 | static struct insn opcode[] = { |
| 304 | #ifdef CONFIG_64BIT | 339 | #ifdef CONFIG_64BIT |
| 305 | { "lmd", 0xef, INSTR_SS_RRRDRD3 }, | 340 | { "lmd", 0xef, INSTR_SS_RRRDRD3 }, |
| @@ -881,6 +916,35 @@ static struct insn opcode_b9[] = { | |||
| 881 | { "pfmf", 0xaf, INSTR_RRE_RR }, | 916 | { "pfmf", 0xaf, INSTR_RRE_RR }, |
| 882 | { "trte", 0xbf, INSTR_RRF_M0RR }, | 917 | { "trte", 0xbf, INSTR_RRF_M0RR }, |
| 883 | { "trtre", 0xbd, INSTR_RRF_M0RR }, | 918 | { "trtre", 0xbd, INSTR_RRF_M0RR }, |
| 919 | { "ahhhr", 0xc8, INSTR_RRF_R0RR2 }, | ||
| 920 | { "shhhr", 0xc9, INSTR_RRF_R0RR2 }, | ||
| 921 | { "alhhh", 0xca, INSTR_RRF_R0RR2 }, | ||
| 922 | { "alhhl", 0xca, INSTR_RRF_R0RR2 }, | ||
| 923 | { "slhhh", 0xcb, INSTR_RRF_R0RR2 }, | ||
| 924 | { "chhr ", 0xcd, INSTR_RRE_RR }, | ||
| 925 | { "clhhr", 0xcf, INSTR_RRE_RR }, | ||
| 926 | { "ahhlr", 0xd8, INSTR_RRF_R0RR2 }, | ||
| 927 | { "shhlr", 0xd9, INSTR_RRF_R0RR2 }, | ||
| 928 | { "slhhl", 0xdb, INSTR_RRF_R0RR2 }, | ||
| 929 | { "chlr", 0xdd, INSTR_RRE_RR }, | ||
| 930 | { "clhlr", 0xdf, INSTR_RRE_RR }, | ||
| 931 | { { 0, LONG_INSN_POPCNT }, 0xe1, INSTR_RRE_RR }, | ||
| 932 | { "locgr", 0xe2, INSTR_RRF_M0RR }, | ||
| 933 | { "ngrk", 0xe4, INSTR_RRF_R0RR2 }, | ||
| 934 | { "ogrk", 0xe6, INSTR_RRF_R0RR2 }, | ||
| 935 | { "xgrk", 0xe7, INSTR_RRF_R0RR2 }, | ||
| 936 | { "agrk", 0xe8, INSTR_RRF_R0RR2 }, | ||
| 937 | { "sgrk", 0xe9, INSTR_RRF_R0RR2 }, | ||
| 938 | { "algrk", 0xea, INSTR_RRF_R0RR2 }, | ||
| 939 | { "slgrk", 0xeb, INSTR_RRF_R0RR2 }, | ||
| 940 | { "locr", 0xf2, INSTR_RRF_M0RR }, | ||
| 941 | { "nrk", 0xf4, INSTR_RRF_R0RR2 }, | ||
| 942 | { "ork", 0xf6, INSTR_RRF_R0RR2 }, | ||
| 943 | { "xrk", 0xf7, INSTR_RRF_R0RR2 }, | ||
| 944 | { "ark", 0xf8, INSTR_RRF_R0RR2 }, | ||
| 945 | { "srk", 0xf9, INSTR_RRF_R0RR2 }, | ||
| 946 | { "alrk", 0xfa, INSTR_RRF_R0RR2 }, | ||
| 947 | { "slrk", 0xfb, INSTR_RRF_R0RR2 }, | ||
| 884 | #endif | 948 | #endif |
| 885 | { "kmac", 0x1e, INSTR_RRE_RR }, | 949 | { "kmac", 0x1e, INSTR_RRE_RR }, |
| 886 | { "lrvr", 0x1f, INSTR_RRE_RR }, | 950 | { "lrvr", 0x1f, INSTR_RRE_RR }, |
| @@ -949,9 +1013,9 @@ static struct insn opcode_c4[] = { | |||
| 949 | { "lgfrl", 0x0c, INSTR_RIL_RP }, | 1013 | { "lgfrl", 0x0c, INSTR_RIL_RP }, |
| 950 | { "lhrl", 0x05, INSTR_RIL_RP }, | 1014 | { "lhrl", 0x05, INSTR_RIL_RP }, |
| 951 | { "lghrl", 0x04, INSTR_RIL_RP }, | 1015 | { "lghrl", 0x04, INSTR_RIL_RP }, |
| 952 | { "llgfrl", 0x0e, INSTR_RIL_RP }, | 1016 | { { 0, LONG_INSN_LLGFRL }, 0x0e, INSTR_RIL_RP }, |
| 953 | { "llhrl", 0x02, INSTR_RIL_RP }, | 1017 | { "llhrl", 0x02, INSTR_RIL_RP }, |
| 954 | { "llghrl", 0x06, INSTR_RIL_RP }, | 1018 | { { 0, LONG_INSN_LLGHRL }, 0x06, INSTR_RIL_RP }, |
| 955 | { "strl", 0x0f, INSTR_RIL_RP }, | 1019 | { "strl", 0x0f, INSTR_RIL_RP }, |
| 956 | { "stgrl", 0x0b, INSTR_RIL_RP }, | 1020 | { "stgrl", 0x0b, INSTR_RIL_RP }, |
| 957 | { "sthrl", 0x07, INSTR_RIL_RP }, | 1021 | { "sthrl", 0x07, INSTR_RIL_RP }, |
| @@ -968,9 +1032,9 @@ static struct insn opcode_c6[] = { | |||
| 968 | { "cghrl", 0x04, INSTR_RIL_RP }, | 1032 | { "cghrl", 0x04, INSTR_RIL_RP }, |
| 969 | { "clrl", 0x0f, INSTR_RIL_RP }, | 1033 | { "clrl", 0x0f, INSTR_RIL_RP }, |
| 970 | { "clgrl", 0x0a, INSTR_RIL_RP }, | 1034 | { "clgrl", 0x0a, INSTR_RIL_RP }, |
| 971 | { "clgfrl", 0x0e, INSTR_RIL_RP }, | 1035 | { { 0, LONG_INSN_CLGFRL }, 0x0e, INSTR_RIL_RP }, |
| 972 | { "clhrl", 0x07, INSTR_RIL_RP }, | 1036 | { "clhrl", 0x07, INSTR_RIL_RP }, |
| 973 | { "clghrl", 0x06, INSTR_RIL_RP }, | 1037 | { { 0, LONG_INSN_CLGHRL }, 0x06, INSTR_RIL_RP }, |
| 974 | { "pfdrl", 0x02, INSTR_RIL_UP }, | 1038 | { "pfdrl", 0x02, INSTR_RIL_UP }, |
| 975 | { "exrl", 0x00, INSTR_RIL_RP }, | 1039 | { "exrl", 0x00, INSTR_RIL_RP }, |
| 976 | #endif | 1040 | #endif |
| @@ -982,6 +1046,20 @@ static struct insn opcode_c8[] = { | |||
| 982 | { "mvcos", 0x00, INSTR_SSF_RRDRD }, | 1046 | { "mvcos", 0x00, INSTR_SSF_RRDRD }, |
| 983 | { "ectg", 0x01, INSTR_SSF_RRDRD }, | 1047 | { "ectg", 0x01, INSTR_SSF_RRDRD }, |
| 984 | { "csst", 0x02, INSTR_SSF_RRDRD }, | 1048 | { "csst", 0x02, INSTR_SSF_RRDRD }, |
| 1049 | { "lpd", 0x04, INSTR_SSF_RRDRD2 }, | ||
| 1050 | { "lpdg ", 0x05, INSTR_SSF_RRDRD2 }, | ||
| 1051 | #endif | ||
| 1052 | { "", 0, INSTR_INVALID } | ||
| 1053 | }; | ||
| 1054 | |||
| 1055 | static struct insn opcode_cc[] = { | ||
| 1056 | #ifdef CONFIG_64BIT | ||
| 1057 | { "brcth", 0x06, INSTR_RIL_RP }, | ||
| 1058 | { "aih", 0x08, INSTR_RIL_RI }, | ||
| 1059 | { "alsih", 0x0a, INSTR_RIL_RI }, | ||
| 1060 | { "alsih", 0x0b, INSTR_RIL_RI }, | ||
| 1061 | { "cih", 0x0d, INSTR_RIL_RI }, | ||
| 1062 | { "clih ", 0x0f, INSTR_RIL_RI }, | ||
| 985 | #endif | 1063 | #endif |
| 986 | { "", 0, INSTR_INVALID } | 1064 | { "", 0, INSTR_INVALID } |
| 987 | }; | 1065 | }; |
| @@ -1063,6 +1141,16 @@ static struct insn opcode_e3[] = { | |||
| 1063 | { "mfy", 0x5c, INSTR_RXY_RRRD }, | 1141 | { "mfy", 0x5c, INSTR_RXY_RRRD }, |
| 1064 | { "mhy", 0x7c, INSTR_RXY_RRRD }, | 1142 | { "mhy", 0x7c, INSTR_RXY_RRRD }, |
| 1065 | { "pfd", 0x36, INSTR_RXY_URRD }, | 1143 | { "pfd", 0x36, INSTR_RXY_URRD }, |
| 1144 | { "lbh", 0xc0, INSTR_RXY_RRRD }, | ||
| 1145 | { "llch", 0xc2, INSTR_RXY_RRRD }, | ||
| 1146 | { "stch", 0xc3, INSTR_RXY_RRRD }, | ||
| 1147 | { "lhh", 0xc4, INSTR_RXY_RRRD }, | ||
| 1148 | { "llhh", 0xc6, INSTR_RXY_RRRD }, | ||
| 1149 | { "sthh", 0xc7, INSTR_RXY_RRRD }, | ||
| 1150 | { "lfh", 0xca, INSTR_RXY_RRRD }, | ||
| 1151 | { "stfh", 0xcb, INSTR_RXY_RRRD }, | ||
| 1152 | { "chf", 0xcd, INSTR_RXY_RRRD }, | ||
| 1153 | { "clhf", 0xcf, INSTR_RXY_RRRD }, | ||
| 1066 | #endif | 1154 | #endif |
| 1067 | { "lrv", 0x1e, INSTR_RXY_RRRD }, | 1155 | { "lrv", 0x1e, INSTR_RXY_RRRD }, |
| 1068 | { "lrvh", 0x1f, INSTR_RXY_RRRD }, | 1156 | { "lrvh", 0x1f, INSTR_RXY_RRRD }, |
| @@ -1080,9 +1168,9 @@ static struct insn opcode_e5[] = { | |||
| 1080 | { "chhsi", 0x54, INSTR_SIL_RDI }, | 1168 | { "chhsi", 0x54, INSTR_SIL_RDI }, |
| 1081 | { "chsi", 0x5c, INSTR_SIL_RDI }, | 1169 | { "chsi", 0x5c, INSTR_SIL_RDI }, |
| 1082 | { "cghsi", 0x58, INSTR_SIL_RDI }, | 1170 | { "cghsi", 0x58, INSTR_SIL_RDI }, |
| 1083 | { "clhhsi", 0x55, INSTR_SIL_RDU }, | 1171 | { { 0, LONG_INSN_CLHHSI }, 0x55, INSTR_SIL_RDU }, |
| 1084 | { "clfhsi", 0x5d, INSTR_SIL_RDU }, | 1172 | { { 0, LONG_INSN_CLFHSI }, 0x5d, INSTR_SIL_RDU }, |
| 1085 | { "clghsi", 0x59, INSTR_SIL_RDU }, | 1173 | { { 0, LONG_INSN_CLGHSI }, 0x59, INSTR_SIL_RDU }, |
| 1086 | { "mvhhi", 0x44, INSTR_SIL_RDI }, | 1174 | { "mvhhi", 0x44, INSTR_SIL_RDI }, |
| 1087 | { "mvhi", 0x4c, INSTR_SIL_RDI }, | 1175 | { "mvhi", 0x4c, INSTR_SIL_RDI }, |
| 1088 | { "mvghi", 0x48, INSTR_SIL_RDI }, | 1176 | { "mvghi", 0x48, INSTR_SIL_RDI }, |
| @@ -1137,6 +1225,24 @@ static struct insn opcode_eb[] = { | |||
| 1137 | { "alsi", 0x6e, INSTR_SIY_IRD }, | 1225 | { "alsi", 0x6e, INSTR_SIY_IRD }, |
| 1138 | { "algsi", 0x7e, INSTR_SIY_IRD }, | 1226 | { "algsi", 0x7e, INSTR_SIY_IRD }, |
| 1139 | { "ecag", 0x4c, INSTR_RSY_RRRD }, | 1227 | { "ecag", 0x4c, INSTR_RSY_RRRD }, |
| 1228 | { "srak", 0xdc, INSTR_RSY_RRRD }, | ||
| 1229 | { "slak", 0xdd, INSTR_RSY_RRRD }, | ||
| 1230 | { "srlk", 0xde, INSTR_RSY_RRRD }, | ||
| 1231 | { "sllk", 0xdf, INSTR_RSY_RRRD }, | ||
| 1232 | { "locg", 0xe2, INSTR_RSY_RDRM }, | ||
| 1233 | { "stocg", 0xe3, INSTR_RSY_RDRM }, | ||
| 1234 | { "lang", 0xe4, INSTR_RSY_RRRD }, | ||
| 1235 | { "laog", 0xe6, INSTR_RSY_RRRD }, | ||
| 1236 | { "laxg", 0xe7, INSTR_RSY_RRRD }, | ||
| 1237 | { "laag", 0xe8, INSTR_RSY_RRRD }, | ||
| 1238 | { "laalg", 0xea, INSTR_RSY_RRRD }, | ||
| 1239 | { "loc", 0xf2, INSTR_RSY_RDRM }, | ||
| 1240 | { "stoc", 0xf3, INSTR_RSY_RDRM }, | ||
| 1241 | { "lan", 0xf4, INSTR_RSY_RRRD }, | ||
| 1242 | { "lao", 0xf6, INSTR_RSY_RRRD }, | ||
| 1243 | { "lax", 0xf7, INSTR_RSY_RRRD }, | ||
| 1244 | { "laa", 0xf8, INSTR_RSY_RRRD }, | ||
| 1245 | { "laal", 0xfa, INSTR_RSY_RRRD }, | ||
| 1140 | #endif | 1246 | #endif |
| 1141 | { "rll", 0x1d, INSTR_RSY_RRRD }, | 1247 | { "rll", 0x1d, INSTR_RSY_RRRD }, |
| 1142 | { "mvclu", 0x8e, INSTR_RSY_RRRD }, | 1248 | { "mvclu", 0x8e, INSTR_RSY_RRRD }, |
| @@ -1172,6 +1278,12 @@ static struct insn opcode_ec[] = { | |||
| 1172 | { "rxsbg", 0x57, INSTR_RIE_RRUUU }, | 1278 | { "rxsbg", 0x57, INSTR_RIE_RRUUU }, |
| 1173 | { "rosbg", 0x56, INSTR_RIE_RRUUU }, | 1279 | { "rosbg", 0x56, INSTR_RIE_RRUUU }, |
| 1174 | { "risbg", 0x55, INSTR_RIE_RRUUU }, | 1280 | { "risbg", 0x55, INSTR_RIE_RRUUU }, |
| 1281 | { { 0, LONG_INSN_RISBLG }, 0x51, INSTR_RIE_RRUUU }, | ||
| 1282 | { { 0, LONG_INSN_RISBHG }, 0x5D, INSTR_RIE_RRUUU }, | ||
| 1283 | { "ahik", 0xd8, INSTR_RIE_RRI0 }, | ||
| 1284 | { "aghik", 0xd9, INSTR_RIE_RRI0 }, | ||
| 1285 | { { 0, LONG_INSN_ALHSIK }, 0xda, INSTR_RIE_RRI0 }, | ||
| 1286 | { { 0, LONG_INSN_ALGHSIK }, 0xdb, INSTR_RIE_RRI0 }, | ||
| 1175 | #endif | 1287 | #endif |
| 1176 | { "", 0, INSTR_INVALID } | 1288 | { "", 0, INSTR_INVALID } |
| 1177 | }; | 1289 | }; |
| @@ -1321,6 +1433,9 @@ static struct insn *find_insn(unsigned char *code) | |||
| 1321 | case 0xc8: | 1433 | case 0xc8: |
| 1322 | table = opcode_c8; | 1434 | table = opcode_c8; |
| 1323 | break; | 1435 | break; |
| 1436 | case 0xcc: | ||
| 1437 | table = opcode_cc; | ||
| 1438 | break; | ||
| 1324 | case 0xe3: | 1439 | case 0xe3: |
| 1325 | table = opcode_e3; | 1440 | table = opcode_e3; |
| 1326 | opfrag = code[5]; | 1441 | opfrag = code[5]; |
| @@ -1367,7 +1482,11 @@ static int print_insn(char *buffer, unsigned char *code, unsigned long addr) | |||
| 1367 | ptr = buffer; | 1482 | ptr = buffer; |
| 1368 | insn = find_insn(code); | 1483 | insn = find_insn(code); |
| 1369 | if (insn) { | 1484 | if (insn) { |
| 1370 | ptr += sprintf(ptr, "%.5s\t", insn->name); | 1485 | if (insn->name[0] == '\0') |
| 1486 | ptr += sprintf(ptr, "%s\t", | ||
| 1487 | long_insn_name[(int) insn->name[1]]); | ||
| 1488 | else | ||
| 1489 | ptr += sprintf(ptr, "%.5s\t", insn->name); | ||
| 1371 | /* Extract the operands. */ | 1490 | /* Extract the operands. */ |
| 1372 | separator = 0; | 1491 | separator = 0; |
| 1373 | for (ops = formats[insn->format] + 1, i = 0; | 1492 | for (ops = formats[insn->format] + 1, i = 0; |
