1 ; Toshiba MeP Media Engine architecture description. -*- Scheme -*- 2 ; Copyright 2011 Free Software Foundation, Inc. 3 ; 4 ; Contributed by Red Hat Inc; 5 ; 6 ; This file is part of the GNU Binutils. 7 ; 8 ; This program is free software; you can redistribute it and/or modify 9 ; it under the terms of the GNU General Public License as published by 10 ; the Free Software Foundation; either version 3 of the License, or 11 ; (at your option) any later version. 12 ; 13 ; This program is distributed in the hope that it will be useful, 14 ; but WITHOUT ANY WARRANTY; without even the implied warranty of 15 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 ; GNU General Public License for more details. 17 ; 18 ; You should have received a copy of the GNU General Public License 19 ; along with this program; if not, write to the Free Software 20 ; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 21 ; MA 02110-1301, USA. 22 23 ; This file provides sample definitions for the UCI and DSP 24 ; instructions. It is incorporated into the overall description by 25 ; including it from a top-level file that includes all of the required 26 ; option files. 27 28 ; UCI option. 29 30 (define-pmacro mep-ext1-isa () (ISA ext_core1)) 31 32 33 ; uci instructions for ELFextension test 34 35 ; uci.elfext.1 $simm16 36 ; 1111_IIII_0000_0010 0001_iiii_iiii_iiii 37 ; simm16 = I[4:7]||i[20:31] 38 39 ; uci.elfext.2 $uimm16 40 ; 1111_IIII_0000_0010 0010_iiii_iiii_iiii 41 ; uimm16 = I[4:7]||i[20:31] 42 43 ; define simm16 44 (df f-uci_elfext_1-hi "uci_elfext_1 simm16 hi 4s7" (mep-ext1-isa) 4 4 INT #f #f) 45 (df f-uci_elfext_1-lo "uci_elfext_1 simm16 lo 20s31" (mep-ext1-isa) 20 12 UINT #f #f) 46 (define-multi-ifield 47 (name f-uci_elfext_1) 48 (comment "16-bits uci_elfext_ signed constant") 49 (attrs mep-ext1-isa) 50 (mode INT) 51 (subfields f-uci_elfext_1-hi f-uci_elfext_1-lo) 52 (insert (sequence () 53 (set (ifield f-uci_elfext_1-hi) (srl (ifield f-uci_elfext_1) 12)) 54 (set (ifield f-uci_elfext_1-lo) (and (ifield f-uci_elfext_1) #xfff)))) 55 (extract (set (ifield f-uci_elfext_1) 56 (or (sll (ifield f-uci_elfext_1-hi) 12) 57 (ifield f-uci_elfext_1-lo)))) 58 ) 59 (dpop uci_elfext_1simm16 "signed imm (16 bits)" (mep-ext1-isa) h-sint f-uci_elfext_1 "signed16") 60 61 ; define uimm16 62 (df f-uci_elfext_2-hi "uci_elfext_2 uimm16 hi 4u7" (mep-ext1-isa) 4 4 UINT #f #f) 63 (df f-uci_elfext_2-lo "uci_elfext_2 uimm16 lo 20u31" (mep-ext1-isa) 20 12 UINT #f #f) 64 (define-multi-ifield 65 (name f-uci_elfext_2) 66 (comment "16-bits uci_elfext_ unsigned constant") 67 (attrs mep-ext1-isa) 68 (mode UINT) 69 (subfields f-uci_elfext_2-hi f-uci_elfext_2-lo) 70 (insert (sequence () 71 (set (ifield f-uci_elfext_2-hi) (srl (ifield f-uci_elfext_2) 12)) 72 (set (ifield f-uci_elfext_2-lo) (and (ifield f-uci_elfext_2) #xfff)))) 73 (extract (set (ifield f-uci_elfext_2) 74 (or (sll (ifield f-uci_elfext_2-hi) 12) 75 (ifield f-uci_elfext_2-lo)))) 76 ) 77 (dpop uci_elfext_2uimm16 "unsigned imm (16 bits)" (mep-ext1-isa) h-uint f-uci_elfext_2 "unsigned16") 78 79 ; define sub-opcode 80 (df f-uci_elfext-sub "sub-opcode for uci_elfext instructions" (mep-ext1-isa) 16 4 UINT #f #f) 81 82 83 ; define instruction 84 (dni uci.elfext.1 "uci_elfext instruction 1" (OPTIONAL_UCI_INSN VOLATILE mep-ext1-isa) 85 "uci.elfext.1 $uci_elfext_1simm16" 86 (+ MAJ_15 (f-rm 0) (f-sub4 2) (f-uci_elfext-sub 1) uci_elfext_1simm16) 87 (c-call "check_option_uci" pc) 88 () 89 ) 90 91 ; define instruction 92 (dni uci.elfext.2 "uci_elfext instruction 1" (OPTIONAL_UCI_INSN VOLATILE mep-ext1-isa) 93 "uci.elfext.2 $uci_elfext_2uimm16" 94 (+ MAJ_15 (f-rm 0) (f-sub4 2) (f-uci_elfext-sub 2) uci_elfext_2uimm16) 95 (c-call "check_option_uci" pc) 96 () 97 ) 98 99 100 101 ;; some general samples 102 ; UCI option. 103 104 (dni uci "user defined instruction" (OPTIONAL_UCI_INSN mep-ext1-isa) 105 "uci $rn,$rm,$code16" 106 (+ MAJ_15 rn rm (f-sub4 2) code16) 107 (sequence () 108 (c-call "check_option_uci" pc) 109 (unimp "uci")) 110 ()) 111 112 ; DSP option. 113 114 (dni dsp "dsp instruction" (OPTIONAL_DSP_INSN mep-ext1-isa) 115 "dsp $rn,$rm,$code16" 116 (+ MAJ_15 rn rm (f-sub4 0) code16) 117 (sequence () 118 (c-call "check_option_dsp" pc) 119 (set pc (c-call USI "dsp_exception" pc))) 120 ()) 121