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