xref: /netbsd-src/external/gpl3/binutils.old/dist/cpu/lm32.cpu (revision 012573eb9c67269c00ce646144eea16daceeb465)
116dce513Schristos; Lattice Mico32 CPU description.  -*- Scheme -*-
216dce513Schristos; Copyright 2008-2013  Free Software Foundation, Inc.
316dce513Schristos; Contributed by Jon Beniston <jon@beniston.com>
416dce513Schristos;
516dce513Schristos; This file is part of the GNU Binutils.
616dce513Schristos;
716dce513Schristos; This program is free software; you can redistribute it and/or modify
816dce513Schristos; it under the terms of the GNU General Public License as published by
916dce513Schristos; the Free Software Foundation; either version 3 of the License, or
1016dce513Schristos; (at your option) any later version.
1116dce513Schristos;
1216dce513Schristos; This program is distributed in the hope that it will be useful,
1316dce513Schristos; but WITHOUT ANY WARRANTY; without even the implied warranty of
1416dce513Schristos; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1516dce513Schristos; GNU General Public License for more details.
1616dce513Schristos;
1716dce513Schristos; You should have received a copy of the GNU General Public License
1816dce513Schristos; along with this program; if not, write to the Free Software
1916dce513Schristos; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
2016dce513Schristos; MA 02110-1301, USA.
2116dce513Schristos
2216dce513Schristos(include "simplify.inc")
2316dce513Schristos
2416dce513Schristos(define-arch
2516dce513Schristos  (name lm32) ; name of cpu family
2616dce513Schristos  (comment "Lattice Mico32")
2716dce513Schristos  (default-alignment aligned)
2816dce513Schristos  (insn-lsb0? #t)
2916dce513Schristos  (machs lm32)
3016dce513Schristos  (isas lm32)
3116dce513Schristos)
3216dce513Schristos
3316dce513Schristos
3416dce513Schristos; Instruction sets.
3516dce513Schristos
3616dce513Schristos(define-isa
3716dce513Schristos  (name lm32)
3816dce513Schristos  (comment "Lattice Mico32 ISA")
3916dce513Schristos  (default-insn-word-bitsize 32)
4016dce513Schristos  (default-insn-bitsize 32)
4116dce513Schristos  (base-insn-bitsize 32)
4216dce513Schristos  (decode-assist (31 30 29 28 27 26))
4316dce513Schristos)
4416dce513Schristos
4516dce513Schristos
4616dce513Schristos; Cpu family definitions.
4716dce513Schristos
4816dce513Schristos(define-cpu
4916dce513Schristos  ; cpu names must be distinct from the architecture name and machine name
5016dce513Schristos  (name lm32bf)
5116dce513Schristos  (comment "Lattice Mico32 CPU")
5216dce513Schristos  (endian big)
5316dce513Schristos  (word-bitsize 32)
5416dce513Schristos)
5516dce513Schristos
5616dce513Schristos(define-mach
5716dce513Schristos  (name lm32)
5816dce513Schristos  (comment "Lattice Mico32 MACH")
5916dce513Schristos  (cpu lm32bf)
6016dce513Schristos)
6116dce513Schristos
6216dce513Schristos(define-model
6316dce513Schristos  (name lm32)
6416dce513Schristos  (comment "Lattice Mico32 reference implementation")
6516dce513Schristos  (mach lm32)
6616dce513Schristos  (unit u-exec "Execution unit" ()
6716dce513Schristos    1 1 () () () ())
6816dce513Schristos)
6916dce513Schristos
7016dce513Schristos
7116dce513Schristos; Hardware elements.
7216dce513Schristos
7316dce513Schristos(dnh h-pc "Program counter" (PC) (pc) () () ())
7416dce513Schristos
7516dce513Schristos(dnh h-gr "General purpose registers"
7616dce513Schristos  ()
7716dce513Schristos  (register SI (32))
7816dce513Schristos  (keyword "" (
7916dce513Schristos               (gp 26) (fp 27) (sp 28) (ra 29) (ea 30) (ba 31)
8016dce513Schristos               (r0 0) (r1 1) (r2 2) (r3 3)
8116dce513Schristos               (r4 4) (r5 5) (r6 6) (r7 7)
8216dce513Schristos               (r8 8) (r9 9) (r10 10) (r11 11)
8316dce513Schristos               (r12 12) (r13 13) (r14 14) (r15 15)
8416dce513Schristos               (r16 16) (r17 17) (r18 18) (r19 19)
8516dce513Schristos               (r20 20) (r21 21) (r22 22) (r23 23)
8616dce513Schristos               (r24 24) (r25 25) (r26 26) (r27 27)
8716dce513Schristos               (r28 28) (r29 29) (r30 30) (r31 31)
8816dce513Schristos              )
8916dce513Schristos  )
9016dce513Schristos  () ()
9116dce513Schristos)
9216dce513Schristos
9316dce513Schristos(dnh h-csr "Control and status registers"
9416dce513Schristos  ()
9516dce513Schristos  (register SI (32))
9616dce513Schristos  (keyword "" (
9716dce513Schristos               (IE 0) (IM 1) (IP 2)
9816dce513Schristos               (ICC 3) (DCC 4)
9916dce513Schristos               (CC 5)
10016dce513Schristos               (CFG 6)
10116dce513Schristos               (EBA 7)
10216dce513Schristos               (DC 8)
10316dce513Schristos               (DEBA 9)
10416dce513Schristos	       (CFG2 10)
10516dce513Schristos               (JTX 14) (JRX 15)
10616dce513Schristos               (BP0 16) (BP1 17) (BP2 18) (BP3 19)
10716dce513Schristos               (WP0 24) (WP1 25) (WP2 26) (WP3 27)
10816dce513Schristos               (PSW 29) (TLBVADDR 30) (TLBPADDR 31) (TLBBADVADDR 31)
10916dce513Schristos              )
11016dce513Schristos  )
11116dce513Schristos  () ()
11216dce513Schristos)
11316dce513Schristos
11416dce513Schristos
11516dce513Schristos; Instruction fields.
11616dce513Schristos
11716dce513Schristos(dnf f-opcode   "opcode field"                () 31  6)
11816dce513Schristos(dnf f-r0       "register index 0 field"      () 25  5)
11916dce513Schristos(dnf f-r1       "register index 1 field"      () 20  5)
12016dce513Schristos(dnf f-r2       "register index 2 field"      () 15  5)
12116dce513Schristos(dnf f-resv0    "reserved"                    (RESERVED) 10 11)
12216dce513Schristos(dnf f-shift    "shift amount field"          ()  4  5)
12316dce513Schristos(df  f-imm      "signed immediate field"      () 15 16 INT #f #f)
12416dce513Schristos(dnf f-uimm     "unsigned immediate field"    () 15 16)
12516dce513Schristos(dnf f-csr      "csr field"                   () 25  5)
12616dce513Schristos(dnf f-user     "user defined field"          () 10 11)
12716dce513Schristos(dnf f-exception "exception field"            () 25 26)
12816dce513Schristos
12916dce513Schristos(df f-branch "branch offset field" (PCREL-ADDR) 15 16 INT
13016dce513Schristos        ((value pc) (sra SI (sub SI value pc) 2))
131*012573ebSchristos	((value pc) (add SI pc (sub (xor (sll (and value #xffff) 2)
132*012573ebSchristos					 #x20000)
133*012573ebSchristos				    #x20000)))
13416dce513Schristos)
13516dce513Schristos(df f-call "call offset field" (PCREL-ADDR) 25 26 INT
13616dce513Schristos        ((value pc) (sra SI (sub SI value pc) 2))
137*012573ebSchristos	((value pc) (add SI pc (sub (xor (sll (and value #x3ffffff) 2)
138*012573ebSchristos					 #x8000000)
139*012573ebSchristos				    #x8000000)))
14016dce513Schristos)
14116dce513Schristos
14216dce513Schristos
14316dce513Schristos; Operands.
14416dce513Schristos
14516dce513Schristos(dnop r0        "register 0"            () h-gr         f-r0)
14616dce513Schristos(dnop r1        "register 1"            () h-gr         f-r1)
14716dce513Schristos(dnop r2        "register 2"            () h-gr         f-r2)
14816dce513Schristos(dnop shift     "shift amout"           () h-uint       f-shift)
14916dce513Schristos(dnop imm       "signed immediate"      () h-sint       f-imm)
15016dce513Schristos(dnop uimm      "unsigned immediate"    () h-uint       f-uimm)
15116dce513Schristos(dnop branch    "branch offset"         () h-iaddr      f-branch)
15216dce513Schristos(dnop call      "call offset"           () h-iaddr      f-call)
15316dce513Schristos(dnop csr       "csr"                   () h-csr        f-csr)
15416dce513Schristos(dnop user      "user"                  () h-uint       f-user)
15516dce513Schristos(dnop exception "exception"             () h-uint       f-exception)
15616dce513Schristos
15716dce513Schristos(define-operand
15816dce513Schristos  (name hi16)
15916dce513Schristos  (comment "high 16-bit immediate")
16016dce513Schristos  (attrs)
16116dce513Schristos  (type h-uint)
16216dce513Schristos  (index f-uimm)
16316dce513Schristos  (handlers (parse "hi16"))
16416dce513Schristos)
16516dce513Schristos
16616dce513Schristos(define-operand
16716dce513Schristos  (name lo16)
16816dce513Schristos  (comment "low 16-bit immediate")
16916dce513Schristos  (attrs)
17016dce513Schristos  (type h-uint)
17116dce513Schristos  (index f-uimm)
17216dce513Schristos  (handlers (parse "lo16"))
17316dce513Schristos)
17416dce513Schristos
17516dce513Schristos(define-operand
17616dce513Schristos  (name gp16)
17716dce513Schristos  (comment "gp relative 16-bit immediate")
17816dce513Schristos  (attrs)
17916dce513Schristos  (type h-sint)
18016dce513Schristos  (index f-imm)
18116dce513Schristos  (handlers (parse "gp16"))
18216dce513Schristos)
18316dce513Schristos
18416dce513Schristos(define-operand
18516dce513Schristos  (name got16)
18616dce513Schristos  (comment "got 16-bit immediate")
18716dce513Schristos  (attrs)
18816dce513Schristos  (type h-sint)
18916dce513Schristos  (index f-imm)
19016dce513Schristos  (handlers (parse "got16"))
19116dce513Schristos)
19216dce513Schristos
19316dce513Schristos(define-operand
19416dce513Schristos  (name gotoffhi16)
19516dce513Schristos  (comment "got offset high 16-bit immediate")
19616dce513Schristos  (attrs)
19716dce513Schristos  (type h-sint)
19816dce513Schristos  (index f-imm)
19916dce513Schristos  (handlers (parse "gotoff_hi16"))
20016dce513Schristos)
20116dce513Schristos
20216dce513Schristos(define-operand
20316dce513Schristos  (name gotofflo16)
20416dce513Schristos  (comment "got offset low 16-bit immediate")
20516dce513Schristos  (attrs)
20616dce513Schristos  (type h-sint)
20716dce513Schristos  (index f-imm)
20816dce513Schristos  (handlers (parse "gotoff_lo16"))
20916dce513Schristos)
21016dce513Schristos
21116dce513Schristos
21216dce513Schristos; Enumerations.
21316dce513Schristos
21416dce513Schristos(define-normal-insn-enum
21516dce513Schristos  opcodes "opcodes" () OP_ f-opcode
21616dce513Schristos  (("ADD"       45)
21716dce513Schristos   ("ADDI"      13)
21816dce513Schristos   ("AND"       40)
21916dce513Schristos   ("ANDI"      8)
22016dce513Schristos   ("ANDHI"     24)
22116dce513Schristos   ("B"         48)
22216dce513Schristos   ("BI"        56)
22316dce513Schristos   ("BE"        17)
22416dce513Schristos   ("BG"        18)
22516dce513Schristos   ("BGE"       19)
22616dce513Schristos   ("BGEU"      20)
22716dce513Schristos   ("BGU"       21)
22816dce513Schristos   ("BNE"       23)
22916dce513Schristos   ("CALL"      54)
23016dce513Schristos   ("CALLI"     62)
23116dce513Schristos   ("CMPE"      57)
23216dce513Schristos   ("CMPEI"     25)
23316dce513Schristos   ("CMPG"      58)
23416dce513Schristos   ("CMPGI"     26)
23516dce513Schristos   ("CMPGE"     59)
23616dce513Schristos   ("CMPGEI"    27)
23716dce513Schristos   ("CMPGEU"    60)
23816dce513Schristos   ("CMPGEUI"   28)
23916dce513Schristos   ("CMPGU"     61)
24016dce513Schristos   ("CMPGUI"    29)
24116dce513Schristos   ("CMPNE"     63)
24216dce513Schristos   ("CMPNEI"    31)
24316dce513Schristos   ("DIVU"      35)
24416dce513Schristos   ("LB"        4)
24516dce513Schristos   ("LBU"       16)
24616dce513Schristos   ("LH"        7)
24716dce513Schristos   ("LHU"       11)
24816dce513Schristos   ("LW"        10)
24916dce513Schristos   ("MODU"      49)
25016dce513Schristos   ("MUL"       34)
25116dce513Schristos   ("MULI"      2)
25216dce513Schristos   ("NOR"       33)
25316dce513Schristos   ("NORI"      1)
25416dce513Schristos   ("OR"        46)
25516dce513Schristos   ("ORI"       14)
25616dce513Schristos   ("ORHI"      30)
25716dce513Schristos   ("RAISE"     43)
25816dce513Schristos   ("RCSR"      36)
25916dce513Schristos   ("SB"        12)
26016dce513Schristos   ("SEXTB"     44)
26116dce513Schristos   ("SEXTH"     55)
26216dce513Schristos   ("SH"        3)
26316dce513Schristos   ("SL"        47)
26416dce513Schristos   ("SLI"       15)
26516dce513Schristos   ("SR"        37)
26616dce513Schristos   ("SRI"       5)
26716dce513Schristos   ("SRU"       32)
26816dce513Schristos   ("SRUI"      0)
26916dce513Schristos   ("SUB"       50)
27016dce513Schristos   ("SW"        22)
27116dce513Schristos   ("USER"      51)
27216dce513Schristos   ("WCSR"      52)
27316dce513Schristos   ("XNOR"      41)
27416dce513Schristos   ("XNORI"     9)
27516dce513Schristos   ("XOR"       38)
27616dce513Schristos   ("XORI"      6)
27716dce513Schristos  )
27816dce513Schristos)
27916dce513Schristos
28016dce513Schristos
28116dce513Schristos; Instructions. Note: Reg-reg must come before reg-imm.
28216dce513Schristos
28316dce513Schristos(dni add "add" ()
28416dce513Schristos        "add $r2,$r0,$r1"
28516dce513Schristos        (+ OP_ADD r0 r1 r2 (f-resv0 0))
28616dce513Schristos        (set r2 (add r0 r1))
28716dce513Schristos        ()
28816dce513Schristos)
28916dce513Schristos
29016dce513Schristos(dni addi "add immediate" ()
29116dce513Schristos        "addi $r1,$r0,$imm"
29216dce513Schristos        (+ OP_ADDI r0 r1 imm)
29316dce513Schristos        (set r1 (add r0 (ext SI (trunc HI imm))))
29416dce513Schristos        ()
29516dce513Schristos)
29616dce513Schristos
29716dce513Schristos(dni and "and" ()
29816dce513Schristos        "and $r2,$r0,$r1"
29916dce513Schristos        (+ OP_AND r0 r1 r2 (f-resv0 0))
30016dce513Schristos        (set r2 (and r0 r1))
30116dce513Schristos        ()
30216dce513Schristos)
30316dce513Schristos
30416dce513Schristos(dni andi "and immediate" ()
30516dce513Schristos        "andi $r1,$r0,$uimm"
30616dce513Schristos        (+ OP_ANDI r0 r1 uimm)
30716dce513Schristos        (set r1 (and r0 (zext SI uimm)))
30816dce513Schristos        ()
30916dce513Schristos)
31016dce513Schristos
31116dce513Schristos(dni andhii "and high immediate" ()
31216dce513Schristos        "andhi $r1,$r0,$hi16"
31316dce513Schristos        (+ OP_ANDHI r0 r1 hi16)
31416dce513Schristos        (set r1 (and r0 (sll SI hi16 16)))
31516dce513Schristos        ()
31616dce513Schristos)
31716dce513Schristos
31816dce513Schristos(dni b "branch" ()
31916dce513Schristos        "b $r0"
32016dce513Schristos        (+ OP_B r0 (f-r1 0) (f-r2 0) (f-resv0 0))
32116dce513Schristos        (set pc (c-call USI "@cpu@_b_insn" r0 f-r0))
32216dce513Schristos        ()
32316dce513Schristos)
32416dce513Schristos
32516dce513Schristos(dni bi "branch immediate" ()
32616dce513Schristos        "bi $call"
32716dce513Schristos        (+ OP_BI call)
32816dce513Schristos        (set pc (ext SI call))
32916dce513Schristos        ()
33016dce513Schristos)
33116dce513Schristos
33216dce513Schristos(dni be "branch equal" ()
33316dce513Schristos        "be $r0,$r1,$branch"
33416dce513Schristos        (+ OP_BE r0 r1 branch)
33516dce513Schristos        (if (eq r0 r1)
33616dce513Schristos            (set pc branch)
33716dce513Schristos        )
33816dce513Schristos        ()
33916dce513Schristos)
34016dce513Schristos
34116dce513Schristos(dni bg "branch greater" ()
34216dce513Schristos        "bg $r0,$r1,$branch"
34316dce513Schristos        (+ OP_BG r0 r1 branch)
34416dce513Schristos        (if (gt r0 r1)
34516dce513Schristos            (set pc branch)
34616dce513Schristos        )
34716dce513Schristos        ()
34816dce513Schristos)
34916dce513Schristos
35016dce513Schristos(dni bge "branch greater or equal" ()
35116dce513Schristos        "bge $r0,$r1,$branch"
35216dce513Schristos        (+ OP_BGE r0 r1 branch)
35316dce513Schristos        (if (ge r0 r1)
35416dce513Schristos            (set pc branch)
35516dce513Schristos        )
35616dce513Schristos        ()
35716dce513Schristos)
35816dce513Schristos
35916dce513Schristos(dni bgeu "branch greater or equal unsigned" ()
36016dce513Schristos        "bgeu $r0,$r1,$branch"
36116dce513Schristos        (+ OP_BGEU r0 r1 branch)
36216dce513Schristos        (if (geu r0 r1)
36316dce513Schristos            (set pc branch)
36416dce513Schristos        )
36516dce513Schristos        ()
36616dce513Schristos)
36716dce513Schristos
36816dce513Schristos(dni bgu "branch greater unsigned" ()
36916dce513Schristos        "bgu $r0,$r1,$branch"
37016dce513Schristos        (+ OP_BGU r0 r1 branch)
37116dce513Schristos        (if (gtu r0 r1)
37216dce513Schristos            (set pc branch)
37316dce513Schristos        )
37416dce513Schristos        ()
37516dce513Schristos)
37616dce513Schristos
37716dce513Schristos(dni bne "branch not equal" ()
37816dce513Schristos        "bne $r0,$r1,$branch"
37916dce513Schristos        (+ OP_BNE r0 r1 branch)
38016dce513Schristos        (if (ne r0 r1)
38116dce513Schristos            (set pc branch)
38216dce513Schristos        )
38316dce513Schristos        ()
38416dce513Schristos)
38516dce513Schristos
38616dce513Schristos(dni call "call" ()
38716dce513Schristos        "call $r0"
38816dce513Schristos        (+ OP_CALL r0 (f-r1 0) (f-r2 0) (f-resv0 0))
38916dce513Schristos        (sequence ()
39016dce513Schristos                (set (reg h-gr 29) (add pc 4))
39116dce513Schristos                (set pc r0)
39216dce513Schristos        )
39316dce513Schristos        ()
39416dce513Schristos)
39516dce513Schristos
39616dce513Schristos(dni calli "call immediate" ()
39716dce513Schristos        "calli $call"
39816dce513Schristos        (+ OP_CALLI call)
39916dce513Schristos        (sequence ()
40016dce513Schristos                (set (reg h-gr 29) (add pc 4))
40116dce513Schristos                (set pc (ext SI call))
40216dce513Schristos        )
40316dce513Schristos        ()
40416dce513Schristos)
40516dce513Schristos
40616dce513Schristos(dni cmpe "compare equal" ()
40716dce513Schristos        "cmpe $r2,$r0,$r1"
40816dce513Schristos        (+ OP_CMPE r0 r1 r2 (f-resv0 0))
40916dce513Schristos        (set r2 (eq SI r0 r1))
41016dce513Schristos        ()
41116dce513Schristos)
41216dce513Schristos
41316dce513Schristos(dni cmpei "compare equal immediate" ()
41416dce513Schristos        "cmpei $r1,$r0,$imm"
41516dce513Schristos        (+ OP_CMPEI r0 r1 imm)
41616dce513Schristos        (set r1 (eq SI r0 (ext SI (trunc HI imm))))
41716dce513Schristos        ()
41816dce513Schristos)
41916dce513Schristos
42016dce513Schristos(dni cmpg "compare greater than" ()
42116dce513Schristos        "cmpg $r2,$r0,$r1"
42216dce513Schristos        (+ OP_CMPG r0 r1 r2 (f-resv0 0))
42316dce513Schristos        (set r2 (gt SI r0 r1))
42416dce513Schristos        ()
42516dce513Schristos)
42616dce513Schristos
42716dce513Schristos(dni cmpgi "compare greater than immediate" ()
42816dce513Schristos        "cmpgi $r1,$r0,$imm"
42916dce513Schristos        (+ OP_CMPGI r0 r1 imm)
43016dce513Schristos        (set r1 (gt SI r0 (ext SI (trunc HI imm))))
43116dce513Schristos        ()
43216dce513Schristos)
43316dce513Schristos
43416dce513Schristos(dni cmpge "compare greater or equal" ()
43516dce513Schristos        "cmpge $r2,$r0,$r1"
43616dce513Schristos        (+ OP_CMPGE r0 r1 r2 (f-resv0 0))
43716dce513Schristos        (set r2 (ge SI r0 r1))
43816dce513Schristos        ()
43916dce513Schristos)
44016dce513Schristos
44116dce513Schristos(dni cmpgei "compare greater or equal immediate" ()
44216dce513Schristos        "cmpgei $r1,$r0,$imm"
44316dce513Schristos        (+ OP_CMPGEI r0 r1 imm)
44416dce513Schristos        (set r1 (ge SI r0 (ext SI (trunc HI imm))))
44516dce513Schristos        ()
44616dce513Schristos)
44716dce513Schristos
44816dce513Schristos(dni cmpgeu "compare greater or equal unsigned" ()
44916dce513Schristos        "cmpgeu $r2,$r0,$r1"
45016dce513Schristos        (+ OP_CMPGEU r0 r1 r2 (f-resv0 0))
45116dce513Schristos        (set r2 (geu SI r0 r1))
45216dce513Schristos        ()
45316dce513Schristos)
45416dce513Schristos
45516dce513Schristos(dni cmpgeui "compare greater or equal unsigned immediate" ()
45616dce513Schristos        "cmpgeui $r1,$r0,$uimm"
45716dce513Schristos        (+ OP_CMPGEUI r0 r1 uimm)
45816dce513Schristos        (set r1 (geu SI r0 (zext SI uimm)))
45916dce513Schristos        ()
46016dce513Schristos)
46116dce513Schristos
46216dce513Schristos(dni cmpgu "compare greater than unsigned" ()
46316dce513Schristos        "cmpgu $r2,$r0,$r1"
46416dce513Schristos        (+ OP_CMPGU r0 r1 r2 (f-resv0 0))
46516dce513Schristos        (set r2 (gtu SI r0 r1))
46616dce513Schristos        ()
46716dce513Schristos)
46816dce513Schristos
46916dce513Schristos(dni cmpgui "compare greater than unsigned immediate" ()
47016dce513Schristos        "cmpgui $r1,$r0,$uimm"
47116dce513Schristos        (+ OP_CMPGUI r0 r1 uimm)
47216dce513Schristos        (set r1 (gtu SI r0 (zext SI uimm)))
47316dce513Schristos        ()
47416dce513Schristos)
47516dce513Schristos
47616dce513Schristos(dni cmpne "compare not equal" ()
47716dce513Schristos        "cmpne $r2,$r0,$r1"
47816dce513Schristos        (+ OP_CMPNE r0 r1 r2 (f-resv0 0))
47916dce513Schristos        (set r2 (ne SI r0 r1))
48016dce513Schristos        ()
48116dce513Schristos)
48216dce513Schristos
48316dce513Schristos(dni cmpnei "compare not equal immediate" ()
48416dce513Schristos        "cmpnei $r1,$r0,$imm"
48516dce513Schristos        (+ OP_CMPNEI r0 r1 imm)
48616dce513Schristos        (set r1 (ne SI r0 (ext SI (trunc HI imm))))
48716dce513Schristos        ()
48816dce513Schristos)
48916dce513Schristos
49016dce513Schristos(dni divu "unsigned divide" ()
49116dce513Schristos        "divu $r2,$r0,$r1"
49216dce513Schristos        (+ OP_DIVU r0 r1 r2 (f-resv0 0))
49316dce513Schristos        (set pc (c-call USI "@cpu@_divu_insn" pc f-r0 f-r1 f-r2))
49416dce513Schristos        ()
49516dce513Schristos)
49616dce513Schristos
49716dce513Schristos(dni lb "load byte" ()
49816dce513Schristos        "lb $r1,($r0+$imm)"
49916dce513Schristos        (+ OP_LB r0 r1 imm)
50016dce513Schristos        (set r1 (ext SI (mem QI (add r0 (ext SI (trunc HI imm))))))
50116dce513Schristos        ()
50216dce513Schristos)
50316dce513Schristos
50416dce513Schristos(dni lbu "load byte unsigned" ()
50516dce513Schristos        "lbu $r1,($r0+$imm)"
50616dce513Schristos        (+ OP_LBU r0 r1 imm)
50716dce513Schristos        (set r1 (zext SI (mem QI (add r0 (ext SI (trunc HI imm))))))
50816dce513Schristos        ()
50916dce513Schristos)
51016dce513Schristos
51116dce513Schristos(dni lh "load halfword" ()
51216dce513Schristos        "lh $r1,($r0+$imm)"
51316dce513Schristos        (+ OP_LH r0 r1 imm)
51416dce513Schristos        (set r1 (ext SI (mem HI (add r0 (ext SI (trunc HI imm))))))
51516dce513Schristos        ()
51616dce513Schristos)
51716dce513Schristos
51816dce513Schristos(dni lhu "load halfword unsigned" ()
51916dce513Schristos        "lhu $r1,($r0+$imm)"
52016dce513Schristos        (+ OP_LHU r0 r1 imm)
52116dce513Schristos        (set r1 (zext SI (mem HI (add r0 (ext SI (trunc HI imm))))))
52216dce513Schristos        ()
52316dce513Schristos)
52416dce513Schristos
52516dce513Schristos(dni lw "load word" ()
52616dce513Schristos        "lw $r1,($r0+$imm)"
52716dce513Schristos        (+ OP_LW r0 r1 imm)
52816dce513Schristos        (set r1 (mem SI (add r0 (ext SI (trunc HI imm)))))
52916dce513Schristos        ()
53016dce513Schristos)
53116dce513Schristos
53216dce513Schristos(dni modu "unsigned modulus" ()
53316dce513Schristos        "modu $r2,$r0,$r1"
53416dce513Schristos        (+ OP_MODU r0 r1 r2 (f-resv0 0))
53516dce513Schristos        (set pc (c-call USI "@cpu@_modu_insn" pc f-r0 f-r1 f-r2))
53616dce513Schristos        ()
53716dce513Schristos)
53816dce513Schristos
53916dce513Schristos(dni mul "mulitply" ()
54016dce513Schristos        "mul $r2,$r0,$r1"
54116dce513Schristos        (+ OP_MUL r0 r1 r2 (f-resv0 0))
54216dce513Schristos        (set r2 (mul r0 r1))
54316dce513Schristos        ()
54416dce513Schristos)
54516dce513Schristos
54616dce513Schristos(dni muli "multiply immediate" ()
54716dce513Schristos        "muli $r1,$r0,$imm"
54816dce513Schristos        (+ OP_MULI r0 r1 imm)
54916dce513Schristos        (set r1 (mul r0 (ext SI (trunc HI imm))))
55016dce513Schristos        ()
55116dce513Schristos)
55216dce513Schristos
55316dce513Schristos(dni nor "nor" ()
55416dce513Schristos        "nor $r2,$r0,$r1"
55516dce513Schristos        (+ OP_NOR r0 r1 r2 (f-resv0 0))
55616dce513Schristos        (set r2 (inv (or r0 r1)))
55716dce513Schristos        ()
55816dce513Schristos)
55916dce513Schristos
56016dce513Schristos(dni nori "nor immediate" ()
56116dce513Schristos        "nori $r1,$r0,$uimm"
56216dce513Schristos        (+ OP_NORI r0 r1 uimm)
56316dce513Schristos        (set r1 (inv (or r0 (zext SI uimm))))
56416dce513Schristos        ()
56516dce513Schristos)
56616dce513Schristos
56716dce513Schristos(dni or "or" ()
56816dce513Schristos        "or $r2,$r0,$r1"
56916dce513Schristos        (+ OP_OR r0 r1 r2 (f-resv0 0))
57016dce513Schristos        (set r2 (or r0 r1))
57116dce513Schristos        ()
57216dce513Schristos)
57316dce513Schristos
57416dce513Schristos(dni ori "or immediate" ()
57516dce513Schristos        "ori $r1,$r0,$lo16"
57616dce513Schristos        (+ OP_ORI r0 r1 lo16)
57716dce513Schristos        (set r1 (or r0 (zext SI lo16)))
57816dce513Schristos        ()
57916dce513Schristos)
58016dce513Schristos
58116dce513Schristos(dni orhii "or high immediate" ()
58216dce513Schristos        "orhi $r1,$r0,$hi16"
58316dce513Schristos        (+ OP_ORHI r0 r1 hi16)
58416dce513Schristos        (set r1 (or r0 (sll SI hi16 16)))
58516dce513Schristos        ()
58616dce513Schristos)
58716dce513Schristos
58816dce513Schristos(dni rcsr "read control or status register" ()
58916dce513Schristos        "rcsr $r2,$csr"
59016dce513Schristos        (+ OP_RCSR csr (f-r1 0) r2 (f-resv0 0))
59116dce513Schristos        (set r2 csr)
59216dce513Schristos        ()
59316dce513Schristos)
59416dce513Schristos
59516dce513Schristos(dni sb "store byte" ()
59616dce513Schristos        "sb ($r0+$imm),$r1"
59716dce513Schristos        (+ OP_SB r0 r1 imm)
59816dce513Schristos        (set (mem QI (add r0 (ext SI (trunc HI imm)))) r1)
59916dce513Schristos        ()
60016dce513Schristos)
60116dce513Schristos
60216dce513Schristos(dni sextb "sign extend byte" ()
60316dce513Schristos        "sextb $r2,$r0"
60416dce513Schristos        (+ OP_SEXTB r0 (f-r1 0) r2 (f-resv0 0))
60516dce513Schristos        (set r2 (ext SI (trunc QI r0)))
60616dce513Schristos        ()
60716dce513Schristos)
60816dce513Schristos
60916dce513Schristos(dni sexth "sign extend half-word" ()
61016dce513Schristos        "sexth $r2,$r0"
61116dce513Schristos        (+ OP_SEXTH r0 (f-r1 0) r2 (f-resv0 0))
61216dce513Schristos        (set r2 (ext SI (trunc HI r0)))
61316dce513Schristos        ()
61416dce513Schristos)
61516dce513Schristos
61616dce513Schristos(dni sh "store halfword" ()
61716dce513Schristos        "sh ($r0+$imm),$r1"
61816dce513Schristos        (+ OP_SH r0 r1 imm)
61916dce513Schristos        (set (mem HI (add r0 (ext SI (trunc HI imm)))) r1)
62016dce513Schristos        ()
62116dce513Schristos)
62216dce513Schristos
62316dce513Schristos(dni sl "shift left" ()
62416dce513Schristos        "sl $r2,$r0,$r1"
62516dce513Schristos        (+ OP_SL r0 r1 r2 (f-resv0 0))
62616dce513Schristos        (set r2 (sll SI r0 r1))
62716dce513Schristos        ()
62816dce513Schristos)
62916dce513Schristos
63016dce513Schristos(dni sli "shift left immediate" ()
63116dce513Schristos        "sli $r1,$r0,$imm"
63216dce513Schristos        (+ OP_SLI r0 r1 imm)
63316dce513Schristos        (set r1 (sll SI r0 imm))
63416dce513Schristos        ()
63516dce513Schristos)
63616dce513Schristos
63716dce513Schristos(dni sr "shift right" ()
63816dce513Schristos        "sr $r2,$r0,$r1"
63916dce513Schristos        (+ OP_SR r0 r1 r2 (f-resv0 0))
64016dce513Schristos        (set r2 (sra SI r0 r1))
64116dce513Schristos        ()
64216dce513Schristos)
64316dce513Schristos
64416dce513Schristos(dni sri "shift right immediate" ()
64516dce513Schristos        "sri $r1,$r0,$imm"
64616dce513Schristos        (+ OP_SRI r0 r1 imm)
64716dce513Schristos        (set r1 (sra SI r0 imm))
64816dce513Schristos        ()
64916dce513Schristos)
65016dce513Schristos
65116dce513Schristos(dni sru "shift right unsigned" ()
65216dce513Schristos        "sru $r2,$r0,$r1"
65316dce513Schristos        (+ OP_SRU r0 r1 r2 (f-resv0 0))
65416dce513Schristos        (set r2 (srl SI r0 r1))
65516dce513Schristos        ()
65616dce513Schristos)
65716dce513Schristos
65816dce513Schristos(dni srui "shift right unsigned immediate" ()
65916dce513Schristos        "srui $r1,$r0,$imm"
66016dce513Schristos        (+ OP_SRUI r0 r1 imm)
66116dce513Schristos        (set r1 (srl SI r0 imm))
66216dce513Schristos        ()
66316dce513Schristos)
66416dce513Schristos
66516dce513Schristos(dni sub "subtract" ()
66616dce513Schristos        "sub $r2,$r0,$r1"
66716dce513Schristos        (+ OP_SUB r0 r1 r2 (f-resv0 0))
66816dce513Schristos        (set r2 (sub r0 r1))
66916dce513Schristos        ()
67016dce513Schristos)
67116dce513Schristos
67216dce513Schristos(dni sw "store word" ()
67316dce513Schristos        "sw ($r0+$imm),$r1"
67416dce513Schristos        (+ OP_SW r0 r1 imm)
67516dce513Schristos        (set (mem SI (add r0 (ext SI (trunc HI imm)))) r1)
67616dce513Schristos        ()
67716dce513Schristos)
67816dce513Schristos
67916dce513Schristos(dni user "user defined instruction" ()
68016dce513Schristos        "user $r2,$r0,$r1,$user"
68116dce513Schristos        (+ OP_USER r0 r1 r2 user)
68216dce513Schristos        (set r2 (c-call SI "@cpu@_user_insn" r0 r1 user))
68316dce513Schristos        ()
68416dce513Schristos)
68516dce513Schristos
68616dce513Schristos(dni wcsr "write control or status register" ()
68716dce513Schristos        "wcsr $csr,$r1"
68816dce513Schristos        (+ OP_WCSR csr r1 (f-r2 0) (f-resv0 0))
68916dce513Schristos        (c-call VOID "@cpu@_wcsr_insn" f-csr r1)
69016dce513Schristos        ()
69116dce513Schristos)
69216dce513Schristos
69316dce513Schristos(dni xor "xor" ()
69416dce513Schristos        "xor $r2,$r0,$r1"
69516dce513Schristos        (+ OP_XOR r0 r1 r2 (f-resv0 0))
69616dce513Schristos        (set r2 (xor r0 r1))
69716dce513Schristos        ()
69816dce513Schristos)
69916dce513Schristos
70016dce513Schristos(dni xori "xor immediate" ()
70116dce513Schristos        "xori $r1,$r0,$uimm"
70216dce513Schristos        (+ OP_XORI r0 r1 uimm)
70316dce513Schristos        (set r1 (xor r0 (zext SI uimm)))
70416dce513Schristos        ()
70516dce513Schristos)
70616dce513Schristos
70716dce513Schristos(dni xnor "xnor" ()
70816dce513Schristos        "xnor $r2,$r0,$r1"
70916dce513Schristos        (+ OP_XNOR r0 r1 r2 (f-resv0 0))
71016dce513Schristos        (set r2 (inv (xor r0 r1)))
71116dce513Schristos        ()
71216dce513Schristos)
71316dce513Schristos
71416dce513Schristos(dni xnori "xnor immediate" ()
71516dce513Schristos        "xnori $r1,$r0,$uimm"
71616dce513Schristos        (+ OP_XNORI r0 r1 uimm)
71716dce513Schristos        (set r1 (inv (xor r0 (zext SI uimm))))
71816dce513Schristos        ()
71916dce513Schristos)
72016dce513Schristos
72116dce513Schristos; Pseudo instructions
72216dce513Schristos
72316dce513Schristos(dni break "breakpoint" ()
72416dce513Schristos        "break"
72516dce513Schristos        (+ OP_RAISE (f-exception 2))
72616dce513Schristos        (set pc (c-call USI "@cpu@_break_insn" pc))
72716dce513Schristos        ()
72816dce513Schristos)
72916dce513Schristos
73016dce513Schristos(dni scall "system call" ()
73116dce513Schristos        "scall"
73216dce513Schristos        (+ OP_RAISE (f-exception 7))
73316dce513Schristos        (set pc (c-call USI "@cpu@_scall_insn" pc))
73416dce513Schristos        ()
73516dce513Schristos)
73616dce513Schristos
73716dce513Schristos(dni bret "return from breakpoint" (ALIAS)
73816dce513Schristos        "bret"
73916dce513Schristos        (+ OP_B (f-r0 31) (f-r1 0) (f-r2 0) (f-resv0 0))
74016dce513Schristos        (set pc (c-call USI "@cpu@_bret_insn" r0))
74116dce513Schristos        ()
74216dce513Schristos)
74316dce513Schristos
74416dce513Schristos(dni eret "return from exception" (ALIAS)
74516dce513Schristos        "eret"
74616dce513Schristos        (+ OP_B (f-r0 30) (f-r1 0) (f-r2 0) (f-resv0 0))
74716dce513Schristos        (set pc (c-call USI "@cpu@_eret_insn" r0))
74816dce513Schristos        ()
74916dce513Schristos)
75016dce513Schristos
75116dce513Schristos(dni ret "return" (ALIAS)
75216dce513Schristos        "ret"
75316dce513Schristos        (+ OP_B (f-r0 29) (f-r1 0) (f-r2 0) (f-resv0 0))
75416dce513Schristos        (set pc r0)
75516dce513Schristos        ()
75616dce513Schristos)
75716dce513Schristos
75816dce513Schristos(dni mv "move" (ALIAS)
75916dce513Schristos        "mv $r2,$r0"
76016dce513Schristos        (+ OP_OR r0 (f-r1 0) r2 (f-resv0 0))
76116dce513Schristos        (set r2 r0)
76216dce513Schristos        ()
76316dce513Schristos)
76416dce513Schristos
76516dce513Schristos(dni mvi "move immediate" (ALIAS)
76616dce513Schristos        "mvi $r1,$imm"
76716dce513Schristos        (+ OP_ADDI (f-r0 0) r1 imm)
76816dce513Schristos        (set r1 (add r0 (ext SI (trunc HI imm))))
76916dce513Schristos        ()
77016dce513Schristos)
77116dce513Schristos
77216dce513Schristos(dni mvui "move unsigned immediate" (ALIAS)
77316dce513Schristos        "mvu $r1,$lo16"
77416dce513Schristos        (+ OP_ORI (f-r0 0) r1 lo16)
77516dce513Schristos        (set r1 (zext SI lo16))
77616dce513Schristos        ()
77716dce513Schristos)
77816dce513Schristos
77916dce513Schristos(dni mvhi "move high immediate" (ALIAS)
78016dce513Schristos        "mvhi $r1,$hi16"
78116dce513Schristos        (+ OP_ORHI (f-r0 0) r1 hi16)
78216dce513Schristos        (set r1 (or r0 (sll SI hi16 16)))
78316dce513Schristos        ()
78416dce513Schristos)
78516dce513Schristos
78616dce513Schristos(dni mva "move address" (ALIAS)
78716dce513Schristos        "mva $r1,$gp16"
78816dce513Schristos        (+ OP_ADDI (f-r0 26) r1 gp16)
78916dce513Schristos        (set r1 (add r0 (ext SI (trunc HI gp16))))
79016dce513Schristos        ()
79116dce513Schristos)
79216dce513Schristos
79316dce513Schristos(dni not "not" (ALIAS)
79416dce513Schristos        "not $r2,$r0"
79516dce513Schristos        (+ OP_XNOR r0 (f-r1 0) r2 (f-resv0 0))
79616dce513Schristos        (set r2 (inv r0))
79716dce513Schristos        ()
79816dce513Schristos)
79916dce513Schristos
80016dce513Schristos(dni nop "nop" (ALIAS)
80116dce513Schristos        "nop"
80216dce513Schristos        (+ OP_ADDI (f-r0 0) (f-r1 0) (f-imm 0))
80316dce513Schristos        (set r0 r0)
80416dce513Schristos        ()
80516dce513Schristos)
80616dce513Schristos
80716dce513Schristos(dni lbgprel "load byte gp relative" (ALIAS)
80816dce513Schristos        "lb $r1,$gp16"
80916dce513Schristos        (+ OP_LB (f-r0 26) r1 gp16)
81016dce513Schristos        (set r1 (ext SI (mem QI (add r0 (ext SI (trunc HI gp16))))))
81116dce513Schristos        ()
81216dce513Schristos)
81316dce513Schristos
81416dce513Schristos(dni lbugprel "load byte unsigned gp relative" (ALIAS)
81516dce513Schristos        "lbu $r1,$gp16"
81616dce513Schristos        (+ OP_LBU (f-r0 26) r1 gp16)
81716dce513Schristos        (set r1 (zext SI (mem QI (add r0 (ext SI (trunc HI gp16))))))
81816dce513Schristos        ()
81916dce513Schristos)
82016dce513Schristos
82116dce513Schristos(dni lhgprel "load halfword gp relative" (ALIAS)
82216dce513Schristos        "lh $r1,$gp16"
82316dce513Schristos        (+ OP_LH (f-r0 26) r1 gp16)
82416dce513Schristos        (set r1 (ext SI (mem HI (add r0 (ext SI (trunc HI gp16))))))
82516dce513Schristos        ()
82616dce513Schristos)
82716dce513Schristos
82816dce513Schristos(dni lhugprel "load halfword unsigned gp relative" (ALIAS)
82916dce513Schristos        "lhu $r1,$gp16"
83016dce513Schristos        (+ OP_LHU (f-r0 26) r1 gp16)
83116dce513Schristos        (set r1 (zext SI (mem HI (add r0 (ext SI (trunc HI gp16))))))
83216dce513Schristos        ()
83316dce513Schristos)
83416dce513Schristos
83516dce513Schristos(dni lwgprel "load word gp relative" (ALIAS)
83616dce513Schristos        "lw $r1,$gp16"
83716dce513Schristos        (+ OP_LW (f-r0 26) r1 gp16)
83816dce513Schristos        (set r1 (mem SI (add r0 (ext SI (trunc HI gp16)))))
83916dce513Schristos        ()
84016dce513Schristos)
84116dce513Schristos
84216dce513Schristos(dni sbgprel "store byte gp relative" (ALIAS)
84316dce513Schristos        "sb $gp16,$r1"
84416dce513Schristos        (+ OP_SB (f-r0 26) r1 gp16)
84516dce513Schristos        (set (mem QI (add r0 (ext SI (trunc HI gp16)))) r1)
84616dce513Schristos        ()
84716dce513Schristos)
84816dce513Schristos
84916dce513Schristos(dni shgprel "store halfword gp relative" (ALIAS)
85016dce513Schristos        "sh $gp16,$r1"
85116dce513Schristos        (+ OP_SH (f-r0 26) r1 gp16)
85216dce513Schristos        (set (mem HI (add r0 (ext SI (trunc HI gp16)))) r1)
85316dce513Schristos        ()
85416dce513Schristos)
85516dce513Schristos
85616dce513Schristos(dni swgprel "store word gp relative" (ALIAS)
85716dce513Schristos        "sw $gp16,$r1"
85816dce513Schristos        (+ OP_SW (f-r0 26) r1 gp16)
85916dce513Schristos        (set (mem SI (add r0 (ext SI (trunc HI gp16)))) r1)
86016dce513Schristos        ()
86116dce513Schristos)
86216dce513Schristos
86316dce513Schristos(dni lwgotrel "load word got relative" (ALIAS)
86416dce513Schristos        "lw $r1,(gp+$got16)"
86516dce513Schristos        (+ OP_LW (f-r0 26) r1 got16)
86616dce513Schristos        (set r1 (mem SI (add r0 (ext SI (trunc HI got16)))))
86716dce513Schristos        ()
86816dce513Schristos)
86916dce513Schristos
87016dce513Schristos(dni orhigotoffi "or high got offset immediate" (ALIAS)
87116dce513Schristos        "orhi $r1,$r0,$gotoffhi16"
87216dce513Schristos        (+ OP_ORHI r0 r1 gotoffhi16)
87316dce513Schristos        (set r1 (or r0 (sll SI gotoffhi16 16)))
87416dce513Schristos        ()
87516dce513Schristos)
87616dce513Schristos
87716dce513Schristos(dni addgotoff "add got offset" (ALIAS)
87816dce513Schristos        "addi $r1,$r0,$gotofflo16"
87916dce513Schristos        (+ OP_ADDI r0 r1 gotofflo16)
88016dce513Schristos        (set r1 (add r0 (ext SI (trunc HI gotofflo16))))
88116dce513Schristos        ()
88216dce513Schristos)
88316dce513Schristos
88416dce513Schristos(dni swgotoff "store word got offset" (ALIAS)
88516dce513Schristos        "sw ($r0+$gotofflo16),$r1"
88616dce513Schristos        (+ OP_SW r0 r1 gotofflo16)
88716dce513Schristos        (set (mem SI (add r0 (ext SI (trunc HI gotofflo16)))) r1)
88816dce513Schristos        ()
88916dce513Schristos)
89016dce513Schristos
89116dce513Schristos(dni lwgotoff "load word got offset" (ALIAS)
89216dce513Schristos        "lw $r1,($r0+$gotofflo16)"
89316dce513Schristos        (+ OP_LW r0 r1 gotofflo16)
89416dce513Schristos        (set r1 (mem SI (add r0 (ext SI (trunc HI gotofflo16)))))
89516dce513Schristos        ()
89616dce513Schristos)
89716dce513Schristos
89816dce513Schristos(dni shgotoff "store half word got offset" (ALIAS)
89916dce513Schristos        "sh ($r0+$gotofflo16),$r1"
90016dce513Schristos        (+ OP_SH r0 r1 gotofflo16)
90116dce513Schristos        (set (mem HI (add r0 (ext SI (trunc HI gotofflo16)))) r1)
90216dce513Schristos        ()
90316dce513Schristos)
90416dce513Schristos
90516dce513Schristos(dni lhgotoff "load half word got offset" (ALIAS)
90616dce513Schristos        "lh $r1,($r0+$gotofflo16)"
90716dce513Schristos        (+ OP_LH r0 r1 gotofflo16)
90816dce513Schristos        (set r1 (ext SI (mem HI (add r0 (ext SI (trunc HI gotofflo16))))))
90916dce513Schristos        ()
91016dce513Schristos)
91116dce513Schristos
91216dce513Schristos(dni lhugotoff "load half word got offset unsigned" (ALIAS)
91316dce513Schristos        "lhu $r1,($r0+$gotofflo16)"
91416dce513Schristos        (+ OP_LHU r0 r1 gotofflo16)
91516dce513Schristos        (set r1 (zext SI (mem HI (add r0 (ext SI (trunc HI gotofflo16))))))
91616dce513Schristos        ()
91716dce513Schristos)
91816dce513Schristos
91916dce513Schristos(dni sbgotoff "store byte got offset" (ALIAS)
92016dce513Schristos        "sb ($r0+$gotofflo16),$r1"
92116dce513Schristos        (+ OP_SB r0 r1 gotofflo16)
92216dce513Schristos        (set (mem QI (add r0 (ext SI (trunc HI gotofflo16)))) r1)
92316dce513Schristos        ()
92416dce513Schristos)
92516dce513Schristos
92616dce513Schristos(dni lbgotoff "load byte got offset" (ALIAS)
92716dce513Schristos        "lb $r1,($r0+$gotofflo16)"
92816dce513Schristos        (+ OP_LB r0 r1 gotofflo16)
92916dce513Schristos        (set r1 (ext SI (mem QI (add r0 (ext SI (trunc HI gotofflo16))))))
93016dce513Schristos        ()
93116dce513Schristos)
93216dce513Schristos
93316dce513Schristos(dni lbugotoff "load byte got offset unsigned" (ALIAS)
93416dce513Schristos        "lbu $r1,($r0+$gotofflo16)"
93516dce513Schristos        (+ OP_LBU r0 r1 gotofflo16)
93616dce513Schristos        (set r1 (zext SI (mem QI (add r0 (ext SI (trunc HI gotofflo16))))))
93716dce513Schristos        ()
93816dce513Schristos)
939