14e98e3e1Schristos; Lattice Mico32 CPU description. -*- Scheme -*- 2a2e2270fSchristos; Copyright 2008-2013 Free Software Foundation, Inc. 34e98e3e1Schristos; Contributed by Jon Beniston <jon@beniston.com> 44e98e3e1Schristos; 54e98e3e1Schristos; This file is part of the GNU Binutils. 64e98e3e1Schristos; 74e98e3e1Schristos; This program is free software; you can redistribute it and/or modify 84e98e3e1Schristos; it under the terms of the GNU General Public License as published by 94e98e3e1Schristos; the Free Software Foundation; either version 3 of the License, or 104e98e3e1Schristos; (at your option) any later version. 114e98e3e1Schristos; 124e98e3e1Schristos; This program is distributed in the hope that it will be useful, 134e98e3e1Schristos; but WITHOUT ANY WARRANTY; without even the implied warranty of 144e98e3e1Schristos; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 154e98e3e1Schristos; GNU General Public License for more details. 164e98e3e1Schristos; 174e98e3e1Schristos; You should have received a copy of the GNU General Public License 184e98e3e1Schristos; along with this program; if not, write to the Free Software 194e98e3e1Schristos; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 204e98e3e1Schristos; MA 02110-1301, USA. 214e98e3e1Schristos 224e98e3e1Schristos(include "simplify.inc") 234e98e3e1Schristos 244e98e3e1Schristos(define-arch 254e98e3e1Schristos (name lm32) ; name of cpu family 264e98e3e1Schristos (comment "Lattice Mico32") 274e98e3e1Schristos (default-alignment aligned) 284e98e3e1Schristos (insn-lsb0? #t) 294e98e3e1Schristos (machs lm32) 304e98e3e1Schristos (isas lm32) 314e98e3e1Schristos) 324e98e3e1Schristos 334e98e3e1Schristos 344e98e3e1Schristos; Instruction sets. 354e98e3e1Schristos 364e98e3e1Schristos(define-isa 374e98e3e1Schristos (name lm32) 384e98e3e1Schristos (comment "Lattice Mico32 ISA") 394e98e3e1Schristos (default-insn-word-bitsize 32) 404e98e3e1Schristos (default-insn-bitsize 32) 414e98e3e1Schristos (base-insn-bitsize 32) 424e98e3e1Schristos (decode-assist (31 30 29 28 27 26)) 434e98e3e1Schristos) 444e98e3e1Schristos 454e98e3e1Schristos 464e98e3e1Schristos; Cpu family definitions. 474e98e3e1Schristos 484e98e3e1Schristos(define-cpu 494e98e3e1Schristos ; cpu names must be distinct from the architecture name and machine name 504e98e3e1Schristos (name lm32bf) 514e98e3e1Schristos (comment "Lattice Mico32 CPU") 524e98e3e1Schristos (endian big) 534e98e3e1Schristos (word-bitsize 32) 544e98e3e1Schristos) 554e98e3e1Schristos 564e98e3e1Schristos(define-mach 574e98e3e1Schristos (name lm32) 584e98e3e1Schristos (comment "Lattice Mico32 MACH") 594e98e3e1Schristos (cpu lm32bf) 604e98e3e1Schristos) 614e98e3e1Schristos 624e98e3e1Schristos(define-model 634e98e3e1Schristos (name lm32) 644e98e3e1Schristos (comment "Lattice Mico32 reference implementation") 654e98e3e1Schristos (mach lm32) 664e98e3e1Schristos (unit u-exec "Execution unit" () 674e98e3e1Schristos 1 1 () () () ()) 684e98e3e1Schristos) 694e98e3e1Schristos 704e98e3e1Schristos 714e98e3e1Schristos; Hardware elements. 724e98e3e1Schristos 734e98e3e1Schristos(dnh h-pc "Program counter" (PC) (pc) () () ()) 744e98e3e1Schristos 754e98e3e1Schristos(dnh h-gr "General purpose registers" 764e98e3e1Schristos () 774e98e3e1Schristos (register SI (32)) 784e98e3e1Schristos (keyword "" ( 794e98e3e1Schristos (gp 26) (fp 27) (sp 28) (ra 29) (ea 30) (ba 31) 804e98e3e1Schristos (r0 0) (r1 1) (r2 2) (r3 3) 814e98e3e1Schristos (r4 4) (r5 5) (r6 6) (r7 7) 824e98e3e1Schristos (r8 8) (r9 9) (r10 10) (r11 11) 834e98e3e1Schristos (r12 12) (r13 13) (r14 14) (r15 15) 844e98e3e1Schristos (r16 16) (r17 17) (r18 18) (r19 19) 854e98e3e1Schristos (r20 20) (r21 21) (r22 22) (r23 23) 864e98e3e1Schristos (r24 24) (r25 25) (r26 26) (r27 27) 874e98e3e1Schristos (r28 28) (r29 29) (r30 30) (r31 31) 884e98e3e1Schristos ) 894e98e3e1Schristos ) 904e98e3e1Schristos () () 914e98e3e1Schristos) 924e98e3e1Schristos 934e98e3e1Schristos(dnh h-csr "Control and status registers" 944e98e3e1Schristos () 954e98e3e1Schristos (register SI (32)) 964e98e3e1Schristos (keyword "" ( 974e98e3e1Schristos (IE 0) (IM 1) (IP 2) 984e98e3e1Schristos (ICC 3) (DCC 4) 994e98e3e1Schristos (CC 5) 1004e98e3e1Schristos (CFG 6) 1014e98e3e1Schristos (EBA 7) 1024e98e3e1Schristos (DC 8) 1034e98e3e1Schristos (DEBA 9) 104a2e2270fSchristos (CFG2 10) 1054e98e3e1Schristos (JTX 14) (JRX 15) 1064e98e3e1Schristos (BP0 16) (BP1 17) (BP2 18) (BP3 19) 1074e98e3e1Schristos (WP0 24) (WP1 25) (WP2 26) (WP3 27) 108a2e2270fSchristos (PSW 29) (TLBVADDR 30) (TLBPADDR 31) (TLBBADVADDR 31) 1094e98e3e1Schristos ) 1104e98e3e1Schristos ) 1114e98e3e1Schristos () () 1124e98e3e1Schristos) 1134e98e3e1Schristos 1144e98e3e1Schristos 1154e98e3e1Schristos; Instruction fields. 1164e98e3e1Schristos 1174e98e3e1Schristos(dnf f-opcode "opcode field" () 31 6) 1184e98e3e1Schristos(dnf f-r0 "register index 0 field" () 25 5) 1194e98e3e1Schristos(dnf f-r1 "register index 1 field" () 20 5) 1204e98e3e1Schristos(dnf f-r2 "register index 2 field" () 15 5) 1214e98e3e1Schristos(dnf f-resv0 "reserved" (RESERVED) 10 11) 1224e98e3e1Schristos(dnf f-shift "shift amount field" () 4 5) 1234e98e3e1Schristos(df f-imm "signed immediate field" () 15 16 INT #f #f) 1244e98e3e1Schristos(dnf f-uimm "unsigned immediate field" () 15 16) 1254e98e3e1Schristos(dnf f-csr "csr field" () 25 5) 1264e98e3e1Schristos(dnf f-user "user defined field" () 10 11) 1274e98e3e1Schristos(dnf f-exception "exception field" () 25 26) 1284e98e3e1Schristos 1294e98e3e1Schristos(df f-branch "branch offset field" (PCREL-ADDR) 15 16 INT 1304e98e3e1Schristos ((value pc) (sra SI (sub SI value pc) 2)) 131*8dffb485Schristos ((value pc) (add SI pc (sub (xor (sll (and value #xffff) 2) 132*8dffb485Schristos #x20000) 133*8dffb485Schristos #x20000))) 1344e98e3e1Schristos) 1354e98e3e1Schristos(df f-call "call offset field" (PCREL-ADDR) 25 26 INT 1364e98e3e1Schristos ((value pc) (sra SI (sub SI value pc) 2)) 137*8dffb485Schristos ((value pc) (add SI pc (sub (xor (sll (and value #x3ffffff) 2) 138*8dffb485Schristos #x8000000) 139*8dffb485Schristos #x8000000))) 1404e98e3e1Schristos) 1414e98e3e1Schristos 1424e98e3e1Schristos 1434e98e3e1Schristos; Operands. 1444e98e3e1Schristos 1454e98e3e1Schristos(dnop r0 "register 0" () h-gr f-r0) 1464e98e3e1Schristos(dnop r1 "register 1" () h-gr f-r1) 1474e98e3e1Schristos(dnop r2 "register 2" () h-gr f-r2) 1484e98e3e1Schristos(dnop shift "shift amout" () h-uint f-shift) 1494e98e3e1Schristos(dnop imm "signed immediate" () h-sint f-imm) 1504e98e3e1Schristos(dnop uimm "unsigned immediate" () h-uint f-uimm) 1514e98e3e1Schristos(dnop branch "branch offset" () h-iaddr f-branch) 1524e98e3e1Schristos(dnop call "call offset" () h-iaddr f-call) 1534e98e3e1Schristos(dnop csr "csr" () h-csr f-csr) 1544e98e3e1Schristos(dnop user "user" () h-uint f-user) 1554e98e3e1Schristos(dnop exception "exception" () h-uint f-exception) 1564e98e3e1Schristos 1574e98e3e1Schristos(define-operand 1584e98e3e1Schristos (name hi16) 1594e98e3e1Schristos (comment "high 16-bit immediate") 1604e98e3e1Schristos (attrs) 1614e98e3e1Schristos (type h-uint) 1624e98e3e1Schristos (index f-uimm) 1634e98e3e1Schristos (handlers (parse "hi16")) 1644e98e3e1Schristos) 1654e98e3e1Schristos 1664e98e3e1Schristos(define-operand 1674e98e3e1Schristos (name lo16) 1684e98e3e1Schristos (comment "low 16-bit immediate") 1694e98e3e1Schristos (attrs) 1704e98e3e1Schristos (type h-uint) 1714e98e3e1Schristos (index f-uimm) 1724e98e3e1Schristos (handlers (parse "lo16")) 1734e98e3e1Schristos) 1744e98e3e1Schristos 1754e98e3e1Schristos(define-operand 1764e98e3e1Schristos (name gp16) 1774e98e3e1Schristos (comment "gp relative 16-bit immediate") 1784e98e3e1Schristos (attrs) 1794e98e3e1Schristos (type h-sint) 1804e98e3e1Schristos (index f-imm) 1814e98e3e1Schristos (handlers (parse "gp16")) 1824e98e3e1Schristos) 1834e98e3e1Schristos 1844e98e3e1Schristos(define-operand 1854e98e3e1Schristos (name got16) 1864e98e3e1Schristos (comment "got 16-bit immediate") 1874e98e3e1Schristos (attrs) 1884e98e3e1Schristos (type h-sint) 1894e98e3e1Schristos (index f-imm) 1904e98e3e1Schristos (handlers (parse "got16")) 1914e98e3e1Schristos) 1924e98e3e1Schristos 1934e98e3e1Schristos(define-operand 1944e98e3e1Schristos (name gotoffhi16) 1954e98e3e1Schristos (comment "got offset high 16-bit immediate") 1964e98e3e1Schristos (attrs) 1974e98e3e1Schristos (type h-sint) 1984e98e3e1Schristos (index f-imm) 1994e98e3e1Schristos (handlers (parse "gotoff_hi16")) 2004e98e3e1Schristos) 2014e98e3e1Schristos 2024e98e3e1Schristos(define-operand 2034e98e3e1Schristos (name gotofflo16) 2044e98e3e1Schristos (comment "got offset low 16-bit immediate") 2054e98e3e1Schristos (attrs) 2064e98e3e1Schristos (type h-sint) 2074e98e3e1Schristos (index f-imm) 2084e98e3e1Schristos (handlers (parse "gotoff_lo16")) 2094e98e3e1Schristos) 2104e98e3e1Schristos 2114e98e3e1Schristos 2124e98e3e1Schristos; Enumerations. 2134e98e3e1Schristos 2144e98e3e1Schristos(define-normal-insn-enum 2154e98e3e1Schristos opcodes "opcodes" () OP_ f-opcode 2164e98e3e1Schristos (("ADD" 45) 2174e98e3e1Schristos ("ADDI" 13) 2184e98e3e1Schristos ("AND" 40) 2194e98e3e1Schristos ("ANDI" 8) 2204e98e3e1Schristos ("ANDHI" 24) 2214e98e3e1Schristos ("B" 48) 2224e98e3e1Schristos ("BI" 56) 2234e98e3e1Schristos ("BE" 17) 2244e98e3e1Schristos ("BG" 18) 2254e98e3e1Schristos ("BGE" 19) 2264e98e3e1Schristos ("BGEU" 20) 2274e98e3e1Schristos ("BGU" 21) 2284e98e3e1Schristos ("BNE" 23) 2294e98e3e1Schristos ("CALL" 54) 2304e98e3e1Schristos ("CALLI" 62) 2314e98e3e1Schristos ("CMPE" 57) 2324e98e3e1Schristos ("CMPEI" 25) 2334e98e3e1Schristos ("CMPG" 58) 2344e98e3e1Schristos ("CMPGI" 26) 2354e98e3e1Schristos ("CMPGE" 59) 2364e98e3e1Schristos ("CMPGEI" 27) 2374e98e3e1Schristos ("CMPGEU" 60) 2384e98e3e1Schristos ("CMPGEUI" 28) 2394e98e3e1Schristos ("CMPGU" 61) 2404e98e3e1Schristos ("CMPGUI" 29) 2414e98e3e1Schristos ("CMPNE" 63) 2424e98e3e1Schristos ("CMPNEI" 31) 2434e98e3e1Schristos ("DIVU" 35) 2444e98e3e1Schristos ("LB" 4) 2454e98e3e1Schristos ("LBU" 16) 2464e98e3e1Schristos ("LH" 7) 2474e98e3e1Schristos ("LHU" 11) 2484e98e3e1Schristos ("LW" 10) 2494e98e3e1Schristos ("MODU" 49) 2504e98e3e1Schristos ("MUL" 34) 2514e98e3e1Schristos ("MULI" 2) 2524e98e3e1Schristos ("NOR" 33) 2534e98e3e1Schristos ("NORI" 1) 2544e98e3e1Schristos ("OR" 46) 2554e98e3e1Schristos ("ORI" 14) 2564e98e3e1Schristos ("ORHI" 30) 2574e98e3e1Schristos ("RAISE" 43) 2584e98e3e1Schristos ("RCSR" 36) 2594e98e3e1Schristos ("SB" 12) 2604e98e3e1Schristos ("SEXTB" 44) 2614e98e3e1Schristos ("SEXTH" 55) 2624e98e3e1Schristos ("SH" 3) 2634e98e3e1Schristos ("SL" 47) 2644e98e3e1Schristos ("SLI" 15) 2654e98e3e1Schristos ("SR" 37) 2664e98e3e1Schristos ("SRI" 5) 2674e98e3e1Schristos ("SRU" 32) 2684e98e3e1Schristos ("SRUI" 0) 2694e98e3e1Schristos ("SUB" 50) 2704e98e3e1Schristos ("SW" 22) 2714e98e3e1Schristos ("USER" 51) 2724e98e3e1Schristos ("WCSR" 52) 2734e98e3e1Schristos ("XNOR" 41) 2744e98e3e1Schristos ("XNORI" 9) 2754e98e3e1Schristos ("XOR" 38) 2764e98e3e1Schristos ("XORI" 6) 2774e98e3e1Schristos ) 2784e98e3e1Schristos) 2794e98e3e1Schristos 2804e98e3e1Schristos 2814e98e3e1Schristos; Instructions. Note: Reg-reg must come before reg-imm. 2824e98e3e1Schristos 2834e98e3e1Schristos(dni add "add" () 2844e98e3e1Schristos "add $r2,$r0,$r1" 2854e98e3e1Schristos (+ OP_ADD r0 r1 r2 (f-resv0 0)) 2864e98e3e1Schristos (set r2 (add r0 r1)) 2874e98e3e1Schristos () 2884e98e3e1Schristos) 2894e98e3e1Schristos 2904e98e3e1Schristos(dni addi "add immediate" () 2914e98e3e1Schristos "addi $r1,$r0,$imm" 2924e98e3e1Schristos (+ OP_ADDI r0 r1 imm) 2934e98e3e1Schristos (set r1 (add r0 (ext SI (trunc HI imm)))) 2944e98e3e1Schristos () 2954e98e3e1Schristos) 2964e98e3e1Schristos 2974e98e3e1Schristos(dni and "and" () 2984e98e3e1Schristos "and $r2,$r0,$r1" 2994e98e3e1Schristos (+ OP_AND r0 r1 r2 (f-resv0 0)) 3004e98e3e1Schristos (set r2 (and r0 r1)) 3014e98e3e1Schristos () 3024e98e3e1Schristos) 3034e98e3e1Schristos 3044e98e3e1Schristos(dni andi "and immediate" () 3054e98e3e1Schristos "andi $r1,$r0,$uimm" 3064e98e3e1Schristos (+ OP_ANDI r0 r1 uimm) 3074e98e3e1Schristos (set r1 (and r0 (zext SI uimm))) 3084e98e3e1Schristos () 3094e98e3e1Schristos) 3104e98e3e1Schristos 3114e98e3e1Schristos(dni andhii "and high immediate" () 3124e98e3e1Schristos "andhi $r1,$r0,$hi16" 3134e98e3e1Schristos (+ OP_ANDHI r0 r1 hi16) 3144e98e3e1Schristos (set r1 (and r0 (sll SI hi16 16))) 3154e98e3e1Schristos () 3164e98e3e1Schristos) 3174e98e3e1Schristos 3184e98e3e1Schristos(dni b "branch" () 3194e98e3e1Schristos "b $r0" 3204e98e3e1Schristos (+ OP_B r0 (f-r1 0) (f-r2 0) (f-resv0 0)) 3214e98e3e1Schristos (set pc (c-call USI "@cpu@_b_insn" r0 f-r0)) 3224e98e3e1Schristos () 3234e98e3e1Schristos) 3244e98e3e1Schristos 3254e98e3e1Schristos(dni bi "branch immediate" () 3264e98e3e1Schristos "bi $call" 3274e98e3e1Schristos (+ OP_BI call) 3284e98e3e1Schristos (set pc (ext SI call)) 3294e98e3e1Schristos () 3304e98e3e1Schristos) 3314e98e3e1Schristos 3324e98e3e1Schristos(dni be "branch equal" () 3334e98e3e1Schristos "be $r0,$r1,$branch" 3344e98e3e1Schristos (+ OP_BE r0 r1 branch) 3354e98e3e1Schristos (if (eq r0 r1) 3364e98e3e1Schristos (set pc branch) 3374e98e3e1Schristos ) 3384e98e3e1Schristos () 3394e98e3e1Schristos) 3404e98e3e1Schristos 3414e98e3e1Schristos(dni bg "branch greater" () 3424e98e3e1Schristos "bg $r0,$r1,$branch" 3434e98e3e1Schristos (+ OP_BG r0 r1 branch) 3444e98e3e1Schristos (if (gt r0 r1) 3454e98e3e1Schristos (set pc branch) 3464e98e3e1Schristos ) 3474e98e3e1Schristos () 3484e98e3e1Schristos) 3494e98e3e1Schristos 3504e98e3e1Schristos(dni bge "branch greater or equal" () 3514e98e3e1Schristos "bge $r0,$r1,$branch" 3524e98e3e1Schristos (+ OP_BGE r0 r1 branch) 3534e98e3e1Schristos (if (ge r0 r1) 3544e98e3e1Schristos (set pc branch) 3554e98e3e1Schristos ) 3564e98e3e1Schristos () 3574e98e3e1Schristos) 3584e98e3e1Schristos 3594e98e3e1Schristos(dni bgeu "branch greater or equal unsigned" () 3604e98e3e1Schristos "bgeu $r0,$r1,$branch" 3614e98e3e1Schristos (+ OP_BGEU r0 r1 branch) 3624e98e3e1Schristos (if (geu r0 r1) 3634e98e3e1Schristos (set pc branch) 3644e98e3e1Schristos ) 3654e98e3e1Schristos () 3664e98e3e1Schristos) 3674e98e3e1Schristos 3684e98e3e1Schristos(dni bgu "branch greater unsigned" () 3694e98e3e1Schristos "bgu $r0,$r1,$branch" 3704e98e3e1Schristos (+ OP_BGU r0 r1 branch) 3714e98e3e1Schristos (if (gtu r0 r1) 3724e98e3e1Schristos (set pc branch) 3734e98e3e1Schristos ) 3744e98e3e1Schristos () 3754e98e3e1Schristos) 3764e98e3e1Schristos 3774e98e3e1Schristos(dni bne "branch not equal" () 3784e98e3e1Schristos "bne $r0,$r1,$branch" 3794e98e3e1Schristos (+ OP_BNE r0 r1 branch) 3804e98e3e1Schristos (if (ne r0 r1) 3814e98e3e1Schristos (set pc branch) 3824e98e3e1Schristos ) 3834e98e3e1Schristos () 3844e98e3e1Schristos) 3854e98e3e1Schristos 3864e98e3e1Schristos(dni call "call" () 3874e98e3e1Schristos "call $r0" 3884e98e3e1Schristos (+ OP_CALL r0 (f-r1 0) (f-r2 0) (f-resv0 0)) 3894e98e3e1Schristos (sequence () 3904e98e3e1Schristos (set (reg h-gr 29) (add pc 4)) 3914e98e3e1Schristos (set pc r0) 3924e98e3e1Schristos ) 3934e98e3e1Schristos () 3944e98e3e1Schristos) 3954e98e3e1Schristos 3964e98e3e1Schristos(dni calli "call immediate" () 3974e98e3e1Schristos "calli $call" 3984e98e3e1Schristos (+ OP_CALLI call) 3994e98e3e1Schristos (sequence () 4004e98e3e1Schristos (set (reg h-gr 29) (add pc 4)) 4014e98e3e1Schristos (set pc (ext SI call)) 4024e98e3e1Schristos ) 4034e98e3e1Schristos () 4044e98e3e1Schristos) 4054e98e3e1Schristos 4064e98e3e1Schristos(dni cmpe "compare equal" () 4074e98e3e1Schristos "cmpe $r2,$r0,$r1" 4084e98e3e1Schristos (+ OP_CMPE r0 r1 r2 (f-resv0 0)) 4094e98e3e1Schristos (set r2 (eq SI r0 r1)) 4104e98e3e1Schristos () 4114e98e3e1Schristos) 4124e98e3e1Schristos 4134e98e3e1Schristos(dni cmpei "compare equal immediate" () 4144e98e3e1Schristos "cmpei $r1,$r0,$imm" 4154e98e3e1Schristos (+ OP_CMPEI r0 r1 imm) 4164e98e3e1Schristos (set r1 (eq SI r0 (ext SI (trunc HI imm)))) 4174e98e3e1Schristos () 4184e98e3e1Schristos) 4194e98e3e1Schristos 4204e98e3e1Schristos(dni cmpg "compare greater than" () 4214e98e3e1Schristos "cmpg $r2,$r0,$r1" 4224e98e3e1Schristos (+ OP_CMPG r0 r1 r2 (f-resv0 0)) 4234e98e3e1Schristos (set r2 (gt SI r0 r1)) 4244e98e3e1Schristos () 4254e98e3e1Schristos) 4264e98e3e1Schristos 4274e98e3e1Schristos(dni cmpgi "compare greater than immediate" () 4284e98e3e1Schristos "cmpgi $r1,$r0,$imm" 4294e98e3e1Schristos (+ OP_CMPGI r0 r1 imm) 4304e98e3e1Schristos (set r1 (gt SI r0 (ext SI (trunc HI imm)))) 4314e98e3e1Schristos () 4324e98e3e1Schristos) 4334e98e3e1Schristos 4344e98e3e1Schristos(dni cmpge "compare greater or equal" () 4354e98e3e1Schristos "cmpge $r2,$r0,$r1" 4364e98e3e1Schristos (+ OP_CMPGE r0 r1 r2 (f-resv0 0)) 4374e98e3e1Schristos (set r2 (ge SI r0 r1)) 4384e98e3e1Schristos () 4394e98e3e1Schristos) 4404e98e3e1Schristos 4414e98e3e1Schristos(dni cmpgei "compare greater or equal immediate" () 4424e98e3e1Schristos "cmpgei $r1,$r0,$imm" 4434e98e3e1Schristos (+ OP_CMPGEI r0 r1 imm) 4444e98e3e1Schristos (set r1 (ge SI r0 (ext SI (trunc HI imm)))) 4454e98e3e1Schristos () 4464e98e3e1Schristos) 4474e98e3e1Schristos 4484e98e3e1Schristos(dni cmpgeu "compare greater or equal unsigned" () 4494e98e3e1Schristos "cmpgeu $r2,$r0,$r1" 4504e98e3e1Schristos (+ OP_CMPGEU r0 r1 r2 (f-resv0 0)) 4514e98e3e1Schristos (set r2 (geu SI r0 r1)) 4524e98e3e1Schristos () 4534e98e3e1Schristos) 4544e98e3e1Schristos 4554e98e3e1Schristos(dni cmpgeui "compare greater or equal unsigned immediate" () 4564e98e3e1Schristos "cmpgeui $r1,$r0,$uimm" 4574e98e3e1Schristos (+ OP_CMPGEUI r0 r1 uimm) 4584e98e3e1Schristos (set r1 (geu SI r0 (zext SI uimm))) 4594e98e3e1Schristos () 4604e98e3e1Schristos) 4614e98e3e1Schristos 4624e98e3e1Schristos(dni cmpgu "compare greater than unsigned" () 4634e98e3e1Schristos "cmpgu $r2,$r0,$r1" 4644e98e3e1Schristos (+ OP_CMPGU r0 r1 r2 (f-resv0 0)) 4654e98e3e1Schristos (set r2 (gtu SI r0 r1)) 4664e98e3e1Schristos () 4674e98e3e1Schristos) 4684e98e3e1Schristos 4694e98e3e1Schristos(dni cmpgui "compare greater than unsigned immediate" () 4704e98e3e1Schristos "cmpgui $r1,$r0,$uimm" 4714e98e3e1Schristos (+ OP_CMPGUI r0 r1 uimm) 4724e98e3e1Schristos (set r1 (gtu SI r0 (zext SI uimm))) 4734e98e3e1Schristos () 4744e98e3e1Schristos) 4754e98e3e1Schristos 4764e98e3e1Schristos(dni cmpne "compare not equal" () 4774e98e3e1Schristos "cmpne $r2,$r0,$r1" 4784e98e3e1Schristos (+ OP_CMPNE r0 r1 r2 (f-resv0 0)) 4794e98e3e1Schristos (set r2 (ne SI r0 r1)) 4804e98e3e1Schristos () 4814e98e3e1Schristos) 4824e98e3e1Schristos 4834e98e3e1Schristos(dni cmpnei "compare not equal immediate" () 4844e98e3e1Schristos "cmpnei $r1,$r0,$imm" 4854e98e3e1Schristos (+ OP_CMPNEI r0 r1 imm) 4864e98e3e1Schristos (set r1 (ne SI r0 (ext SI (trunc HI imm)))) 4874e98e3e1Schristos () 4884e98e3e1Schristos) 4894e98e3e1Schristos 4904e98e3e1Schristos(dni divu "unsigned divide" () 4914e98e3e1Schristos "divu $r2,$r0,$r1" 4924e98e3e1Schristos (+ OP_DIVU r0 r1 r2 (f-resv0 0)) 4934e98e3e1Schristos (set pc (c-call USI "@cpu@_divu_insn" pc f-r0 f-r1 f-r2)) 4944e98e3e1Schristos () 4954e98e3e1Schristos) 4964e98e3e1Schristos 4974e98e3e1Schristos(dni lb "load byte" () 4984e98e3e1Schristos "lb $r1,($r0+$imm)" 4994e98e3e1Schristos (+ OP_LB r0 r1 imm) 5004e98e3e1Schristos (set r1 (ext SI (mem QI (add r0 (ext SI (trunc HI imm)))))) 5014e98e3e1Schristos () 5024e98e3e1Schristos) 5034e98e3e1Schristos 5044e98e3e1Schristos(dni lbu "load byte unsigned" () 5054e98e3e1Schristos "lbu $r1,($r0+$imm)" 5064e98e3e1Schristos (+ OP_LBU r0 r1 imm) 5074e98e3e1Schristos (set r1 (zext SI (mem QI (add r0 (ext SI (trunc HI imm)))))) 5084e98e3e1Schristos () 5094e98e3e1Schristos) 5104e98e3e1Schristos 5114e98e3e1Schristos(dni lh "load halfword" () 5124e98e3e1Schristos "lh $r1,($r0+$imm)" 5134e98e3e1Schristos (+ OP_LH r0 r1 imm) 5144e98e3e1Schristos (set r1 (ext SI (mem HI (add r0 (ext SI (trunc HI imm)))))) 5154e98e3e1Schristos () 5164e98e3e1Schristos) 5174e98e3e1Schristos 5184e98e3e1Schristos(dni lhu "load halfword unsigned" () 5194e98e3e1Schristos "lhu $r1,($r0+$imm)" 5204e98e3e1Schristos (+ OP_LHU r0 r1 imm) 5214e98e3e1Schristos (set r1 (zext SI (mem HI (add r0 (ext SI (trunc HI imm)))))) 5224e98e3e1Schristos () 5234e98e3e1Schristos) 5244e98e3e1Schristos 5254e98e3e1Schristos(dni lw "load word" () 5264e98e3e1Schristos "lw $r1,($r0+$imm)" 5274e98e3e1Schristos (+ OP_LW r0 r1 imm) 5284e98e3e1Schristos (set r1 (mem SI (add r0 (ext SI (trunc HI imm))))) 5294e98e3e1Schristos () 5304e98e3e1Schristos) 5314e98e3e1Schristos 5324e98e3e1Schristos(dni modu "unsigned modulus" () 5334e98e3e1Schristos "modu $r2,$r0,$r1" 5344e98e3e1Schristos (+ OP_MODU r0 r1 r2 (f-resv0 0)) 5354e98e3e1Schristos (set pc (c-call USI "@cpu@_modu_insn" pc f-r0 f-r1 f-r2)) 5364e98e3e1Schristos () 5374e98e3e1Schristos) 5384e98e3e1Schristos 5394e98e3e1Schristos(dni mul "mulitply" () 5404e98e3e1Schristos "mul $r2,$r0,$r1" 5414e98e3e1Schristos (+ OP_MUL r0 r1 r2 (f-resv0 0)) 5424e98e3e1Schristos (set r2 (mul r0 r1)) 5434e98e3e1Schristos () 5444e98e3e1Schristos) 5454e98e3e1Schristos 5464e98e3e1Schristos(dni muli "multiply immediate" () 5474e98e3e1Schristos "muli $r1,$r0,$imm" 5484e98e3e1Schristos (+ OP_MULI r0 r1 imm) 5494e98e3e1Schristos (set r1 (mul r0 (ext SI (trunc HI imm)))) 5504e98e3e1Schristos () 5514e98e3e1Schristos) 5524e98e3e1Schristos 5534e98e3e1Schristos(dni nor "nor" () 5544e98e3e1Schristos "nor $r2,$r0,$r1" 5554e98e3e1Schristos (+ OP_NOR r0 r1 r2 (f-resv0 0)) 5564e98e3e1Schristos (set r2 (inv (or r0 r1))) 5574e98e3e1Schristos () 5584e98e3e1Schristos) 5594e98e3e1Schristos 5604e98e3e1Schristos(dni nori "nor immediate" () 5614e98e3e1Schristos "nori $r1,$r0,$uimm" 5624e98e3e1Schristos (+ OP_NORI r0 r1 uimm) 5634e98e3e1Schristos (set r1 (inv (or r0 (zext SI uimm)))) 5644e98e3e1Schristos () 5654e98e3e1Schristos) 5664e98e3e1Schristos 5674e98e3e1Schristos(dni or "or" () 5684e98e3e1Schristos "or $r2,$r0,$r1" 5694e98e3e1Schristos (+ OP_OR r0 r1 r2 (f-resv0 0)) 5704e98e3e1Schristos (set r2 (or r0 r1)) 5714e98e3e1Schristos () 5724e98e3e1Schristos) 5734e98e3e1Schristos 5744e98e3e1Schristos(dni ori "or immediate" () 5754e98e3e1Schristos "ori $r1,$r0,$lo16" 5764e98e3e1Schristos (+ OP_ORI r0 r1 lo16) 5774e98e3e1Schristos (set r1 (or r0 (zext SI lo16))) 5784e98e3e1Schristos () 5794e98e3e1Schristos) 5804e98e3e1Schristos 5814e98e3e1Schristos(dni orhii "or high immediate" () 5824e98e3e1Schristos "orhi $r1,$r0,$hi16" 5834e98e3e1Schristos (+ OP_ORHI r0 r1 hi16) 5844e98e3e1Schristos (set r1 (or r0 (sll SI hi16 16))) 5854e98e3e1Schristos () 5864e98e3e1Schristos) 5874e98e3e1Schristos 5884e98e3e1Schristos(dni rcsr "read control or status register" () 5894e98e3e1Schristos "rcsr $r2,$csr" 5904e98e3e1Schristos (+ OP_RCSR csr (f-r1 0) r2 (f-resv0 0)) 5914e98e3e1Schristos (set r2 csr) 5924e98e3e1Schristos () 5934e98e3e1Schristos) 5944e98e3e1Schristos 5954e98e3e1Schristos(dni sb "store byte" () 5964e98e3e1Schristos "sb ($r0+$imm),$r1" 5974e98e3e1Schristos (+ OP_SB r0 r1 imm) 5984e98e3e1Schristos (set (mem QI (add r0 (ext SI (trunc HI imm)))) r1) 5994e98e3e1Schristos () 6004e98e3e1Schristos) 6014e98e3e1Schristos 6024e98e3e1Schristos(dni sextb "sign extend byte" () 6034e98e3e1Schristos "sextb $r2,$r0" 6044e98e3e1Schristos (+ OP_SEXTB r0 (f-r1 0) r2 (f-resv0 0)) 6054e98e3e1Schristos (set r2 (ext SI (trunc QI r0))) 6064e98e3e1Schristos () 6074e98e3e1Schristos) 6084e98e3e1Schristos 6094e98e3e1Schristos(dni sexth "sign extend half-word" () 6104e98e3e1Schristos "sexth $r2,$r0" 6114e98e3e1Schristos (+ OP_SEXTH r0 (f-r1 0) r2 (f-resv0 0)) 6124e98e3e1Schristos (set r2 (ext SI (trunc HI r0))) 6134e98e3e1Schristos () 6144e98e3e1Schristos) 6154e98e3e1Schristos 6164e98e3e1Schristos(dni sh "store halfword" () 6174e98e3e1Schristos "sh ($r0+$imm),$r1" 6184e98e3e1Schristos (+ OP_SH r0 r1 imm) 6194e98e3e1Schristos (set (mem HI (add r0 (ext SI (trunc HI imm)))) r1) 6204e98e3e1Schristos () 6214e98e3e1Schristos) 6224e98e3e1Schristos 6234e98e3e1Schristos(dni sl "shift left" () 6244e98e3e1Schristos "sl $r2,$r0,$r1" 6254e98e3e1Schristos (+ OP_SL r0 r1 r2 (f-resv0 0)) 6264e98e3e1Schristos (set r2 (sll SI r0 r1)) 6274e98e3e1Schristos () 6284e98e3e1Schristos) 6294e98e3e1Schristos 6304e98e3e1Schristos(dni sli "shift left immediate" () 6314e98e3e1Schristos "sli $r1,$r0,$imm" 6324e98e3e1Schristos (+ OP_SLI r0 r1 imm) 6334e98e3e1Schristos (set r1 (sll SI r0 imm)) 6344e98e3e1Schristos () 6354e98e3e1Schristos) 6364e98e3e1Schristos 6374e98e3e1Schristos(dni sr "shift right" () 6384e98e3e1Schristos "sr $r2,$r0,$r1" 6394e98e3e1Schristos (+ OP_SR r0 r1 r2 (f-resv0 0)) 6404e98e3e1Schristos (set r2 (sra SI r0 r1)) 6414e98e3e1Schristos () 6424e98e3e1Schristos) 6434e98e3e1Schristos 6444e98e3e1Schristos(dni sri "shift right immediate" () 6454e98e3e1Schristos "sri $r1,$r0,$imm" 6464e98e3e1Schristos (+ OP_SRI r0 r1 imm) 6474e98e3e1Schristos (set r1 (sra SI r0 imm)) 6484e98e3e1Schristos () 6494e98e3e1Schristos) 6504e98e3e1Schristos 6514e98e3e1Schristos(dni sru "shift right unsigned" () 6524e98e3e1Schristos "sru $r2,$r0,$r1" 6534e98e3e1Schristos (+ OP_SRU r0 r1 r2 (f-resv0 0)) 6544e98e3e1Schristos (set r2 (srl SI r0 r1)) 6554e98e3e1Schristos () 6564e98e3e1Schristos) 6574e98e3e1Schristos 6584e98e3e1Schristos(dni srui "shift right unsigned immediate" () 6594e98e3e1Schristos "srui $r1,$r0,$imm" 6604e98e3e1Schristos (+ OP_SRUI r0 r1 imm) 6614e98e3e1Schristos (set r1 (srl SI r0 imm)) 6624e98e3e1Schristos () 6634e98e3e1Schristos) 6644e98e3e1Schristos 6654e98e3e1Schristos(dni sub "subtract" () 6664e98e3e1Schristos "sub $r2,$r0,$r1" 6674e98e3e1Schristos (+ OP_SUB r0 r1 r2 (f-resv0 0)) 6684e98e3e1Schristos (set r2 (sub r0 r1)) 6694e98e3e1Schristos () 6704e98e3e1Schristos) 6714e98e3e1Schristos 6724e98e3e1Schristos(dni sw "store word" () 6734e98e3e1Schristos "sw ($r0+$imm),$r1" 6744e98e3e1Schristos (+ OP_SW r0 r1 imm) 6754e98e3e1Schristos (set (mem SI (add r0 (ext SI (trunc HI imm)))) r1) 6764e98e3e1Schristos () 6774e98e3e1Schristos) 6784e98e3e1Schristos 6794e98e3e1Schristos(dni user "user defined instruction" () 6804e98e3e1Schristos "user $r2,$r0,$r1,$user" 6814e98e3e1Schristos (+ OP_USER r0 r1 r2 user) 6824e98e3e1Schristos (set r2 (c-call SI "@cpu@_user_insn" r0 r1 user)) 6834e98e3e1Schristos () 6844e98e3e1Schristos) 6854e98e3e1Schristos 6864e98e3e1Schristos(dni wcsr "write control or status register" () 6874e98e3e1Schristos "wcsr $csr,$r1" 6884e98e3e1Schristos (+ OP_WCSR csr r1 (f-r2 0) (f-resv0 0)) 6894e98e3e1Schristos (c-call VOID "@cpu@_wcsr_insn" f-csr r1) 6904e98e3e1Schristos () 6914e98e3e1Schristos) 6924e98e3e1Schristos 6934e98e3e1Schristos(dni xor "xor" () 6944e98e3e1Schristos "xor $r2,$r0,$r1" 6954e98e3e1Schristos (+ OP_XOR r0 r1 r2 (f-resv0 0)) 6964e98e3e1Schristos (set r2 (xor r0 r1)) 6974e98e3e1Schristos () 6984e98e3e1Schristos) 6994e98e3e1Schristos 7004e98e3e1Schristos(dni xori "xor immediate" () 7014e98e3e1Schristos "xori $r1,$r0,$uimm" 7024e98e3e1Schristos (+ OP_XORI r0 r1 uimm) 7034e98e3e1Schristos (set r1 (xor r0 (zext SI uimm))) 7044e98e3e1Schristos () 7054e98e3e1Schristos) 7064e98e3e1Schristos 7074e98e3e1Schristos(dni xnor "xnor" () 7084e98e3e1Schristos "xnor $r2,$r0,$r1" 7094e98e3e1Schristos (+ OP_XNOR r0 r1 r2 (f-resv0 0)) 7104e98e3e1Schristos (set r2 (inv (xor r0 r1))) 7114e98e3e1Schristos () 7124e98e3e1Schristos) 7134e98e3e1Schristos 7144e98e3e1Schristos(dni xnori "xnor immediate" () 7154e98e3e1Schristos "xnori $r1,$r0,$uimm" 7164e98e3e1Schristos (+ OP_XNORI r0 r1 uimm) 7174e98e3e1Schristos (set r1 (inv (xor r0 (zext SI uimm)))) 7184e98e3e1Schristos () 7194e98e3e1Schristos) 7204e98e3e1Schristos 7214e98e3e1Schristos; Pseudo instructions 7224e98e3e1Schristos 7234e98e3e1Schristos(dni break "breakpoint" () 7244e98e3e1Schristos "break" 7254e98e3e1Schristos (+ OP_RAISE (f-exception 2)) 7264e98e3e1Schristos (set pc (c-call USI "@cpu@_break_insn" pc)) 7274e98e3e1Schristos () 7284e98e3e1Schristos) 7294e98e3e1Schristos 7304e98e3e1Schristos(dni scall "system call" () 7314e98e3e1Schristos "scall" 7324e98e3e1Schristos (+ OP_RAISE (f-exception 7)) 7334e98e3e1Schristos (set pc (c-call USI "@cpu@_scall_insn" pc)) 7344e98e3e1Schristos () 7354e98e3e1Schristos) 7364e98e3e1Schristos 7374e98e3e1Schristos(dni bret "return from breakpoint" (ALIAS) 7384e98e3e1Schristos "bret" 7394e98e3e1Schristos (+ OP_B (f-r0 31) (f-r1 0) (f-r2 0) (f-resv0 0)) 7404e98e3e1Schristos (set pc (c-call USI "@cpu@_bret_insn" r0)) 7414e98e3e1Schristos () 7424e98e3e1Schristos) 7434e98e3e1Schristos 7444e98e3e1Schristos(dni eret "return from exception" (ALIAS) 7454e98e3e1Schristos "eret" 7464e98e3e1Schristos (+ OP_B (f-r0 30) (f-r1 0) (f-r2 0) (f-resv0 0)) 7474e98e3e1Schristos (set pc (c-call USI "@cpu@_eret_insn" r0)) 7484e98e3e1Schristos () 7494e98e3e1Schristos) 7504e98e3e1Schristos 7514e98e3e1Schristos(dni ret "return" (ALIAS) 7524e98e3e1Schristos "ret" 7534e98e3e1Schristos (+ OP_B (f-r0 29) (f-r1 0) (f-r2 0) (f-resv0 0)) 7544e98e3e1Schristos (set pc r0) 7554e98e3e1Schristos () 7564e98e3e1Schristos) 7574e98e3e1Schristos 7584e98e3e1Schristos(dni mv "move" (ALIAS) 7594e98e3e1Schristos "mv $r2,$r0" 7604e98e3e1Schristos (+ OP_OR r0 (f-r1 0) r2 (f-resv0 0)) 7614e98e3e1Schristos (set r2 r0) 7624e98e3e1Schristos () 7634e98e3e1Schristos) 7644e98e3e1Schristos 7654e98e3e1Schristos(dni mvi "move immediate" (ALIAS) 7664e98e3e1Schristos "mvi $r1,$imm" 7674e98e3e1Schristos (+ OP_ADDI (f-r0 0) r1 imm) 7684e98e3e1Schristos (set r1 (add r0 (ext SI (trunc HI imm)))) 7694e98e3e1Schristos () 7704e98e3e1Schristos) 7714e98e3e1Schristos 7724e98e3e1Schristos(dni mvui "move unsigned immediate" (ALIAS) 7734e98e3e1Schristos "mvu $r1,$lo16" 7744e98e3e1Schristos (+ OP_ORI (f-r0 0) r1 lo16) 7754e98e3e1Schristos (set r1 (zext SI lo16)) 7764e98e3e1Schristos () 7774e98e3e1Schristos) 7784e98e3e1Schristos 7794e98e3e1Schristos(dni mvhi "move high immediate" (ALIAS) 7804e98e3e1Schristos "mvhi $r1,$hi16" 7814e98e3e1Schristos (+ OP_ORHI (f-r0 0) r1 hi16) 7824e98e3e1Schristos (set r1 (or r0 (sll SI hi16 16))) 7834e98e3e1Schristos () 7844e98e3e1Schristos) 7854e98e3e1Schristos 7864e98e3e1Schristos(dni mva "move address" (ALIAS) 7874e98e3e1Schristos "mva $r1,$gp16" 7884e98e3e1Schristos (+ OP_ADDI (f-r0 26) r1 gp16) 7894e98e3e1Schristos (set r1 (add r0 (ext SI (trunc HI gp16)))) 7904e98e3e1Schristos () 7914e98e3e1Schristos) 7924e98e3e1Schristos 7934e98e3e1Schristos(dni not "not" (ALIAS) 7944e98e3e1Schristos "not $r2,$r0" 7954e98e3e1Schristos (+ OP_XNOR r0 (f-r1 0) r2 (f-resv0 0)) 7964e98e3e1Schristos (set r2 (inv r0)) 7974e98e3e1Schristos () 7984e98e3e1Schristos) 7994e98e3e1Schristos 8004e98e3e1Schristos(dni nop "nop" (ALIAS) 8014e98e3e1Schristos "nop" 8024e98e3e1Schristos (+ OP_ADDI (f-r0 0) (f-r1 0) (f-imm 0)) 8034e98e3e1Schristos (set r0 r0) 8044e98e3e1Schristos () 8054e98e3e1Schristos) 8064e98e3e1Schristos 8074e98e3e1Schristos(dni lbgprel "load byte gp relative" (ALIAS) 8084e98e3e1Schristos "lb $r1,$gp16" 8094e98e3e1Schristos (+ OP_LB (f-r0 26) r1 gp16) 8104e98e3e1Schristos (set r1 (ext SI (mem QI (add r0 (ext SI (trunc HI gp16)))))) 8114e98e3e1Schristos () 8124e98e3e1Schristos) 8134e98e3e1Schristos 8144e98e3e1Schristos(dni lbugprel "load byte unsigned gp relative" (ALIAS) 8154e98e3e1Schristos "lbu $r1,$gp16" 8164e98e3e1Schristos (+ OP_LBU (f-r0 26) r1 gp16) 8174e98e3e1Schristos (set r1 (zext SI (mem QI (add r0 (ext SI (trunc HI gp16)))))) 8184e98e3e1Schristos () 8194e98e3e1Schristos) 8204e98e3e1Schristos 8214e98e3e1Schristos(dni lhgprel "load halfword gp relative" (ALIAS) 8224e98e3e1Schristos "lh $r1,$gp16" 8234e98e3e1Schristos (+ OP_LH (f-r0 26) r1 gp16) 8244e98e3e1Schristos (set r1 (ext SI (mem HI (add r0 (ext SI (trunc HI gp16)))))) 8254e98e3e1Schristos () 8264e98e3e1Schristos) 8274e98e3e1Schristos 8284e98e3e1Schristos(dni lhugprel "load halfword unsigned gp relative" (ALIAS) 8294e98e3e1Schristos "lhu $r1,$gp16" 8304e98e3e1Schristos (+ OP_LHU (f-r0 26) r1 gp16) 8314e98e3e1Schristos (set r1 (zext SI (mem HI (add r0 (ext SI (trunc HI gp16)))))) 8324e98e3e1Schristos () 8334e98e3e1Schristos) 8344e98e3e1Schristos 8354e98e3e1Schristos(dni lwgprel "load word gp relative" (ALIAS) 8364e98e3e1Schristos "lw $r1,$gp16" 8374e98e3e1Schristos (+ OP_LW (f-r0 26) r1 gp16) 8384e98e3e1Schristos (set r1 (mem SI (add r0 (ext SI (trunc HI gp16))))) 8394e98e3e1Schristos () 8404e98e3e1Schristos) 8414e98e3e1Schristos 8424e98e3e1Schristos(dni sbgprel "store byte gp relative" (ALIAS) 8434e98e3e1Schristos "sb $gp16,$r1" 8444e98e3e1Schristos (+ OP_SB (f-r0 26) r1 gp16) 8454e98e3e1Schristos (set (mem QI (add r0 (ext SI (trunc HI gp16)))) r1) 8464e98e3e1Schristos () 8474e98e3e1Schristos) 8484e98e3e1Schristos 8494e98e3e1Schristos(dni shgprel "store halfword gp relative" (ALIAS) 8504e98e3e1Schristos "sh $gp16,$r1" 8514e98e3e1Schristos (+ OP_SH (f-r0 26) r1 gp16) 8524e98e3e1Schristos (set (mem HI (add r0 (ext SI (trunc HI gp16)))) r1) 8534e98e3e1Schristos () 8544e98e3e1Schristos) 8554e98e3e1Schristos 8564e98e3e1Schristos(dni swgprel "store word gp relative" (ALIAS) 8574e98e3e1Schristos "sw $gp16,$r1" 8584e98e3e1Schristos (+ OP_SW (f-r0 26) r1 gp16) 8594e98e3e1Schristos (set (mem SI (add r0 (ext SI (trunc HI gp16)))) r1) 8604e98e3e1Schristos () 8614e98e3e1Schristos) 8624e98e3e1Schristos 8634e98e3e1Schristos(dni lwgotrel "load word got relative" (ALIAS) 8644e98e3e1Schristos "lw $r1,(gp+$got16)" 8654e98e3e1Schristos (+ OP_LW (f-r0 26) r1 got16) 8664e98e3e1Schristos (set r1 (mem SI (add r0 (ext SI (trunc HI got16))))) 8674e98e3e1Schristos () 8684e98e3e1Schristos) 8694e98e3e1Schristos 8704e98e3e1Schristos(dni orhigotoffi "or high got offset immediate" (ALIAS) 8714e98e3e1Schristos "orhi $r1,$r0,$gotoffhi16" 8724e98e3e1Schristos (+ OP_ORHI r0 r1 gotoffhi16) 8734e98e3e1Schristos (set r1 (or r0 (sll SI gotoffhi16 16))) 8744e98e3e1Schristos () 8754e98e3e1Schristos) 8764e98e3e1Schristos 8774e98e3e1Schristos(dni addgotoff "add got offset" (ALIAS) 8784e98e3e1Schristos "addi $r1,$r0,$gotofflo16" 8794e98e3e1Schristos (+ OP_ADDI r0 r1 gotofflo16) 8804e98e3e1Schristos (set r1 (add r0 (ext SI (trunc HI gotofflo16)))) 8814e98e3e1Schristos () 8824e98e3e1Schristos) 8834e98e3e1Schristos 8844e98e3e1Schristos(dni swgotoff "store word got offset" (ALIAS) 8854e98e3e1Schristos "sw ($r0+$gotofflo16),$r1" 8864e98e3e1Schristos (+ OP_SW r0 r1 gotofflo16) 8874e98e3e1Schristos (set (mem SI (add r0 (ext SI (trunc HI gotofflo16)))) r1) 8884e98e3e1Schristos () 8894e98e3e1Schristos) 8904e98e3e1Schristos 8914e98e3e1Schristos(dni lwgotoff "load word got offset" (ALIAS) 8924e98e3e1Schristos "lw $r1,($r0+$gotofflo16)" 8934e98e3e1Schristos (+ OP_LW r0 r1 gotofflo16) 8944e98e3e1Schristos (set r1 (mem SI (add r0 (ext SI (trunc HI gotofflo16))))) 8954e98e3e1Schristos () 8964e98e3e1Schristos) 8974e98e3e1Schristos 8984e98e3e1Schristos(dni shgotoff "store half word got offset" (ALIAS) 8994e98e3e1Schristos "sh ($r0+$gotofflo16),$r1" 9004e98e3e1Schristos (+ OP_SH r0 r1 gotofflo16) 9014e98e3e1Schristos (set (mem HI (add r0 (ext SI (trunc HI gotofflo16)))) r1) 9024e98e3e1Schristos () 9034e98e3e1Schristos) 9044e98e3e1Schristos 9054e98e3e1Schristos(dni lhgotoff "load half word got offset" (ALIAS) 9064e98e3e1Schristos "lh $r1,($r0+$gotofflo16)" 9074e98e3e1Schristos (+ OP_LH r0 r1 gotofflo16) 9084e98e3e1Schristos (set r1 (ext SI (mem HI (add r0 (ext SI (trunc HI gotofflo16)))))) 9094e98e3e1Schristos () 9104e98e3e1Schristos) 9114e98e3e1Schristos 9124e98e3e1Schristos(dni lhugotoff "load half word got offset unsigned" (ALIAS) 9134e98e3e1Schristos "lhu $r1,($r0+$gotofflo16)" 9144e98e3e1Schristos (+ OP_LHU r0 r1 gotofflo16) 9154e98e3e1Schristos (set r1 (zext SI (mem HI (add r0 (ext SI (trunc HI gotofflo16)))))) 9164e98e3e1Schristos () 9174e98e3e1Schristos) 9184e98e3e1Schristos 9194e98e3e1Schristos(dni sbgotoff "store byte got offset" (ALIAS) 9204e98e3e1Schristos "sb ($r0+$gotofflo16),$r1" 9214e98e3e1Schristos (+ OP_SB r0 r1 gotofflo16) 9224e98e3e1Schristos (set (mem QI (add r0 (ext SI (trunc HI gotofflo16)))) r1) 9234e98e3e1Schristos () 9244e98e3e1Schristos) 9254e98e3e1Schristos 9264e98e3e1Schristos(dni lbgotoff "load byte got offset" (ALIAS) 9274e98e3e1Schristos "lb $r1,($r0+$gotofflo16)" 9284e98e3e1Schristos (+ OP_LB r0 r1 gotofflo16) 9294e98e3e1Schristos (set r1 (ext SI (mem QI (add r0 (ext SI (trunc HI gotofflo16)))))) 9304e98e3e1Schristos () 9314e98e3e1Schristos) 9324e98e3e1Schristos 9334e98e3e1Schristos(dni lbugotoff "load byte got offset unsigned" (ALIAS) 9344e98e3e1Schristos "lbu $r1,($r0+$gotofflo16)" 9354e98e3e1Schristos (+ OP_LBU r0 r1 gotofflo16) 9364e98e3e1Schristos (set r1 (zext SI (mem QI (add r0 (ext SI (trunc HI gotofflo16)))))) 9374e98e3e1Schristos () 9384e98e3e1Schristos) 939