xref: /netbsd-src/external/gpl3/binutils/dist/cpu/lm32.cpu (revision 6f4ced0b3153adc81d1209a382d97f210becf0ec)
1be12b8bcSchristos; Lattice Mico32 CPU description.  -*- Scheme -*-
2883529b6Schristos; Copyright 2008-2013  Free Software Foundation, Inc.
3be12b8bcSchristos; Contributed by Jon Beniston <jon@beniston.com>
4be12b8bcSchristos;
5be12b8bcSchristos; This file is part of the GNU Binutils.
6be12b8bcSchristos;
7be12b8bcSchristos; This program is free software; you can redistribute it and/or modify
8be12b8bcSchristos; it under the terms of the GNU General Public License as published by
9be12b8bcSchristos; the Free Software Foundation; either version 3 of the License, or
10be12b8bcSchristos; (at your option) any later version.
11be12b8bcSchristos;
12be12b8bcSchristos; This program is distributed in the hope that it will be useful,
13be12b8bcSchristos; but WITHOUT ANY WARRANTY; without even the implied warranty of
14be12b8bcSchristos; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15be12b8bcSchristos; GNU General Public License for more details.
16be12b8bcSchristos;
17be12b8bcSchristos; You should have received a copy of the GNU General Public License
18be12b8bcSchristos; along with this program; if not, write to the Free Software
19be12b8bcSchristos; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20be12b8bcSchristos; MA 02110-1301, USA.
21be12b8bcSchristos
22be12b8bcSchristos(include "simplify.inc")
23be12b8bcSchristos
24be12b8bcSchristos(define-arch
25be12b8bcSchristos  (name lm32) ; name of cpu family
26be12b8bcSchristos  (comment "Lattice Mico32")
27be12b8bcSchristos  (default-alignment aligned)
28be12b8bcSchristos  (insn-lsb0? #t)
29be12b8bcSchristos  (machs lm32)
30be12b8bcSchristos  (isas lm32)
31be12b8bcSchristos)
32be12b8bcSchristos
33be12b8bcSchristos
34be12b8bcSchristos; Instruction sets.
35be12b8bcSchristos
36be12b8bcSchristos(define-isa
37be12b8bcSchristos  (name lm32)
38be12b8bcSchristos  (comment "Lattice Mico32 ISA")
39be12b8bcSchristos  (default-insn-word-bitsize 32)
40be12b8bcSchristos  (default-insn-bitsize 32)
41be12b8bcSchristos  (base-insn-bitsize 32)
42be12b8bcSchristos  (decode-assist (31 30 29 28 27 26))
43be12b8bcSchristos)
44be12b8bcSchristos
45be12b8bcSchristos
46be12b8bcSchristos; Cpu family definitions.
47be12b8bcSchristos
48be12b8bcSchristos(define-cpu
49be12b8bcSchristos  ; cpu names must be distinct from the architecture name and machine name
50be12b8bcSchristos  (name lm32bf)
51be12b8bcSchristos  (comment "Lattice Mico32 CPU")
52be12b8bcSchristos  (endian big)
53be12b8bcSchristos  (word-bitsize 32)
54be12b8bcSchristos)
55be12b8bcSchristos
56be12b8bcSchristos(define-mach
57be12b8bcSchristos  (name lm32)
58be12b8bcSchristos  (comment "Lattice Mico32 MACH")
59be12b8bcSchristos  (cpu lm32bf)
60be12b8bcSchristos)
61be12b8bcSchristos
62be12b8bcSchristos(define-model
63be12b8bcSchristos  (name lm32)
64be12b8bcSchristos  (comment "Lattice Mico32 reference implementation")
65be12b8bcSchristos  (mach lm32)
66be12b8bcSchristos  (unit u-exec "Execution unit" ()
67be12b8bcSchristos    1 1 () () () ())
68be12b8bcSchristos)
69be12b8bcSchristos
70be12b8bcSchristos
71be12b8bcSchristos; Hardware elements.
72be12b8bcSchristos
73be12b8bcSchristos(dnh h-pc "Program counter" (PC) (pc) () () ())
74be12b8bcSchristos
75be12b8bcSchristos(dnh h-gr "General purpose registers"
76be12b8bcSchristos  ()
77be12b8bcSchristos  (register SI (32))
78be12b8bcSchristos  (keyword "" (
79be12b8bcSchristos               (gp 26) (fp 27) (sp 28) (ra 29) (ea 30) (ba 31)
80be12b8bcSchristos               (r0 0) (r1 1) (r2 2) (r3 3)
81be12b8bcSchristos               (r4 4) (r5 5) (r6 6) (r7 7)
82be12b8bcSchristos               (r8 8) (r9 9) (r10 10) (r11 11)
83be12b8bcSchristos               (r12 12) (r13 13) (r14 14) (r15 15)
84be12b8bcSchristos               (r16 16) (r17 17) (r18 18) (r19 19)
85be12b8bcSchristos               (r20 20) (r21 21) (r22 22) (r23 23)
86be12b8bcSchristos               (r24 24) (r25 25) (r26 26) (r27 27)
87be12b8bcSchristos               (r28 28) (r29 29) (r30 30) (r31 31)
88be12b8bcSchristos              )
89be12b8bcSchristos  )
90be12b8bcSchristos  () ()
91be12b8bcSchristos)
92be12b8bcSchristos
93be12b8bcSchristos(dnh h-csr "Control and status registers"
94be12b8bcSchristos  ()
95be12b8bcSchristos  (register SI (32))
96be12b8bcSchristos  (keyword "" (
97be12b8bcSchristos               (IE 0) (IM 1) (IP 2)
98be12b8bcSchristos               (ICC 3) (DCC 4)
99be12b8bcSchristos               (CC 5)
100be12b8bcSchristos               (CFG 6)
101be12b8bcSchristos               (EBA 7)
102be12b8bcSchristos               (DC 8)
103be12b8bcSchristos               (DEBA 9)
104883529b6Schristos	       (CFG2 10)
105be12b8bcSchristos               (JTX 14) (JRX 15)
106be12b8bcSchristos               (BP0 16) (BP1 17) (BP2 18) (BP3 19)
107be12b8bcSchristos               (WP0 24) (WP1 25) (WP2 26) (WP3 27)
108883529b6Schristos               (PSW 29) (TLBVADDR 30) (TLBPADDR 31) (TLBBADVADDR 31)
109be12b8bcSchristos              )
110be12b8bcSchristos  )
111be12b8bcSchristos  () ()
112be12b8bcSchristos)
113be12b8bcSchristos
114be12b8bcSchristos
115be12b8bcSchristos; Instruction fields.
116be12b8bcSchristos
117be12b8bcSchristos(dnf f-opcode   "opcode field"                () 31  6)
118be12b8bcSchristos(dnf f-r0       "register index 0 field"      () 25  5)
119be12b8bcSchristos(dnf f-r1       "register index 1 field"      () 20  5)
120be12b8bcSchristos(dnf f-r2       "register index 2 field"      () 15  5)
121be12b8bcSchristos(dnf f-resv0    "reserved"                    (RESERVED) 10 11)
122be12b8bcSchristos(dnf f-shift    "shift amount field"          ()  4  5)
123be12b8bcSchristos(df  f-imm      "signed immediate field"      () 15 16 INT #f #f)
124be12b8bcSchristos(dnf f-uimm     "unsigned immediate field"    () 15 16)
125be12b8bcSchristos(dnf f-csr      "csr field"                   () 25  5)
126be12b8bcSchristos(dnf f-user     "user defined field"          () 10 11)
127be12b8bcSchristos(dnf f-exception "exception field"            () 25 26)
128be12b8bcSchristos
129be12b8bcSchristos(df f-branch "branch offset field" (PCREL-ADDR) 15 16 INT
130be12b8bcSchristos        ((value pc) (sra SI (sub SI value pc) 2))
131*6f4ced0bSchristos	((value pc) (add SI pc (sub (xor (sll (and value #xffff) 2)
132*6f4ced0bSchristos					 #x20000)
133*6f4ced0bSchristos				    #x20000)))
134be12b8bcSchristos)
135be12b8bcSchristos(df f-call "call offset field" (PCREL-ADDR) 25 26 INT
136be12b8bcSchristos        ((value pc) (sra SI (sub SI value pc) 2))
137*6f4ced0bSchristos	((value pc) (add SI pc (sub (xor (sll (and value #x3ffffff) 2)
138*6f4ced0bSchristos					 #x8000000)
139*6f4ced0bSchristos				    #x8000000)))
140be12b8bcSchristos)
141be12b8bcSchristos
142be12b8bcSchristos
143be12b8bcSchristos; Operands.
144be12b8bcSchristos
145be12b8bcSchristos(dnop r0        "register 0"            () h-gr         f-r0)
146be12b8bcSchristos(dnop r1        "register 1"            () h-gr         f-r1)
147be12b8bcSchristos(dnop r2        "register 2"            () h-gr         f-r2)
148be12b8bcSchristos(dnop shift     "shift amout"           () h-uint       f-shift)
149be12b8bcSchristos(dnop imm       "signed immediate"      () h-sint       f-imm)
150be12b8bcSchristos(dnop uimm      "unsigned immediate"    () h-uint       f-uimm)
151be12b8bcSchristos(dnop branch    "branch offset"         () h-iaddr      f-branch)
152be12b8bcSchristos(dnop call      "call offset"           () h-iaddr      f-call)
153be12b8bcSchristos(dnop csr       "csr"                   () h-csr        f-csr)
154be12b8bcSchristos(dnop user      "user"                  () h-uint       f-user)
155be12b8bcSchristos(dnop exception "exception"             () h-uint       f-exception)
156be12b8bcSchristos
157be12b8bcSchristos(define-operand
158be12b8bcSchristos  (name hi16)
159be12b8bcSchristos  (comment "high 16-bit immediate")
160be12b8bcSchristos  (attrs)
161be12b8bcSchristos  (type h-uint)
162be12b8bcSchristos  (index f-uimm)
163be12b8bcSchristos  (handlers (parse "hi16"))
164be12b8bcSchristos)
165be12b8bcSchristos
166be12b8bcSchristos(define-operand
167be12b8bcSchristos  (name lo16)
168be12b8bcSchristos  (comment "low 16-bit immediate")
169be12b8bcSchristos  (attrs)
170be12b8bcSchristos  (type h-uint)
171be12b8bcSchristos  (index f-uimm)
172be12b8bcSchristos  (handlers (parse "lo16"))
173be12b8bcSchristos)
174be12b8bcSchristos
175be12b8bcSchristos(define-operand
176be12b8bcSchristos  (name gp16)
177be12b8bcSchristos  (comment "gp relative 16-bit immediate")
178be12b8bcSchristos  (attrs)
179be12b8bcSchristos  (type h-sint)
180be12b8bcSchristos  (index f-imm)
181be12b8bcSchristos  (handlers (parse "gp16"))
182be12b8bcSchristos)
183be12b8bcSchristos
184be12b8bcSchristos(define-operand
185be12b8bcSchristos  (name got16)
186be12b8bcSchristos  (comment "got 16-bit immediate")
187be12b8bcSchristos  (attrs)
188be12b8bcSchristos  (type h-sint)
189be12b8bcSchristos  (index f-imm)
190be12b8bcSchristos  (handlers (parse "got16"))
191be12b8bcSchristos)
192be12b8bcSchristos
193be12b8bcSchristos(define-operand
194be12b8bcSchristos  (name gotoffhi16)
195be12b8bcSchristos  (comment "got offset high 16-bit immediate")
196be12b8bcSchristos  (attrs)
197be12b8bcSchristos  (type h-sint)
198be12b8bcSchristos  (index f-imm)
199be12b8bcSchristos  (handlers (parse "gotoff_hi16"))
200be12b8bcSchristos)
201be12b8bcSchristos
202be12b8bcSchristos(define-operand
203be12b8bcSchristos  (name gotofflo16)
204be12b8bcSchristos  (comment "got offset low 16-bit immediate")
205be12b8bcSchristos  (attrs)
206be12b8bcSchristos  (type h-sint)
207be12b8bcSchristos  (index f-imm)
208be12b8bcSchristos  (handlers (parse "gotoff_lo16"))
209be12b8bcSchristos)
210be12b8bcSchristos
211be12b8bcSchristos
212be12b8bcSchristos; Enumerations.
213be12b8bcSchristos
214be12b8bcSchristos(define-normal-insn-enum
215be12b8bcSchristos  opcodes "opcodes" () OP_ f-opcode
216be12b8bcSchristos  (("ADD"       45)
217be12b8bcSchristos   ("ADDI"      13)
218be12b8bcSchristos   ("AND"       40)
219be12b8bcSchristos   ("ANDI"      8)
220be12b8bcSchristos   ("ANDHI"     24)
221be12b8bcSchristos   ("B"         48)
222be12b8bcSchristos   ("BI"        56)
223be12b8bcSchristos   ("BE"        17)
224be12b8bcSchristos   ("BG"        18)
225be12b8bcSchristos   ("BGE"       19)
226be12b8bcSchristos   ("BGEU"      20)
227be12b8bcSchristos   ("BGU"       21)
228be12b8bcSchristos   ("BNE"       23)
229be12b8bcSchristos   ("CALL"      54)
230be12b8bcSchristos   ("CALLI"     62)
231be12b8bcSchristos   ("CMPE"      57)
232be12b8bcSchristos   ("CMPEI"     25)
233be12b8bcSchristos   ("CMPG"      58)
234be12b8bcSchristos   ("CMPGI"     26)
235be12b8bcSchristos   ("CMPGE"     59)
236be12b8bcSchristos   ("CMPGEI"    27)
237be12b8bcSchristos   ("CMPGEU"    60)
238be12b8bcSchristos   ("CMPGEUI"   28)
239be12b8bcSchristos   ("CMPGU"     61)
240be12b8bcSchristos   ("CMPGUI"    29)
241be12b8bcSchristos   ("CMPNE"     63)
242be12b8bcSchristos   ("CMPNEI"    31)
243be12b8bcSchristos   ("DIVU"      35)
244be12b8bcSchristos   ("LB"        4)
245be12b8bcSchristos   ("LBU"       16)
246be12b8bcSchristos   ("LH"        7)
247be12b8bcSchristos   ("LHU"       11)
248be12b8bcSchristos   ("LW"        10)
249be12b8bcSchristos   ("MODU"      49)
250be12b8bcSchristos   ("MUL"       34)
251be12b8bcSchristos   ("MULI"      2)
252be12b8bcSchristos   ("NOR"       33)
253be12b8bcSchristos   ("NORI"      1)
254be12b8bcSchristos   ("OR"        46)
255be12b8bcSchristos   ("ORI"       14)
256be12b8bcSchristos   ("ORHI"      30)
257be12b8bcSchristos   ("RAISE"     43)
258be12b8bcSchristos   ("RCSR"      36)
259be12b8bcSchristos   ("SB"        12)
260be12b8bcSchristos   ("SEXTB"     44)
261be12b8bcSchristos   ("SEXTH"     55)
262be12b8bcSchristos   ("SH"        3)
263be12b8bcSchristos   ("SL"        47)
264be12b8bcSchristos   ("SLI"       15)
265be12b8bcSchristos   ("SR"        37)
266be12b8bcSchristos   ("SRI"       5)
267be12b8bcSchristos   ("SRU"       32)
268be12b8bcSchristos   ("SRUI"      0)
269be12b8bcSchristos   ("SUB"       50)
270be12b8bcSchristos   ("SW"        22)
271be12b8bcSchristos   ("USER"      51)
272be12b8bcSchristos   ("WCSR"      52)
273be12b8bcSchristos   ("XNOR"      41)
274be12b8bcSchristos   ("XNORI"     9)
275be12b8bcSchristos   ("XOR"       38)
276be12b8bcSchristos   ("XORI"      6)
277be12b8bcSchristos  )
278be12b8bcSchristos)
279be12b8bcSchristos
280be12b8bcSchristos
281be12b8bcSchristos; Instructions. Note: Reg-reg must come before reg-imm.
282be12b8bcSchristos
283be12b8bcSchristos(dni add "add" ()
284be12b8bcSchristos        "add $r2,$r0,$r1"
285be12b8bcSchristos        (+ OP_ADD r0 r1 r2 (f-resv0 0))
286be12b8bcSchristos        (set r2 (add r0 r1))
287be12b8bcSchristos        ()
288be12b8bcSchristos)
289be12b8bcSchristos
290be12b8bcSchristos(dni addi "add immediate" ()
291be12b8bcSchristos        "addi $r1,$r0,$imm"
292be12b8bcSchristos        (+ OP_ADDI r0 r1 imm)
293be12b8bcSchristos        (set r1 (add r0 (ext SI (trunc HI imm))))
294be12b8bcSchristos        ()
295be12b8bcSchristos)
296be12b8bcSchristos
297be12b8bcSchristos(dni and "and" ()
298be12b8bcSchristos        "and $r2,$r0,$r1"
299be12b8bcSchristos        (+ OP_AND r0 r1 r2 (f-resv0 0))
300be12b8bcSchristos        (set r2 (and r0 r1))
301be12b8bcSchristos        ()
302be12b8bcSchristos)
303be12b8bcSchristos
304be12b8bcSchristos(dni andi "and immediate" ()
305be12b8bcSchristos        "andi $r1,$r0,$uimm"
306be12b8bcSchristos        (+ OP_ANDI r0 r1 uimm)
307be12b8bcSchristos        (set r1 (and r0 (zext SI uimm)))
308be12b8bcSchristos        ()
309be12b8bcSchristos)
310be12b8bcSchristos
311be12b8bcSchristos(dni andhii "and high immediate" ()
312be12b8bcSchristos        "andhi $r1,$r0,$hi16"
313be12b8bcSchristos        (+ OP_ANDHI r0 r1 hi16)
314be12b8bcSchristos        (set r1 (and r0 (sll SI hi16 16)))
315be12b8bcSchristos        ()
316be12b8bcSchristos)
317be12b8bcSchristos
318be12b8bcSchristos(dni b "branch" ()
319be12b8bcSchristos        "b $r0"
320be12b8bcSchristos        (+ OP_B r0 (f-r1 0) (f-r2 0) (f-resv0 0))
321be12b8bcSchristos        (set pc (c-call USI "@cpu@_b_insn" r0 f-r0))
322be12b8bcSchristos        ()
323be12b8bcSchristos)
324be12b8bcSchristos
325be12b8bcSchristos(dni bi "branch immediate" ()
326be12b8bcSchristos        "bi $call"
327be12b8bcSchristos        (+ OP_BI call)
328be12b8bcSchristos        (set pc (ext SI call))
329be12b8bcSchristos        ()
330be12b8bcSchristos)
331be12b8bcSchristos
332be12b8bcSchristos(dni be "branch equal" ()
333be12b8bcSchristos        "be $r0,$r1,$branch"
334be12b8bcSchristos        (+ OP_BE r0 r1 branch)
335be12b8bcSchristos        (if (eq r0 r1)
336be12b8bcSchristos            (set pc branch)
337be12b8bcSchristos        )
338be12b8bcSchristos        ()
339be12b8bcSchristos)
340be12b8bcSchristos
341be12b8bcSchristos(dni bg "branch greater" ()
342be12b8bcSchristos        "bg $r0,$r1,$branch"
343be12b8bcSchristos        (+ OP_BG r0 r1 branch)
344be12b8bcSchristos        (if (gt r0 r1)
345be12b8bcSchristos            (set pc branch)
346be12b8bcSchristos        )
347be12b8bcSchristos        ()
348be12b8bcSchristos)
349be12b8bcSchristos
350be12b8bcSchristos(dni bge "branch greater or equal" ()
351be12b8bcSchristos        "bge $r0,$r1,$branch"
352be12b8bcSchristos        (+ OP_BGE r0 r1 branch)
353be12b8bcSchristos        (if (ge r0 r1)
354be12b8bcSchristos            (set pc branch)
355be12b8bcSchristos        )
356be12b8bcSchristos        ()
357be12b8bcSchristos)
358be12b8bcSchristos
359be12b8bcSchristos(dni bgeu "branch greater or equal unsigned" ()
360be12b8bcSchristos        "bgeu $r0,$r1,$branch"
361be12b8bcSchristos        (+ OP_BGEU r0 r1 branch)
362be12b8bcSchristos        (if (geu r0 r1)
363be12b8bcSchristos            (set pc branch)
364be12b8bcSchristos        )
365be12b8bcSchristos        ()
366be12b8bcSchristos)
367be12b8bcSchristos
368be12b8bcSchristos(dni bgu "branch greater unsigned" ()
369be12b8bcSchristos        "bgu $r0,$r1,$branch"
370be12b8bcSchristos        (+ OP_BGU r0 r1 branch)
371be12b8bcSchristos        (if (gtu r0 r1)
372be12b8bcSchristos            (set pc branch)
373be12b8bcSchristos        )
374be12b8bcSchristos        ()
375be12b8bcSchristos)
376be12b8bcSchristos
377be12b8bcSchristos(dni bne "branch not equal" ()
378be12b8bcSchristos        "bne $r0,$r1,$branch"
379be12b8bcSchristos        (+ OP_BNE r0 r1 branch)
380be12b8bcSchristos        (if (ne r0 r1)
381be12b8bcSchristos            (set pc branch)
382be12b8bcSchristos        )
383be12b8bcSchristos        ()
384be12b8bcSchristos)
385be12b8bcSchristos
386be12b8bcSchristos(dni call "call" ()
387be12b8bcSchristos        "call $r0"
388be12b8bcSchristos        (+ OP_CALL r0 (f-r1 0) (f-r2 0) (f-resv0 0))
389be12b8bcSchristos        (sequence ()
390be12b8bcSchristos                (set (reg h-gr 29) (add pc 4))
391be12b8bcSchristos                (set pc r0)
392be12b8bcSchristos        )
393be12b8bcSchristos        ()
394be12b8bcSchristos)
395be12b8bcSchristos
396be12b8bcSchristos(dni calli "call immediate" ()
397be12b8bcSchristos        "calli $call"
398be12b8bcSchristos        (+ OP_CALLI call)
399be12b8bcSchristos        (sequence ()
400be12b8bcSchristos                (set (reg h-gr 29) (add pc 4))
401be12b8bcSchristos                (set pc (ext SI call))
402be12b8bcSchristos        )
403be12b8bcSchristos        ()
404be12b8bcSchristos)
405be12b8bcSchristos
406be12b8bcSchristos(dni cmpe "compare equal" ()
407be12b8bcSchristos        "cmpe $r2,$r0,$r1"
408be12b8bcSchristos        (+ OP_CMPE r0 r1 r2 (f-resv0 0))
409be12b8bcSchristos        (set r2 (eq SI r0 r1))
410be12b8bcSchristos        ()
411be12b8bcSchristos)
412be12b8bcSchristos
413be12b8bcSchristos(dni cmpei "compare equal immediate" ()
414be12b8bcSchristos        "cmpei $r1,$r0,$imm"
415be12b8bcSchristos        (+ OP_CMPEI r0 r1 imm)
416be12b8bcSchristos        (set r1 (eq SI r0 (ext SI (trunc HI imm))))
417be12b8bcSchristos        ()
418be12b8bcSchristos)
419be12b8bcSchristos
420be12b8bcSchristos(dni cmpg "compare greater than" ()
421be12b8bcSchristos        "cmpg $r2,$r0,$r1"
422be12b8bcSchristos        (+ OP_CMPG r0 r1 r2 (f-resv0 0))
423be12b8bcSchristos        (set r2 (gt SI r0 r1))
424be12b8bcSchristos        ()
425be12b8bcSchristos)
426be12b8bcSchristos
427be12b8bcSchristos(dni cmpgi "compare greater than immediate" ()
428be12b8bcSchristos        "cmpgi $r1,$r0,$imm"
429be12b8bcSchristos        (+ OP_CMPGI r0 r1 imm)
430be12b8bcSchristos        (set r1 (gt SI r0 (ext SI (trunc HI imm))))
431be12b8bcSchristos        ()
432be12b8bcSchristos)
433be12b8bcSchristos
434be12b8bcSchristos(dni cmpge "compare greater or equal" ()
435be12b8bcSchristos        "cmpge $r2,$r0,$r1"
436be12b8bcSchristos        (+ OP_CMPGE r0 r1 r2 (f-resv0 0))
437be12b8bcSchristos        (set r2 (ge SI r0 r1))
438be12b8bcSchristos        ()
439be12b8bcSchristos)
440be12b8bcSchristos
441be12b8bcSchristos(dni cmpgei "compare greater or equal immediate" ()
442be12b8bcSchristos        "cmpgei $r1,$r0,$imm"
443be12b8bcSchristos        (+ OP_CMPGEI r0 r1 imm)
444be12b8bcSchristos        (set r1 (ge SI r0 (ext SI (trunc HI imm))))
445be12b8bcSchristos        ()
446be12b8bcSchristos)
447be12b8bcSchristos
448be12b8bcSchristos(dni cmpgeu "compare greater or equal unsigned" ()
449be12b8bcSchristos        "cmpgeu $r2,$r0,$r1"
450be12b8bcSchristos        (+ OP_CMPGEU r0 r1 r2 (f-resv0 0))
451be12b8bcSchristos        (set r2 (geu SI r0 r1))
452be12b8bcSchristos        ()
453be12b8bcSchristos)
454be12b8bcSchristos
455be12b8bcSchristos(dni cmpgeui "compare greater or equal unsigned immediate" ()
456be12b8bcSchristos        "cmpgeui $r1,$r0,$uimm"
457be12b8bcSchristos        (+ OP_CMPGEUI r0 r1 uimm)
458be12b8bcSchristos        (set r1 (geu SI r0 (zext SI uimm)))
459be12b8bcSchristos        ()
460be12b8bcSchristos)
461be12b8bcSchristos
462be12b8bcSchristos(dni cmpgu "compare greater than unsigned" ()
463be12b8bcSchristos        "cmpgu $r2,$r0,$r1"
464be12b8bcSchristos        (+ OP_CMPGU r0 r1 r2 (f-resv0 0))
465be12b8bcSchristos        (set r2 (gtu SI r0 r1))
466be12b8bcSchristos        ()
467be12b8bcSchristos)
468be12b8bcSchristos
469be12b8bcSchristos(dni cmpgui "compare greater than unsigned immediate" ()
470be12b8bcSchristos        "cmpgui $r1,$r0,$uimm"
471be12b8bcSchristos        (+ OP_CMPGUI r0 r1 uimm)
472be12b8bcSchristos        (set r1 (gtu SI r0 (zext SI uimm)))
473be12b8bcSchristos        ()
474be12b8bcSchristos)
475be12b8bcSchristos
476be12b8bcSchristos(dni cmpne "compare not equal" ()
477be12b8bcSchristos        "cmpne $r2,$r0,$r1"
478be12b8bcSchristos        (+ OP_CMPNE r0 r1 r2 (f-resv0 0))
479be12b8bcSchristos        (set r2 (ne SI r0 r1))
480be12b8bcSchristos        ()
481be12b8bcSchristos)
482be12b8bcSchristos
483be12b8bcSchristos(dni cmpnei "compare not equal immediate" ()
484be12b8bcSchristos        "cmpnei $r1,$r0,$imm"
485be12b8bcSchristos        (+ OP_CMPNEI r0 r1 imm)
486be12b8bcSchristos        (set r1 (ne SI r0 (ext SI (trunc HI imm))))
487be12b8bcSchristos        ()
488be12b8bcSchristos)
489be12b8bcSchristos
490be12b8bcSchristos(dni divu "unsigned divide" ()
491be12b8bcSchristos        "divu $r2,$r0,$r1"
492be12b8bcSchristos        (+ OP_DIVU r0 r1 r2 (f-resv0 0))
493be12b8bcSchristos        (set pc (c-call USI "@cpu@_divu_insn" pc f-r0 f-r1 f-r2))
494be12b8bcSchristos        ()
495be12b8bcSchristos)
496be12b8bcSchristos
497be12b8bcSchristos(dni lb "load byte" ()
498be12b8bcSchristos        "lb $r1,($r0+$imm)"
499be12b8bcSchristos        (+ OP_LB r0 r1 imm)
500be12b8bcSchristos        (set r1 (ext SI (mem QI (add r0 (ext SI (trunc HI imm))))))
501be12b8bcSchristos        ()
502be12b8bcSchristos)
503be12b8bcSchristos
504be12b8bcSchristos(dni lbu "load byte unsigned" ()
505be12b8bcSchristos        "lbu $r1,($r0+$imm)"
506be12b8bcSchristos        (+ OP_LBU r0 r1 imm)
507be12b8bcSchristos        (set r1 (zext SI (mem QI (add r0 (ext SI (trunc HI imm))))))
508be12b8bcSchristos        ()
509be12b8bcSchristos)
510be12b8bcSchristos
511be12b8bcSchristos(dni lh "load halfword" ()
512be12b8bcSchristos        "lh $r1,($r0+$imm)"
513be12b8bcSchristos        (+ OP_LH r0 r1 imm)
514be12b8bcSchristos        (set r1 (ext SI (mem HI (add r0 (ext SI (trunc HI imm))))))
515be12b8bcSchristos        ()
516be12b8bcSchristos)
517be12b8bcSchristos
518be12b8bcSchristos(dni lhu "load halfword unsigned" ()
519be12b8bcSchristos        "lhu $r1,($r0+$imm)"
520be12b8bcSchristos        (+ OP_LHU r0 r1 imm)
521be12b8bcSchristos        (set r1 (zext SI (mem HI (add r0 (ext SI (trunc HI imm))))))
522be12b8bcSchristos        ()
523be12b8bcSchristos)
524be12b8bcSchristos
525be12b8bcSchristos(dni lw "load word" ()
526be12b8bcSchristos        "lw $r1,($r0+$imm)"
527be12b8bcSchristos        (+ OP_LW r0 r1 imm)
528be12b8bcSchristos        (set r1 (mem SI (add r0 (ext SI (trunc HI imm)))))
529be12b8bcSchristos        ()
530be12b8bcSchristos)
531be12b8bcSchristos
532be12b8bcSchristos(dni modu "unsigned modulus" ()
533be12b8bcSchristos        "modu $r2,$r0,$r1"
534be12b8bcSchristos        (+ OP_MODU r0 r1 r2 (f-resv0 0))
535be12b8bcSchristos        (set pc (c-call USI "@cpu@_modu_insn" pc f-r0 f-r1 f-r2))
536be12b8bcSchristos        ()
537be12b8bcSchristos)
538be12b8bcSchristos
539be12b8bcSchristos(dni mul "mulitply" ()
540be12b8bcSchristos        "mul $r2,$r0,$r1"
541be12b8bcSchristos        (+ OP_MUL r0 r1 r2 (f-resv0 0))
542be12b8bcSchristos        (set r2 (mul r0 r1))
543be12b8bcSchristos        ()
544be12b8bcSchristos)
545be12b8bcSchristos
546be12b8bcSchristos(dni muli "multiply immediate" ()
547be12b8bcSchristos        "muli $r1,$r0,$imm"
548be12b8bcSchristos        (+ OP_MULI r0 r1 imm)
549be12b8bcSchristos        (set r1 (mul r0 (ext SI (trunc HI imm))))
550be12b8bcSchristos        ()
551be12b8bcSchristos)
552be12b8bcSchristos
553be12b8bcSchristos(dni nor "nor" ()
554be12b8bcSchristos        "nor $r2,$r0,$r1"
555be12b8bcSchristos        (+ OP_NOR r0 r1 r2 (f-resv0 0))
556be12b8bcSchristos        (set r2 (inv (or r0 r1)))
557be12b8bcSchristos        ()
558be12b8bcSchristos)
559be12b8bcSchristos
560be12b8bcSchristos(dni nori "nor immediate" ()
561be12b8bcSchristos        "nori $r1,$r0,$uimm"
562be12b8bcSchristos        (+ OP_NORI r0 r1 uimm)
563be12b8bcSchristos        (set r1 (inv (or r0 (zext SI uimm))))
564be12b8bcSchristos        ()
565be12b8bcSchristos)
566be12b8bcSchristos
567be12b8bcSchristos(dni or "or" ()
568be12b8bcSchristos        "or $r2,$r0,$r1"
569be12b8bcSchristos        (+ OP_OR r0 r1 r2 (f-resv0 0))
570be12b8bcSchristos        (set r2 (or r0 r1))
571be12b8bcSchristos        ()
572be12b8bcSchristos)
573be12b8bcSchristos
574be12b8bcSchristos(dni ori "or immediate" ()
575be12b8bcSchristos        "ori $r1,$r0,$lo16"
576be12b8bcSchristos        (+ OP_ORI r0 r1 lo16)
577be12b8bcSchristos        (set r1 (or r0 (zext SI lo16)))
578be12b8bcSchristos        ()
579be12b8bcSchristos)
580be12b8bcSchristos
581be12b8bcSchristos(dni orhii "or high immediate" ()
582be12b8bcSchristos        "orhi $r1,$r0,$hi16"
583be12b8bcSchristos        (+ OP_ORHI r0 r1 hi16)
584be12b8bcSchristos        (set r1 (or r0 (sll SI hi16 16)))
585be12b8bcSchristos        ()
586be12b8bcSchristos)
587be12b8bcSchristos
588be12b8bcSchristos(dni rcsr "read control or status register" ()
589be12b8bcSchristos        "rcsr $r2,$csr"
590be12b8bcSchristos        (+ OP_RCSR csr (f-r1 0) r2 (f-resv0 0))
591be12b8bcSchristos        (set r2 csr)
592be12b8bcSchristos        ()
593be12b8bcSchristos)
594be12b8bcSchristos
595be12b8bcSchristos(dni sb "store byte" ()
596be12b8bcSchristos        "sb ($r0+$imm),$r1"
597be12b8bcSchristos        (+ OP_SB r0 r1 imm)
598be12b8bcSchristos        (set (mem QI (add r0 (ext SI (trunc HI imm)))) r1)
599be12b8bcSchristos        ()
600be12b8bcSchristos)
601be12b8bcSchristos
602be12b8bcSchristos(dni sextb "sign extend byte" ()
603be12b8bcSchristos        "sextb $r2,$r0"
604be12b8bcSchristos        (+ OP_SEXTB r0 (f-r1 0) r2 (f-resv0 0))
605be12b8bcSchristos        (set r2 (ext SI (trunc QI r0)))
606be12b8bcSchristos        ()
607be12b8bcSchristos)
608be12b8bcSchristos
609be12b8bcSchristos(dni sexth "sign extend half-word" ()
610be12b8bcSchristos        "sexth $r2,$r0"
611be12b8bcSchristos        (+ OP_SEXTH r0 (f-r1 0) r2 (f-resv0 0))
612be12b8bcSchristos        (set r2 (ext SI (trunc HI r0)))
613be12b8bcSchristos        ()
614be12b8bcSchristos)
615be12b8bcSchristos
616be12b8bcSchristos(dni sh "store halfword" ()
617be12b8bcSchristos        "sh ($r0+$imm),$r1"
618be12b8bcSchristos        (+ OP_SH r0 r1 imm)
619be12b8bcSchristos        (set (mem HI (add r0 (ext SI (trunc HI imm)))) r1)
620be12b8bcSchristos        ()
621be12b8bcSchristos)
622be12b8bcSchristos
623be12b8bcSchristos(dni sl "shift left" ()
624be12b8bcSchristos        "sl $r2,$r0,$r1"
625be12b8bcSchristos        (+ OP_SL r0 r1 r2 (f-resv0 0))
626be12b8bcSchristos        (set r2 (sll SI r0 r1))
627be12b8bcSchristos        ()
628be12b8bcSchristos)
629be12b8bcSchristos
630be12b8bcSchristos(dni sli "shift left immediate" ()
631be12b8bcSchristos        "sli $r1,$r0,$imm"
632be12b8bcSchristos        (+ OP_SLI r0 r1 imm)
633be12b8bcSchristos        (set r1 (sll SI r0 imm))
634be12b8bcSchristos        ()
635be12b8bcSchristos)
636be12b8bcSchristos
637be12b8bcSchristos(dni sr "shift right" ()
638be12b8bcSchristos        "sr $r2,$r0,$r1"
639be12b8bcSchristos        (+ OP_SR r0 r1 r2 (f-resv0 0))
640be12b8bcSchristos        (set r2 (sra SI r0 r1))
641be12b8bcSchristos        ()
642be12b8bcSchristos)
643be12b8bcSchristos
644be12b8bcSchristos(dni sri "shift right immediate" ()
645be12b8bcSchristos        "sri $r1,$r0,$imm"
646be12b8bcSchristos        (+ OP_SRI r0 r1 imm)
647be12b8bcSchristos        (set r1 (sra SI r0 imm))
648be12b8bcSchristos        ()
649be12b8bcSchristos)
650be12b8bcSchristos
651be12b8bcSchristos(dni sru "shift right unsigned" ()
652be12b8bcSchristos        "sru $r2,$r0,$r1"
653be12b8bcSchristos        (+ OP_SRU r0 r1 r2 (f-resv0 0))
654be12b8bcSchristos        (set r2 (srl SI r0 r1))
655be12b8bcSchristos        ()
656be12b8bcSchristos)
657be12b8bcSchristos
658be12b8bcSchristos(dni srui "shift right unsigned immediate" ()
659be12b8bcSchristos        "srui $r1,$r0,$imm"
660be12b8bcSchristos        (+ OP_SRUI r0 r1 imm)
661be12b8bcSchristos        (set r1 (srl SI r0 imm))
662be12b8bcSchristos        ()
663be12b8bcSchristos)
664be12b8bcSchristos
665be12b8bcSchristos(dni sub "subtract" ()
666be12b8bcSchristos        "sub $r2,$r0,$r1"
667be12b8bcSchristos        (+ OP_SUB r0 r1 r2 (f-resv0 0))
668be12b8bcSchristos        (set r2 (sub r0 r1))
669be12b8bcSchristos        ()
670be12b8bcSchristos)
671be12b8bcSchristos
672be12b8bcSchristos(dni sw "store word" ()
673be12b8bcSchristos        "sw ($r0+$imm),$r1"
674be12b8bcSchristos        (+ OP_SW r0 r1 imm)
675be12b8bcSchristos        (set (mem SI (add r0 (ext SI (trunc HI imm)))) r1)
676be12b8bcSchristos        ()
677be12b8bcSchristos)
678be12b8bcSchristos
679be12b8bcSchristos(dni user "user defined instruction" ()
680be12b8bcSchristos        "user $r2,$r0,$r1,$user"
681be12b8bcSchristos        (+ OP_USER r0 r1 r2 user)
682be12b8bcSchristos        (set r2 (c-call SI "@cpu@_user_insn" r0 r1 user))
683be12b8bcSchristos        ()
684be12b8bcSchristos)
685be12b8bcSchristos
686be12b8bcSchristos(dni wcsr "write control or status register" ()
687be12b8bcSchristos        "wcsr $csr,$r1"
688be12b8bcSchristos        (+ OP_WCSR csr r1 (f-r2 0) (f-resv0 0))
689be12b8bcSchristos        (c-call VOID "@cpu@_wcsr_insn" f-csr r1)
690be12b8bcSchristos        ()
691be12b8bcSchristos)
692be12b8bcSchristos
693be12b8bcSchristos(dni xor "xor" ()
694be12b8bcSchristos        "xor $r2,$r0,$r1"
695be12b8bcSchristos        (+ OP_XOR r0 r1 r2 (f-resv0 0))
696be12b8bcSchristos        (set r2 (xor r0 r1))
697be12b8bcSchristos        ()
698be12b8bcSchristos)
699be12b8bcSchristos
700be12b8bcSchristos(dni xori "xor immediate" ()
701be12b8bcSchristos        "xori $r1,$r0,$uimm"
702be12b8bcSchristos        (+ OP_XORI r0 r1 uimm)
703be12b8bcSchristos        (set r1 (xor r0 (zext SI uimm)))
704be12b8bcSchristos        ()
705be12b8bcSchristos)
706be12b8bcSchristos
707be12b8bcSchristos(dni xnor "xnor" ()
708be12b8bcSchristos        "xnor $r2,$r0,$r1"
709be12b8bcSchristos        (+ OP_XNOR r0 r1 r2 (f-resv0 0))
710be12b8bcSchristos        (set r2 (inv (xor r0 r1)))
711be12b8bcSchristos        ()
712be12b8bcSchristos)
713be12b8bcSchristos
714be12b8bcSchristos(dni xnori "xnor immediate" ()
715be12b8bcSchristos        "xnori $r1,$r0,$uimm"
716be12b8bcSchristos        (+ OP_XNORI r0 r1 uimm)
717be12b8bcSchristos        (set r1 (inv (xor r0 (zext SI uimm))))
718be12b8bcSchristos        ()
719be12b8bcSchristos)
720be12b8bcSchristos
721be12b8bcSchristos; Pseudo instructions
722be12b8bcSchristos
723be12b8bcSchristos(dni break "breakpoint" ()
724be12b8bcSchristos        "break"
725be12b8bcSchristos        (+ OP_RAISE (f-exception 2))
726be12b8bcSchristos        (set pc (c-call USI "@cpu@_break_insn" pc))
727be12b8bcSchristos        ()
728be12b8bcSchristos)
729be12b8bcSchristos
730be12b8bcSchristos(dni scall "system call" ()
731be12b8bcSchristos        "scall"
732be12b8bcSchristos        (+ OP_RAISE (f-exception 7))
733be12b8bcSchristos        (set pc (c-call USI "@cpu@_scall_insn" pc))
734be12b8bcSchristos        ()
735be12b8bcSchristos)
736be12b8bcSchristos
737be12b8bcSchristos(dni bret "return from breakpoint" (ALIAS)
738be12b8bcSchristos        "bret"
739be12b8bcSchristos        (+ OP_B (f-r0 31) (f-r1 0) (f-r2 0) (f-resv0 0))
740be12b8bcSchristos        (set pc (c-call USI "@cpu@_bret_insn" r0))
741be12b8bcSchristos        ()
742be12b8bcSchristos)
743be12b8bcSchristos
744be12b8bcSchristos(dni eret "return from exception" (ALIAS)
745be12b8bcSchristos        "eret"
746be12b8bcSchristos        (+ OP_B (f-r0 30) (f-r1 0) (f-r2 0) (f-resv0 0))
747be12b8bcSchristos        (set pc (c-call USI "@cpu@_eret_insn" r0))
748be12b8bcSchristos        ()
749be12b8bcSchristos)
750be12b8bcSchristos
751be12b8bcSchristos(dni ret "return" (ALIAS)
752be12b8bcSchristos        "ret"
753be12b8bcSchristos        (+ OP_B (f-r0 29) (f-r1 0) (f-r2 0) (f-resv0 0))
754be12b8bcSchristos        (set pc r0)
755be12b8bcSchristos        ()
756be12b8bcSchristos)
757be12b8bcSchristos
758be12b8bcSchristos(dni mv "move" (ALIAS)
759be12b8bcSchristos        "mv $r2,$r0"
760be12b8bcSchristos        (+ OP_OR r0 (f-r1 0) r2 (f-resv0 0))
761be12b8bcSchristos        (set r2 r0)
762be12b8bcSchristos        ()
763be12b8bcSchristos)
764be12b8bcSchristos
765be12b8bcSchristos(dni mvi "move immediate" (ALIAS)
766be12b8bcSchristos        "mvi $r1,$imm"
767be12b8bcSchristos        (+ OP_ADDI (f-r0 0) r1 imm)
768be12b8bcSchristos        (set r1 (add r0 (ext SI (trunc HI imm))))
769be12b8bcSchristos        ()
770be12b8bcSchristos)
771be12b8bcSchristos
772be12b8bcSchristos(dni mvui "move unsigned immediate" (ALIAS)
773be12b8bcSchristos        "mvu $r1,$lo16"
774be12b8bcSchristos        (+ OP_ORI (f-r0 0) r1 lo16)
775be12b8bcSchristos        (set r1 (zext SI lo16))
776be12b8bcSchristos        ()
777be12b8bcSchristos)
778be12b8bcSchristos
779be12b8bcSchristos(dni mvhi "move high immediate" (ALIAS)
780be12b8bcSchristos        "mvhi $r1,$hi16"
781be12b8bcSchristos        (+ OP_ORHI (f-r0 0) r1 hi16)
782be12b8bcSchristos        (set r1 (or r0 (sll SI hi16 16)))
783be12b8bcSchristos        ()
784be12b8bcSchristos)
785be12b8bcSchristos
786be12b8bcSchristos(dni mva "move address" (ALIAS)
787be12b8bcSchristos        "mva $r1,$gp16"
788be12b8bcSchristos        (+ OP_ADDI (f-r0 26) r1 gp16)
789be12b8bcSchristos        (set r1 (add r0 (ext SI (trunc HI gp16))))
790be12b8bcSchristos        ()
791be12b8bcSchristos)
792be12b8bcSchristos
793be12b8bcSchristos(dni not "not" (ALIAS)
794be12b8bcSchristos        "not $r2,$r0"
795be12b8bcSchristos        (+ OP_XNOR r0 (f-r1 0) r2 (f-resv0 0))
796be12b8bcSchristos        (set r2 (inv r0))
797be12b8bcSchristos        ()
798be12b8bcSchristos)
799be12b8bcSchristos
800be12b8bcSchristos(dni nop "nop" (ALIAS)
801be12b8bcSchristos        "nop"
802be12b8bcSchristos        (+ OP_ADDI (f-r0 0) (f-r1 0) (f-imm 0))
803be12b8bcSchristos        (set r0 r0)
804be12b8bcSchristos        ()
805be12b8bcSchristos)
806be12b8bcSchristos
807be12b8bcSchristos(dni lbgprel "load byte gp relative" (ALIAS)
808be12b8bcSchristos        "lb $r1,$gp16"
809be12b8bcSchristos        (+ OP_LB (f-r0 26) r1 gp16)
810be12b8bcSchristos        (set r1 (ext SI (mem QI (add r0 (ext SI (trunc HI gp16))))))
811be12b8bcSchristos        ()
812be12b8bcSchristos)
813be12b8bcSchristos
814be12b8bcSchristos(dni lbugprel "load byte unsigned gp relative" (ALIAS)
815be12b8bcSchristos        "lbu $r1,$gp16"
816be12b8bcSchristos        (+ OP_LBU (f-r0 26) r1 gp16)
817be12b8bcSchristos        (set r1 (zext SI (mem QI (add r0 (ext SI (trunc HI gp16))))))
818be12b8bcSchristos        ()
819be12b8bcSchristos)
820be12b8bcSchristos
821be12b8bcSchristos(dni lhgprel "load halfword gp relative" (ALIAS)
822be12b8bcSchristos        "lh $r1,$gp16"
823be12b8bcSchristos        (+ OP_LH (f-r0 26) r1 gp16)
824be12b8bcSchristos        (set r1 (ext SI (mem HI (add r0 (ext SI (trunc HI gp16))))))
825be12b8bcSchristos        ()
826be12b8bcSchristos)
827be12b8bcSchristos
828be12b8bcSchristos(dni lhugprel "load halfword unsigned gp relative" (ALIAS)
829be12b8bcSchristos        "lhu $r1,$gp16"
830be12b8bcSchristos        (+ OP_LHU (f-r0 26) r1 gp16)
831be12b8bcSchristos        (set r1 (zext SI (mem HI (add r0 (ext SI (trunc HI gp16))))))
832be12b8bcSchristos        ()
833be12b8bcSchristos)
834be12b8bcSchristos
835be12b8bcSchristos(dni lwgprel "load word gp relative" (ALIAS)
836be12b8bcSchristos        "lw $r1,$gp16"
837be12b8bcSchristos        (+ OP_LW (f-r0 26) r1 gp16)
838be12b8bcSchristos        (set r1 (mem SI (add r0 (ext SI (trunc HI gp16)))))
839be12b8bcSchristos        ()
840be12b8bcSchristos)
841be12b8bcSchristos
842be12b8bcSchristos(dni sbgprel "store byte gp relative" (ALIAS)
843be12b8bcSchristos        "sb $gp16,$r1"
844be12b8bcSchristos        (+ OP_SB (f-r0 26) r1 gp16)
845be12b8bcSchristos        (set (mem QI (add r0 (ext SI (trunc HI gp16)))) r1)
846be12b8bcSchristos        ()
847be12b8bcSchristos)
848be12b8bcSchristos
849be12b8bcSchristos(dni shgprel "store halfword gp relative" (ALIAS)
850be12b8bcSchristos        "sh $gp16,$r1"
851be12b8bcSchristos        (+ OP_SH (f-r0 26) r1 gp16)
852be12b8bcSchristos        (set (mem HI (add r0 (ext SI (trunc HI gp16)))) r1)
853be12b8bcSchristos        ()
854be12b8bcSchristos)
855be12b8bcSchristos
856be12b8bcSchristos(dni swgprel "store word gp relative" (ALIAS)
857be12b8bcSchristos        "sw $gp16,$r1"
858be12b8bcSchristos        (+ OP_SW (f-r0 26) r1 gp16)
859be12b8bcSchristos        (set (mem SI (add r0 (ext SI (trunc HI gp16)))) r1)
860be12b8bcSchristos        ()
861be12b8bcSchristos)
862be12b8bcSchristos
863be12b8bcSchristos(dni lwgotrel "load word got relative" (ALIAS)
864be12b8bcSchristos        "lw $r1,(gp+$got16)"
865be12b8bcSchristos        (+ OP_LW (f-r0 26) r1 got16)
866be12b8bcSchristos        (set r1 (mem SI (add r0 (ext SI (trunc HI got16)))))
867be12b8bcSchristos        ()
868be12b8bcSchristos)
869be12b8bcSchristos
870be12b8bcSchristos(dni orhigotoffi "or high got offset immediate" (ALIAS)
871be12b8bcSchristos        "orhi $r1,$r0,$gotoffhi16"
872be12b8bcSchristos        (+ OP_ORHI r0 r1 gotoffhi16)
873be12b8bcSchristos        (set r1 (or r0 (sll SI gotoffhi16 16)))
874be12b8bcSchristos        ()
875be12b8bcSchristos)
876be12b8bcSchristos
877be12b8bcSchristos(dni addgotoff "add got offset" (ALIAS)
878be12b8bcSchristos        "addi $r1,$r0,$gotofflo16"
879be12b8bcSchristos        (+ OP_ADDI r0 r1 gotofflo16)
880be12b8bcSchristos        (set r1 (add r0 (ext SI (trunc HI gotofflo16))))
881be12b8bcSchristos        ()
882be12b8bcSchristos)
883be12b8bcSchristos
884be12b8bcSchristos(dni swgotoff "store word got offset" (ALIAS)
885be12b8bcSchristos        "sw ($r0+$gotofflo16),$r1"
886be12b8bcSchristos        (+ OP_SW r0 r1 gotofflo16)
887be12b8bcSchristos        (set (mem SI (add r0 (ext SI (trunc HI gotofflo16)))) r1)
888be12b8bcSchristos        ()
889be12b8bcSchristos)
890be12b8bcSchristos
891be12b8bcSchristos(dni lwgotoff "load word got offset" (ALIAS)
892be12b8bcSchristos        "lw $r1,($r0+$gotofflo16)"
893be12b8bcSchristos        (+ OP_LW r0 r1 gotofflo16)
894be12b8bcSchristos        (set r1 (mem SI (add r0 (ext SI (trunc HI gotofflo16)))))
895be12b8bcSchristos        ()
896be12b8bcSchristos)
897be12b8bcSchristos
898be12b8bcSchristos(dni shgotoff "store half word got offset" (ALIAS)
899be12b8bcSchristos        "sh ($r0+$gotofflo16),$r1"
900be12b8bcSchristos        (+ OP_SH r0 r1 gotofflo16)
901be12b8bcSchristos        (set (mem HI (add r0 (ext SI (trunc HI gotofflo16)))) r1)
902be12b8bcSchristos        ()
903be12b8bcSchristos)
904be12b8bcSchristos
905be12b8bcSchristos(dni lhgotoff "load half word got offset" (ALIAS)
906be12b8bcSchristos        "lh $r1,($r0+$gotofflo16)"
907be12b8bcSchristos        (+ OP_LH r0 r1 gotofflo16)
908be12b8bcSchristos        (set r1 (ext SI (mem HI (add r0 (ext SI (trunc HI gotofflo16))))))
909be12b8bcSchristos        ()
910be12b8bcSchristos)
911be12b8bcSchristos
912be12b8bcSchristos(dni lhugotoff "load half word got offset unsigned" (ALIAS)
913be12b8bcSchristos        "lhu $r1,($r0+$gotofflo16)"
914be12b8bcSchristos        (+ OP_LHU r0 r1 gotofflo16)
915be12b8bcSchristos        (set r1 (zext SI (mem HI (add r0 (ext SI (trunc HI gotofflo16))))))
916be12b8bcSchristos        ()
917be12b8bcSchristos)
918be12b8bcSchristos
919be12b8bcSchristos(dni sbgotoff "store byte got offset" (ALIAS)
920be12b8bcSchristos        "sb ($r0+$gotofflo16),$r1"
921be12b8bcSchristos        (+ OP_SB r0 r1 gotofflo16)
922be12b8bcSchristos        (set (mem QI (add r0 (ext SI (trunc HI gotofflo16)))) r1)
923be12b8bcSchristos        ()
924be12b8bcSchristos)
925be12b8bcSchristos
926be12b8bcSchristos(dni lbgotoff "load byte got offset" (ALIAS)
927be12b8bcSchristos        "lb $r1,($r0+$gotofflo16)"
928be12b8bcSchristos        (+ OP_LB r0 r1 gotofflo16)
929be12b8bcSchristos        (set r1 (ext SI (mem QI (add r0 (ext SI (trunc HI gotofflo16))))))
930be12b8bcSchristos        ()
931be12b8bcSchristos)
932be12b8bcSchristos
933be12b8bcSchristos(dni lbugotoff "load byte got offset unsigned" (ALIAS)
934be12b8bcSchristos        "lbu $r1,($r0+$gotofflo16)"
935be12b8bcSchristos        (+ OP_LBU r0 r1 gotofflo16)
936be12b8bcSchristos        (set r1 (zext SI (mem QI (add r0 (ext SI (trunc HI gotofflo16))))))
937be12b8bcSchristos        ()
938be12b8bcSchristos)
939