aboutsummaryrefslogtreecommitdiff
path: root/target/hppa/insns.decode
blob: e891fbfac5d039ef47261d09d9fea3b68ff200f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#
# HPPA instruction decode definitions.
#
# Copyright (c) 2018 Richard Henderson <rth@twiddle.net>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, see <http://www.gnu.org/licenses/>.
#

####
# Field definitions
####

%assemble_sr3   13:1 14:2
%assemble_sr3x  13:1 14:2 !function=expand_sr3x

%assemble_12    0:s1 2:1 3:10  !function=expand_shl2

%sm_imm         16:10 !function=expand_sm_imm

%im5_0          0:s1 1:4
%im5_16         16:s1 17:4
%ma_to_m        5:1 13:1 !function=ma_to_m

####
# Argument set definitions
####

# All insns that need to form a virtual address should use this set.
&ldst           t b x disp sp m scale size

&rr_cf          t r cf
&rrr_cf         t r1 r2 cf
&rrr_cf_sh      t r1 r2 cf sh

&rrb_c_f        disp n c f r1 r2
&rib_c_f        disp n c f r i

####
# Format definitions
####

@rr_cf          ...... r:5 ..... cf:4 ....... t:5       &rr_cf
@rrr_cf         ...... r2:5 r1:5 cf:4 ....... t:5       &rrr_cf
@rrr_cf_sh      ...... r2:5 r1:5 cf:4 .... sh:2 . t:5   &rrr_cf_sh
@rrr_cf_sh0     ...... r2:5 r1:5 cf:4 ....... t:5       &rrr_cf_sh sh=0

@rrb_cf         ...... r2:5 r1:5 c:3 ........... n:1 .  \
                &rrb_c_f disp=%assemble_12
@rib_cf         ...... r:5 ..... c:3 ........... n:1 .  \
                &rib_c_f disp=%assemble_12 i=%im5_16

####
# System
####

break           000000 ----- ----- --- 00000000 -----

mtsp            000000 ----- r:5   ... 11000001 00000   sp=%assemble_sr3
mtctl           000000 t:5   r:5   --- 11000010 00000
mtsarcm         000000 01011 r:5   --- 11000110 00000
mtsm            000000 00000 r:5   000 11000011 00000

mfia            000000 ----- 00000 ---   10100101 t:5
mfsp            000000 ----- 00000 ...   00100101 t:5   sp=%assemble_sr3
mfctl           000000 r:5   00000- e:1 -01000101 t:5

sync            000000 ----- ----- 000 00100000 00000   # sync, syncdma

ldsid           000000 b:5   ----- sp:2 0 10000101 t:5

rsm             000000 ..........  000 01110011 t:5     i=%sm_imm
ssm             000000 ..........  000 01101011 t:5     i=%sm_imm

rfi             000000 ----- ----- --- 01100000 00000
rfi_r           000000 ----- ----- --- 01100101 00000

####
# Memory Management
####

@addrx          ...... b:5 x:5 .. ........ m:1 .....    \
                &ldst disp=0 scale=0 t=0 sp=0 size=0

nop             000001 ----- ----- -- 11001010 0 -----         # fdc, disp
nop_addrx       000001 ..... ..... -- 01001010 . -----  @addrx # fdc, index
nop_addrx       000001 ..... ..... -- 01001011 . -----  @addrx # fdce
nop_addrx       000001 ..... ..... --- 0001010 . -----  @addrx # fic 0x0a
nop_addrx       000001 ..... ..... -- 01001111 . 00000  @addrx # fic 0x4f
nop_addrx       000001 ..... ..... --- 0001011 . -----  @addrx # fice
nop_addrx       000001 ..... ..... -- 01001110 . 00000  @addrx # pdc

probe           000001 b:5 ri:5 sp:2 imm:1 100011 write:1 0 t:5

ixtlbx          000001 b:5 r:5 sp:2 0100000 addr:1 0 00000      data=1
ixtlbx          000001 b:5 r:5 ... 000000 addr:1 0 00000        \
                sp=%assemble_sr3x data=0

pxtlbx          000001 b:5 x:5 sp:2 0100100 local:1 m:1 -----   data=1
pxtlbx          000001 b:5 x:5 ... 000100 local:1 m:1 -----     \
                sp=%assemble_sr3x data=0

lpa             000001 b:5 x:5 sp:2 01001101 m:1 t:5    \
                &ldst disp=0 scale=0 size=0

lci             000001 ----- ----- -- 01001100 0 t:5

####
# Arith/Log
####

