3
3
THIS FILE IS MACHINE GENERATED WITH CGEN.
5
Copyright 1996-2005 Free Software Foundation, Inc.
5
Copyright 1996-2010 Free Software Foundation, Inc.
7
7
This file is part of the GNU simulators.
9
This program is free software; you can redistribute it and/or modify
10
it under the terms of the GNU General Public License as published by
11
the Free Software Foundation; either version 3 of the License, or
12
(at your option) any later version.
14
This program is distributed in the hope that it will be useful,
15
but WITHOUT ANY WARRANTY; without even the implied warranty of
16
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
GNU General Public License for more details.
19
You should have received a copy of the GNU General Public License
20
along with this program. If not, see <http://www.gnu.org/licenses/>.
9
This file is free software; you can redistribute it and/or modify
10
it under the terms of the GNU General Public License as published by
11
the Free Software Foundation; either version 3, or (at your option)
14
It is distributed in the hope that it will be useful, but WITHOUT
15
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17
License for more details.
19
You should have received a copy of the GNU General Public License along
20
with this program; if not, write to the Free Software Foundation, Inc.,
21
51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
62
63
{ SH_INSN_BGTU, SH64_MEDIA_INSN_BGTU, SH64_MEDIA_SFMT_BEQ },
63
64
{ SH_INSN_BLINK, SH64_MEDIA_INSN_BLINK, SH64_MEDIA_SFMT_BLINK },
64
65
{ SH_INSN_BNE, SH64_MEDIA_INSN_BNE, SH64_MEDIA_SFMT_BEQ },
65
{ SH_INSN_BNEI, SH64_MEDIA_INSN_BNEI, SH64_MEDIA_SFMT_BEQI },
66
{ SH_INSN_BNEI, SH64_MEDIA_INSN_BNEI, SH64_MEDIA_SFMT_BNEI },
66
67
{ SH_INSN_BRK, SH64_MEDIA_INSN_BRK, SH64_MEDIA_SFMT_BRK },
67
68
{ SH_INSN_BYTEREV, SH64_MEDIA_INSN_BYTEREV, SH64_MEDIA_SFMT_BYTEREV },
68
69
{ SH_INSN_CMPEQ, SH64_MEDIA_INSN_CMPEQ, SH64_MEDIA_SFMT_ADD },
118
119
{ SH_INSN_FSTXD, SH64_MEDIA_INSN_FSTXD, SH64_MEDIA_SFMT_FSTXD },
119
120
{ SH_INSN_FSTXP, SH64_MEDIA_INSN_FSTXP, SH64_MEDIA_SFMT_FLDXP },
120
121
{ SH_INSN_FSTXS, SH64_MEDIA_INSN_FSTXS, SH64_MEDIA_SFMT_FSTXS },
121
{ SH_INSN_FSUBD, SH64_MEDIA_INSN_FSUBD, SH64_MEDIA_SFMT_FADDD },
122
{ SH_INSN_FSUBD, SH64_MEDIA_INSN_FSUBD, SH64_MEDIA_SFMT_FSUBD },
122
123
{ SH_INSN_FSUBS, SH64_MEDIA_INSN_FSUBS, SH64_MEDIA_SFMT_FADDS },
123
124
{ SH_INSN_FTRCDL, SH64_MEDIA_INSN_FTRCDL, SH64_MEDIA_SFMT_FCNVDS },
124
125
{ SH_INSN_FTRCSL, SH64_MEDIA_INSN_FTRCSL, SH64_MEDIA_SFMT_FABSS },
125
{ SH_INSN_FTRCDQ, SH64_MEDIA_INSN_FTRCDQ, SH64_MEDIA_SFMT_FABSD },
126
{ SH_INSN_FTRCDQ, SH64_MEDIA_INSN_FTRCDQ, SH64_MEDIA_SFMT_FTRCDQ },
126
127
{ SH_INSN_FTRCSQ, SH64_MEDIA_INSN_FTRCSQ, SH64_MEDIA_SFMT_FCNVSD },
127
128
{ SH_INSN_FTRVS, SH64_MEDIA_INSN_FTRVS, SH64_MEDIA_SFMT_FTRVS },
128
129
{ SH_INSN_GETCFG, SH64_MEDIA_INSN_GETCFG, SH64_MEDIA_SFMT_GETCFG },
170
171
{ SH_INSN_MEXTR6, SH64_MEDIA_INSN_MEXTR6, SH64_MEDIA_SFMT_ADD },
171
172
{ SH_INSN_MEXTR7, SH64_MEDIA_INSN_MEXTR7, SH64_MEDIA_SFMT_ADD },
172
173
{ SH_INSN_MMACFXWL, SH64_MEDIA_INSN_MMACFXWL, SH64_MEDIA_SFMT_MCMV },
173
{ SH_INSN_MMACNFX_WL, SH64_MEDIA_INSN_MMACNFX_WL, SH64_MEDIA_SFMT_MCMV },
174
{ SH_INSN_MMACNFX_WL, SH64_MEDIA_INSN_MMACNFX_WL, SH64_MEDIA_SFMT_MMACNFX_WL },
174
175
{ SH_INSN_MMULL, SH64_MEDIA_INSN_MMULL, SH64_MEDIA_SFMT_ADD },
175
176
{ SH_INSN_MMULW, SH64_MEDIA_INSN_MMULW, SH64_MEDIA_SFMT_ADD },
176
177
{ SH_INSN_MMULFXL, SH64_MEDIA_INSN_MMULFXL, SH64_MEDIA_SFMT_ADD },
180
181
{ SH_INSN_MMULLOWL, SH64_MEDIA_INSN_MMULLOWL, SH64_MEDIA_SFMT_ADD },
181
182
{ SH_INSN_MMULSUMWQ, SH64_MEDIA_INSN_MMULSUMWQ, SH64_MEDIA_SFMT_MCMV },
182
183
{ SH_INSN_MOVI, SH64_MEDIA_INSN_MOVI, SH64_MEDIA_SFMT_MOVI },
183
{ SH_INSN_MPERMW, SH64_MEDIA_INSN_MPERMW, SH64_MEDIA_SFMT_MPERMW },
184
{ SH_INSN_MPERMW, SH64_MEDIA_INSN_MPERMW, SH64_MEDIA_SFMT_ADD },
184
185
{ SH_INSN_MSADUBQ, SH64_MEDIA_INSN_MSADUBQ, SH64_MEDIA_SFMT_MCMV },
185
186
{ SH_INSN_MSHALDSL, SH64_MEDIA_INSN_MSHALDSL, SH64_MEDIA_SFMT_ADD },
186
187
{ SH_INSN_MSHALDSW, SH64_MEDIA_INSN_MSHALDSW, SH64_MEDIA_SFMT_ADD },
211
212
{ SH_INSN_OCBWB, SH64_MEDIA_INSN_OCBWB, SH64_MEDIA_SFMT_ALLOCO },
212
213
{ SH_INSN_OR, SH64_MEDIA_INSN_OR, SH64_MEDIA_SFMT_ADD },
213
214
{ SH_INSN_ORI, SH64_MEDIA_INSN_ORI, SH64_MEDIA_SFMT_ORI },
214
{ SH_INSN_PREFI, SH64_MEDIA_INSN_PREFI, SH64_MEDIA_SFMT_ALLOCO },
215
{ SH_INSN_PREFI, SH64_MEDIA_INSN_PREFI, SH64_MEDIA_SFMT_PREFI },
215
216
{ SH_INSN_PTA, SH64_MEDIA_INSN_PTA, SH64_MEDIA_SFMT_PTA },
216
217
{ SH_INSN_PTABS, SH64_MEDIA_INSN_PTABS, SH64_MEDIA_SFMT_PTABS },
217
218
{ SH_INSN_PTB, SH64_MEDIA_INSN_PTB, SH64_MEDIA_SFMT_PTA },
222
223
{ SH_INSN_SHARD, SH64_MEDIA_INSN_SHARD, SH64_MEDIA_SFMT_ADD },
223
224
{ SH_INSN_SHARDL, SH64_MEDIA_INSN_SHARDL, SH64_MEDIA_SFMT_ADD },
224
225
{ SH_INSN_SHARI, SH64_MEDIA_INSN_SHARI, SH64_MEDIA_SFMT_SHARI },
225
{ SH_INSN_SHARIL, SH64_MEDIA_INSN_SHARIL, SH64_MEDIA_SFMT_SHARIL },
226
{ SH_INSN_SHARIL, SH64_MEDIA_INSN_SHARIL, SH64_MEDIA_SFMT_SHARI },
226
227
{ SH_INSN_SHLLD, SH64_MEDIA_INSN_SHLLD, SH64_MEDIA_SFMT_ADD },
227
228
{ SH_INSN_SHLLDL, SH64_MEDIA_INSN_SHLLDL, SH64_MEDIA_SFMT_ADD },
228
229
{ SH_INSN_SHLLI, SH64_MEDIA_INSN_SHLLI, SH64_MEDIA_SFMT_SHARI },
229
{ SH_INSN_SHLLIL, SH64_MEDIA_INSN_SHLLIL, SH64_MEDIA_SFMT_SHARIL },
230
{ SH_INSN_SHLLIL, SH64_MEDIA_INSN_SHLLIL, SH64_MEDIA_SFMT_SHARI },
230
231
{ SH_INSN_SHLRD, SH64_MEDIA_INSN_SHLRD, SH64_MEDIA_SFMT_ADD },
231
232
{ SH_INSN_SHLRDL, SH64_MEDIA_INSN_SHLRDL, SH64_MEDIA_SFMT_ADD },
232
233
{ SH_INSN_SHLRI, SH64_MEDIA_INSN_SHLRI, SH64_MEDIA_SFMT_SHARI },
233
{ SH_INSN_SHLRIL, SH64_MEDIA_INSN_SHLRIL, SH64_MEDIA_SFMT_SHARIL },
234
{ SH_INSN_SHLRIL, SH64_MEDIA_INSN_SHLRIL, SH64_MEDIA_SFMT_SHARI },
234
235
{ SH_INSN_SHORI, SH64_MEDIA_INSN_SHORI, SH64_MEDIA_SFMT_SHORI },
235
236
{ SH_INSN_SLEEP, SH64_MEDIA_INSN_SLEEP, SH64_MEDIA_SFMT_NOP },
236
237
{ SH_INSN_STB, SH64_MEDIA_INSN_STB, SH64_MEDIA_SFMT_STB },
255
256
{ SH_INSN_XORI, SH64_MEDIA_INSN_XORI, SH64_MEDIA_SFMT_XORI },
258
static const struct insn_sem sh64_media_insn_sem_invalid = {
259
static const struct insn_sem sh64_media_insn_sem_invalid =
259
261
VIRTUAL_INSN_X_INVALID, SH64_MEDIA_INSN_X_INVALID, SH64_MEDIA_SFMT_EMPTY
321
323
sh64_media_decode (SIM_CPU *current_cpu, IADDR pc,
322
CGEN_INSN_INT base_insn, CGEN_INSN_INT entire_insn,
324
CGEN_INSN_WORD base_insn, CGEN_INSN_WORD entire_insn,
325
327
/* Result of decoder. */
326
328
SH64_MEDIA_INSN_TYPE itype;
329
CGEN_INSN_INT insn = base_insn;
331
CGEN_INSN_WORD insn = base_insn;
332
334
unsigned int val = (((insn >> 22) & (63 << 4)) | ((insn >> 16) & (15 << 0)));
602
604
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
604
606
if ((entire_insn & 0xfc0f000f) == 0x280d0000)
605
{ itype = SH64_MEDIA_INSN_MPERMW; goto extract_sfmt_mpermw; }
607
{ itype = SH64_MEDIA_INSN_MPERMW; goto extract_sfmt_add; }
606
608
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
608
610
if ((entire_insn & 0xfc0f000f) == 0x280f0000)
706
708
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
708
710
if ((entire_insn & 0xfc0f000f) == 0x34030000)
709
{ itype = SH64_MEDIA_INSN_FSUBD; goto extract_sfmt_faddd; }
711
{ itype = SH64_MEDIA_INSN_FSUBD; goto extract_sfmt_fsubd; }
710
712
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
712
714
if ((entire_insn & 0xfc0f000f) == 0x34040000)
758
760
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
760
762
if ((entire_insn & 0xfc0f000f) == 0x38090000)
761
{ itype = SH64_MEDIA_INSN_FTRCDQ; goto extract_sfmt_fabsd; }
763
{ itype = SH64_MEDIA_INSN_FTRCDQ; goto extract_sfmt_ftrcdq; }
762
764
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
764
766
if ((entire_insn & 0xfc0f000f) == 0x380a0000)
842
844
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
844
846
if ((entire_insn & 0xfc0f000f) == 0x48050000)
845
{ itype = SH64_MEDIA_INSN_MMACNFX_WL; goto extract_sfmt_mcmv; }
847
{ itype = SH64_MEDIA_INSN_MMACNFX_WL; goto extract_sfmt_mmacnfx_wl; }
846
848
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
848
850
if ((entire_insn & 0xfc0f000f) == 0x48090000)
1294
1296
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
1296
1298
if ((entire_insn & 0xfc0f000f) == 0xc4000000)
1297
{ itype = SH64_MEDIA_INSN_SHLLIL; goto extract_sfmt_sharil; }
1299
{ itype = SH64_MEDIA_INSN_SHLLIL; goto extract_sfmt_shari; }
1298
1300
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
1300
1302
if ((entire_insn & 0xfc0f000f) == 0xc4010000)
1302
1304
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
1304
1306
if ((entire_insn & 0xfc0f000f) == 0xc4020000)
1305
{ itype = SH64_MEDIA_INSN_SHLRIL; goto extract_sfmt_sharil; }
1307
{ itype = SH64_MEDIA_INSN_SHLRIL; goto extract_sfmt_shari; }
1306
1308
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
1308
1310
if ((entire_insn & 0xfc0f000f) == 0xc4030000)
1310
1312
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
1312
1314
if ((entire_insn & 0xfc0f000f) == 0xc4060000)
1313
{ itype = SH64_MEDIA_INSN_SHARIL; goto extract_sfmt_sharil; }
1315
{ itype = SH64_MEDIA_INSN_SHARIL; goto extract_sfmt_shari; }
1314
1316
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
1316
1318
if ((entire_insn & 0xfc0f000f) == 0xc4070000)
1436
1438
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
1438
1440
if ((entire_insn & 0xfc0ffc0f) == 0xe001fc00)
1439
{ itype = SH64_MEDIA_INSN_PREFI; goto extract_sfmt_alloco; }
1441
{ itype = SH64_MEDIA_INSN_PREFI; goto extract_sfmt_prefi; }
1440
1442
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
1442
1444
if ((entire_insn & 0xfc0f000f) == 0xe0020000)
1484
1486
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
1486
1488
if ((entire_insn & 0xfc0f018f) == 0xe4050000)
1487
{ itype = SH64_MEDIA_INSN_BNEI; goto extract_sfmt_beqi; }
1489
{ itype = SH64_MEDIA_INSN_BNEI; goto extract_sfmt_bnei; }
1488
1490
itype = SH64_MEDIA_INSN_X_INVALID; goto extract_sfmt_empty;
1489
1491
case 928 : /* fall through */
1490
1492
case 929 : /* fall through */
1579
1581
extract_sfmt_addi:
1581
1583
const IDESC *idesc = &sh64_media_insn_data[itype];
1582
CGEN_INSN_INT insn = entire_insn;
1584
CGEN_INSN_WORD insn = entire_insn;
1583
1585
#define FLD(f) abuf->fields.sfmt_addi.f
1588
1590
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
1589
f_disp10 = EXTRACT_MSB0_INT (insn, 32, 12, 10);
1591
f_disp10 = EXTRACT_MSB0_SINT (insn, 32, 12, 10);
1590
1592
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
1592
1594
/* Record the fields for the semantic handler. */
1667
1669
extract_sfmt_beqi:
1669
1671
const IDESC *idesc = &sh64_media_insn_data[itype];
1670
CGEN_INSN_INT insn = entire_insn;
1672
CGEN_INSN_WORD insn = entire_insn;
1671
1673
#define FLD(f) abuf->fields.sfmt_beqi.f
1676
1678
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
1677
f_imm6 = EXTRACT_MSB0_INT (insn, 32, 16, 6);
1679
f_imm6 = EXTRACT_MSB0_SINT (insn, 32, 16, 6);
1678
1680
f_tra = EXTRACT_MSB0_UINT (insn, 32, 25, 3);
1680
1682
/* Record the fields for the semantic handler. */
1730
const IDESC *idesc = &sh64_media_insn_data[itype];
1731
CGEN_INSN_WORD insn = entire_insn;
1732
#define FLD(f) abuf->fields.sfmt_beqi.f
1737
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
1738
f_imm6 = EXTRACT_MSB0_SINT (insn, 32, 16, 6);
1739
f_tra = EXTRACT_MSB0_UINT (insn, 32, 25, 3);
1741
/* Record the fields for the semantic handler. */
1742
FLD (f_imm6) = f_imm6;
1743
FLD (f_left) = f_left;
1744
FLD (f_tra) = f_tra;
1745
TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bnei", "f_imm6 0x%x", 'x', f_imm6, "f_left 0x%x", 'x', f_left, "f_tra 0x%x", 'x', f_tra, (char *) 0));
1747
#if WITH_PROFILE_MODEL_P
1748
/* Record the fields for profiling. */
1749
if (PROFILE_MODEL_P (current_cpu))
1751
FLD (in_rm) = f_left;
1752
FLD (in_tra) = f_tra;
1726
1759
extract_sfmt_brk:
1728
1761
const IDESC *idesc = &sh64_media_insn_data[itype];
1729
#define FLD(f) abuf->fields.fmt_empty.f
1762
#define FLD(f) abuf->fields.sfmt_empty.f
1732
1765
/* Record the fields for the semantic handler. */
2119
2152
extract_sfmt_fldd:
2121
2154
const IDESC *idesc = &sh64_media_insn_data[itype];
2122
CGEN_INSN_INT insn = entire_insn;
2155
CGEN_INSN_WORD insn = entire_insn;
2123
2156
#define FLD(f) abuf->fields.sfmt_fldd.f
2128
2161
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2129
f_disp10x8 = ((EXTRACT_MSB0_INT (insn, 32, 12, 10)) << (3));
2162
f_disp10x8 = ((EXTRACT_MSB0_SINT (insn, 32, 12, 10)) << (3));
2130
2163
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2132
2165
/* Record the fields for the semantic handler. */
2150
2183
extract_sfmt_fldp:
2152
2185
const IDESC *idesc = &sh64_media_insn_data[itype];
2153
CGEN_INSN_INT insn = entire_insn;
2186
CGEN_INSN_WORD insn = entire_insn;
2154
2187
#define FLD(f) abuf->fields.sfmt_fldd.f
2159
2192
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2160
f_disp10x8 = ((EXTRACT_MSB0_INT (insn, 32, 12, 10)) << (3));
2193
f_disp10x8 = ((EXTRACT_MSB0_SINT (insn, 32, 12, 10)) << (3));
2161
2194
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2163
2196
/* Record the fields for the semantic handler. */
2182
2215
extract_sfmt_flds:
2184
2217
const IDESC *idesc = &sh64_media_insn_data[itype];
2185
CGEN_INSN_INT insn = entire_insn;
2218
CGEN_INSN_WORD insn = entire_insn;
2186
2219
#define FLD(f) abuf->fields.sfmt_flds.f
2191
2224
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2192
f_disp10x4 = ((EXTRACT_MSB0_INT (insn, 32, 12, 10)) << (2));
2225
f_disp10x4 = ((EXTRACT_MSB0_SINT (insn, 32, 12, 10)) << (2));
2193
2226
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2195
2228
/* Record the fields for the semantic handler. */
2491
2524
extract_sfmt_fstd:
2493
2526
const IDESC *idesc = &sh64_media_insn_data[itype];
2494
CGEN_INSN_INT insn = entire_insn;
2527
CGEN_INSN_WORD insn = entire_insn;
2495
2528
#define FLD(f) abuf->fields.sfmt_fldd.f
2500
2533
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2501
f_disp10x8 = ((EXTRACT_MSB0_INT (insn, 32, 12, 10)) << (3));
2534
f_disp10x8 = ((EXTRACT_MSB0_SINT (insn, 32, 12, 10)) << (3));
2502
2535
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2504
2537
/* Record the fields for the semantic handler. */
2522
2555
extract_sfmt_fsts:
2524
2557
const IDESC *idesc = &sh64_media_insn_data[itype];
2525
CGEN_INSN_INT insn = entire_insn;
2558
CGEN_INSN_WORD insn = entire_insn;
2526
2559
#define FLD(f) abuf->fields.sfmt_flds.f
2531
2564
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2532
f_disp10x4 = ((EXTRACT_MSB0_INT (insn, 32, 12, 10)) << (2));
2565
f_disp10x4 = ((EXTRACT_MSB0_SINT (insn, 32, 12, 10)) << (2));
2533
2566
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2535
2568
/* Record the fields for the semantic handler. */
2652
const IDESC *idesc = &sh64_media_insn_data[itype];
2653
CGEN_INSN_WORD insn = entire_insn;
2654
#define FLD(f) abuf->fields.sfmt_add.f
2659
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2660
f_right = EXTRACT_MSB0_UINT (insn, 32, 16, 6);
2661
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2663
/* Record the fields for the semantic handler. */
2664
FLD (f_left) = f_left;
2665
FLD (f_right) = f_right;
2666
FLD (f_dest) = f_dest;
2667
TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fsubd", "f_left 0x%x", 'x', f_left, "f_right 0x%x", 'x', f_right, "f_dest 0x%x", 'x', f_dest, (char *) 0));
2669
#if WITH_PROFILE_MODEL_P
2670
/* Record the fields for profiling. */
2671
if (PROFILE_MODEL_P (current_cpu))
2673
FLD (in_drg) = f_left;
2674
FLD (in_drh) = f_right;
2675
FLD (out_drf) = f_dest;
2682
extract_sfmt_ftrcdq:
2684
const IDESC *idesc = &sh64_media_insn_data[itype];
2685
CGEN_INSN_WORD insn = entire_insn;
2686
#define FLD(f) abuf->fields.sfmt_fabsd.f
2692
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2693
f_right = EXTRACT_MSB0_UINT (insn, 32, 16, 6);
2694
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2695
f_left_right = f_left;
2697
/* Record the fields for the semantic handler. */
2698
FLD (f_left_right) = f_left_right;
2699
FLD (f_dest) = f_dest;
2700
TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ftrcdq", "f_left_right 0x%x", 'x', f_left_right, "f_dest 0x%x", 'x', f_dest, (char *) 0));
2702
#if WITH_PROFILE_MODEL_P
2703
/* Record the fields for profiling. */
2704
if (PROFILE_MODEL_P (current_cpu))
2706
FLD (in_drgh) = f_left_right;
2707
FLD (out_drf) = f_dest;
2617
2714
extract_sfmt_ftrvs:
2619
2716
const IDESC *idesc = &sh64_media_insn_data[itype];
2620
CGEN_INSN_INT insn = entire_insn;
2717
CGEN_INSN_WORD insn = entire_insn;
2621
2718
#define FLD(f) abuf->fields.sfmt_add.f
2652
2749
extract_sfmt_getcfg:
2654
2751
const IDESC *idesc = &sh64_media_insn_data[itype];
2655
CGEN_INSN_INT insn = entire_insn;
2752
CGEN_INSN_WORD insn = entire_insn;
2656
2753
#define FLD(f) abuf->fields.sfmt_getcfg.f
2661
2758
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2662
f_disp6 = EXTRACT_MSB0_INT (insn, 32, 16, 6);
2759
f_disp6 = EXTRACT_MSB0_SINT (insn, 32, 16, 6);
2663
2760
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2665
2762
/* Record the fields for the semantic handler. */
2738
2835
extract_sfmt_ldb:
2740
2837
const IDESC *idesc = &sh64_media_insn_data[itype];
2741
CGEN_INSN_INT insn = entire_insn;
2838
CGEN_INSN_WORD insn = entire_insn;
2742
2839
#define FLD(f) abuf->fields.sfmt_addi.f
2747
2844
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2748
f_disp10 = EXTRACT_MSB0_INT (insn, 32, 12, 10);
2845
f_disp10 = EXTRACT_MSB0_SINT (insn, 32, 12, 10);
2749
2846
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2751
2848
/* Record the fields for the semantic handler. */
2769
2866
extract_sfmt_ldl:
2771
2868
const IDESC *idesc = &sh64_media_insn_data[itype];
2772
CGEN_INSN_INT insn = entire_insn;
2869
CGEN_INSN_WORD insn = entire_insn;
2773
2870
#define FLD(f) abuf->fields.sfmt_flds.f
2778
2875
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2779
f_disp10x4 = ((EXTRACT_MSB0_INT (insn, 32, 12, 10)) << (2));
2876
f_disp10x4 = ((EXTRACT_MSB0_SINT (insn, 32, 12, 10)) << (2));
2780
2877
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2782
2879
/* Record the fields for the semantic handler. */
2800
2897
extract_sfmt_ldq:
2802
2899
const IDESC *idesc = &sh64_media_insn_data[itype];
2803
CGEN_INSN_INT insn = entire_insn;
2900
CGEN_INSN_WORD insn = entire_insn;
2804
2901
#define FLD(f) abuf->fields.sfmt_fldd.f
2809
2906
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2810
f_disp10x8 = ((EXTRACT_MSB0_INT (insn, 32, 12, 10)) << (3));
2907
f_disp10x8 = ((EXTRACT_MSB0_SINT (insn, 32, 12, 10)) << (3));
2811
2908
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2813
2910
/* Record the fields for the semantic handler. */
2831
2928
extract_sfmt_lduw:
2833
2930
const IDESC *idesc = &sh64_media_insn_data[itype];
2834
CGEN_INSN_INT insn = entire_insn;
2931
CGEN_INSN_WORD insn = entire_insn;
2835
2932
#define FLD(f) abuf->fields.sfmt_lduw.f
2840
2937
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2841
f_disp10x2 = ((EXTRACT_MSB0_INT (insn, 32, 12, 10)) << (1));
2938
f_disp10x2 = ((EXTRACT_MSB0_SINT (insn, 32, 12, 10)) << (1));
2842
2939
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2844
2941
/* Record the fields for the semantic handler. */
2862
2959
extract_sfmt_ldhil:
2864
2961
const IDESC *idesc = &sh64_media_insn_data[itype];
2865
CGEN_INSN_INT insn = entire_insn;
2962
CGEN_INSN_WORD insn = entire_insn;
2866
2963
#define FLD(f) abuf->fields.sfmt_getcfg.f
2871
2968
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2872
f_disp6 = EXTRACT_MSB0_INT (insn, 32, 16, 6);
2969
f_disp6 = EXTRACT_MSB0_SINT (insn, 32, 16, 6);
2873
2970
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2875
2972
/* Record the fields for the semantic handler. */
2893
2990
extract_sfmt_ldhiq:
2895
2992
const IDESC *idesc = &sh64_media_insn_data[itype];
2896
CGEN_INSN_INT insn = entire_insn;
2993
CGEN_INSN_WORD insn = entire_insn;
2897
2994
#define FLD(f) abuf->fields.sfmt_getcfg.f
2902
2999
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2903
f_disp6 = EXTRACT_MSB0_INT (insn, 32, 16, 6);
3000
f_disp6 = EXTRACT_MSB0_SINT (insn, 32, 16, 6);
2904
3001
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2906
3003
/* Record the fields for the semantic handler. */
2924
3021
extract_sfmt_ldlol:
2926
3023
const IDESC *idesc = &sh64_media_insn_data[itype];
2927
CGEN_INSN_INT insn = entire_insn;
3024
CGEN_INSN_WORD insn = entire_insn;
2928
3025
#define FLD(f) abuf->fields.sfmt_getcfg.f
2933
3030
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2934
f_disp6 = EXTRACT_MSB0_INT (insn, 32, 16, 6);
3031
f_disp6 = EXTRACT_MSB0_SINT (insn, 32, 16, 6);
2935
3032
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2937
3034
/* Record the fields for the semantic handler. */
2955
3052
extract_sfmt_ldloq:
2957
3054
const IDESC *idesc = &sh64_media_insn_data[itype];
2958
CGEN_INSN_INT insn = entire_insn;
3055
CGEN_INSN_WORD insn = entire_insn;
2959
3056
#define FLD(f) abuf->fields.sfmt_getcfg.f
2964
3061
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
2965
f_disp6 = EXTRACT_MSB0_INT (insn, 32, 16, 6);
3062
f_disp6 = EXTRACT_MSB0_SINT (insn, 32, 16, 6);
2966
3063
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
2968
3065
/* Record the fields for the semantic handler. */
3308
extract_sfmt_mmacnfx_wl:
3310
const IDESC *idesc = &sh64_media_insn_data[itype];
3311
CGEN_INSN_WORD insn = entire_insn;
3312
#define FLD(f) abuf->fields.sfmt_add.f
3317
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3318
f_right = EXTRACT_MSB0_UINT (insn, 32, 16, 6);
3319
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3321
/* Record the fields for the semantic handler. */
3322
FLD (f_dest) = f_dest;
3323
FLD (f_left) = f_left;
3324
FLD (f_right) = f_right;
3325
TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mmacnfx_wl", "f_dest 0x%x", 'x', f_dest, "f_left 0x%x", 'x', f_left, "f_right 0x%x", 'x', f_right, (char *) 0));
3327
#if WITH_PROFILE_MODEL_P
3328
/* Record the fields for profiling. */
3329
if (PROFILE_MODEL_P (current_cpu))
3331
FLD (in_rd) = f_dest;
3332
FLD (in_rm) = f_left;
3333
FLD (in_rn) = f_right;
3334
FLD (out_rd) = f_dest;
3211
3341
extract_sfmt_movi:
3213
3343
const IDESC *idesc = &sh64_media_insn_data[itype];
3214
CGEN_INSN_INT insn = entire_insn;
3344
CGEN_INSN_WORD insn = entire_insn;
3215
3345
#define FLD(f) abuf->fields.sfmt_movi.f
3219
f_imm16 = EXTRACT_MSB0_INT (insn, 32, 6, 16);
3349
f_imm16 = EXTRACT_MSB0_SINT (insn, 32, 6, 16);
3220
3350
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3222
3352
/* Record the fields for the semantic handler. */
3238
extract_sfmt_mpermw:
3240
const IDESC *idesc = &sh64_media_insn_data[itype];
3241
CGEN_INSN_INT insn = entire_insn;
3242
#define FLD(f) abuf->fields.sfmt_add.f
3247
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3248
f_right = EXTRACT_MSB0_UINT (insn, 32, 16, 6);
3249
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3251
/* Record the fields for the semantic handler. */
3252
FLD (f_left) = f_left;
3253
FLD (f_right) = f_right;
3254
FLD (f_dest) = f_dest;
3255
TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mpermw", "f_left 0x%x", 'x', f_left, "f_right 0x%x", 'x', f_right, "f_dest 0x%x", 'x', f_dest, (char *) 0));
3257
#if WITH_PROFILE_MODEL_P
3258
/* Record the fields for profiling. */
3259
if (PROFILE_MODEL_P (current_cpu))
3261
FLD (in_rm) = f_left;
3262
FLD (in_rn) = f_right;
3263
FLD (out_rd) = f_dest;
3270
3368
extract_sfmt_nop:
3272
3370
const IDESC *idesc = &sh64_media_insn_data[itype];
3273
#define FLD(f) abuf->fields.fmt_empty.f
3371
#define FLD(f) abuf->fields.sfmt_empty.f
3276
3374
/* Record the fields for the semantic handler. */
3283
3381
extract_sfmt_ori:
3285
3383
const IDESC *idesc = &sh64_media_insn_data[itype];
3286
CGEN_INSN_INT insn = entire_insn;
3384
CGEN_INSN_WORD insn = entire_insn;
3287
3385
#define FLD(f) abuf->fields.sfmt_ori.f
3292
3390
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3293
f_imm10 = EXTRACT_MSB0_INT (insn, 32, 12, 10);
3391
f_imm10 = EXTRACT_MSB0_SINT (insn, 32, 12, 10);
3294
3392
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3296
3394
/* Record the fields for the semantic handler. */
3414
const IDESC *idesc = &sh64_media_insn_data[itype];
3415
CGEN_INSN_WORD insn = entire_insn;
3416
#define FLD(f) abuf->fields.sfmt_xori.f
3419
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3421
/* Record the fields for the semantic handler. */
3422
FLD (f_left) = f_left;
3423
TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_prefi", "f_left 0x%x", 'x', f_left, (char *) 0));
3425
#if WITH_PROFILE_MODEL_P
3426
/* Record the fields for profiling. */
3427
if (PROFILE_MODEL_P (current_cpu))
3429
FLD (in_rm) = f_left;
3430
FLD (out_rm) = f_left;
3314
3437
extract_sfmt_pta:
3316
3439
const IDESC *idesc = &sh64_media_insn_data[itype];
3317
CGEN_INSN_INT insn = entire_insn;
3440
CGEN_INSN_WORD insn = entire_insn;
3318
3441
#define FLD(f) abuf->fields.sfmt_pta.f
3322
f_disp16 = ((((EXTRACT_MSB0_INT (insn, 32, 6, 16)) << (2))) + (pc));
3445
f_disp16 = ((((EXTRACT_MSB0_SINT (insn, 32, 6, 16)) << (2))) + (pc));
3323
3446
f_tra = EXTRACT_MSB0_UINT (insn, 32, 25, 3);
3325
3448
/* Record the fields for the semantic handler. */
3397
3520
extract_sfmt_putcfg:
3399
3522
const IDESC *idesc = &sh64_media_insn_data[itype];
3400
CGEN_INSN_INT insn = entire_insn;
3523
CGEN_INSN_WORD insn = entire_insn;
3401
3524
#define FLD(f) abuf->fields.sfmt_getcfg.f
3406
3529
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3407
f_disp6 = EXTRACT_MSB0_INT (insn, 32, 16, 6);
3530
f_disp6 = EXTRACT_MSB0_SINT (insn, 32, 16, 6);
3408
3531
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3410
3533
/* Record the fields for the semantic handler. */
3486
extract_sfmt_sharil:
3488
const IDESC *idesc = &sh64_media_insn_data[itype];
3489
CGEN_INSN_INT insn = entire_insn;
3490
#define FLD(f) abuf->fields.sfmt_shari.f
3495
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3496
f_uimm6 = EXTRACT_MSB0_UINT (insn, 32, 16, 6);
3497
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3499
/* Record the fields for the semantic handler. */
3500
FLD (f_left) = f_left;
3501
FLD (f_uimm6) = f_uimm6;
3502
FLD (f_dest) = f_dest;
3503
TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sharil", "f_left 0x%x", 'x', f_left, "f_uimm6 0x%x", 'x', f_uimm6, "f_dest 0x%x", 'x', f_dest, (char *) 0));
3505
#if WITH_PROFILE_MODEL_P
3506
/* Record the fields for profiling. */
3507
if (PROFILE_MODEL_P (current_cpu))
3509
FLD (in_rm) = f_left;
3510
FLD (out_rd) = f_dest;
3517
3609
extract_sfmt_shori:
3519
3611
const IDESC *idesc = &sh64_media_insn_data[itype];
3520
CGEN_INSN_INT insn = entire_insn;
3612
CGEN_INSN_WORD insn = entire_insn;
3521
3613
#define FLD(f) abuf->fields.sfmt_shori.f
3545
3637
extract_sfmt_stb:
3547
3639
const IDESC *idesc = &sh64_media_insn_data[itype];
3548
CGEN_INSN_INT insn = entire_insn;
3640
CGEN_INSN_WORD insn = entire_insn;
3549
3641
#define FLD(f) abuf->fields.sfmt_addi.f
3554
3646
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3555
f_disp10 = EXTRACT_MSB0_INT (insn, 32, 12, 10);
3647
f_disp10 = EXTRACT_MSB0_SINT (insn, 32, 12, 10);
3556
3648
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3558
3650
/* Record the fields for the semantic handler. */
3576
3668
extract_sfmt_stl:
3578
3670
const IDESC *idesc = &sh64_media_insn_data[itype];
3579
CGEN_INSN_INT insn = entire_insn;
3671
CGEN_INSN_WORD insn = entire_insn;
3580
3672
#define FLD(f) abuf->fields.sfmt_flds.f
3585
3677
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3586
f_disp10x4 = ((EXTRACT_MSB0_INT (insn, 32, 12, 10)) << (2));
3678
f_disp10x4 = ((EXTRACT_MSB0_SINT (insn, 32, 12, 10)) << (2));
3587
3679
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3589
3681
/* Record the fields for the semantic handler. */
3607
3699
extract_sfmt_stq:
3609
3701
const IDESC *idesc = &sh64_media_insn_data[itype];
3610
CGEN_INSN_INT insn = entire_insn;
3702
CGEN_INSN_WORD insn = entire_insn;
3611
3703
#define FLD(f) abuf->fields.sfmt_fldd.f
3616
3708
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3617
f_disp10x8 = ((EXTRACT_MSB0_INT (insn, 32, 12, 10)) << (3));
3709
f_disp10x8 = ((EXTRACT_MSB0_SINT (insn, 32, 12, 10)) << (3));
3618
3710
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3620
3712
/* Record the fields for the semantic handler. */
3638
3730
extract_sfmt_stw:
3640
3732
const IDESC *idesc = &sh64_media_insn_data[itype];
3641
CGEN_INSN_INT insn = entire_insn;
3733
CGEN_INSN_WORD insn = entire_insn;
3642
3734
#define FLD(f) abuf->fields.sfmt_lduw.f
3647
3739
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3648
f_disp10x2 = ((EXTRACT_MSB0_INT (insn, 32, 12, 10)) << (1));
3740
f_disp10x2 = ((EXTRACT_MSB0_SINT (insn, 32, 12, 10)) << (1));
3649
3741
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3651
3743
/* Record the fields for the semantic handler. */
3669
3761
extract_sfmt_sthil:
3671
3763
const IDESC *idesc = &sh64_media_insn_data[itype];
3672
CGEN_INSN_INT insn = entire_insn;
3764
CGEN_INSN_WORD insn = entire_insn;
3673
3765
#define FLD(f) abuf->fields.sfmt_getcfg.f
3678
3770
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3679
f_disp6 = EXTRACT_MSB0_INT (insn, 32, 16, 6);
3771
f_disp6 = EXTRACT_MSB0_SINT (insn, 32, 16, 6);
3680
3772
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3682
3774
/* Record the fields for the semantic handler. */
3700
3792
extract_sfmt_sthiq:
3702
3794
const IDESC *idesc = &sh64_media_insn_data[itype];
3703
CGEN_INSN_INT insn = entire_insn;
3795
CGEN_INSN_WORD insn = entire_insn;
3704
3796
#define FLD(f) abuf->fields.sfmt_getcfg.f
3709
3801
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3710
f_disp6 = EXTRACT_MSB0_INT (insn, 32, 16, 6);
3802
f_disp6 = EXTRACT_MSB0_SINT (insn, 32, 16, 6);
3711
3803
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3713
3805
/* Record the fields for the semantic handler. */
3731
3823
extract_sfmt_stlol:
3733
3825
const IDESC *idesc = &sh64_media_insn_data[itype];
3734
CGEN_INSN_INT insn = entire_insn;
3826
CGEN_INSN_WORD insn = entire_insn;
3735
3827
#define FLD(f) abuf->fields.sfmt_getcfg.f
3740
3832
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3741
f_disp6 = EXTRACT_MSB0_INT (insn, 32, 16, 6);
3833
f_disp6 = EXTRACT_MSB0_SINT (insn, 32, 16, 6);
3742
3834
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3744
3836
/* Record the fields for the semantic handler. */
3762
3854
extract_sfmt_stloq:
3764
3856
const IDESC *idesc = &sh64_media_insn_data[itype];
3765
CGEN_INSN_INT insn = entire_insn;
3857
CGEN_INSN_WORD insn = entire_insn;
3766
3858
#define FLD(f) abuf->fields.sfmt_getcfg.f
3771
3863
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3772
f_disp6 = EXTRACT_MSB0_INT (insn, 32, 16, 6);
3864
f_disp6 = EXTRACT_MSB0_SINT (insn, 32, 16, 6);
3773
3865
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3775
3867
/* Record the fields for the semantic handler. */
3978
4070
extract_sfmt_xori:
3980
4072
const IDESC *idesc = &sh64_media_insn_data[itype];
3981
CGEN_INSN_INT insn = entire_insn;
4073
CGEN_INSN_WORD insn = entire_insn;
3982
4074
#define FLD(f) abuf->fields.sfmt_xori.f
3987
4079
f_left = EXTRACT_MSB0_UINT (insn, 32, 6, 6);
3988
f_imm6 = EXTRACT_MSB0_INT (insn, 32, 16, 6);
4080
f_imm6 = EXTRACT_MSB0_SINT (insn, 32, 16, 6);
3989
4081
f_dest = EXTRACT_MSB0_UINT (insn, 32, 22, 6);
3991
4083
/* Record the fields for the semantic handler. */