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