Merge tag 'v9.0.0-rc3'
[qemu/ar7.git] / target / hppa / insns.decode
blob71074a64c18df07e857df13dbe226af5480bc88b
2 # HPPA instruction decode definitions.
4 # Copyright (c) 2018 Richard Henderson <rth@twiddle.net>
6 # This library is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU Lesser General Public
8 # License as published by the Free Software Foundation; either
9 # version 2.1 of the License, or (at your option) any later version.
11 # This library is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 # Lesser General Public License for more details.
16 # You should have received a copy of the GNU Lesser General Public
17 # License along with this library; if not, see <http://www.gnu.org/licenses/>.
20 ####
21 # Field definitions
22 ####
24 %assemble_sr3   13:1 14:2
25 %assemble_sr3x  13:1 14:2 !function=expand_sr3x
27 %assemble_11a   4:12 0:1             !function=expand_11a
28 %assemble_12    0:s1 2:1 3:10        !function=expand_shl2
29 %assemble_12a   3:13 0:1             !function=expand_12a
30 %assemble_16    0:16                 !function=expand_16
31 %assemble_17    0:s1 16:5 2:1 3:10   !function=expand_shl2
32 %assemble_22    0:s1 16:10 2:1 3:10  !function=expand_shl2
33 %assemble_sp    14:2                 !function=sp0_if_wide
35 %assemble_21    0:s1 1:11 14:2 16:5 12:2  !function=expand_shl11
37 %lowsign_11     0:s1 1:10
39 %sm_imm         16:10 !function=expand_sm_imm
41 %rm64           1:1 16:5
42 %rt64           6:1 0:5
43 %ra64           7:1 21:5
44 %rb64           12:1 16:5
45 %rc64           8:1 13:3 9:2
46 %rc32           13:3 9:2
48 %im5_0          0:s1 1:4
49 %im5_16         16:s1 17:4
50 %len5           0:5      !function=assemble_6
51 %len6_8         8:1 0:5  !function=assemble_6
52 %len6_12        12:1 0:5 !function=assemble_6
53 %cpos6_11       11:1 5:5
54 %ma_to_m        5:1 13:1 !function=ma_to_m
55 %ma2_to_m       2:2      !function=ma_to_m
56 %pos_to_m       0:1      !function=pos_to_m
57 %neg_to_m       0:1      !function=neg_to_m
58 %a_to_m         2:1      !function=neg_to_m
59 %cmpbid_c       13:2     !function=cmpbid_c
60 %d_5            5:1      !function=pa20_d
61 %d_11           11:1     !function=pa20_d
62 %d_13           13:1     !function=pa20_d
64 ####
65 # Argument set definitions
66 ####
68 &empty
70 # All insns that need to form a virtual address should use this set.
71 &ldst           t b x disp sp m scale size
73 &rr_cf_d        t r cf d
74 &rrr            t r1 r2
75 &rrr_cf         t r1 r2 cf
76 &rrr_cf_d       t r1 r2 cf d
77 &rrr_sh         t r1 r2 sh
78 &rrr_cf_d_sh    t r1 r2 cf d sh
79 &rri            t r i
80 &rri_cf         t r i cf
81 &rri_cf_d       t r i cf d
83 &rrb_c_f        disp n c f r1 r2
84 &rrb_c_d_f      disp n c d f r1 r2
85 &rib_c_f        disp n c f r i
86 &rib_c_d_f      disp n c d f r i
88 ####
89 # Format definitions
90 ####
92 @rr_cf_d        ...... r:5 ..... cf:4 ...... . t:5      &rr_cf_d d=%d_5
93 @rrr            ...... r2:5 r1:5 .... ....... t:5       &rrr
94 @rrr_cf         ...... r2:5 r1:5 cf:4 ....... t:5       &rrr_cf
95 @rrr_cf_d       ...... r2:5 r1:5 cf:4 ...... . t:5      &rrr_cf_d d=%d_5
96 @rrr_sh         ...... r2:5 r1:5 ........ sh:2 . t:5    &rrr_sh
97 @rrr_cf_d_sh    ...... r2:5 r1:5 cf:4 .... sh:2 . t:5   &rrr_cf_d_sh d=%d_5
98 @rrr_cf_d_sh0   ...... r2:5 r1:5 cf:4 ...... . t:5      &rrr_cf_d_sh d=%d_5 sh=0
99 @rri_cf         ...... r:5  t:5  cf:4 . ...........     &rri_cf i=%lowsign_11
100 @rri_cf_d       ...... r:5  t:5  cf:4 . ...........     \
101                 &rri_cf_d d=%d_11 i=%lowsign_11
103 @rrb_cf         ...... r2:5 r1:5 c:3 ........... n:1 .  \
104                 &rrb_c_f disp=%assemble_12
105 @rrb_cdf        ...... r2:5 r1:5 c:3 ........... n:1 .  \
106                 &rrb_c_d_f disp=%assemble_12
107 @rib_cf         ...... r:5 ..... c:3 ........... n:1 .  \
108                 &rib_c_f disp=%assemble_12 i=%im5_16
109 @rib_cdf        ...... r:5 ..... c:3 ........... n:1 .  \
110                 &rib_c_d_f disp=%assemble_12 i=%im5_16
112 ####
113 # System
114 ####
116 break           000000 ----- ----- --- 00000000 -----
118 mtsp            000000 ----- r:5   ... 11000001 00000   sp=%assemble_sr3
119 mtctl           000000 t:5   r:5   --- 11000010 00000
120 mtsarcm         000000 01011 r:5   --- 11000110 00000
121 mtsm            000000 00000 r:5   000 11000011 00000
123 mfia            000000 ----- 00000 ---   10100101 t:5
124 mfsp            000000 ----- 00000 ...   00100101 t:5   sp=%assemble_sr3
125 mfctl           000000 r:5   00000- e:1 -01000101 t:5
127 sync            000000 ----- ----- 000 00100000 00000   # sync, syncdma
129 ldsid           000000 b:5   ----- sp:2 0 10000101 t:5
131 rsm             000000 ..........  000 01110011 t:5     i=%sm_imm
132 ssm             000000 ..........  000 01101011 t:5     i=%sm_imm
134 rfi             000000 ----- ----- --- 01100000 00000
135 rfi_r           000000 ----- ----- --- 01100101 00000
137 # These are artificial instructions used by QEMU firmware.
138 # They are allocated from the unassigned instruction space.
139 halt            1111 1111 1111 1101 1110 1010 1101 0000
140 reset           1111 1111 1111 1101 1110 1010 1101 0001
141 getshadowregs   1111 1111 1111 1101 1110 1010 1101 0010
143 ####
144 # Memory Management
145 ####
147 @addrx          ...... b:5 x:5 .. ........ m:1 .....    \
148                 &ldst disp=0 scale=0 t=0 sp=0 size=0
150 nop             000001 ----- ----- -- 11001010 0 -----         # fdc, disp
151 nop_addrx       000001 ..... ..... -- 01001010 . -----  @addrx # fdc, index
152 nop_addrx       000001 ..... ..... -- 01001011 . -----  @addrx # fdce
153 fic             000001 ..... ..... --- 0001010 . -----  @addrx # fic 0x0a
154 fic             000001 ..... ..... -- 01001111 . 00000  @addrx # fic 0x4f
155 fic             000001 ..... ..... --- 0001011 . -----  @addrx # fice
156 nop_addrx       000001 ..... ..... -- 01001110 . 00000  @addrx # pdc
158 probe           000001 b:5 ri:5 sp:2 imm:1 100011 write:1 0 t:5
160 # pa1.x tlb insert instructions
161 ixtlbx          000001 b:5 r:5 sp:2 0100000 addr:1 0 00000      data=1
162 ixtlbx          000001 b:5 r:5 ... 000000 addr:1 0 00000        \
163                 sp=%assemble_sr3x data=0
165 # pcxl and pcxl2 Fast TLB Insert instructions
166 ixtlbxf         000001 00000 r:5 00 0 data:1 01000 addr:1 0 00000
168 # pa2.0 tlb insert idtlbt and iitlbt instructions
169 ixtlbt          000001 r2:5 r1:5 000 data:1 100000 0 00000    # idtlbt
171 # pdtlb, pitlb
172 pxtlb           000001 b:5 x:5 sp:2 01001000 m:1 ----- \
173                 &ldst disp=0 scale=0 size=0 t=0
174 pxtlb           000001 b:5 x:5 ...   0001000 m:1 ----- \
175                 &ldst disp=0 scale=0 size=0 t=0 sp=%assemble_sr3x
177 # ... pa20 local
178 pxtlb_l         000001 b:5 x:5 sp:2 01011000 m:1 ----- \
179                 &ldst disp=0 scale=0 size=0 t=0
180 pxtlb_l         000001 b:5 x:5 ...   0011000 m:1 ----- \
181                 &ldst disp=0 scale=0 size=0 t=0 sp=%assemble_sr3x
183 # pdtlbe, pitlbe
184 pxtlbe          000001 b:5 x:5 sp:2 01001001 m:1 ----- \
185                 &ldst disp=0 scale=0 size=0 t=0
186 pxtlbe          000001 b:5 x:5 ...   0001001 m:1 ----- \
187                 &ldst disp=0 scale=0 size=0 t=0 sp=%assemble_sr3x
189 lpa             000001 b:5 x:5 sp:2 01001101 m:1 t:5    \
190                 &ldst disp=0 scale=0 size=0
192 lci             000001 ----- ----- -- 01001100 0 t:5
194 ####
195 # Arith/Log
196 ####
198 andcm           000010 ..... ..... .... 000000 . .....  @rrr_cf_d
199 and             000010 ..... ..... .... 001000 . .....  @rrr_cf_d
200 or              000010 ..... ..... .... 001001 . .....  @rrr_cf_d
201 xor             000010 ..... ..... .... 001010 . .....  @rrr_cf_d
202 uxor            000010 ..... ..... .... 001110 . .....  @rrr_cf_d
203 ds              000010 ..... ..... .... 010001 0 .....  @rrr_cf
204 cmpclr          000010 ..... ..... .... 100010 . .....  @rrr_cf_d
205 uaddcm          000010 ..... ..... .... 100110 . .....  @rrr_cf_d
206 uaddcm_tc       000010 ..... ..... .... 100111 . .....  @rrr_cf_d
207 dcor            000010 ..... 00000 .... 101110 . .....  @rr_cf_d
208 dcor_i          000010 ..... 00000 .... 101111 . .....  @rr_cf_d
210 add             000010 ..... ..... .... 0110.. . .....  @rrr_cf_d_sh
211 add_l           000010 ..... ..... .... 1010.. . .....  @rrr_cf_d_sh
212 add_tsv         000010 ..... ..... .... 1110.. . .....  @rrr_cf_d_sh
214   add_c         000010 ..... ..... .... 011100 . .....  @rrr_cf_d_sh0
215   hshladd       000010 ..... ..... 0000 0111.. 0 .....  @rrr_sh
217 add_c_tsv       000010 ..... ..... .... 111100 . .....  @rrr_cf_d_sh0
219 sub             000010 ..... ..... .... 010000 . .....  @rrr_cf_d
220 sub_tsv         000010 ..... ..... .... 110000 . .....  @rrr_cf_d
221 sub_tc          000010 ..... ..... .... 010011 . .....  @rrr_cf_d
222 sub_tsv_tc      000010 ..... ..... .... 110011 . .....  @rrr_cf_d
224   sub_b         000010 ..... ..... .... 010100 . .....  @rrr_cf_d
225   hshradd       000010 ..... ..... 0000 0101.. 0 .....  @rrr_sh
227 sub_b_tsv       000010 ..... ..... .... 110100 . .....  @rrr_cf_d
229 ldil            001000 t:5 .....................        i=%assemble_21
230 addil           001010 r:5 .....................        i=%assemble_21
231 ldo             001101 b:5 t:5  ................        i=%assemble_16
233 addi            101101 ..... ..... .... 0 ...........   @rri_cf
234 addi_tsv        101101 ..... ..... .... 1 ...........   @rri_cf
235 addi_tc         101100 ..... ..... .... 0 ...........   @rri_cf
236 addi_tc_tsv     101100 ..... ..... .... 1 ...........   @rri_cf
238 subi            100101 ..... ..... .... 0 ...........   @rri_cf
239 subi_tsv        100101 ..... ..... .... 1 ...........   @rri_cf
241 cmpiclr         100100 ..... ..... .... . ...........   @rri_cf_d
243 hadd            000010 ..... ..... 00000011 11 0 .....  @rrr
244 hadd_ss         000010 ..... ..... 00000011 01 0 .....  @rrr
245 hadd_us         000010 ..... ..... 00000011 00 0 .....  @rrr
247 havg            000010 ..... ..... 00000010 11 0 .....  @rrr
249 hshl            111110 00000 r:5   100010 i:4  0 t:5    &rri
250 hshr_s          111110 r:5   00000 110011 i:4  0 t:5    &rri
251 hshr_u          111110 r:5   00000 110010 i:4  0 t:5    &rri
253 hsub            000010 ..... ..... 00000001 11 0 .....  @rrr
254 hsub_ss         000010 ..... ..... 00000001 01 0 .....  @rrr
255 hsub_us         000010 ..... ..... 00000001 00 0 .....  @rrr
257 mixh_l          111110 ..... ..... 1 00 00100000 .....  @rrr
258 mixh_r          111110 ..... ..... 1 10 00100000 .....  @rrr
259 mixw_l          111110 ..... ..... 1 00 00000000 .....  @rrr
260 mixw_r          111110 ..... ..... 1 10 00000000 .....  @rrr
262 permh           111110 r1:5  r2:5  0 c0:2 0 c1:2 c2:2 c3:2 0 t:5
264 ####
265 # Index Mem
266 ####
268 @ldstx          ...... b:5 x:5 sp:2 scale:1 ....... m:1 t:5     &ldst disp=0
269 @ldim5          ...... b:5 ..... sp:2 ......... t:5     \
270                 &ldst disp=%im5_16 x=0 scale=0 m=%ma_to_m
271 @stim5          ...... b:5 t:5 sp:2 ......... .....     \
272                 &ldst disp=%im5_0 x=0 scale=0 m=%ma_to_m
274 ld              000011 ..... ..... .. . 1 -- 00 size:2 ......   @ldim5
275 ld              000011 ..... ..... .. . 0 -- 00 size:2 ......   @ldstx
276 st              000011 ..... ..... .. . 1 -- 10 size:2 ......   @stim5
277 ldc             000011 ..... ..... .. . 1 -- 0111      ......   @ldim5 size=2
278 ldc             000011 ..... ..... .. . 0 -- 0111      ......   @ldstx size=2
279 ldc             000011 ..... ..... .. . 1 -- 0101      ......   @ldim5 size=3
280 ldc             000011 ..... ..... .. . 0 -- 0101      ......   @ldstx size=3
281 lda             000011 ..... ..... .. . 1 -- 0110      ......   @ldim5 size=2
282 lda             000011 ..... ..... .. . 0 -- 0110      ......   @ldstx size=2
283 lda             000011 ..... ..... .. . 1 -- 0100      ......   @ldim5 size=3
284 lda             000011 ..... ..... .. . 0 -- 0100      ......   @ldstx size=3
285 sta             000011 ..... ..... .. . 1 -- 1110      ......   @stim5 size=2
286 sta             000011 ..... ..... .. . 1 -- 1111      ......   @stim5 size=3
287 stby            000011 b:5 r:5 sp:2 a:1 1 -- 1100 m:1   .....   disp=%im5_0
288 stdby           000011 b:5 r:5 sp:2 a:1 1 -- 1101 m:1   .....   disp=%im5_0
290 @fldstwx        ...... b:5 x:5   sp:2 scale:1 ....... m:1 ..... \
291                 &ldst t=%rt64 disp=0 size=2
292 @fldstwi        ...... b:5 ..... sp:2 .       ....... .   ..... \
293                 &ldst t=%rt64 disp=%im5_16 m=%ma_to_m x=0 scale=0 size=2
295 fldw            001001 ..... ..... .. . 0 -- 000 . . .....      @fldstwx
296 fldw            001001 ..... ..... .. . 1 -- 000 . . .....      @fldstwi
297 fstw            001001 ..... ..... .. . 0 -- 100 . . .....      @fldstwx
298 fstw            001001 ..... ..... .. . 1 -- 100 . . .....      @fldstwi
300 @fldstdx        ...... b:5 x:5   sp:2 scale:1 ....... m:1 t:5 \
301                 &ldst disp=0 size=3
302 @fldstdi        ...... b:5 ..... sp:2 .       ....... .   t:5 \
303                 &ldst disp=%im5_16 m=%ma_to_m x=0 scale=0 size=3
305 fldd            001011 ..... ..... .. . 0 -- 000 0 . .....      @fldstdx
306 fldd            001011 ..... ..... .. . 1 -- 000 0 . .....      @fldstdi
307 fstd            001011 ..... ..... .. . 0 -- 100 0 . .....      @fldstdx
308 fstd            001011 ..... ..... .. . 1 -- 100 0 . .....      @fldstdi
310 ####
311 # Offset Mem
312 ####
314 @ldstim11       ...... b:5 t:5 ................          \
315                 &ldst sp=%assemble_sp disp=%assemble_11a \
316                 m=%ma2_to_m x=0 scale=0 size=3
317 @ldstim14       ...... b:5 t:5 ................          \
318                 &ldst sp=%assemble_sp disp=%assemble_16  \
319                 x=0 scale=0 m=0
320 @ldstim14m      ...... b:5 t:5 ................          \
321                 &ldst sp=%assemble_sp disp=%assemble_16  \
322                 x=0 scale=0 m=%neg_to_m
323 @ldstim12m      ...... b:5 t:5 ................          \
324                 &ldst sp=%assemble_sp disp=%assemble_12a \
325                 x=0 scale=0 m=%pos_to_m
327 # LDB, LDH, LDW, LDWM
328 ld              010000 ..... ..... .. ..............    @ldstim14  size=0
329 ld              010001 ..... ..... .. ..............    @ldstim14  size=1
330 ld              010010 ..... ..... .. ..............    @ldstim14  size=2
331 ld              010011 ..... ..... .. ..............    @ldstim14m size=2
332 ld              010111 ..... ..... .. ...........10.    @ldstim12m size=2
334 # STB, STH, STW, STWM
335 st              011000 ..... ..... .. ..............    @ldstim14  size=0
336 st              011001 ..... ..... .. ..............    @ldstim14  size=1
337 st              011010 ..... ..... .. ..............    @ldstim14  size=2
338 st              011011 ..... ..... .. ..............    @ldstim14m size=2
339 st              011111 ..... ..... .. ...........10.    @ldstim12m size=2
341 fldw            010110 b:5 ..... ................        \
342                 &ldst disp=%assemble_12a sp=%assemble_sp \
343                 t=%rm64 m=%a_to_m x=0 scale=0 size=2
344 fldw            010111 b:5 ..... .............0..        \
345                 &ldst disp=%assemble_12a sp=%assemble_sp \
346                 t=%rm64 m=0 x=0 scale=0 size=2
348 fstw            011110 b:5 ..... ................        \
349                 &ldst disp=%assemble_12a sp=%assemble_sp \
350                 t=%rm64 m=%a_to_m x=0 scale=0 size=2
351 fstw            011111 b:5 ..... .............0..        \
352                 &ldst disp=%assemble_12a sp=%assemble_sp \
353                 t=%rm64 m=0 x=0 scale=0 size=2
355 ld              010100 ..... ..... .. ............0.    @ldstim11
356 fldd            010100 ..... ..... .. ............1.    @ldstim11
358 st              011100 ..... ..... .. ............0.    @ldstim11
359 fstd            011100 ..... ..... .. ............1.    @ldstim11
361 ####
362 # Floating-point Multiply Add
363 ####
365 &mpyadd         rm1 rm2 ta ra tm
366 @mpyadd         ...... rm1:5 rm2:5 ta:5 ra:5 . tm:5     &mpyadd
368 fmpyadd_f       000110 ..... ..... ..... ..... 0 .....  @mpyadd
369 fmpyadd_d       000110 ..... ..... ..... ..... 1 .....  @mpyadd
370 fmpysub_f       100110 ..... ..... ..... ..... 0 .....  @mpyadd
371 fmpysub_d       100110 ..... ..... ..... ..... 1 .....  @mpyadd
373 ####
374 # Conditional Branches
375 ####
377 bb_sar          110000 00000 r:5 c:1 1 . ........... n:1 . \
378                 disp=%assemble_12 d=%d_13
379 bb_imm          110001 p:5   r:5 c:1 1 . ........... n:1 . \
380                 disp=%assemble_12 d=%d_13
382 movb            110010 ..... ..... ... ........... . .  @rrb_cf f=0
383 movbi           110011 ..... ..... ... ........... . .  @rib_cf f=0
385 cmpb            100000 ..... ..... ... ........... . .  @rrb_cdf d=0 f=0
386 cmpb            100010 ..... ..... ... ........... . .  @rrb_cdf d=0 f=1
387 cmpb            100111 ..... ..... ... ........... . .  @rrb_cdf d=1 f=0
388 cmpb            101111 ..... ..... ... ........... . .  @rrb_cdf d=1 f=1
389 cmpbi           100001 ..... ..... ... ........... . .  @rib_cdf d=0 f=0
390 cmpbi           100011 ..... ..... ... ........... . .  @rib_cdf d=0 f=1
391 cmpbi           111011 r:5 ..... f:1 .. ........... n:1 . \
392                 &rib_c_d_f d=1 disp=%assemble_12 c=%cmpbid_c i=%im5_16
394 addb            101000 ..... ..... ... ........... . .  @rrb_cf f=0
395 addb            101010 ..... ..... ... ........... . .  @rrb_cf f=1
396 addbi           101001 ..... ..... ... ........... . .  @rib_cf f=0
397 addbi           101011 ..... ..... ... ........... . .  @rib_cf f=1
399 ####
400 # Shift, Extract, Deposit
401 ####
403 shrp_sar        110100 r2:5 r1:5 c:3 00 0 d:1 0000  t:5
404 shrp_imm        110100 r2:5 r1:5 c:3 01 0 cpos:5    t:5       d=0
405 shrp_imm        110100 r2:5 r1:5 c:3 0. 1 .....  t:5          \
406                 d=1 cpos=%cpos6_11
408 extr_sar        110100 r:5  t:5  c:3 10 se:1 00 000 .....     d=0 len=%len5
409 extr_sar        110100 r:5  t:5  c:3 10 se:1 1. 000 .....     d=1 len=%len6_8
410 extr_imm        110100 r:5  t:5  c:3 11 se:1 pos:5  .....     d=0 len=%len5
411 extr_imm        110110 r:5  t:5  c:3 .. se:1 ..... .....      \
412                 d=1 len=%len6_12 pos=%cpos6_11
414 dep_sar         110101 t:5 r:5   c:3 00 nz:1 00 000 .....     d=0 len=%len5
415 dep_sar         110101 t:5 r:5   c:3 00 nz:1 1. 000 .....     d=1 len=%len6_8
416 dep_imm         110101 t:5 r:5   c:3 01 nz:1 cpos:5 .....     d=0 len=%len5
417 dep_imm         111100 t:5 r:5   c:3 .. nz:1 ..... .....      \
418                 d=1 len=%len6_12 cpos=%cpos6_11
419 depi_sar        110101 t:5 ..... c:3 10 nz:1 d:1 . 000 .....  \
420                 i=%im5_16 len=%len6_8
421 depi_imm        110101 t:5 ..... c:3 11 nz:1 cpos:5 .....     \
422                 d=0 i=%im5_16 len=%len5
423 depi_imm        111101 t:5 ..... c:3 .. nz:1 ..... .....      \
424                 d=1 i=%im5_16 len=%len6_12 cpos=%cpos6_11
426 ####
427 # Branch External
428 ####
430 &BE             b l n disp sp
431 @be             ...... b:5 ..... ... ........... n:1 .  \
432                 &BE disp=%assemble_17 sp=%assemble_sr3
434 be              111000 ..... ..... ... ........... . .  @be l=0
435 be              111001 ..... ..... ... ........... . .  @be l=31
437 ####
438 # Branch
439 ####
441 &BL             l n disp
442 @bl             ...... l:5 ..... ... ........... n:1 .  &BL disp=%assemble_17
444 # B,L and B,L,PUSH
445 bl              111010 ..... ..... 000 ........... .   .        @bl
446 bl              111010 ..... ..... 100 ........... .   .        @bl
447 # B,L (long displacement)
448 bl              111010 ..... ..... 101 ........... n:1 .        &BL l=2 \
449                 disp=%assemble_22
450 b_gate          111010 ..... ..... 001 ........... .   .        @bl
451 blr             111010 l:5   x:5   010 00000000000 n:1 0
452 nopbts          111010 00000 00000 010 0---------1   0 1    # clrbts/popbts
453 nopbts          111010 00000 ----- 010 00000000000   0 1    # pushbts/pushnom
454 bv              111010 b:5   x:5   110 00000000000 n:1 0
455 bve             111010 b:5   00000 110 10000000000 n:1 -        l=0
456 bve             111010 b:5   00000 111 10000000000 n:1 -        l=2
458 ####
459 # FP Fused Multiple-Add
460 ####
462 fmpyfadd_f      101110 ..... ..... ... . 0 ... . . neg:1 ..... \
463                 rm1=%ra64 rm2=%rb64 ra3=%rc64 t=%rt64
464 fmpyfadd_d      101110 rm1:5 rm2:5 ... 0 1 ..0 0 0 neg:1 t:5    ra3=%rc32
466 ####
467 # FP operations
468 ####
470 &fclass01       r t
471 &fclass2        r1 r2 c y
472 &fclass3        r1 r2 t
474 @f0c_0          ...... r:5  00000 ..... 00 000 0 t:5    &fclass01
475 @f0c_1          ...... r:5  000.. ..... 01 000 0 t:5    &fclass01
476 @f0c_2          ...... r1:5 r2:5 y:3 .. 10 000 . c:5    &fclass2
477 @f0c_3          ...... r1:5 r2:5  ..... 11 000 0 t:5    &fclass3
479 @f0e_f_0        ...... ..... 00000 ... 0 0 000 .. 0 .....  \
480                 &fclass01 r=%ra64 t=%rt64
481 @f0e_d_0        ...... r:5   00000 ... 0 1 000 00 0 t:5    &fclass01
483 @f0e_ff_1       ...... ..... 000  ... 0000 010 .. 0 .....  \
484                 &fclass01 r=%ra64 t=%rt64
485 @f0e_fd_1       ...... ..... 000  ... 0100 010 .0 0 t:5    &fclass01 r=%ra64
486 @f0e_df_1       ...... r:5   000  ... 0001 010 0. 0 .....  &fclass01 t=%rt64
487 @f0e_dd_1       ...... r:5   000  ... 0101 010 00 0 t:5    &fclass01
489 @f0e_f_2        ...... ..... ..... y:3 .0 100 .00 c:5      \
490                 &fclass2 r1=%ra64 r2=%rb64
491 @f0e_d_2        ...... r1:5  r2:5  y:3 01 100 000 c:5      &fclass2
493 @f0e_f_3        ...... ..... ..... ... .0 110 ..0 .....    \
494                 &fclass3 r1=%ra64 r2=%rb64 t=%rt64
495 @f0e_d_3        ...... r1:5  r2:5  ... 01 110 000 t:5      &fclass3
497 # Floating point class 0
499 fid_f           001100 00000 00000 000 00 000000 00000
501 fcpy_f          001100 ..... ..... 010 00 ...... .....  @f0c_0
502 fabs_f          001100 ..... ..... 011 00 ...... .....  @f0c_0
503 fsqrt_f         001100 ..... ..... 100 00 ...... .....  @f0c_0
504 frnd_f          001100 ..... ..... 101 00 ...... .....  @f0c_0
505 fneg_f          001100 ..... ..... 110 00 ...... .....  @f0c_0
506 fnegabs_f       001100 ..... ..... 111 00 ...... .....  @f0c_0
508 fcpy_d          001100 ..... ..... 010 01 ...... .....  @f0c_0
509 fabs_d          001100 ..... ..... 011 01 ...... .....  @f0c_0
510 fsqrt_d         001100 ..... ..... 100 01 ...... .....  @f0c_0
511 frnd_d          001100 ..... ..... 101 01 ...... .....  @f0c_0
512 fneg_d          001100 ..... ..... 110 01 ...... .....  @f0c_0
513 fnegabs_d       001100 ..... ..... 111 01 ...... .....  @f0c_0
515 fcpy_f          001110 ..... ..... 010 ........ .....   @f0e_f_0
516 fabs_f          001110 ..... ..... 011 ........ .....   @f0e_f_0
517 fsqrt_f         001110 ..... ..... 100 ........ .....   @f0e_f_0
518 frnd_f          001110 ..... ..... 101 ........ .....   @f0e_f_0
519 fneg_f          001110 ..... ..... 110 ........ .....   @f0e_f_0
520 fnegabs_f       001110 ..... ..... 111 ........ .....   @f0e_f_0
522 fcpy_d          001110 ..... ..... 010 ........ .....   @f0e_d_0
523 fabs_d          001110 ..... ..... 011 ........ .....   @f0e_d_0
524 fsqrt_d         001110 ..... ..... 100 ........ .....   @f0e_d_0
525 frnd_d          001110 ..... ..... 101 ........ .....   @f0e_d_0
526 fneg_d          001110 ..... ..... 110 ........ .....   @f0e_d_0
527 fnegabs_d       001110 ..... ..... 111 ........ .....   @f0e_d_0
529 # Floating point class 1
531 # float/float
532 fcnv_d_f        001100 ..... ... 000 00 01 ...... ..... @f0c_1
533 fcnv_f_d        001100 ..... ... 000 01 00 ...... ..... @f0c_1
535 fcnv_d_f        001110 ..... ... 000 .......... .....   @f0e_df_1
536 fcnv_f_d        001110 ..... ... 000 .......... .....   @f0e_fd_1
538 # int/float
539 fcnv_w_f        001100 ..... ... 001 00 00 ...... ..... @f0c_1
540 fcnv_q_f        001100 ..... ... 001 00 01 ...... ..... @f0c_1
541 fcnv_w_d        001100 ..... ... 001 01 00 ...... ..... @f0c_1
542 fcnv_q_d        001100 ..... ... 001 01 01 ...... ..... @f0c_1
544 fcnv_w_f        001110 ..... ... 001 .......... .....   @f0e_ff_1
545 fcnv_q_f        001110 ..... ... 001 .......... .....   @f0e_df_1
546 fcnv_w_d        001110 ..... ... 001 .......... .....   @f0e_fd_1
547 fcnv_q_d        001110 ..... ... 001 .......... .....   @f0e_dd_1
549 # float/int
550 fcnv_f_w        001100 ..... ... 010 00 00 ...... ..... @f0c_1
551 fcnv_d_w        001100 ..... ... 010 00 01 ...... ..... @f0c_1
552 fcnv_f_q        001100 ..... ... 010 01 00 ...... ..... @f0c_1
553 fcnv_d_q        001100 ..... ... 010 01 01 ...... ..... @f0c_1
555 fcnv_f_w        001110 ..... ... 010 .......... .....   @f0e_ff_1
556 fcnv_d_w        001110 ..... ... 010 .......... .....   @f0e_df_1
557 fcnv_f_q        001110 ..... ... 010 .......... .....   @f0e_fd_1
558 fcnv_d_q        001110 ..... ... 010 .......... .....   @f0e_dd_1
560 # float/int truncate
561 fcnv_t_f_w      001100 ..... ... 011 00 00 ...... ..... @f0c_1
562 fcnv_t_d_w      001100 ..... ... 011 00 01 ...... ..... @f0c_1
563 fcnv_t_f_q      001100 ..... ... 011 01 00 ...... ..... @f0c_1
564 fcnv_t_d_q      001100 ..... ... 011 01 01 ...... ..... @f0c_1
566 fcnv_t_f_w      001110 ..... ... 011 .......... .....   @f0e_ff_1
567 fcnv_t_d_w      001110 ..... ... 011 .......... .....   @f0e_df_1
568 fcnv_t_f_q      001110 ..... ... 011 .......... .....   @f0e_fd_1
569 fcnv_t_d_q      001110 ..... ... 011 .......... .....   @f0e_dd_1
571 # uint/float
572 fcnv_uw_f       001100 ..... ... 101 00 00 ...... ..... @f0c_1
573 fcnv_uq_f       001100 ..... ... 101 00 01 ...... ..... @f0c_1
574 fcnv_uw_d       001100 ..... ... 101 01 00 ...... ..... @f0c_1
575 fcnv_uq_d       001100 ..... ... 101 01 01 ...... ..... @f0c_1
577 fcnv_uw_f       001110 ..... ... 101 .......... .....   @f0e_ff_1
578 fcnv_uq_f       001110 ..... ... 101 .......... .....   @f0e_df_1
579 fcnv_uw_d       001110 ..... ... 101 .......... .....   @f0e_fd_1
580 fcnv_uq_d       001110 ..... ... 101 .......... .....   @f0e_dd_1
582 # float/int
583 fcnv_f_uw       001100 ..... ... 110 00 00 ...... ..... @f0c_1
584 fcnv_d_uw       001100 ..... ... 110 00 01 ...... ..... @f0c_1
585 fcnv_f_uq       001100 ..... ... 110 01 00 ...... ..... @f0c_1
586 fcnv_d_uq       001100 ..... ... 110 01 01 ...... ..... @f0c_1
588 fcnv_f_uw       001110 ..... ... 110 .......... .....   @f0e_ff_1
589 fcnv_d_uw       001110 ..... ... 110 .......... .....   @f0e_df_1
590 fcnv_f_uq       001110 ..... ... 110 .......... .....   @f0e_fd_1
591 fcnv_d_uq       001110 ..... ... 110 .......... .....   @f0e_dd_1
593 # float/int truncate
594 fcnv_t_f_uw     001100 ..... ... 111 00 00 ...... ..... @f0c_1
595 fcnv_t_d_uw     001100 ..... ... 111 00 01 ...... ..... @f0c_1
596 fcnv_t_f_uq     001100 ..... ... 111 01 00 ...... ..... @f0c_1
597 fcnv_t_d_uq     001100 ..... ... 111 01 01 ...... ..... @f0c_1
599 fcnv_t_f_uw     001110 ..... ... 111 .......... .....   @f0e_ff_1
600 fcnv_t_d_uw     001110 ..... ... 111 .......... .....   @f0e_df_1
601 fcnv_t_f_uq     001110 ..... ... 111 .......... .....   @f0e_fd_1
602 fcnv_t_d_uq     001110 ..... ... 111 .......... .....   @f0e_dd_1
604 # Floating point class 2
606 ftest           001100 00000 00000 y:3 00 10000 1 c:5
608 fcmp_f          001100 ..... ..... ... 00 ..... 0 ..... @f0c_2
609 fcmp_d          001100 ..... ..... ... 01 ..... 0 ..... @f0c_2
611 fcmp_f          001110 ..... ..... ... ..... ... .....  @f0e_f_2
612 fcmp_d          001110 ..... ..... ... ..... ... .....  @f0e_d_2
614 # Floating point class 3
616 fadd_f          001100 ..... ..... 000 00 ...... .....  @f0c_3
617 fsub_f          001100 ..... ..... 001 00 ...... .....  @f0c_3
618 fmpy_f          001100 ..... ..... 010 00 ...... .....  @f0c_3
619 fdiv_f          001100 ..... ..... 011 00 ...... .....  @f0c_3
621 fadd_d          001100 ..... ..... 000 01 ...... .....  @f0c_3
622 fsub_d          001100 ..... ..... 001 01 ...... .....  @f0c_3
623 fmpy_d          001100 ..... ..... 010 01 ...... .....  @f0c_3
624 fdiv_d          001100 ..... ..... 011 01 ...... .....  @f0c_3
626 fadd_f          001110 ..... ..... 000 ..... ... .....  @f0e_f_3
627 fsub_f          001110 ..... ..... 001 ..... ... .....  @f0e_f_3
628 fmpy_f          001110 ..... ..... 010 ..... ... .....  @f0e_f_3
629 fdiv_f          001110 ..... ..... 011 ..... ... .....  @f0e_f_3
631 fadd_d          001110 ..... ..... 000 ..... ... .....  @f0e_d_3
632 fsub_d          001110 ..... ..... 001 ..... ... .....  @f0e_d_3
633 fmpy_d          001110 ..... ..... 010 ..... ... .....  @f0e_d_3
634 fdiv_d          001110 ..... ..... 011 ..... ... .....  @f0e_d_3
636 xmpyu           001110 ..... ..... 010 .0111 .00 t:5    r1=%ra64 r2=%rb64
638 # diag
640   [
641     diag_btlb               000101 00 0000 0000 0000 0001 0000 0000
642     diag_cout               000101 00 0000 0000 0000 0001 0000 0001
644     # For 32-bit PA-7300LC (PCX-L2)
645     diag_getshadowregs_pa1  000101 00 0000 0000 0001 1010 0000 0000
646     diag_putshadowregs_pa1  000101 00 0000 0000 0001 1010 0100 0000
648     # For 64-bit PA8700 (PCX-W2)
649     diag_getshadowregs_pa2  000101 00 0111 1000 0001 1000 0100 0000
650     diag_putshadowregs_pa2  000101 00 0111 0000 0001 1000 0100 0000
651   ]
652   diag_unimp                000101 i:26