Home | History | Annotate | Download | only in cpu
      1 ; Copyright 2011 Free Software Foundation, Inc.
      2 ;
      3 ; Contributed by Red Hat Inc;
      4 ;
      5 ; This file is part of the GNU Binutils.
      6 ;
      7 ; This program is free software; you can redistribute it and/or modify
      8 ; it under the terms of the GNU General Public License as published by
      9 ; the Free Software Foundation; either version 3 of the License, or
     10 ; (at your option) any later version.
     11 ;
     12 ; This program is distributed in the hope that it will be useful,
     13 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 ; GNU General Public License for more details.
     16 ;
     17 ; You should have received a copy of the GNU General Public License
     18 ; along with this program; if not, write to the Free Software
     19 ; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     20 ; MA 02110-1301, USA.
     21 
     22 ; Insns introduced for the MeP-c5 core
     23 ;
     24 
     25 (dnf f-c5n4     "extended field"     (all-mep-core-isas)   16  4)
     26 (dnf f-c5n5     "extended field"     (all-mep-core-isas)   20  4)
     27 (dnf f-c5n6     "extended field"     (all-mep-core-isas)   24  4)
     28 (dnf f-c5n7     "extended field"     (all-mep-core-isas)   28  4)
     29 (dnf f-rl5      "register l c5"      (all-mep-core-isas)   20  4)
     30 (df  f-12s20    "extended field"     (all-mep-core-isas)   20  12  INT #f #f)
     31 
     32 (dnop rl5       "register Rl c5"     (all-mep-core-isas) h-gpr   f-rl5)
     33 (dnop cdisp12   "copro addend (12 bits)" (all-mep-core-isas) h-sint  f-12s20)
     34 
     35 (dnci stcb_r "store in control bus space" (VOLATILE (MACH c5))
     36      "stcb $rn,($rma)"
     37      (+ MAJ_7 rn rma (f-sub4 12))
     38      (c-call VOID "do_stcb" rn (and rma #xffff))
     39      ((mep (unit u-use-gpr (in usereg rn))
     40 	   (unit u-use-gpr (in usereg rma))
     41 	   (unit u-exec)
     42 	   (unit u-stcb))))
     43 
     44 (dnci ldcb_r "load from control bus space" (VOLATILE (MACH c5) (LATENCY 3))
     45      "ldcb $rn,($rma)"
     46      (+ MAJ_7 rn rma (f-sub4 13))
     47      (set rn (c-call SI "do_ldcb" (and rma #xffff)))
     48       ((mep (unit u-use-gpr (in usereg rma))
     49 	    (unit u-ldcb)
     50 	    (unit u-exec)
     51 	    (unit u-ldcb-gpr (out loadreg rn)))))
     52 
     53 (dnci pref "cache prefetch" ((MACH c5) VOLATILE)
     54      "pref $cimm4,($rma)"
     55      (+ MAJ_7 cimm4 rma (f-sub4 5))
     56      (sequence ()
     57 	       (c-call VOID "check_option_dcache" pc)
     58 	       (c-call VOID "do_cache_prefetch" cimm4 rma pc))
     59      ((mep (unit u-use-gpr (in usereg rma))
     60 	   (unit u-exec))))
     61 
     62 (dnci prefd "cache prefetch" ((MACH c5) VOLATILE)
     63      "pref $cimm4,$sdisp16($rma)"
     64      (+ MAJ_15 cimm4 rma (f-sub4 3) sdisp16)
     65      (sequence ()
     66 	       (c-call VOID "check_option_dcache" pc)
     67 	       (c-call VOID "do_cache_prefetch" cimm4 (add INT rma (ext SI sdisp16)) pc))
     68      ((mep (unit u-use-gpr (in usereg rma))
     69 	   (unit u-exec))))
     70 
     71 (dnci casb3 "compare and swap byte 3" ((MACH c5) VOLATILE OPTIONAL_BIT_INSN)
     72       "casb3 $rl5,$rn,($rm)"
     73       (+ MAJ_15 rn rm (f-sub4 #x1) (f-c5n4 #x2) rl5 (f-c5n6 #x0) (f-c5n7 #x0))
     74       (sequence ()
     75 		(c-call VOID "do_casb3" (index-of rl5) rn rm pc)
     76 		(set rl5 rl5)
     77 		)
     78       ((mep (unit u-use-gpr (in usereg rl5))
     79 	    (unit u-load-gpr (out loadreg rl5))
     80 	    (unit u-exec))))
     81 
     82 (dnci cash3 "compare and swap halfword 3" ((MACH c5) VOLATILE OPTIONAL_BIT_INSN)
     83       "cash3 $rl5,$rn,($rm)"
     84       (+ MAJ_15 rn rm (f-sub4 #x1) (f-c5n4 #x2) rl5 (f-c5n6 #x0) (f-c5n7 #x1))
     85       (sequence ()
     86 		(c-call VOID "do_cash3" (index-of rl5) rn rm pc)
     87 		(set rl5 rl5)
     88 		)
     89       ((mep (unit u-use-gpr (in usereg rl5))
     90 	    (unit u-load-gpr (out loadreg rl5))
     91 	    (unit u-exec))))
     92 
     93 (dnci casw3 "compare and swap word 3" ((MACH c5) VOLATILE OPTIONAL_BIT_INSN)
     94       "casw3 $rl5,$rn,($rm)"
     95       (+ MAJ_15 rn rm (f-sub4 #x1) (f-c5n4 #x2) rl5 (f-c5n6 #x0) (f-c5n7 #x2))
     96       (sequence ()
     97 		(c-call VOID "do_casw3" (index-of rl5) rn rm pc)
     98 		(set rl5 rl5)
     99 		)
    100       ((mep (unit u-use-gpr (in usereg rl5))
    101 	    (unit u-load-gpr (out loadreg rl5))
    102 	    (unit u-exec))))
    103 
    104 
    105 
    106 (dnci sbcp "store byte coprocessor" (OPTIONAL_CP_INSN (STALL STORE) (MACH c5))
    107      "sbcp $crn,$cdisp12($rma)"
    108      (+ MAJ_15 crn rma (f-sub4 6) (f-ext4 0) cdisp12)
    109      (sequence ()
    110 	       (c-call "check_option_cp" pc)
    111 	       (c-call VOID "check_write_to_text" (add rma (ext SI cdisp12)))
    112 	       (set (mem QI (add rma (ext SI cdisp12))) (and crn #xff)))
    113      ((mep (unit u-use-gpr (in usereg rma))
    114 	   (unit u-exec))))
    115 
    116 (dnci lbcp "load byte coprocessor" (OPTIONAL_CP_INSN (STALL STORE) (MACH c5))
    117      "lbcp $crn,$cdisp12($rma)"
    118      (+ MAJ_15 crn rma (f-sub4 6) (f-ext4 4) cdisp12)
    119      (sequence ()
    120 	       (c-call "check_option_cp" pc)
    121 	       (set crn (ext SI (mem QI (add rma (ext SI cdisp12))))))
    122      ((mep (unit u-use-gpr (in usereg rma))
    123 	   (unit u-exec))))
    124 
    125 (dnci lbucp "load byte coprocessor" (OPTIONAL_CP_INSN (STALL STORE) (MACH c5))
    126      "lbucp $crn,$cdisp12($rma)"
    127      (+ MAJ_15 crn rma (f-sub4 6) (f-ext4 12) cdisp12)
    128      (sequence ()
    129 	       (c-call "check_option_cp" pc)
    130 	       (set crn (zext SI (mem QI (add rma (ext SI cdisp12))))))
    131      ((mep (unit u-use-gpr (in usereg rma))
    132 	   (unit u-exec))))
    133 
    134 
    135 (dnci shcp "store half-word coprocessor" (OPTIONAL_CP_INSN (STALL STORE) (MACH c5))
    136      "shcp $crn,$cdisp12($rma)"
    137      (+ MAJ_15 crn rma (f-sub4 6) (f-ext4 1) cdisp12)
    138      (sequence ()
    139 	       (c-call "check_option_cp" pc)
    140 	       (c-call VOID "check_write_to_text" (add rma (ext SI cdisp12)))
    141 	       (set (mem HI (add rma (ext SI cdisp12))) (and crn #xffff)))
    142      ((mep (unit u-use-gpr (in usereg rma))
    143 	   (unit u-exec))))
    144 
    145 (dnci lhcp "load half-word coprocessor" (OPTIONAL_CP_INSN (STALL STORE) (MACH c5))
    146      "lhcp $crn,$cdisp12($rma)"
    147      (+ MAJ_15 crn rma (f-sub4 6) (f-ext4 5) cdisp12)
    148      (sequence ()
    149 	       (c-call "check_option_cp" pc)
    150 	       (set crn (ext SI (mem HI (add rma (ext SI cdisp12))))))
    151      ((mep (unit u-use-gpr (in usereg rma))
    152 	   (unit u-exec))))
    153 
    154 (dnci lhucp "load half-word coprocessor" (OPTIONAL_CP_INSN (STALL STORE) (MACH c5))
    155      "lhucp $crn,$cdisp12($rma)"
    156      (+ MAJ_15 crn rma (f-sub4 6) (f-ext4 13) cdisp12)
    157      (sequence ()
    158 	       (c-call "check_option_cp" pc)
    159 	       (set crn (zext SI (mem HI (add rma (ext SI cdisp12))))))
    160      ((mep (unit u-use-gpr (in usereg rma))
    161 	   (unit u-exec))))
    162 
    163 
    164 (dnci lbucpa "load byte coprocessor" (OPTIONAL_CP_INSN (STALL LOAD) (MACH c5))
    165      "lbucpa $crn,($rma+),$cdisp10"
    166      (+ MAJ_15 crn rma (f-sub4 5) (f-ext4 #xC) (f-ext62 #x0) cdisp10)
    167      (sequence ()
    168 	       (c-call "check_option_cp" pc)
    169 	       (set crn (zext SI (mem QI rma)))
    170 	       (set rma (add rma cdisp10)))
    171      ((mep (unit u-use-gpr (in usereg rma))
    172 	   (unit u-exec))))
    173 
    174 (dnci lhucpa "load half-word coprocessor" (OPTIONAL_CP_INSN (STALL LOAD) (MACH c5))
    175      "lhucpa $crn,($rma+),$cdisp10a2"
    176      (+ MAJ_15 crn rma (f-sub4 5) (f-ext4 #xD) (f-ext62 #x0) cdisp10a2)
    177      (sequence ()
    178 	       (c-call "check_option_cp" pc)
    179 	       (set crn (zext SI (mem HI (and rma (inv SI 1)))))
    180 	       (set rma (add rma (ext SI cdisp10a2))))
    181      ((mep (unit u-use-gpr (in usereg rma))
    182 	   (unit u-exec))))
    183 
    184 (dnci lbucpm0 "lbucpm0" (OPTIONAL_CP_INSN (MACH c5))
    185      "lbucpm0 $crn,($rma+),$cdisp10"
    186      (+ MAJ_15 crn rma (f-sub4 5) (f-ext4 #xc) (f-ext62 #x2) cdisp10)
    187      (sequence ()
    188 	       (c-call "check_option_cp" pc)
    189 	       (set crn (zext SI (mem QI rma)))
    190 	       (set rma (mod0 cdisp10)))
    191      ((mep (unit u-use-gpr (in usereg rma))
    192 	   (unit u-exec))))
    193 
    194 (dnci lhucpm0 "lhucpm0" (OPTIONAL_CP_INSN (MACH c5))
    195      "lhucpm0 $crn,($rma+),$cdisp10a2"
    196      (+ MAJ_15 crn rma (f-sub4 5) (f-ext4 #xd) (f-ext62 #x2) cdisp10a2)
    197      (sequence ()
    198 	       (c-call "check_option_cp" pc)
    199 	       (set crn (zext SI (mem HI (and rma (inv SI 1)))))
    200 	       (set rma (mod0 cdisp10a2)))
    201      ((mep (unit u-use-gpr (in usereg rma))
    202 	   (unit u-exec))))
    203 
    204 (dnci lbucpm1 "lbucpm1" (OPTIONAL_CP_INSN (MACH c5))
    205      "lbucpm1 $crn,($rma+),$cdisp10"
    206      (+ MAJ_15 crn rma (f-sub4 5) (f-ext4 #xc) (f-ext62 #x3) cdisp10)
    207      (sequence ()
    208 	       (c-call "check_option_cp" pc)
    209 	       (set crn (zext SI (mem QI rma)))
    210 	       (set rma (mod1 cdisp10)))
    211      ((mep (unit u-use-gpr (in usereg rma))
    212 	   (unit u-exec))))
    213 
    214 (dnci lhucpm1 "lhucpm1" (OPTIONAL_CP_INSN (MACH c5))
    215      "lhucpm1 $crn,($rma+),$cdisp10a2"
    216      (+ MAJ_15 crn rma (f-sub4 5) (f-ext4 #xd) (f-ext62 #x3) cdisp10a2)
    217      (sequence ()
    218 	       (c-call "check_option_cp" pc)
    219 	       (set crn (zext SI (mem HI (and rma (inv SI 1)))))
    220 	       (set rma (mod1 cdisp10a2)))
    221      ((mep (unit u-use-gpr (in usereg rma))
    222 	   (unit u-exec))))
    223 
    224 (dnci uci "uci" ((MACH c5) VOLATILE)
    225      "uci $rn,$rm,$uimm16"
    226      (+ MAJ_15 rn rm (f-sub4 2) simm16)
    227      (set rn (c-call SI "do_UCI" rn rm (zext SI uimm16) pc))
    228      ((mep (unit u-use-gpr (in usereg rm))
    229 	   (unit u-use-gpr (in usereg rn))
    230 	   (unit u-exec))))
    231 
    232 (dnf f-c5-rnm     "register n/m"              (all-mep-isas)    4  8)
    233 (dnf f-c5-rm      "register m"              (all-mep-isas)    8  4)
    234 (df  f-c5-16u16  "general 16-bit u-val"    (all-mep-isas) 16 16 UINT #f #f)
    235 
    236 (dnmf f-c5-rmuimm20 "20-bit immediate in Rm/Imm16" (all-mep-isas) UINT
    237       (f-c5-rm f-c5-16u16)
    238       (sequence () ; insert
    239 		(set (ifield f-c5-rm)    (srl (ifield f-c5-rmuimm20) 16))
    240 		(set (ifield f-c5-16u16) (and (ifield f-c5-rmuimm20) #xffff))
    241 		)
    242       (sequence () ; extract
    243 		(set (ifield f-c5-rmuimm20) (or (ifield f-c5-16u16)
    244 						(sll (ifield f-c5-rm) 16)))
    245 		)
    246       )
    247 (dnop c5rmuimm20 "20-bit immediate in rm and imm16" (all-mep-core-isas) h-uint f-c5-rmuimm20)
    248 
    249 (dnmf f-c5-rnmuimm24 "24-bit immediate in Rm/Imm16" (all-mep-isas) UINT
    250       (f-c5-rnm f-c5-16u16)
    251       (sequence () ; insert
    252 		(set (ifield f-c5-rnm)    (srl (ifield f-c5-rnmuimm24) 16))
    253 		(set (ifield f-c5-16u16) (and (ifield f-c5-rnmuimm24) #xffff))
    254 		)
    255       (sequence () ; extract
    256 		(set (ifield f-c5-rnmuimm24) (or (ifield f-c5-16u16)
    257 						(sll (ifield f-c5-rnm) 16)))
    258 		)
    259       )
    260 (dnop c5rnmuimm24 "24-bit immediate in rn, rm, and imm16" (all-mep-core-isas) h-uint f-c5-rnmuimm24)
    261 
    262 (dnci dsp "dsp" ((MACH c5) VOLATILE)
    263      "dsp $rn,$rm,$uimm16"
    264      (+ MAJ_15 rn rm (f-sub4 0) uimm16)
    265      (set rn (c-call SI "do_DSP" rn rm (zext SI uimm16) pc))
    266      ((mep (unit u-use-gpr (in usereg rm))
    267 	   (unit u-use-gpr (in usereg rn))
    268 	   (unit u-exec))))
    269 
    270 (dnci dsp0 "dsp0" ((MACH c5) VOLATILE NO-DIS ALIAS)
    271      "dsp0 $c5rnmuimm24"
    272      (+ MAJ_15 c5rnmuimm24 (f-sub4 0))
    273      (c-call VOID "do_DSP" (zext SI c5rnmuimm24) pc)
    274      ((mep (unit u-exec))))
    275 
    276 (dnci dsp1 "dsp1" ((MACH c5) VOLATILE NO-DIS ALIAS)
    277      "dsp1 $rn,$c5rmuimm20"
    278      (+ MAJ_15 rn (f-sub4 0) c5rmuimm20)
    279      (set rn (c-call SI "do_DSP" rn (zext SI c5rmuimm20) pc))
    280      ((mep (unit u-use-gpr (in usereg rn))
    281 	   (unit u-exec))))
    282