andcm           000010 ..... ..... .... 000000 0 .....  @rrr_cf
and             000010 ..... ..... .... 001000 0 .....  @rrr_cf
or              000010 ..... ..... .... 001001 0 .....  @rrr_cf
xor             000010 ..... ..... .... 001010 0 .....  @rrr_cf
uxor            000010 ..... ..... .... 001110 0 .....  @rrr_cf
ds              000010 ..... ..... .... 010001 0 .....  @rrr_cf
cmpclr          000010 ..... ..... .... 100010 0 .....  @rrr_cf
uaddcm          000010 ..... ..... .... 100110 0 .....  @rrr_cf
uaddcm_tc       000010 ..... ..... .... 100111 0 .....  @rrr_cf
dcor            000010 ..... 00000 .... 101110 0 .....  @rr_cf
dcor_i          000010 ..... 00000 .... 101111 0 .....  @rr_cf

add             000010 ..... ..... .... 0110.. 0 .....  @rrr_cf_sh
add_l           000010 ..... ..... .... 1010.. 0 .....  @rrr_cf_sh
add_tsv         000010 ..... ..... .... 1110.. 0 .....  @rrr_cf_sh
add_c           000010 ..... ..... .... 011100 0 .....  @rrr_cf_sh0
add_c_tsv       000010 ..... ..... .... 111100 0 .....  @rrr_cf_sh0

sub             000010 ..... ..... .... 010000 0 .....  @rrr_cf
sub_tsv         000010 ..... ..... .... 110000 0 .....  @rrr_cf
sub_tc          000010 ..... ..... .... 010011 0 .....  @rrr_cf
sub_tsv_tc      000010 ..... ..... .... 110011 0 .....  @rrr_cf
sub_b           000010 ..... ..... .... 010100 0 .....  @rrr_cf
sub_b_tsv       000010 ..... ..... .... 110100 0 .....  @rrr_cf

####
# Index Mem
####

@ldstx          ...... b:5 x:5 sp:2 scale:1 ....... m:1 t:5     &ldst disp=0
@ldim5          ...... b:5 ..... sp:2 ......... t:5     \
                &ldst disp=%im5_16 x=0 scale=0 m=%ma_to_m
@stim5          ...... b:5 t:5 sp:2 ......... .....     \
                &ldst disp=%im5_0 x=0 scale=0 m=%ma_to_m

ld              000011 ..... ..... .. . 1 -- 00 size:2 ......   @ldim5
ld              000011 ..... ..... .. . 0 -- 00 size:2 ......   @ldstx
st              000011 ..... ..... .. . 1 -- 10 size:2 ......   @stim5
ldc             000011 ..... ..... .. . 1 -- 0111      ......   @ldim5 size=2
ldc             000011 ..... ..... .. . 0 -- 0111      ......   @ldstx size=2
lda             000011 ..... ..... .. . 1 -- 0110      ......   @ldim5 size=2
lda             000011 ..... ..... .. . 0 -- 0110      ......   @ldstx size=2
sta             000011 ..... ..... .. . 1 -- 1110      ......   @stim5 size=2
stby            000011 b:5 r:5 sp:2 a:1 1 -- 1100 m:1   .....   disp=%im5_0

####
# Floating-point Multiply Add
####

&mpyadd         rm1 rm2 ta ra tm
@mpyadd         ...... rm1:5 rm2:5 ta:5 ra:5 . tm:5     &mpyadd

fmpyadd_f       000110 ..... ..... ..... ..... 0 .....  @mpyadd
fmpyadd_d       000110 ..... ..... ..... ..... 1 .....  @mpyadd
fmpysub_f       100110 ..... ..... ..... ..... 0 .....  @mpyadd
fmpysub_d       100110 ..... ..... ..... ..... 1 .....  @mpyadd

####
# Conditional Branches
####

bb_sar          110000 00000 r:5 c:1 10 ........... n:1 .  disp=%assemble_12
bb_imm          110001 p:5   r:5 c:1 10 ........... n:1 .  disp=%assemble_12

movb            110010 ..... ..... ... ........... . .  @rrb_cf f=0
movbi           110011 ..... ..... ... ........... . .  @rib_cf f=0

cmpb            100000 ..... ..... ... ........... . .  @rrb_cf f=0
cmpb            100010 ..... ..... ... ........... . .  @rrb_cf f=1
cmpbi           100001 ..... ..... ... ........... . .  @rib_cf f=0
cmpbi           100011 ..... ..... ... ........... . .  @rib_cf f=1

addb            101000 ..... ..... ... ........... . .  @rrb_cf f=0
addb            101010 ..... ..... ... ........... . .  @rrb_cf f=1
addbi           101001 ..... ..... ... ........... . .  @rib_cf f=0
addbi           101011 ..... ..... ... ........... . .  @rib_cf f=1