score-datadep.h revision 218822
1251881Speter/* score-datadep.h -- Score Instructions data dependency table 2251881Speter Copyright 2006 Free Software Foundation, Inc. 3251881Speter Contributed by: 4251881Speter Mei Ligang (ligang@sunnorth.com.cn) 5251881Speter Pei-Lin Tsai (pltsai@sunplus.com) 6251881Speter 7251881Speter This file is part of GAS, the GNU Assembler. 8251881Speter 9251881Speter GAS is free software; you can redistribute it and/or modify 10251881Speter it under the terms of the GNU General Public License as published by 11251881Speter the Free Software Foundation; either version 2, or (at your option) 12251881Speter any later version. 13251881Speter 14251881Speter GAS is distributed in the hope that it will be useful, 15251881Speter but WITHOUT ANY WARRANTY; without even the implied warranty of 16251881Speter MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17251881Speter GNU General Public License for more details. 18251881Speter 19251881Speter You should have received a copy of the GNU General Public License 20251881Speter along with GAS; see the file COPYING. If not, write to the Free 21251881Speter Software Foundation, Inc., 51 Franklin Street - Fifth Floor, 22251881Speter Boston, MA 02110-1301, USA. */ 23251881Speter 24251881Speter#ifndef SCORE_DATA_DEPENDENCY_H 25251881Speter#define SCORE_DATA_DEPENDENCY_H 26251881Speter 27251881Speter#define INSN_NAME_LEN 16 28251881Speter 29251881Speterenum insn_type_for_dependency 30251881Speter{ 31251881Speter D_pce, 32251881Speter D_cond_br, 33251881Speter D_cond_mv, 34251881Speter D_cached, 35251881Speter D_cachei, 36251881Speter D_ldst, 37251881Speter D_ldcombine, 38251881Speter D_mtcr, 39251881Speter D_mfcr, 40251881Speter D_mfsr, 41251881Speter D_mftlb, 42251881Speter D_mtptlb, 43251881Speter D_mtrtlb, 44251881Speter D_stlb, 45251881Speter D_all_insn 46251881Speter}; 47251881Speter 48251881Speterstruct insn_to_dependency 49251881Speter{ 50251881Speter char *insn_name; 51251881Speter enum insn_type_for_dependency type; 52251881Speter}; 53251881Speter 54251881Speterstruct data_dependency 55251881Speter{ 56251881Speter enum insn_type_for_dependency pre_insn_type; 57251881Speter char pre_reg[6]; 58251881Speter enum insn_type_for_dependency cur_insn_type; 59251881Speter char cur_reg[6]; 60251881Speter int bubblenum_7; 61251881Speter int bubblenum_5; 62251881Speter int warn_or_error; /* warning - 0; error - 1 */ 63251881Speter}; 64251881Speter 65251881Speterstatic const struct insn_to_dependency insn_to_dependency_table[] = 66251881Speter{ 67251881Speter /* pce instruction. */ 68251881Speter {"pce", D_pce}, 69251881Speter /* conditional branch instruction. */ 70251881Speter {"bcs", D_cond_br}, 71251881Speter {"bcc", D_cond_br}, 72251881Speter {"bgtu", D_cond_br}, 73251881Speter {"bleu", D_cond_br}, 74251881Speter {"beq", D_cond_br}, 75251881Speter {"bne", D_cond_br}, 76251881Speter {"bgt", D_cond_br}, 77251881Speter {"ble", D_cond_br}, 78251881Speter {"bge", D_cond_br}, 79251881Speter {"blt", D_cond_br}, 80251881Speter {"bmi", D_cond_br}, 81251881Speter {"bpl", D_cond_br}, 82251881Speter {"bvs", D_cond_br}, 83251881Speter {"bvc", D_cond_br}, 84251881Speter {"bcsl", D_cond_br}, 85251881Speter {"bccl", D_cond_br}, 86251881Speter {"bgtul", D_cond_br}, 87251881Speter {"bleul", D_cond_br}, 88251881Speter {"beql", D_cond_br}, 89251881Speter {"bnel", D_cond_br}, 90251881Speter {"bgtl", D_cond_br}, 91251881Speter {"blel", D_cond_br}, 92251881Speter {"bgel", D_cond_br}, 93251881Speter {"bltl", D_cond_br}, 94251881Speter {"bmil", D_cond_br}, 95251881Speter {"bpll", D_cond_br}, 96251881Speter {"bvsl", D_cond_br}, 97251881Speter {"bvcl", D_cond_br}, 98251881Speter {"bcs!", D_cond_br}, 99251881Speter {"bcc!", D_cond_br}, 100251881Speter {"bgtu!", D_cond_br}, 101251881Speter {"bleu!", D_cond_br}, 102251881Speter {"beq!", D_cond_br}, 103251881Speter {"bne!", D_cond_br}, 104251881Speter {"bgt!", D_cond_br}, 105251881Speter {"ble!", D_cond_br}, 106251881Speter {"bge!", D_cond_br}, 107251881Speter {"blt!", D_cond_br}, 108251881Speter {"bmi!", D_cond_br}, 109251881Speter {"bpl!", D_cond_br}, 110251881Speter {"bvs!", D_cond_br}, 111251881Speter {"bvc!", D_cond_br}, 112251881Speter {"brcs", D_cond_br}, 113251881Speter {"brcc", D_cond_br}, 114251881Speter {"brgtu", D_cond_br}, 115251881Speter {"brleu", D_cond_br}, 116251881Speter {"breq", D_cond_br}, 117251881Speter {"brne", D_cond_br}, 118251881Speter {"brgt", D_cond_br}, 119251881Speter {"brle", D_cond_br}, 120251881Speter {"brge", D_cond_br}, 121251881Speter {"brlt", D_cond_br}, 122251881Speter {"brmi", D_cond_br}, 123251881Speter {"brpl", D_cond_br}, 124251881Speter {"brvs", D_cond_br}, 125251881Speter {"brvc", D_cond_br}, 126251881Speter {"brcsl", D_cond_br}, 127251881Speter {"brccl", D_cond_br}, 128251881Speter {"brgtul", D_cond_br}, 129251881Speter {"brleul", D_cond_br}, 130251881Speter {"breql", D_cond_br}, 131251881Speter {"brnel", D_cond_br}, 132251881Speter {"brgtl", D_cond_br}, 133251881Speter {"brlel", D_cond_br}, 134251881Speter {"brgel", D_cond_br}, 135251881Speter {"brltl", D_cond_br}, 136251881Speter {"brmil", D_cond_br}, 137251881Speter {"brpll", D_cond_br}, 138251881Speter {"brvsl", D_cond_br}, 139251881Speter {"brvcl", D_cond_br}, 140251881Speter {"brcs!", D_cond_br}, 141251881Speter {"brcc!", D_cond_br}, 142251881Speter {"brgtu!", D_cond_br}, 143251881Speter {"brleu!", D_cond_br}, 144251881Speter {"breq!", D_cond_br}, 145251881Speter {"brne!", D_cond_br}, 146251881Speter {"brgt!", D_cond_br}, 147251881Speter {"brle!", D_cond_br}, 148251881Speter {"brge!", D_cond_br}, 149251881Speter {"brlt!", D_cond_br}, 150251881Speter {"brmi!", D_cond_br}, 151251881Speter {"brpl!", D_cond_br}, 152251881Speter {"brvs!", D_cond_br}, 153251881Speter {"brvc!", D_cond_br}, 154251881Speter {"brcsl!", D_cond_br}, 155251881Speter {"brccl!", D_cond_br}, 156251881Speter {"brgtul!", D_cond_br}, 157251881Speter {"brleul!", D_cond_br}, 158 {"breql!", D_cond_br}, 159 {"brnel!", D_cond_br}, 160 {"brgtl!", D_cond_br}, 161 {"brlel!", D_cond_br}, 162 {"brgel!", D_cond_br}, 163 {"brltl!", D_cond_br}, 164 {"brmil!", D_cond_br}, 165 {"brpll!", D_cond_br}, 166 {"brvsl!", D_cond_br}, 167 {"brvcl!", D_cond_br}, 168 /* conditional move instruction. */ 169 {"mvcs", D_cond_mv}, 170 {"mvcc", D_cond_mv}, 171 {"mvgtu", D_cond_mv}, 172 {"mvleu", D_cond_mv}, 173 {"mveq", D_cond_mv}, 174 {"mvne", D_cond_mv}, 175 {"mvgt", D_cond_mv}, 176 {"mvle", D_cond_mv}, 177 {"mvge", D_cond_mv}, 178 {"mvlt", D_cond_mv}, 179 {"mvmi", D_cond_mv}, 180 {"mvpl", D_cond_mv}, 181 {"mvvs", D_cond_mv}, 182 {"mvvc", D_cond_mv}, 183 /* move spectial instruction. */ 184 {"mtcr", D_mtcr}, 185 {"mftlb", D_mftlb}, 186 {"mtptlb", D_mtptlb}, 187 {"mtrtlb", D_mtrtlb}, 188 {"stlb", D_stlb}, 189 {"mfcr", D_mfcr}, 190 {"mfsr", D_mfsr}, 191 /* cache instruction. */ 192 {"cache 8", D_cached}, 193 {"cache 9", D_cached}, 194 {"cache 10", D_cached}, 195 {"cache 11", D_cached}, 196 {"cache 12", D_cached}, 197 {"cache 13", D_cached}, 198 {"cache 14", D_cached}, 199 {"cache 24", D_cached}, 200 {"cache 26", D_cached}, 201 {"cache 27", D_cached}, 202 {"cache 29", D_cached}, 203 {"cache 30", D_cached}, 204 {"cache 31", D_cached}, 205 {"cache 0", D_cachei}, 206 {"cache 1", D_cachei}, 207 {"cache 2", D_cachei}, 208 {"cache 3", D_cachei}, 209 {"cache 4", D_cachei}, 210 {"cache 16", D_cachei}, 211 {"cache 17", D_cachei}, 212 /* load/store instruction. */ 213 {"lb", D_ldst}, 214 {"lbu", D_ldst}, 215 {"lbu!", D_ldst}, 216 {"lbup!", D_ldst}, 217 {"lh", D_ldst}, 218 {"lhu", D_ldst}, 219 {"lh!", D_ldst}, 220 {"lhp!", D_ldst}, 221 {"lw", D_ldst}, 222 {"lw!", D_ldst}, 223 {"lwp!", D_ldst}, 224 {"sb", D_ldst}, 225 {"sb!", D_ldst}, 226 {"sbp!", D_ldst}, 227 {"sh", D_ldst}, 228 {"sh!", D_ldst}, 229 {"shp!", D_ldst}, 230 {"sw", D_ldst}, 231 {"sw!", D_ldst}, 232 {"swp!", D_ldst}, 233 {"alw", D_ldst}, 234 {"asw", D_ldst}, 235 {"push!", D_ldst}, 236 {"pushhi!", D_ldst}, 237 {"pop!", D_ldst}, 238 {"pophi!", D_ldst}, 239 {"ldc1", D_ldst}, 240 {"ldc2", D_ldst}, 241 {"ldc3", D_ldst}, 242 {"stc1", D_ldst}, 243 {"stc2", D_ldst}, 244 {"stc3", D_ldst}, 245 {"scb", D_ldst}, 246 {"scw", D_ldst}, 247 {"sce", D_ldst}, 248 /* load combine instruction. */ 249 {"lcb", D_ldcombine}, 250 {"lcw", D_ldcombine}, 251 {"lce", D_ldcombine}, 252}; 253 254static const struct data_dependency data_dependency_table[] = 255{ 256 /* Condition register. */ 257 {D_mtcr, "cr1", D_pce, "", 2, 1, 1}, 258 {D_mtcr, "cr1", D_cond_br, "", 1, 0, 1}, 259 {D_mtcr, "cr1", D_cond_mv, "", 1, 0, 1}, 260 /* Status regiser. */ 261 {D_mtcr, "cr0", D_all_insn, "", 5, 4, 0}, 262 /* CCR regiser. */ 263 {D_mtcr, "cr4", D_all_insn, "", 6, 5, 0}, 264 /* EntryHi/EntryLo register. */ 265 {D_mftlb, "", D_mtptlb, "", 1, 1, 1}, 266 {D_mftlb, "", D_mtrtlb, "", 1, 1, 1}, 267 {D_mftlb, "", D_stlb, "", 1, 1,1}, 268 {D_mftlb, "", D_mfcr, "cr11", 1, 1, 1}, 269 {D_mftlb, "", D_mfcr, "cr12", 1, 1, 1}, 270 /* Index register. */ 271 {D_stlb, "", D_mtptlb, "", 1, 1, 1}, 272 {D_stlb, "", D_mftlb, "", 1, 1, 1}, 273 {D_stlb, "", D_mfcr, "cr8", 2, 2, 1}, 274 /* Cache. */ 275 {D_cached, "", D_ldst, "", 1, 1, 0}, 276 {D_cached, "", D_ldcombine, "", 1, 1, 0}, 277 {D_cachei, "", D_all_insn, "", 5, 4, 0}, 278 /* Load combine. */ 279 {D_ldcombine, "", D_mfsr, "sr1", 3, 3, 1}, 280}; 281 282#endif 283