Coverage Report

Created: 2025-06-24 06:45

/src/binutils-gdb/include/opcode/ft32.h
Line
Count
Source (jump to first uncovered line)
1
/* Definitions for decoding the ft32 opcode table.
2
   Copyright (C) 2013-2025 Free Software Foundation, Inc.
3
   Contributed by FTDI (support@ftdichip.com)
4
5
This program is free software; you can redistribute it and/or modify
6
it under the terms of the GNU General Public License as published by
7
the Free Software Foundation; either version 2 of the License, or
8
(at your option) any later version.
9
10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
GNU General Public License for more details.
14
15
You should have received a copy of the GNU General Public License
16
along with this program; if not, write to the Free Software
17
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
18
02110-1301, USA.  */
19
20
typedef struct ft32_opc_info_t
21
{
22
  const char *name;
23
  int dw;
24
  unsigned int mask;
25
  unsigned int bits;
26
  int fields;
27
} ft32_opc_info_t;
28
29
#define FT32_PAT_ALUOP    0x08
30
#define FT32_PAT_LDA      0x18
31
#define FT32_PAT_TOCI     0x01
32
#define FT32_PAT_CMPOP    0x0b
33
#define FT32_PAT_STA      0x17
34
#define FT32_PAT_EXA      0x07
35
#define FT32_PAT_LDK      0x0c
36
#define FT32_PAT_FFUOP    0x1e
37
#define FT32_PAT_LDI      0x15
38
#define FT32_PAT_STI      0x16
39
#define FT32_PAT_EXI      0x1d
40
#define FT32_PAT_POP      0x11
41
#define FT32_PAT_LPM      0x0d
42
#define FT32_PAT_LINK     0x12
43
#define FT32_PAT_TOC      0x00
44
#define FT32_PAT_PUSH     0x10
45
#define FT32_PAT_RETURN   0x14
46
#define FT32_PAT_UNLINK   0x13
47
#define FT32_PAT_LPMI     0x19
48
49
9.24k
#define FT32_FLD_CBCRCV (1 << 0)
50
#define FT32_FLD_INT (1 << 1)
51
#define FT32_FLD_INT_BIT 26
52
#define FT32_FLD_INT_SIZ 1
53
#define FT32_FLD_DW (1 << 2)
54
21.0k
#define FT32_FLD_DW_BIT 25
55
#define FT32_FLD_DW_SIZ 2
56
5.47k
#define FT32_FLD_CB (1 << 3)
57
14.7k
#define FT32_FLD_CB_BIT 22
58
14.7k
#define FT32_FLD_CB_SIZ 5
59
19.5k
#define FT32_FLD_R_D (1 << 4)
60
20.1k
#define FT32_FLD_R_D_BIT 20
61
#define FT32_FLD_R_D_SIZ 5
62
5.47k
#define FT32_FLD_CR (1 << 5)
63
5.47k
#define FT32_FLD_CR_BIT 20
64
5.47k
#define FT32_FLD_CR_SIZ 2
65
5.47k
#define FT32_FLD_CV (1 << 6)
66
14.7k
#define FT32_FLD_CV_BIT 19
67
14.7k
#define FT32_FLD_CV_SIZ 1
68
#define FT32_FLD_BT (1 << 7)
69
#define FT32_FLD_BT_BIT 18
70
#define FT32_FLD_BT_SIZ 1
71
13.2k
#define FT32_FLD_R_1 (1 << 8)
72
14.8k
#define FT32_FLD_R_1_BIT 15
73
#define FT32_FLD_R_1_SIZ 5
74
8.80k
#define FT32_FLD_RIMM (1 << 9)
75
8.80k
#define FT32_FLD_RIMM_BIT 4
76
8.80k
#define FT32_FLD_RIMM_SIZ 11
77
886
#define FT32_FLD_R_2 (1 << 10)
78
886
#define FT32_FLD_R_2_BIT 4
79
#define FT32_FLD_R_2_SIZ 5
80
3.14k
#define FT32_FLD_K20 (1 << 11)
81
#define FT32_FLD_K20_BIT 0
82
3.14k
#define FT32_FLD_K20_SIZ 20
83
15.5k
#define FT32_FLD_PA (1 << 12)
84
#define FT32_FLD_PA_BIT 0
85
15.5k
#define FT32_FLD_PA_SIZ 18
86
1.46k
#define FT32_FLD_AA (1 << 13)
87
#define FT32_FLD_AA_BIT 0
88
1.46k
#define FT32_FLD_AA_SIZ 17
89
402
#define FT32_FLD_K16 (1 << 14)
90
#define FT32_FLD_K16_BIT 0
91
402
#define FT32_FLD_K16_SIZ 16
92
4.95k
#define FT32_FLD_K15 (1 << 15)
93
#define FT32_FLD_K15_BIT 0
94
4.95k
#define FT32_FLD_K15_SIZ 15
95
#define FT32_FLD_AL (1 << 16)
96
#define FT32_FLD_AL_BIT 0
97
#define FT32_FLD_AL_SIZ 4
98
99
#define FT32_IS_CALL(inst)   (((inst) & 0xfffc0000) == 0x00340000)
100
#define FT32_IS_PUSH(inst)   (((inst) & 0xfff00000) == 0x84000000)
101
#define FT32_PUSH_REG(inst)  (((inst) >> 15) & 0x1f)
102
#define FT32_IS_LINK(inst)   (((inst) & 0xffff0000) == 0x95d00000)
103
#define FT32_LINK_SIZE(inst) ((inst) & 0xffff)
104
105
562
#define FT32_FLD_R_D_POST (1 << 17)
106
1.59k
#define FT32_FLD_R_1_POST (1 << 18)
107
108
static const unsigned int sc_form_0[] = {
109
0x44000000, 0x44000002, 0x44000004, 0x44000005, 0x4400000b,
110
0x44000010, 0x44000012, 0x44000014, 0x44000015, 0x44000018,
111
0x4400001b, 0x44000020, 0x44000022, 0x44000024, 0x44000025,
112
0x4400002b, 0x44000030, 0x44000032, 0x44000034, 0x44000035,
113
0x4400003b, 0x44000040, 0x44000042, 0x44000044, 0x44000045,
114
0x4400004b, 0x44000050, 0x44000060, 0x44000062, 0x44000065,
115
0x44000070, 0x44000072, 0x44000075, 0x44000080, 0x44000082,
116
0x44000090, 0x44000092, 0x440000a0, 0x440000a2, 0x440000b0,
117
0x440000d0, 0x440000d2, 0x440000d5, 0x440000e0, 0x440000e2,
118
0x440000f0, 0x440000f2, 0x440000f5, 0x44000100, 0x44000102,
119
0x44000110, 0x44000120, 0x44000122, 0x44000130, 0x44000140,
120
0x44000170, 0x44000180, 0x44000190, 0x440001a0, 0x440001b0,
121
0x440001e0, 0x440001f0, 0x44004000, 0x44004003, 0x4400400c,
122
0x4400400d, 0x44004010, 0x44004011, 0x44004013, 0x44004014,
123
0x44004016, 0x44004019, 0x4400401a, 0x44004020, 0x44004021,
124
0x44004028, 0x4400402a, 0x44004034, 0x44004038, 0x44004039,
125
0x44004040, 0x44004048, 0x44004058, 0x44004064, 0x44004074,
126
0x44004080, 0x44004081, 0x44004088, 0x44004089, 0x44004098,
127
0x440040c0, 0x440040ca, 0x440040f4, 0x44004100, 0x44004108,
128
0x44004109, 0x4400410a, 0x4400410b, 0x44004180, 0x44004182,
129
0x440041c0, 0x440041c2, 0x440041f4, 0x44004200, 0x44004202,
130
0x4400420b, 0x4400421b, 0x4400422b, 0x44004240, 0x44004242,
131
0x4400424b, 0x4400425b, 0x4400426b, 0x4400427b, 0x44004280,
132
0x44004282, 0x440042ab, 0x440042bb, 0x440042c0, 0x440042c2,
133
0x44004300, 0x44004340, 0x440043c3, 0x4400440b, 0x44004543,
134
0x44004553, 0x440047f4, 0x44004800, 0x44004980, 0x44004a0b,
135
0x44004a80, 0x44004dc0, 0x44004ff4, 0x44005003, 0x44005353,
136
0x4400537b, 0x440053e3, 0x44005700, 0x4400594b, 0x4400620b,
137
0x4400621b, 0x4400622b, 0x4400623b, 0x4400624b, 0x4400625b,
138
0x4400626b, 0x4400627b, 0x4400628b, 0x4400629b, 0x440062bb,
139
0x440062fb, 0x4400633b, 0x4400637b, 0x44006383, 0x44007f00,
140
0x44007f80, 0x44007fc0, 0x44007fe0, 0x44007ff0, 0x44007ff3, 0x44007ff6
141
};
142
static const unsigned int sc_form_1[] = {
143
0x44000002, 0x44008002, 0x44010002, 0x44010008, 0x44018002,
144
0x44020002, 0x44030002, 0x44038002
145
};
146
static const unsigned int sc_form_2[] = {
147
0x59e04002, 0x59e04012, 0x59e04022, 0x59e04032, 0x59e04042,
148
0x59e04052, 0x59e04072, 0x59e04082, 0x59e07ff2, 0x5de00002,
149
0x5de00012, 0x5de00022, 0x5de00032, 0x5de00042, 0x5de00052,
150
0x5de00062, 0x5de00072, 0x5de00082, 0x5de000a2, 0x5de000d2,
151
0x5de000e2, 0x5de000f2, 0x5de00102, 0x5de00112, 0x5de00122,
152
0x5de00132, 0x5de00172, 0x5de04002, 0x5de04012, 0x5de04022,
153
0x5de04032, 0x5de04042, 0x5de04052, 0x5de04062, 0x5de04072,
154
0x5de04082, 0x5de04092, 0x5de040f2, 0x5de04102, 0x5de04112,
155
0x5de04142, 0x5de04162, 0x5de041b2, 0x5de041f2, 0x5de04202,
156
0x5de0420c, 0x5de0421c, 0x5de0422c, 0x5de0423c, 0x5de04242,
157
0x5de0424c, 0x5de0425c, 0x5de0426c, 0x5de0427c, 0x5de0428c,
158
0x5de0429c, 0x5de042ac, 0x5de042cc, 0x5de042dc, 0x5de042ec,
159
0x5de042fc, 0x5de0430c, 0x5de0431c, 0x5de0433c, 0x5de0436c,
160
0x5de0437c, 0x5de04382, 0x5de043ac, 0x5de043bc, 0x5de043cc,
161
0x5de043dc, 0x5de04ff2, 0x5de07ff2, 0x84000000
162
};
163
static const unsigned int sc_form_3[] = {
164
0x44000010, 0x44000024, 0x44000025, 0x44000030, 0x44000034,
165
0x44004000, 0x4400400c, 0x4400400d, 0x44004010, 0x44004014,
166
0x44004028, 0x44004038, 0x44004040, 0x440040ca, 0x44004109,
167
0x44004880, 0x44004ac0, 0x44004e00, 0x44004e80, 0x44004ff4,
168
0x4400500c, 0x44005200, 0x44005680, 0x44005700, 0x4400620b,
169
0x44007f80, 0x44008020, 0x44008024, 0x4400c000, 0x4400c00c,
170
0x4400c00d, 0x4400c010, 0x4400c028, 0x4400c038, 0x4400c1f9,
171
0x4400cff4, 0x4400d00c, 0x4400d173, 0x4400ff80, 0x4400fff0,
172
0x44010030, 0x44014000, 0x4401400c, 0x4401400d, 0x44014010,
173
0x44014028, 0x44014074, 0x44014080, 0x440143f3, 0x44014ff4,
174
0x4401500c, 0x44015743, 0x44017ff0, 0x44018030, 0x4401c000,
175
0x4401c00c, 0x4401c010, 0x4401cff4, 0x4401d00c, 0x44020100,
176
0x44024000, 0x44024014, 0x44027f80, 0x4402c000, 0x44030085,
177
0x44034000, 0x44034109, 0x4403c000, 0x44044000, 0x44044109,
178
0x4404410b, 0x4404c000, 0x440680e0, 0x4406c000, 0x4406c040,
179
0x4406c080, 0x4406c0c0, 0x4406c300, 0x4406c3c0, 0x4406c900,
180
0x4406cac0, 0x4406cb40, 0x4406cbc0, 0x4406ce80, 0x4406d5c0,
181
0x4406d680, 0x4406d700, 0x4406d740, 0x4406d780, 0x4406dfc0,
182
0x44074000, 0x44074010, 0x44074e80, 0x4407c000, 0x4407c00d,
183
0x4407c074, 0x44084000, 0x4408c000, 0x44094000, 0x4409c000,
184
0x440a4000, 0x440ac000, 0x440b4000, 0x440bc000, 0x440c4000,
185
0x440c4040, 0x440cc000, 0x440d4000, 0x440dc000, 0x440ef340,
186
0x440ef400, 0x440ef440, 0x440ef4c0, 0x440ef540, 0x440ef5c0,
187
0x440ef6b0, 0x440ef700, 0x440ef780, 0x440ef8c0, 0x440f420d,
188
0x440f421d, 0x440f426d, 0x440fc180, 0x440fc1a0, 0x440fc1b0,
189
0x440fc1c0, 0x440fc200, 0x440fc240, 0x440fc280, 0x440fc380,
190
0x440fc840, 0x440fc8c0, 0x440fc900, 0x440fc980, 0x440fcd80,
191
0x64000000, 0x64000001, 0x64000002, 0x64000003, 0x64000004,
192
0x64000005, 0x64000006, 0x64000007, 0x64000008, 0x64000009,
193
0x6400000a, 0x6400000b, 0x6400000c, 0x6400000d, 0x6400000e,
194
0x6400000f, 0x64000010, 0x64000011, 0x64000012, 0x64000013,
195
0x64000014, 0x64000015, 0x64000017, 0x64000018, 0x64000019,
196
0x6400001a, 0x6400001d, 0x64000020, 0x64000023, 0x64000024,
197
0x64000027, 0x6400002b, 0x6400002c, 0x6400002d, 0x64000030,
198
0x64000035, 0x6400003c, 0x64000040, 0x64000048, 0x64000064,
199
0x6400006c, 0x64000080, 0x640000ff, 0x64000100, 0x640001b0,
200
0x640001b8, 0x64000200, 0x64000218, 0x64000240, 0x6400024c,
201
0x64000250, 0x640003e8, 0x64000400, 0x64000409, 0x64000554,
202
0x64000600, 0x64000690, 0x64000730, 0x640007ff, 0x64000800,
203
0x64000900, 0x64000fff, 0x64001000, 0x6400182c, 0x64001b70,
204
0x64001c1c, 0x64001c24, 0x64001fff, 0x64002000, 0x64003598,
205
0x640036ec, 0x64003fff, 0x640052c0, 0x640054e4, 0x64005a3c,
206
0x64005fa4, 0x64006468, 0x64006718, 0x64008000, 0x6400c000,
207
0x6400ffff, 0x64010000, 0x64010008, 0x640102a0, 0x64014515,
208
0x64040000, 0x64050000, 0x6407c000, 0x640ff800, 0x640ffc00,
209
0x640ffc01, 0x640ffc02, 0x640fffff, 0x8c000000, 0x94000000,
210
0x94000018, 0x9400001c, 0x94000020, 0x98000000, 0xa0000000,
211
0xa8000000, 0xa8000001, 0xa8000002, 0xa8000003, 0xa8008000,
212
0xa8008002, 0xa8010000, 0xa8018000, 0xa8020000, 0xa8068000,
213
0xa8068005, 0xa8068006, 0xa8068007, 0xa806800f, 0xa8068040,
214
0xa8068043, 0xa8068054, 0xa8070000, 0xa8078000, 0xa8080000,
215
0xa8090000, 0xa80b0000, 0xa80f801b, 0xaa000000, 0xaa008000,
216
0xaa008002, 0xaa00800c, 0xaa010000, 0xaa068000, 0xaa068002,
217
0xaa068004, 0xaa068006, 0xaa068008, 0xaa06800a, 0xaa06800c,
218
0xaa068024, 0xaa070000, 0xaa070002, 0xaa07000c, 0xaa078000,
219
0xaa078002, 0xac000000, 0xac000004, 0xac000008, 0xac00000c,
220
0xac000010, 0xac000014, 0xac000018, 0xac00001c, 0xac000020,
221
0xac000024, 0xac000028, 0xac00002c, 0xac000030, 0xac000038,
222
0xac00003c, 0xac000040, 0xac000044, 0xac000058, 0xac00006c,
223
0xac008000, 0xac008004, 0xac008008, 0xac00800c, 0xac008010,
224
0xac008018, 0xac008020, 0xac008024, 0xac008028, 0xac008030,
225
0xac008034, 0xac008038, 0xac00803c, 0xac008044, 0xac008070,
226
0xac008078, 0xac010000, 0xac010004, 0xac010008, 0xac01000c,
227
0xac010010, 0xac01002c, 0xac018000, 0xac018004, 0xac018008,
228
0xac020000, 0xac020004, 0xac020008, 0xac028000, 0xac030000,
229
0xac038000, 0xac048000, 0xac050000, 0xac068000, 0xac068004,
230
0xac068008, 0xac06800c, 0xac068010, 0xac068014, 0xac068018,
231
0xac06801c, 0xac068020, 0xac068024, 0xac068028, 0xac06802c,
232
0xac068030, 0xac068034, 0xac068038, 0xac06803c, 0xac068040,
233
0xac068044, 0xac068048, 0xac06804c, 0xac068050, 0xac068058,
234
0xac070000, 0xac070004, 0xac070008, 0xac07000c, 0xac070010,
235
0xac070014, 0xac070018, 0xac07001c, 0xac070024, 0xac070028,
236
0xac07002c, 0xac070038, 0xac07003c, 0xac070040, 0xac070044,
237
0xac070048, 0xac07004c, 0xac070054, 0xac078000, 0xac078004,
238
0xac078008, 0xac07800c, 0xac078024, 0xac07803c, 0xac080000,
239
0xac080004, 0xac080008, 0xac08003c, 0xac088000, 0xac088004,
240
0xac088008, 0xac08800c, 0xac090000, 0xac098000, 0xac0a0000,
241
0xac0a0004, 0xac0a8000, 0xac0b0000, 0xac0c0000, 0xac0d8004,
242
0xac0d8008, 0xac0e8090, 0xac0e8094, 0xac0e80fc, 0xac0f8018,
243
0xac0f801c, 0xac0f8020, 0xac0f8024, 0xac0f8028, 0xac0f802c,
244
0xac0f8030, 0xac0f8034, 0xac0f8038, 0xac0f803c, 0xac0f8040,
245
0xac0f8044, 0xac0f8048, 0xac0f804c, 0xac0f8050, 0xac0f8054,
246
0xac0f8058, 0xb0000000, 0xb0000006, 0xb0000009, 0xb0000018,
247
0xb0000019, 0xb000001b, 0xb0008000, 0xb0010000, 0xb0018000,
248
0xb0018087, 0xb0020000, 0xb0030000, 0xb0070000, 0xb0078000,
249
0xb0080000, 0xb2000000, 0xb2000006, 0xb200000c, 0xb2008000,
250
0xb200800c, 0xb2010000, 0xb2018000, 0xb2020000, 0xb2078000,
251
0xb4000000, 0xb4000004, 0xb4000008, 0xb400000c, 0xb4000010,
252
0xb4000014, 0xb4000018, 0xb400001c, 0xb4000020, 0xb4000024,
253
0xb4000028, 0xb400002c, 0xb4000030, 0xb4000034, 0xb4000038,
254
0xb400003c, 0xb4000040, 0xb4000044, 0xb4000048, 0xb4000050,
255
0xb4000054, 0xb400006c, 0xb4008000, 0xb4008004, 0xb4008008,
256
0xb400800c, 0xb4008010, 0xb4008014, 0xb4008018, 0xb400801c,
257
0xb4008020, 0xb4008024, 0xb4008028, 0xb400802c, 0xb4008034,
258
0xb4008038, 0xb4008040, 0xb4008044, 0xb400806c, 0xb4008070,
259
0xb4010000, 0xb4010004, 0xb4010008, 0xb401000c, 0xb4010010,
260
0xb4010018, 0xb401001c, 0xb4010020, 0xb4010024, 0xb4010028,
261
0xb401002c, 0xb4018000, 0xb4018004, 0xb4018008, 0xb4018018,
262
0xb401801c, 0xb4020000, 0xb4020004, 0xb4020008, 0xb402000c,
263
0xb4020018, 0xb4028000, 0xb4028018, 0xb4030000, 0xb4030008,
264
0xb4030018, 0xb4038000, 0xb4068000, 0xb4068004, 0xb4068008,
265
0xb406800c, 0xb4068018, 0xb406801c, 0xb4068020, 0xb4068024,
266
0xb4068028, 0xb4070000, 0xb4070004, 0xb4070008, 0xb4070010,
267
0xb4070018, 0xb4070024, 0xb4070028, 0xb4078000, 0xb4078024,
268
0xb4080000, 0xb4080004, 0xb4090000, 0xb4098000, 0xb40c8000
269
};
270
271
41.5k
#define N_SC_FORM0  (sizeof (sc_form_0) / sizeof (unsigned int))
272
27.1k
#define N_SC_FORM1  (sizeof (sc_form_1) / sizeof (unsigned int))
273
16.7k
#define N_SC_FORM2  (sizeof (sc_form_2) / sizeof (unsigned int))
274
0
#define N_SC_FORM3  (sizeof (sc_form_3) / sizeof (unsigned int))
275
276
static int
277
sc_compar (const void *va, const void *vb)
278
0
{
279
0
  const unsigned int *a = (unsigned int *) va;
280
0
  const unsigned int *b = (unsigned int *) vb;
281
0
  return (*a - *b);
282
0
}
Unexecuted instantiation: elf32-ft32.c:sc_compar
Unexecuted instantiation: ft32-dis.c:sc_compar
Unexecuted instantiation: ft32-opc.c:sc_compar
283
284
static int ATTRIBUTE_UNUSED
285
ft32_shortcode (unsigned int op32, unsigned int *sc)
286
0
{
287
0
  unsigned int Rd_mask = 31 << 20;
288
0
  unsigned int R1_mask = 31 << 15;
289
0
  unsigned int R2_mask = 2047 << 4;
290
0
  unsigned int Rd = (op32 >> 20) & 31;
291
0
  unsigned int R1 = (op32 >> 15) & 31;
292
0
  unsigned int R2 = (op32 >> 4) & 2047;
293
0
  unsigned int lookup;
294
0
  unsigned int *find = NULL;
295
0
  unsigned int code = 0, r = 0;
296
297
  /* Form 0 */
298
0
  if (Rd == R1)
299
0
    {
300
0
      lookup = op32 & ~Rd_mask & ~R1_mask;
301
0
      find = (unsigned int *) bsearch (&lookup, sc_form_0, N_SC_FORM0,
302
0
               sizeof (unsigned int), sc_compar);
303
0
      code = find - sc_form_0;
304
0
      r = Rd;
305
0
    }
306
307
  /* Form 1 */
308
0
  if ((find == NULL) && (Rd == R2))
309
0
    {
310
0
      lookup = op32 & ~Rd_mask & ~R2_mask;
311
0
      find = (unsigned int *) bsearch (&lookup, sc_form_1, N_SC_FORM1,
312
0
               sizeof (unsigned int), sc_compar);
313
0
      code = find - sc_form_1 + N_SC_FORM0;
314
0
      r = Rd;
315
0
    }
316
317
  /* Form 2 */
318
0
  if (find == NULL)
319
0
    {
320
0
      lookup = op32 & ~R1_mask;
321
0
      find = (unsigned int *) bsearch (&lookup, sc_form_2, N_SC_FORM2,
322
0
               sizeof (unsigned int), sc_compar);
323
0
      code = find - sc_form_2 + (N_SC_FORM0 + N_SC_FORM1);
324
0
      r = R1;
325
0
    }
326
327
  /* Form 3 */
328
0
  if (find == NULL)
329
0
    {
330
0
      lookup = op32 & ~Rd_mask;
331
0
      find = (unsigned int *) bsearch (&lookup, sc_form_3, N_SC_FORM3,
332
0
               sizeof (unsigned int), sc_compar);
333
0
      code = find - sc_form_3 + (N_SC_FORM0 + N_SC_FORM1 + N_SC_FORM2);
334
0
      r = Rd;
335
0
    }
336
337
0
  *sc = (code << 5) | r;
338
339
0
  return (find != NULL);
340
0
}
Unexecuted instantiation: elf32-ft32.c:ft32_shortcode
Unexecuted instantiation: ft32-dis.c:ft32_shortcode
Unexecuted instantiation: ft32-opc.c:ft32_shortcode
341
342
static int ATTRIBUTE_UNUSED
343
ft32_split_shortcode (unsigned int op32, unsigned int code15[2])
344
0
{
345
0
  int code3;
346
0
  unsigned int code30;
347
348
0
  switch (op32 >> 27)
349
0
    {
350
0
    case 2:
351
0
      code3 = 0;
352
0
      break;
353
0
    case 3:
354
0
      code3 = 1;
355
0
      break;
356
0
    case 4:
357
0
      code3 = 2;
358
0
      break;
359
0
    case 5:
360
0
      code3 = 3;
361
0
      break;
362
0
    case 6:
363
0
      code3 = 4;
364
0
      break;
365
0
    case 9:
366
0
      code3 = 5;
367
0
      break;
368
0
    case 10:
369
0
      code3 = 6;
370
0
      break;
371
0
    case 14:
372
0
      code3 = 7;
373
0
      break;
374
0
    default:
375
0
      code3 = -1;
376
0
      break;
377
0
    }
378
379
0
  if (code3 == -1)
380
0
    {
381
0
      code15[0] = 0;
382
0
      code15[1] = 0;
383
0
      return 0;
384
0
    }
385
0
  else
386
0
    {
387
0
      code30 = ((op32 & 0x07ffffff) << 3) | code3;
388
0
      code15[0] = code30 & 0x7fff;
389
0
      code15[1] = (code30 >> 15) & 0x7fff;
390
0
      return 1;
391
0
    }
392
0
}
Unexecuted instantiation: elf32-ft32.c:ft32_split_shortcode
Unexecuted instantiation: ft32-dis.c:ft32_split_shortcode
Unexecuted instantiation: ft32-opc.c:ft32_split_shortcode
393
394
static unsigned int ATTRIBUTE_UNUSED
395
ft32_merge_shortcode (unsigned int code15[2])
396
0
{
397
0
  static const unsigned char pat3[] = { 2, 3, 4, 5, 6, 9, 10, 14 };
398
399
0
  unsigned int code30 = (code15[1] << 15) | code15[0];
400
0
  unsigned int code27 = code30 >> 3;
401
0
  unsigned int code3 = code30 & 7;
402
0
  unsigned int pattern = pat3[code3];
403
0
  return (pattern << 27) | code27;
404
0
}
Unexecuted instantiation: elf32-ft32.c:ft32_merge_shortcode
Unexecuted instantiation: ft32-dis.c:ft32_merge_shortcode
Unexecuted instantiation: ft32-opc.c:ft32_merge_shortcode
405
406
static int ATTRIBUTE_UNUSED
407
ft32_decode_shortcode (unsigned int pc, unsigned int op32, unsigned int *sc)
408
33.9k
{
409
33.9k
  int code3;
410
33.9k
  unsigned int code30;
411
33.9k
  unsigned int code15[2];
412
33.9k
  size_t i;
413
414
33.9k
  switch (op32 >> 27)
415
33.9k
    {
416
1.06k
    case 2:
417
1.06k
      code3 = 0;
418
1.06k
      break;
419
1.43k
    case 3:
420
1.43k
      code3 = 1;
421
1.43k
      break;
422
1.01k
    case 4:
423
1.01k
      code3 = 2;
424
1.01k
      break;
425
1.42k
    case 5:
426
1.42k
      code3 = 3;
427
1.42k
      break;
428
1.39k
    case 6:
429
1.39k
      code3 = 4;
430
1.39k
      break;
431
1.41k
    case 9:
432
1.41k
      code3 = 5;
433
1.41k
      break;
434
1.39k
    case 10:
435
1.39k
      code3 = 6;
436
1.39k
      break;
437
2.11k
    case 14:
438
2.11k
      code3 = 7;
439
2.11k
      break;
440
22.6k
    default:
441
22.6k
      code3 = -1;
442
22.6k
      break;
443
33.9k
    }
444
445
33.9k
  if (code3 == -1)
446
22.6k
    return 0;
447
11.2k
  else
448
11.2k
    {
449
11.2k
      code30 = ((op32 & 0x07ffffff) << 3) | code3;
450
11.2k
      code15[0] = code30 & 0x7fff;
451
11.2k
      code15[1] = (code30 >> 15) & 0x7fff;
452
33.7k
      for (i = 0; i < 2; i++)
453
22.5k
  {
454
22.5k
    unsigned int code = code15[i] >> 5;
455
22.5k
    unsigned int r = code15[i] & 0x1f;
456
457
22.5k
    if (code < 768)
458
13.9k
      {
459
13.9k
        if (code < N_SC_FORM0)
460
4.66k
    sc[i] = sc_form_0[code] | (r << 20) | (r << 15);
461
9.33k
        else if (code < (N_SC_FORM0 + N_SC_FORM1))
462
428
    sc[i] = sc_form_1[code - N_SC_FORM0] | (r << 20) | (r << 4);
463
8.90k
        else if (code < (N_SC_FORM0 + N_SC_FORM1 + N_SC_FORM2))
464
1.01k
    sc[i] = sc_form_2[code - (N_SC_FORM0 + N_SC_FORM1)]
465
1.01k
      | (r << 15);
466
7.88k
        else
467
7.88k
    sc[i] = sc_form_3[code -
468
7.88k
          (N_SC_FORM0 + N_SC_FORM1 + N_SC_FORM2)]
469
7.88k
      | (r << 20);
470
13.9k
      }
471
8.51k
    else
472
8.51k
      {
473
8.51k
        int jtype = (code15[i] >> 9) & 15;
474
8.51k
        int offset = code15[i] & 511;
475
8.51k
        if (offset & 256)
476
4.44k
    offset -= 512;
477
8.51k
        if (jtype < 14)
478
7.98k
    sc[i] =
479
7.98k
      0x00200000 | ((jtype >> 1) << 22) | ((jtype & 1) << 19);
480
527
        else if (jtype == 14)
481
254
    sc[i] = 0x00300000;
482
273
        else
483
273
    sc[i] = 0x00340000;
484
8.51k
        sc[i] |= ((pc >> 2) + offset);
485
8.51k
      }
486
22.5k
  }
487
11.2k
      return 1;
488
11.2k
    }
489
33.9k
}
Unexecuted instantiation: elf32-ft32.c:ft32_decode_shortcode
ft32-dis.c:ft32_decode_shortcode
Line
Count
Source
408
33.9k
{
409
33.9k
  int code3;
410
33.9k
  unsigned int code30;
411
33.9k
  unsigned int code15[2];
412
33.9k
  size_t i;
413
414
33.9k
  switch (op32 >> 27)
415
33.9k
    {
416
1.06k
    case 2:
417
1.06k
      code3 = 0;
418
1.06k
      break;
419
1.43k
    case 3:
420
1.43k
      code3 = 1;
421
1.43k
      break;
422
1.01k
    case 4:
423
1.01k
      code3 = 2;
424
1.01k
      break;
425
1.42k
    case 5:
426
1.42k
      code3 = 3;
427
1.42k
      break;
428
1.39k
    case 6:
429
1.39k
      code3 = 4;
430
1.39k
      break;
431
1.41k
    case 9:
432
1.41k
      code3 = 5;
433
1.41k
      break;
434
1.39k
    case 10:
435
1.39k
      code3 = 6;
436
1.39k
      break;
437
2.11k
    case 14:
438
2.11k
      code3 = 7;
439
2.11k
      break;
440
22.6k
    default:
441
22.6k
      code3 = -1;
442
22.6k
      break;
443
33.9k
    }
444
445
33.9k
  if (code3 == -1)
446
22.6k
    return 0;
447
11.2k
  else
448
11.2k
    {
449
11.2k
      code30 = ((op32 & 0x07ffffff) << 3) | code3;
450
11.2k
      code15[0] = code30 & 0x7fff;
451
11.2k
      code15[1] = (code30 >> 15) & 0x7fff;
452
33.7k
      for (i = 0; i < 2; i++)
453
22.5k
  {
454
22.5k
    unsigned int code = code15[i] >> 5;
455
22.5k
    unsigned int r = code15[i] & 0x1f;
456
457
22.5k
    if (code < 768)
458
13.9k
      {
459
13.9k
        if (code < N_SC_FORM0)
460
4.66k
    sc[i] = sc_form_0[code] | (r << 20) | (r << 15);
461
9.33k
        else if (code < (N_SC_FORM0 + N_SC_FORM1))
462
428
    sc[i] = sc_form_1[code - N_SC_FORM0] | (r << 20) | (r << 4);
463
8.90k
        else if (code < (N_SC_FORM0 + N_SC_FORM1 + N_SC_FORM2))
464
1.01k
    sc[i] = sc_form_2[code - (N_SC_FORM0 + N_SC_FORM1)]
465
1.01k
      | (r << 15);
466
7.88k
        else
467
7.88k
    sc[i] = sc_form_3[code -
468
7.88k
          (N_SC_FORM0 + N_SC_FORM1 + N_SC_FORM2)]
469
7.88k
      | (r << 20);
470
13.9k
      }
471
8.51k
    else
472
8.51k
      {
473
8.51k
        int jtype = (code15[i] >> 9) & 15;
474
8.51k
        int offset = code15[i] & 511;
475
8.51k
        if (offset & 256)
476
4.44k
    offset -= 512;
477
8.51k
        if (jtype < 14)
478
7.98k
    sc[i] =
479
7.98k
      0x00200000 | ((jtype >> 1) << 22) | ((jtype & 1) << 19);
480
527
        else if (jtype == 14)
481
254
    sc[i] = 0x00300000;
482
273
        else
483
273
    sc[i] = 0x00340000;
484
8.51k
        sc[i] |= ((pc >> 2) + offset);
485
8.51k
      }
486
22.5k
  }
487
11.2k
      return 1;
488
11.2k
    }
489
33.9k
}
Unexecuted instantiation: ft32-opc.c:ft32_decode_shortcode