1;; Copyright (C) 2012-2020 Free Software Foundation, Inc. 2;; 3;; This file is part of GCC. 4;; 5;; GCC is free software; you can redistribute it and/or modify 6;; it under the terms of the GNU General Public License as published by 7;; the Free Software Foundation; either version 3, or (at your option) 8;; any later version. 9;; 10;; GCC is distributed in the hope that it will be useful, 11;; but WITHOUT ANY WARRANTY; without even the implied warranty of 12;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13;; GNU General Public License for more details. 14;; 15;; You should have received a copy of the GNU General Public License 16;; along with GCC; see the file COPYING3. If not see 17;; <http://www.gnu.org/licenses/>. 18 19;; AMD btver2 scheduling 20 21;; Instructions decoded are that are classifed as direct (fast path single), 22;; double (fast path double) and vector instructions. 23;; Direct instrucions are decoded and convereted into 1 cop 24;; Double instrucions are decoded and converetd into 2 cops 25;; Vector instrucions are microcoded and they generated converted to 26;; 3 or more cops. 27 28(define_attr "btver2_decode" "direct,vector,double" 29 (const_string "direct")) 30 31(define_attr "btver2_sse_attr" "other,rcp,sqrt,maxmin" 32 (const_string "other")) 33 34(define_automaton "btver2,btver2_int,btver2_agu,btver2_fp") 35 36;; Decoder decodes up to two insns (2 fastpath singles) or 37;;(2 fastpath doubles) or combination of both at a cycle. 38;; In case of vector (microded) instruction decoder decodes only one insn 39;; at a cycle .To model that we have 2 "decoder" units. 40 41(define_cpu_unit "btver2-decode0" "btver2") 42(define_cpu_unit "btver2-decode1" "btver2") 43 44;; "me" unit converts the decoded insn into cops. 45;; It can generate upto 2 cops from two fast path singles in cycle x+1, 46;; to model we have two "mes". In case of fast path double it converts 47;; them to 2 cops in cycle x+1. Vector instructions are modelled to block 48;; all decoder units. 49 50(define_cpu_unit "me0" "btver2") 51(define_cpu_unit "me1" "btver2") 52 53(define_reservation "btver2-direct" "(btver2-decode0|btver2-decode1),(me0|me1)") 54 55(define_reservation "btver2-double" "(btver2-decode0|btver2-decode1),(me0+me1)") 56 57(define_reservation "btver2-vector" "(btver2-decode0+btver2-decode1),(me0+me1)") 58 59;; Integer operations 60;; There are 2 ALU pipes 61 62(define_cpu_unit "btver2-ieu0" "btver2_int") 63(define_cpu_unit "btver2-ieu1" "btver2_int") 64 65;; There are 2 AGU pipes one for load and one for store. 66 67(define_cpu_unit "btver2-load" "btver2_agu") 68(define_cpu_unit "btver2-store" "btver2_agu") 69 70;; ALU operations can take place in ALU pipe0 or pipe1. 71(define_reservation "btver2-alu" "(btver2-ieu0|btver2-ieu1)") 72 73;; MUL and DIV operations can take place in to ALU pipe1. 74(define_reservation "btver2-mul" "btver2-ieu1") 75(define_reservation "btver2-div" "btver2-ieu1") 76 77;; vectorpath (microcoded) instructions are single issue instructions. 78;; So, they occupy all the integer units. 79(define_reservation "btver2-ivector" "btver2-ieu0+btver2-ieu1+ 80 btver2-load+btver2-store") 81 82;;Floating point pipes. 83(define_cpu_unit "btver2-fp0" "btver2_fp") 84(define_cpu_unit "btver2-fp1" "btver2_fp") 85 86(define_reservation "btver2-fpa" "btver2-fp0") 87(define_reservation "btver2-vimul" "btver2-fp0") 88(define_reservation "btver2-valu" "btver2-fp0|btver2-fp1") 89(define_reservation "btver2-stc" "btver2-fp1") 90(define_reservation "btver2-fpm" "btver2-fp1") 91 92;; vectorpath (microcoded) instructions are single issue instructions. 93;; So, they occupy all the fp units. 94(define_reservation "btver2-fvector" "btver2-fp0+btver2-fp1+ 95 btver2-load+btver2-store") 96 97;; Call instruction 98(define_insn_reservation "btver2_call" 2 99 (and (eq_attr "cpu" "btver2") 100 (eq_attr "type" "call,callv")) 101 "btver2-double,btver2-load") 102 103;; General instructions 104;; 105 106(define_insn_reservation "btver2_push_mem" 4 107 (and (eq_attr "cpu" "btver2") 108 (and (eq_attr "memory" "load") 109 (eq_attr "type" "push"))) 110 "btver2-direct,btver2-load,btver2-alu") 111 112(define_insn_reservation "btver2_push" 1 113 (and (eq_attr "cpu" "btver2") 114 (eq_attr "type" "push")) 115 "btver2-direct,btver2-alu") 116 117(define_insn_reservation "btver2_pop_mem" 4 118 (and (eq_attr "cpu" "btver2") 119 (and (eq_attr "memory" "load") 120 (eq_attr "type" "pop"))) 121 "btver2-direct,btver2-load,btver2-alu") 122 123(define_insn_reservation "btver2_pop" 1 124 (and (eq_attr "cpu" "btver2") 125 (eq_attr "type" "pop")) 126 "btver2-direct,btver2-alu") 127 128(define_insn_reservation "btver2_leave" 3 129 (and (eq_attr "cpu" "btver2") 130 (eq_attr "type" "leave")) 131 "btver2-double,btver2-alu") 132 133(define_insn_reservation "btver2_lea" 1 134 (and (eq_attr "cpu" "btver2") 135 (eq_attr "type" "lea")) 136 "btver2-direct,btver2-alu") 137 138;; Integer 139(define_insn_reservation "btver2_imul_DI" 6 140 (and (eq_attr "cpu" "btver2") 141 (and (eq_attr "type" "imul") 142 (and (eq_attr "mode" "DI") 143 (eq_attr "memory" "none,unknown")))) 144 "btver2-direct,btver2-mul*4") 145 146(define_insn_reservation "btver2_imul" 3 147 (and (eq_attr "cpu" "btver2") 148 (and (eq_attr "type" "imul") 149 (eq_attr "memory" "none,unknown"))) 150 "btver2-direct,btver2-mul") 151 152(define_insn_reservation "btver2_imul_mem_DI" 9 153 (and (eq_attr "cpu" "btver2") 154 (and (eq_attr "type" "imul") 155 (and (eq_attr "mode" "DI") 156 (eq_attr "memory" "load,both")))) 157 "btver2-direct,btver2-load,btver2-mul*4") 158 159(define_insn_reservation "btver2_imul_mem" 6 160 (and (eq_attr "cpu" "btver2") 161 (and (eq_attr "type" "imul") 162 (eq_attr "memory" "load,both"))) 163 "btver2-direct,btver2-load,btver2-mul") 164 165(define_insn_reservation "btver2_idiv_DI" 41 166 (and (eq_attr "cpu" "btver2") 167 (and (eq_attr "type" "idiv") 168 (and (eq_attr "mode" "DI") 169 (eq_attr "memory" "none,unknown")))) 170 "btver2-double,btver2-div") 171 172(define_insn_reservation "btver2_idiv_mem_DI" 44 173 (and (eq_attr "cpu" "btver2") 174 (and (eq_attr "type" "idiv") 175 (and (eq_attr "mode" "DI") 176 (eq_attr "memory" "load")))) 177 "btver2-double,btver2-load,btver2-div") 178 179(define_insn_reservation "btver2_idiv_SI" 25 180 (and (eq_attr "cpu" "btver2") 181 (and (eq_attr "type" "idiv") 182 (and (eq_attr "mode" "SI") 183 (eq_attr "memory" "none,unknown")))) 184 "btver2-double,btver2-div*25") 185 186(define_insn_reservation "btver2_idiv_mem_SI" 28 187 (and (eq_attr "cpu" "btver2") 188 (and (eq_attr "type" "idiv") 189 (and (eq_attr "mode" "SI") 190 (eq_attr "memory" "load")))) 191 "btver2-double,btver2-load,btver2-div*25") 192 193(define_insn_reservation "btver2_idiv_HI" 17 194 (and (eq_attr "cpu" "btver2") 195 (and (eq_attr "type" "idiv") 196 (and (eq_attr "mode" "HI") 197 (eq_attr "memory" "none,unknown")))) 198 "btver2-double,btver2-div*17") 199 200(define_insn_reservation "btver2_idiv_mem_HI" 20 201 (and (eq_attr "cpu" "btver2") 202 (and (eq_attr "type" "idiv") 203 (and (eq_attr "mode" "HI") 204 (eq_attr "memory" "load")))) 205 "btver2-double,btver2-load,btver2-div*17") 206 207(define_insn_reservation "btver2_idiv_QI" 12 208 (and (eq_attr "cpu" "btver2") 209 (and (eq_attr "type" "idiv") 210 (and (eq_attr "mode" "SI") 211 (eq_attr "memory" "none,unknown")))) 212 "btver2-direct,btver2-div*12") 213 214(define_insn_reservation "btver2_idiv_mem_QI" 15 215 (and (eq_attr "cpu" "btver2") 216 (and (eq_attr "type" "idiv") 217 (and (eq_attr "mode" "SI") 218 (eq_attr "memory" "load")))) 219 "btver2-direct,btver2-load,btver2-div*12") 220 221(define_insn_reservation "btver2_str" 7 222 (and (eq_attr "cpu" "btver2") 223 (and (eq_attr "type" "str") 224 (eq_attr "memory" "load,both,store"))) 225 "btver2-vector,btver2-ivector") 226 227(define_insn_reservation "btver2_idirect_loadmov" 4 228 (and (eq_attr "cpu" "btver2") 229 (and (eq_attr "type" "imov") 230 (eq_attr "memory" "load"))) 231 "btver2-direct,btver2-load,btver2-alu") 232 233(define_insn_reservation "btver2_idirect_load" 4 234 (and (eq_attr "cpu" "btver2") 235 (and (eq_attr "bdver1_decode" "direct") 236 (and (eq_attr "unit" "integer,unknown") 237 (eq_attr "memory" "load")))) 238 "btver2-direct,btver2-load,btver2-alu") 239 240(define_insn_reservation "btver2_idirect_movstore" 4 241 (and (eq_attr "cpu" "btver2") 242 (and (eq_attr "type" "imov") 243 (eq_attr "memory" "store"))) 244 "btver2-direct,btver2-alu,btver2-store") 245 246(define_insn_reservation "btver2_idirect_both" 4 247 (and (eq_attr "cpu" "btver2") 248 (and (eq_attr "bdver1_decode" "direct") 249 (and (eq_attr "unit" "integer,unknown") 250 (eq_attr "memory" "both")))) 251 "btver2-direct,btver2-load,btver2-alu,btver2-store") 252 253(define_insn_reservation "btver2_idirect_store" 4 254 (and (eq_attr "cpu" "btver2") 255 (and (eq_attr "bdver1_decode" "direct") 256 (and (eq_attr "unit" "integer,unknown") 257 (eq_attr "memory" "store")))) 258 "btver2-direct,btver2-alu,btver2-store") 259 260;; Other integer instrucions 261(define_insn_reservation "btver2_idirect" 1 262 (and (eq_attr "cpu" "btver2") 263 (and (eq_attr "btver2_decode" "direct") 264 (and (eq_attr "unit" "integer,unknown") 265 (eq_attr "memory" "none,unknown")))) 266 "btver2-direct,btver2-alu") 267 268;; Floating point instructions 269(define_insn_reservation "btver2_fldxf" 19 270 (and (eq_attr "cpu" "btver2") 271 (and (eq_attr "type" "fmov") 272 (and (eq_attr "memory" "load") 273 (eq_attr "mode" "XF")))) 274 "btver2-vector,btver2-load,btver2-fvector*5") 275 276(define_insn_reservation "btver2_fld" 11 277 (and (eq_attr "cpu" "btver2") 278 (and (eq_attr "type" "fmov") 279 (eq_attr "memory" "load"))) 280 "btver2-direct,btver2-load,(btver2-fp0|btver2-fp1)") 281 282(define_insn_reservation "btver2_fstxf" 24 283 (and (eq_attr "cpu" "btver2") 284 (and (eq_attr "type" "fmov") 285 (and (eq_attr "memory" "both") 286 (eq_attr "mode" "XF")))) 287 "btver2-vector,btver2-fvector*9,btver2-store") 288 289(define_insn_reservation "btver2_fst" 11 290 (and (eq_attr "cpu" "btver2") 291 (and (eq_attr "type" "fmov") 292 (eq_attr "memory" "store,both"))) 293 "btver2-direct,btver2-fp1,btver2-store") 294 295(define_insn_reservation "btver2_fist" 9 296 (and (eq_attr "cpu" "btver2") 297 (eq_attr "type" "fistp,fisttp")) 298 "btver2-direct,btver2-load,btver2-fp1") 299 300(define_insn_reservation "btver2_fmov" 2 301 (and (eq_attr "cpu" "btver2") 302 (eq_attr "type" "fmov")) 303 "btver2-direct,(btver2-fp0|btver2-fp1)") 304 305(define_insn_reservation "btver2_fadd_load" 8 306 (and (eq_attr "cpu" "btver2") 307 (and (eq_attr "type" "fop") 308 (eq_attr "memory" "load"))) 309 "btver2-direct,btver2-load,btver2-fp0") 310 311(define_insn_reservation "btver2_fadd" 3 312 (and (eq_attr "cpu" "btver2") 313 (eq_attr "type" "fop")) 314 "btver2-direct,btver2-fp0") 315 316(define_insn_reservation "btver2_fmul_load" 10 317 (and (eq_attr "cpu" "btver2") 318 (and (eq_attr "type" "fmul") 319 (eq_attr "memory" "load"))) 320 "btver2-direct,btver2-load,btver2-fp1*3") 321 322(define_insn_reservation "btver2_fmul" 5 323 (and (eq_attr "cpu" "btver2") 324 (eq_attr "type" "fmul")) 325 "btver2-direct,(btver2-fp1*3)") 326 327(define_insn_reservation "btver2_fsgn" 2 328 (and (eq_attr "cpu" "btver2") 329 (eq_attr "type" "fsgn")) 330 "btver2-direct,btver2-fp1*2") 331 332(define_insn_reservation "btver2_fdiv_load" 24 333 (and (eq_attr "cpu" "btver2") 334 (and (eq_attr "type" "fdiv") 335 (eq_attr "memory" "load"))) 336 "btver2-direct,btver2-load,btver2-fp1*19") 337 338(define_insn_reservation "btver2_fdiv" 19 339 (and (eq_attr "cpu" "btver2") 340 (eq_attr "type" "fdiv")) 341 "btver2-direct,btver2-fp1*19") 342 343(define_insn_reservation "btver2_fcmov_load" 12 344 (and (eq_attr "cpu" "btver2") 345 (and (eq_attr "type" "fcmov") 346 (eq_attr "memory" "load"))) 347 "btver2-vector,btver2-load,(btver2-fp0|btver2-fp1)*7") 348 349(define_insn_reservation "btver2_fcmov" 7 350 (and (eq_attr "cpu" "btver2") 351 (eq_attr "type" "fcmov")) 352 "btver2-vector,(btver2-fp0|btver2-fp1)*7") 353 354(define_insn_reservation "btver2_fcomi_load" 7 355 (and (eq_attr "cpu" "btver2") 356 (and (eq_attr "type" "fcmp") 357 (and (eq_attr "bdver1_decode" "double") 358 (eq_attr "memory" "load")))) 359 "btver2-direct,btver2-load,btver2-fp0*2") 360 361(define_insn_reservation "btver2_fcomi" 2 362 (and (eq_attr "cpu" "btver2") 363 (and (eq_attr "bdver1_decode" "double") 364 (eq_attr "type" "fcmp"))) 365 "btver2-direct, btver2-fp0*2") 366 367(define_insn_reservation "btver2_fcom_load" 6 368 (and (eq_attr "cpu" "btver2") 369 (and (eq_attr "type" "fcmp") 370 (eq_attr "memory" "load"))) 371 "btver2-direct,btver2-load,btver2-fp0") 372 373(define_insn_reservation "btver2_fcom" 1 374 (and (eq_attr "cpu" "btver2") 375 (eq_attr "type" "fcmp")) 376 "btver2-direct,btver2-fp0") 377 378(define_insn_reservation "btver2_fxch" 1 379 (and (eq_attr "cpu" "btver2") 380 (eq_attr "type" "fxch")) 381 "btver2-direct,btver2-fp1") 382 383;; SSE AVX maxmin,rcp,sqrt 384(define_insn_reservation "btver2_sse_maxmin" 2 385 (and (eq_attr "cpu" "btver2") 386 (and (eq_attr "mode" "V8SF,V4DF,V2DF,V4SF,SF,DF") 387 (and (eq_attr "memory" "none,unknown") 388 (and (eq_attr "btver2_sse_attr" "maxmin") 389 (eq_attr "type" "sse,sseadd"))))) 390 "btver2-direct,btver2-fpa") 391 392(define_insn_reservation "btver2_sse_maxmin_mem" 7 393 (and (eq_attr "cpu" "btver2") 394 (and (eq_attr "mode" "V8SF,V4DF,V2DF,V4SF,SF,DF") 395 (and (eq_attr "memory" "load") 396 (and (eq_attr "btver2_sse_attr" "maxmin") 397 (eq_attr "type" "sse,sseadd"))))) 398 "btver2-direct,btver2-load,btver2-fpa") 399 400(define_insn_reservation "btver2_sse_rcp" 2 401 (and (eq_attr "cpu" "btver2") 402 (and (eq_attr "mode" "V4SF,SF") 403 (and (eq_attr "memory" "none,unknown") 404 (and (eq_attr "btver2_sse_attr" "rcp") 405 (eq_attr "type" "sse"))))) 406 "btver2-direct,btver2-fpm") 407 408(define_insn_reservation "btver2_sse_rcp_mem" 7 409 (and (eq_attr "cpu" "btver2") 410 (and (eq_attr "mode" "V4SF,SF") 411 (and (eq_attr "memory" "load") 412 (and (eq_attr "btver2_sse_attr" "rcp") 413 (eq_attr "type" "sse"))))) 414 "btver2-direct,btver2-load,btver2-fpm") 415 416(define_insn_reservation "btver2_avx_rcp" 2 417 (and (eq_attr "cpu" "btver2") 418 (and (eq_attr "mode" "V8SF") 419 (and (eq_attr "memory" "none,unknown") 420 (and (eq_attr "btver2_sse_attr" "rcp") 421 (eq_attr "type" "sse"))))) 422 "btver2-double,btver2-fpm*2") 423 424(define_insn_reservation "btver2_avx_rcp_mem" 7 425 (and (eq_attr "cpu" "btver2") 426 (and (eq_attr "mode" "V8SF") 427 (and (eq_attr "memory" "load") 428 (and (eq_attr "btver2_sse_attr" "rcp") 429 (eq_attr "type" "sse"))))) 430 "btver2-double,btver2-load,btver2-fpm*2") 431 432(define_insn_reservation "btver2_sse_sqrt_v4sf" 21 433 (and (eq_attr "cpu" "btver2") 434 (and (eq_attr "mode" "V4SF") 435 (and (eq_attr "memory" "none,unknown") 436 (and (eq_attr "btver2_sse_attr" "sqrt") 437 (eq_attr "type" "sse"))))) 438 "btver2-direct,btver2-fpm*21") 439 440(define_insn_reservation "btver2_sse_sqrt_v4sf_mem" 26 441 (and (eq_attr "cpu" "btver2") 442 (and (eq_attr "mode" "V4SF") 443 (and (eq_attr "memory" "load") 444 (and (eq_attr "btver2_sse_attr" "sqrt") 445 (eq_attr "type" "sse"))))) 446 "btver2-direct,btver2-load,btver2-fpm*21") 447 448(define_insn_reservation "btver2_sse_sqrt_v4df" 54 449 (and (eq_attr "cpu" "btver2") 450 (and (eq_attr "mode" "V4DF") 451 (and (eq_attr "memory" "none,unknown") 452 (and (eq_attr "btver2_sse_attr" "sqrt") 453 (eq_attr "type" "sse"))))) 454 "btver2-double,btver2-fpm*54") 455 456(define_insn_reservation "btver2_sse_sqrt_v4df_mem" 59 457 (and (eq_attr "cpu" "btver2") 458 (and (eq_attr "mode" "V4DF") 459 (and (eq_attr "memory" "load") 460 (and (eq_attr "btver2_sse_attr" "sqrt") 461 (eq_attr "type" "sse"))))) 462 "btver2-double,btver2-load,btver2-fpm*54") 463 464(define_insn_reservation "btver2_sse_sqrt_sf" 16 465 (and (eq_attr "cpu" "btver2") 466 (and (eq_attr "mode" "SF") 467 (and (eq_attr "memory" "none,unknown") 468 (and (eq_attr "btver2_sse_attr" "sqrt") 469 (eq_attr "type" "sse"))))) 470 "btver2-direct,btver2-fpm*16") 471 472(define_insn_reservation "btver2_sse_sqrt_sf_mem" 21 473 (and (eq_attr "cpu" "btver2") 474 (and (eq_attr "mode" "SF") 475 (and (eq_attr "memory" "load") 476 (and (eq_attr "btver2_sse_attr" "sqrt") 477 (eq_attr "type" "sse"))))) 478 "btver2-direct,btver2-load,btver2-fpm*16") 479 480(define_insn_reservation "btver2_sse_sqrt_df" 27 481 (and (eq_attr "cpu" "btver2") 482 (and (eq_attr "mode" "V2DF,DF") 483 (and (eq_attr "memory" "none,unknown") 484 (and (eq_attr "btver2_sse_attr" "sqrt") 485 (eq_attr "type" "sse"))))) 486 "btver2-direct,btver2-fpm*27") 487 488(define_insn_reservation "btver2_sse_sqrt_df_mem" 32 489 (and (eq_attr "cpu" "btver2") 490 (and (eq_attr "mode" "V2DF,DF") 491 (and (eq_attr "memory" "load") 492 (and (eq_attr "btver2_sse_attr" "sqrt") 493 (eq_attr "type" "sse"))))) 494 "btver2-direct,btver2-load,btver2-fpm*27") 495 496(define_insn_reservation "btver2_sse_sqrt_v8sf" 42 497 (and (eq_attr "cpu" "btver2") 498 (and (eq_attr "mode" "V8SF") 499 (and (eq_attr "memory" "none,unknown") 500 (and (eq_attr "btver2_sse_attr" "sqrt") 501 (eq_attr "type" "sse"))))) 502 "btver2-double,btver2-fpm*42") 503 504(define_insn_reservation "btver2_sse_sqrt_v8sf_mem" 42 505 (and (eq_attr "cpu" "btver2") 506 (and (eq_attr "mode" "V8SF") 507 (and (eq_attr "memory" "load") 508 (and (eq_attr "btver2_sse_attr" "sqrt") 509 (eq_attr "type" "sse"))))) 510 "btver2-double,btver2-load,btver2-fpm*42") 511 512;; Bitmanipulation instrucions BMI LZCNT POPCNT 513(define_insn_reservation "btver2_bmi_reg_direct" 1 514 (and (eq_attr "cpu" "btver2") 515 (and (eq_attr "btver2_decode" "direct") 516 (and (eq_attr "memory" "none") 517 (eq_attr "type" "bitmanip")))) 518 "btver2-direct,btver2-alu") 519 520(define_insn_reservation "btver2_bmi_mem_direct" 4 521 (and (eq_attr "cpu" "btver2") 522 (and (eq_attr "btver2_decode" "direct") 523 (and (eq_attr "memory" "load") 524 (eq_attr "type" "bitmanip")))) 525 "btver2-direct,btver2-load,btver2-alu") 526 527(define_insn_reservation "btver2_bmi_reg_double" 2 528 (and (eq_attr "cpu" "btver2") 529 (and (eq_attr "btver2_decode" "double") 530 (and (eq_attr "memory" "none") 531 (eq_attr "type" "bitmanip,alu1")))) 532 "btver2-double,btver2-alu") 533 534(define_insn_reservation "btver2_bmi_double_store" 5 535 (and (eq_attr "cpu" "btver2") 536 (and (eq_attr "memory" "store") 537 (and (eq_attr "btver2_decode" "double") 538 (eq_attr "type" "bitmanip,alu1")))) 539 "btver2-double,btver2-alu,btver2-store") 540 541(define_insn_reservation "btver2_bmi_double_load" 4 542 (and (eq_attr "cpu" "btver2") 543 (and (eq_attr "btver2_decode" "double") 544 (and (eq_attr "memory" "load") 545 (eq_attr "type" "bitmanip,alu1")))) 546 "btver2-double,btver2-load,btver2-alu") 547 548;; F16C converts 549(define_insn_reservation "btver2_ssecvt_load_direct" 8 550 (and (eq_attr "cpu" "btver2") 551 (and (eq_attr "mode" "V8SF,V4SF") 552 (and (eq_attr "memory" "load") 553 (and (eq_attr "btver2_decode" "direct") 554 (eq_attr "type" "ssecvt"))))) 555 "btver2-direct,btver2-load,btver2-stc") 556 557(define_insn_reservation "btver2_ssecvt_store_direct" 8 558 (and (eq_attr "cpu" "btver2") 559 (and (eq_attr "mode" "V8SF,V4SF") 560 (and (eq_attr "memory" "store") 561 (and (eq_attr "btver2_decode" "direct") 562 (eq_attr "type" "ssecvt"))))) 563 "btver2-direct,btver2-stc,btver2-store") 564 565(define_insn_reservation "btver2_ssecvt_reg_direct" 3 566 (and (eq_attr "cpu" "btver2") 567 (and (eq_attr "mode" "V8SF,V4SF") 568 (and (eq_attr "btver2_decode" "direct") 569 (eq_attr "type" "ssecvt")))) 570 "btver2-direct,btver2-stc") 571 572(define_insn_reservation "btver2_ssecvt_load_double" 8 573 (and (eq_attr "cpu" "btver2") 574 (and (eq_attr "mode" "V8SF,V4SF") 575 (and (eq_attr "memory" "load") 576 (and (eq_attr "btver2_decode" "double") 577 (eq_attr "type" "ssecvt"))))) 578 "btver2-double,btver2-load,btver2-stc*2") 579 580(define_insn_reservation "btver2_ssecvt_reg_double" 3 581 (and (eq_attr "cpu" "btver2") 582 (and (eq_attr "mode" "V8SF,V4SF") 583 (and (eq_attr "btver2_decode" "double") 584 (eq_attr "type" "ssecvt")))) 585 "btver2-double,btver2-stc*2") 586 587(define_insn_reservation "btver2_ssecvt_store_vector" 11 588 (and (eq_attr "cpu" "btver2") 589 (and (eq_attr "mode" "V8SF,V4SF") 590 (and (eq_attr "memory" "store") 591 (and (eq_attr "btver2_decode" "vector") 592 (eq_attr "type" "ssecvt"))))) 593 "btver2-vector,btver2-stc,(btver2-fpa|btver2-fpm),btver2-store") 594 595(define_insn_reservation "btver2_ssecvt_reg_vector" 6 596 (and (eq_attr "cpu" "btver2") 597 (and (eq_attr "mode" "V8SF,V4SF") 598 (and (eq_attr "btver2_decode" "vector") 599 (eq_attr "type" "ssecvt")))) 600 "btver2-vector,btver2-stc,(btver2-fpa|btver2-fpm)") 601 602;; avx256 adds 603(define_insn_reservation "btver2_avx_add_load_256" 8 604 (and (eq_attr "cpu" "btver2") 605 (and (eq_attr "mode" "V4DF,V8SF") 606 (and (eq_attr "memory" "load") 607 (eq_attr "type" "sseadd,sseadd1")))) 608 "btver2-double,btver2-load,btver2-fpa") 609 610(define_insn_reservation "btver2_avx_add_reg_256" 3 611 (and (eq_attr "cpu" "btver2") 612 (and (eq_attr "mode" "V4DF,V8SF") 613 (and (eq_attr "memory" "none,unknown") 614 (eq_attr "type" "sseadd,sseadd1")))) 615 "btver2-double,btver2-fpa") 616 617;; avx256 logs 618(define_insn_reservation "btver2_avx_load_log" 6 619 (and (eq_attr "cpu" "btver2") 620 (and (eq_attr "mode" "V4DF,V8SF") 621 (and (eq_attr "memory" "load") 622 (and (eq_attr "btver2_decode" "!vector") 623 (eq_attr "type" "sselog,sselog1"))))) 624 "btver2-double,btver2-load,(btver2-fpa|btver2-fpm)") 625 626(define_insn_reservation "btver2_avx_reg_log" 1 627 (and (eq_attr "cpu" "btver2") 628 (and (eq_attr "mode" "V4DF,V8SF") 629 (and (eq_attr "memory" "none,unknown") 630 (and (eq_attr "btver2_decode" "!vector") 631 (eq_attr "type" "sselog,sselog1"))))) 632 "btver2-double,(btver2-fpa|btver2-fpm)") 633 634;; avx256 sse 635 636(define_insn_reservation "btver2_avx_load_sse" 6 637 (and (eq_attr "cpu" "btver2") 638 (and (eq_attr "mode" "V4DF,V8SF") 639 (and (eq_attr "memory" "load") 640 (and (eq_attr "btver2_decode" "!vector") 641 (eq_attr "type" "sse"))))) 642 "btver2-double,btver2-load,(btver2-fpa|btver2-fpm)") 643 644(define_insn_reservation "btver2_avx_reg_sse" 1 645 (and (eq_attr "cpu" "btver2") 646 (and (eq_attr "mode" "V4DF,V8SF") 647 (and (eq_attr "memory" "none,unknown") 648 (and (eq_attr "btver2_decode" "!vector") 649 (eq_attr "type" "sse"))))) 650 "btver2-double,(btver2-fpa|btver2-fpm)") 651 652;; avx256 moves 653(define_insn_reservation "btver2_avx_load_int_mov" 6 654 (and (eq_attr "cpu" "btver2") 655 (and (eq_attr "mode" "OI") 656 (and (eq_attr "memory" "load") 657 (eq_attr "type" "ssemov")))) 658 "btver2-double,btver2-load,btver2-valu") 659 660(define_insn_reservation "btver2_avx_store_int_mov" 6 661 (and (eq_attr "cpu" "btver2") 662 (and (eq_attr "mode" "OI") 663 (and (eq_attr "memory" "store") 664 (eq_attr "type" "ssemov")))) 665 "btver2-double,btver2-valu,btver2-store") 666 667(define_insn_reservation "btver2_avx_int_mov" 1 668 (and (eq_attr "cpu" "btver2") 669 (and (eq_attr "mode" "OI") 670 (and (eq_attr "memory" "none,unknown") 671 (eq_attr "type" "ssemov")))) 672 "btver2-double,btver2-valu") 673 674(define_insn_reservation "btver2_avx_load_from_vectors" 6 675 (and (eq_attr "cpu" "btver2") 676 (and (eq_attr "mode" "V8SF,V4DF") 677 (and (ior ( match_operand:V4SF 1 "memory_operand") 678 ( match_operand:V2DF 1 "memory_operand")) 679 (and (eq_attr "memory" "load") 680 (eq_attr "type" "ssemov"))))) 681 "btver2-double,btver2-load,(btver2-fpa|btver2-fpm)") 682 683(define_insn_reservation "btver2_avx_loads_from_scalar" 6 684 (and (eq_attr "cpu" "btver2") 685 (and (eq_attr "mode" "V8SF,V4DF") 686 (and (ior ( match_operand:SF 1 "memory_operand") 687 ( match_operand:DF 1 "memory_operand")) 688 (and (eq_attr "memory" "load") 689 (eq_attr "type" "ssemov"))))) 690 "btver2-double,btver2-load,(btver2-fpa|btver2-fpm)*2") 691 692(define_insn_reservation "btver2_avx_store_move" 6 693 (and (eq_attr "cpu" "btver2") 694 (and (eq_attr "mode" "V4DF,V8SF") 695 (and (eq_attr "memory" "store") 696 (and (eq_attr "btver2_decode" "!vector") 697 (eq_attr "type" "ssemov"))))) 698 "btver2-double,(btver2-fpa|btver2-fpm),btver2-store") 699 700(define_insn_reservation "btver2_avx_load_move" 6 701 (and (eq_attr "cpu" "btver2") 702 (and (eq_attr "mode" "V4DF,V8SF") 703 (and (eq_attr "memory" "load") 704 (and (eq_attr "btver2_decode" "!vector") 705 (eq_attr "type" "ssemov"))))) 706 "btver2-double,btver2-load,(btver2-fpa|btver2-fpm)") 707 708(define_insn_reservation "btver2_avx_reg_move" 1 709 (and (eq_attr "cpu" "btver2") 710 (and (eq_attr "mode" "V4DF,V8SF") 711 (and (eq_attr "memory" "none,unknown") 712 (and (eq_attr "btver2_decode" "!vector") 713 (eq_attr "type" "ssemov"))))) 714 "btver2-double,(btver2-fpa|btver2-fpm)") 715;; avx256 cmps 716(define_insn_reservation "btver2_avx_load_cmp" 7 717 (and (eq_attr "cpu" "btver2") 718 (and (eq_attr "mode" "V4DF,V8SF") 719 (and (eq_attr "memory" "load") 720 (eq_attr "type" "ssecmp")))) 721 "btver2-double,btver2-load,(btver2-fpa|btver2-fpm)*2") 722 723(define_insn_reservation "btver2_avx_cmp" 2 724 (and (eq_attr "cpu" "btver2") 725 (and (eq_attr "mode" "V4DF,V8SF") 726 (and (eq_attr "memory" "none,unknown") 727 (eq_attr "type" "ssecmp")))) 728 "btver2-double,(btver2-fpa|btver2-fpm)*2") 729 730;; ssecvts 256 731(define_insn_reservation "btver2_ssecvt_256_load" 8 732 (and (eq_attr "cpu" "btver2") 733 (and (eq_attr "mode" "V4DF,OI") 734 (and (eq_attr "memory" "none,unknown") 735 (and (eq_attr "btver2_decode" "!vector") 736 (eq_attr "type" "ssecvt"))))) 737 "btver2-double,btver2-load,btver2-stc*2") 738 739(define_insn_reservation "btver2_ssecvt_256" 3 740 (and (eq_attr "cpu" "btver2") 741 (and (eq_attr "mode" "V4DF,OI") 742 (and (eq_attr "memory" "none,unknown") 743 (and (eq_attr "btver2_decode" "!vector") 744 (eq_attr "type" "ssecvt"))))) 745 "btver2-double,btver2-stc*2") 746 747(define_insn_reservation "btver2_ssecvt_256_vector_load" 11 748 (and (eq_attr "cpu" "btver2") 749 (and (eq_attr "mode" "V4DF,OI") 750 (and (eq_attr "memory" "none,unknown") 751 (and (eq_attr "btver2_decode" "vector") 752 (eq_attr "type" "ssecvt"))))) 753 "btver2-vector,btver2-load,btver2-stc*2,(btver2-fpa|btver2-fpm)") 754 755(define_insn_reservation "btver2_ssecvt_256_vector" 6 756 (and (eq_attr "cpu" "btver2") 757 (and (eq_attr "mode" "V4DF,OI") 758 (and (eq_attr "memory" "none,unknown") 759 (and (eq_attr "btver2_decode" "vector") 760 (eq_attr "type" "ssecvt"))))) 761 "btver2-vector,btver2-stc*2,(btver2-fpa|btver2-fpm)") 762 763;; avx256 divides 764(define_insn_reservation "btver2_avx_load_div" 43 765 (and (eq_attr "cpu" "btver2") 766 (and (eq_attr "mode" "V4DF,V8SF") 767 (and (eq_attr "memory" "load") 768 (and (eq_attr "btver2_decode" "!vector") 769 (eq_attr "type" "ssediv"))))) 770 "btver2-double,btver2-load,btver2-fpm*38") 771 772(define_insn_reservation "btver2_avx_div" 38 773 (and (eq_attr "cpu" "btver2") 774 (and (eq_attr "mode" "V4DF,V8SF") 775 (and (eq_attr "memory" "none,unknown") 776 (and (eq_attr "btver2_decode" "!vector") 777 (eq_attr "type" "ssediv"))))) 778 "btver2-double,btver2-fpm*38") 779 780;; avx256 multiply 781 782(define_insn_reservation "btver2_avx_mul_load_pd" 9 783 (and (eq_attr "cpu" "btver2") 784 (and (eq_attr "mode" "V4DF") 785 (and (eq_attr "memory" "load") 786 (and (eq_attr "btver2_decode" "!vector") 787 (eq_attr "type" "ssemul"))))) 788 "btver2-double,btver2-load,btver2-fpm*4") 789 790(define_insn_reservation "btver2_avx_mul_load_ps" 7 791 (and (eq_attr "cpu" "btver2") 792 (and (eq_attr "mode" "V8SF") 793 (and (eq_attr "memory" "load") 794 (and (eq_attr "btver2_decode" "!vector") 795 (eq_attr "type" "ssemul"))))) 796 "btver2-double,btver2-load,btver2-fpm*2") 797 798 799(define_insn_reservation "btver2_avx_mul_256_pd" 4 800 (and (eq_attr "cpu" "btver2") 801 (and (eq_attr "mode" "V4DF") 802 (and (eq_attr "memory" "none,unknown") 803 (and (eq_attr "btver2_decode" "!vector") 804 (eq_attr "type" "ssemul"))))) 805 "btver2-double,btver2-fpm*4") 806 807(define_insn_reservation "btver2_avx_mul_256_ps" 2 808 (and (eq_attr "cpu" "btver2") 809 (and (eq_attr "mode" "V8SF") 810 (and (eq_attr "memory" "none,unknown") 811 (and (eq_attr "btver2_decode" "!vector") 812 (eq_attr "type" "ssemul"))))) 813 "btver2-double,btver2-fpm*2") 814 815(define_insn_reservation "btver2_avx_dpps_load_ps" 17 816 (and (eq_attr "cpu" "btver2") 817 (and (eq_attr "mode" "V8SF") 818 (and (eq_attr "memory" "load") 819 (and (eq_attr "btver2_decode" "vector") 820 (eq_attr "type" "ssemul"))))) 821 "btver2-vector,btver2-fpm*6,btver2-fpa*6") 822 823(define_insn_reservation "btver2_avx_dpps_ps" 12 824 (and (eq_attr "cpu" "btver2") 825 (and (eq_attr "mode" "V8SF") 826 (and (eq_attr "memory" "none,unknown") 827 (and (eq_attr "btver2_decode" "vector") 828 (eq_attr "type" "ssemul"))))) 829 "btver2-vector,btver2-fpm*6,btver2-fpa*6") 830 831;; AES/CLMUL 832 833(define_insn_reservation "btver2_aes_double" 3 834 (and (eq_attr "cpu" "btver2") 835 (and (match_operand:V2DI 0 "register_operand") 836 (and (eq_attr "memory" "none,unknown") 837 (and (eq_attr "btver2_decode" "double") 838 (eq_attr "type" "sselog1"))))) 839 "btver2-double,btver2-valu,btver2-vimul") 840 841(define_insn_reservation "btver2_aes_direct" 2 842 (and (eq_attr "cpu" "btver2") 843 (and (match_operand:V2DI 0 "register_operand") 844 (and (eq_attr "memory" "none,unknown") 845 (and (eq_attr "btver2_decode" "direct") 846 (eq_attr "type" "sselog1"))))) 847 "btver2-direct,btver2-vimul") 848 849;; AVX128 SSE4* SSSE3 SSE3* SSE2 SSE instructions 850 851(define_insn_reservation "btver2_sseint_load_direct" 6 852 (and (eq_attr "cpu" "btver2") 853 (and (eq_attr "mode" "TI") 854 (and (eq_attr "memory" "load") 855 (and (eq_attr "btver2_decode" "direct") 856 (eq_attr "type" "sse,ssecmp,sseiadd"))))) 857 "btver2-direct,btver2-load,btver2-valu") 858 859(define_insn_reservation "btver2_sseint_direct" 1 860 (and (eq_attr "cpu" "btver2") 861 (and (eq_attr "mode" "TI") 862 (and (eq_attr "memory" "none,unknown") 863 (and (eq_attr "btver2_decode" "direct") 864 (eq_attr "type" "sse,ssecmp,sseiadd"))))) 865 "btver2-direct,btver2-valu") 866 867(define_insn_reservation "btver2_sselog_direct" 1 868 (and (eq_attr "cpu" "btver2") 869 (and (eq_attr "mode" "V2DF,V4SF") 870 (and (eq_attr "memory" "none,unknown") 871 (and (eq_attr "btver2_decode" "direct") 872 (eq_attr "type" "sse,sselog"))))) 873 "btver2-direct,(btver2-fpa|btver2-fpm)") 874 875(define_insn_reservation "btver2_sselog_load_direct" 6 876 (and (eq_attr "cpu" "btver2") 877 (and (eq_attr "mode" "V2DF,V4SF") 878 (and (eq_attr "memory" "load") 879 (and (eq_attr "btver2_decode" "direct") 880 (eq_attr "type" "sse,sselog"))))) 881 "btver2-direct,btver2-load,(btver2-fpa|btver2-fpm)") 882 883(define_insn_reservation "btver2_intext_reg_128" 3 884 (and (eq_attr "cpu" "btver2") 885 (and (eq_attr "mode" "SF,QI,SI,HI,SI") 886 (and (eq_attr "memory" "none,unknown") 887 (and (eq_attr "btver2_decode" "direct") 888 (eq_attr "type" "sselog"))))) 889 "btver2-direct,btver2-fpa") 890 891(define_insn_reservation "btver2_sse_mov_direct" 1 892 (and (eq_attr "cpu" "btver2") 893 (and (eq_attr "mode" "V2DF,V4SF") 894 (and (eq_attr "memory" "none,unknown") 895 (and (eq_attr "btver2_decode" "direct") 896 (eq_attr "type" "ssemov"))))) 897 "btver2-direct,(btver2-fpa|btver2-fpm)") 898 899(define_insn_reservation "btver2_sse_mov_vector" 2 900 (and (eq_attr "cpu" "btver2") 901 (and (eq_attr "mode" "V2DF,V4SF") 902 (and (eq_attr "memory" "none,unknown") 903 (and (eq_attr "btver2_decode" "vector") 904 (eq_attr "type" "ssemov"))))) 905 "btver2-vector,(btver2-fpa|btver2-fpm)*2") 906 907(define_insn_reservation "btver2_ssecomi_load_128" 8 908 (and (eq_attr "cpu" "btver2") 909 (and (eq_attr "mode" "TI") 910 (and (eq_attr "memory" "load") 911 (and (eq_attr "btver2_decode" "!vector") 912 (eq_attr "type" "ssecomi"))))) 913 "btver2-direct,btver2-load,btver2-fpa") 914 915(define_insn_reservation "btver2_ssecomi_reg_128" 3 916 (and (eq_attr "cpu" "btver2") 917 (and (eq_attr "mode" "TI") 918 (and (eq_attr "memory" "none,unknown") 919 (and (eq_attr "btver2_decode" "!vector") 920 (eq_attr "type" "ssecomi"))))) 921 "btver2-direct,btver2-fpa") 922 923(define_insn_reservation "btver2_ssemul_load_v2df" 14 924 (and (eq_attr "cpu" "btver2") 925 (and (eq_attr "mode" "V2DF") 926 (and (eq_attr "memory" "load") 927 (and (eq_attr "btver2_decode" "vector") 928 (eq_attr "type" "ssemul"))))) 929 "btver2-vector,btver2-load,btver2-fpm*2,btver2-fpa") 930 931(define_insn_reservation "btver2_ssemul_reg_v2df" 9 932 (and (eq_attr "cpu" "btver2") 933 (and (eq_attr "mode" "V2DF") 934 (and (eq_attr "memory" "none,unknown") 935 (and (eq_attr "btver2_decode" "vector") 936 (eq_attr "type" "ssemul"))))) 937 "btver2-vector,btver2-fpm*2,btver2-fpa") 938 939(define_insn_reservation "btver2_ssemul_load_v4sf" 16 940 (and (eq_attr "cpu" "btver2") 941 (and (eq_attr "mode" "V4SF") 942 (and (eq_attr "memory" "none,unknown") 943 (and (eq_attr "btver2_decode" "vector") 944 (eq_attr "type" "ssemul"))))) 945 "btver2-vector,btver2-load,btver2-fpm*3,btver2-fpa*2") 946 947(define_insn_reservation "btver2_ssemul_reg_v4sf" 11 948 (and (eq_attr "cpu" "btver2") 949 (and (eq_attr "mode" "V4SF") 950 (and (eq_attr "memory" "none,unknown") 951 (and (eq_attr "btver2_decode" "vector") 952 (eq_attr "type" "ssemul"))))) 953 "btver2-vector,btver2-fpm*3,btver2-fpa*2") 954 955(define_insn_reservation "btver2_sse_store_vectmov" 8 956 (and (eq_attr "cpu" "btver2") 957 (and (eq_attr "memory" "load") 958 (and (eq_attr "btver2_decode" "vector") 959 (eq_attr "type" "ssemov")))) 960 "btver2-vector,btver2-valu*3,btver2-store") 961 962(define_insn_reservation "btver2_sse_load_vectmov" 8 963 (and (eq_attr "cpu" "btver2") 964 (and (eq_attr "memory" "load") 965 (and (eq_attr "btver2_decode" "vector") 966 (eq_attr "type" "ssemov")))) 967 "btver2-vector,btver2-load,btver2-valu*3") 968 969(define_insn_reservation "btver2_sse_vectmov" 3 970 (and (eq_attr "cpu" "btver2") 971 (and (eq_attr "memory" "none,unknown") 972 (and (eq_attr "btver2_decode" "vector") 973 (eq_attr "type" "ssemov")))) 974 "btver2-vector,btver2-valu*3") 975 976 977(define_insn_reservation "btver2_sseimul" 2 978 (and (eq_attr "cpu" "btver2") 979 (and (eq_attr "memory" "none,unknown") 980 (and (eq_attr "btver2_decode" "direct") 981 (eq_attr "type" "sseimul")))) 982 "btver2-direct,btver2-vimul") 983 984(define_insn_reservation "btver2_sseimul_load" 7 985 (and (eq_attr "cpu" "btver2") 986 (and (eq_attr "memory" "load") 987 (and (eq_attr "btver2_decode" "direct") 988 (eq_attr "type" "sseimul")))) 989 "btver2-direct,btver2-load,btver2-vimul") 990 991(define_insn_reservation "btver2_sseimul_load_vect" 9 992 (and (eq_attr "cpu" "btver2") 993 (and (eq_attr "memory" "load") 994 (and (eq_attr "btver2_decode" "vector") 995 (eq_attr "type" "sseimul")))) 996 "btver2-vector,btver2-load,btver2-vimul*2,btver2-valu") 997 998(define_insn_reservation "btver2_sseimul_vect" 4 999 (and (eq_attr "cpu" "btver2") 1000 (and (eq_attr "memory" "none,unknown") 1001 (and (eq_attr "btver2_decode" "vector") 1002 (eq_attr "type" "sseimul")))) 1003 "btver2-vector,btver2-vimul*2,btver2-valu") 1004 1005(define_insn_reservation "btver2_sseins" 3 1006 (and (eq_attr "cpu" "btver2") 1007 (and (eq_attr "memory" "none,unknown") 1008 (eq_attr "type" "sseins"))) 1009 "btver2-vector,btver2-valu*3") 1010 1011(define_insn_reservation "btver2_sseishft_load" 6 1012 (and (eq_attr "cpu" "btver2") 1013 (and (eq_attr "memory" "load") 1014 (and (eq_attr "btver2_decode" "direct") 1015 (eq_attr "type" "sseishft")))) 1016 "btver2-direct,btver2-load,btver2-valu") 1017 1018(define_insn_reservation "btver2_sseishft_direct" 1 1019 (and (eq_attr "cpu" "btver2") 1020 (and (eq_attr "memory" "none,unknown") 1021 (and (eq_attr "btver2_decode" "direct") 1022 (eq_attr "type" "sseishft")))) 1023 "btver2-direct,btver2-valu") 1024 1025(define_insn_reservation "btver2_sselog1_load" 6 1026 (and (eq_attr "cpu" "btver2") 1027 (and (eq_attr "mode" "!V8SF,!V4DF") 1028 (and (eq_attr "memory" "load") 1029 (and (eq_attr "btver2_decode" "direct") 1030 (eq_attr "type" "sselog1"))))) 1031 "btver2-direct,btver2-load,btver2-valu") 1032 1033(define_insn_reservation "btver2_sselog1_direct" 1 1034 (and (eq_attr "cpu" "btver2") 1035 (and (eq_attr "mode" "!V8SF,!V4DF") 1036 (and (eq_attr "memory" "none,unknown") 1037 (and (eq_attr "btver2_decode" "direct") 1038 (eq_attr "type" "sselog1"))))) 1039 "btver2-direct,btver2-valu") 1040 1041(define_insn_reservation "btver2_sselog1_vector_load" 7 1042 (and (eq_attr "cpu" "btver2") 1043 (and (eq_attr "memory" "load") 1044 (and (eq_attr "btver2_decode" "vector") 1045 (eq_attr "type" "sselog1")))) 1046 "btver2-vector,btver2-valu*2") 1047 1048(define_insn_reservation "btver2_sselog1_vector" 2 1049 (and (eq_attr "cpu" "btver2") 1050 (and (eq_attr "memory" "none,unknown") 1051 (and (eq_attr "btver2_decode" "vector") 1052 (eq_attr "type" "sselog1")))) 1053 "btver2-vector,btver2-valu*2") 1054 1055(define_insn_reservation "btver2_sseadd_load" 8 1056 (and (eq_attr "cpu" "btver2") 1057 (and (eq_attr "mode" "V4SF,V2DF") 1058 (and (eq_attr "memory" "load") 1059 (and (eq_attr "btver2_decode" "direct") 1060 (eq_attr "type" "sseadd,sseadd1"))))) 1061 "btver2-direct,btver2-load,btver2-fpa") 1062 1063(define_insn_reservation "btver2_sseadd_reg" 3 1064 (and (eq_attr "cpu" "btver2") 1065 (and (eq_attr "mode" "V4SF,V2DF") 1066 (and (eq_attr "memory" "none,unknown") 1067 (and (eq_attr "btver2_decode" "direct") 1068 (eq_attr "type" "sseadd,sseadd1"))))) 1069 "btver2-direct,btver2-fpa") 1070 1071;;SSE2 SSEint SSEfp SSE 1072 1073(define_insn_reservation "btver2_sseint_to_scalar_move_with_load" 8 1074 (and (eq_attr "cpu" "btver2") 1075 (and (eq_attr "mode" "SI,DI") 1076 (and (eq_attr "memory" "load") 1077 (and (eq_attr "btver2_decode" "direct") 1078 (eq_attr "type" "ssemov"))))) 1079 "btver2-direct,btver2-load,btver2-fpa") 1080 1081(define_insn_reservation "btver2_sseint_to_scalar_move_with_store" 8 1082 (and (eq_attr "cpu" "btver2") 1083 (and (eq_attr "mode" "SI,DI") 1084 (and (eq_attr "memory" "store") 1085 (and (eq_attr "btver2_decode" "direct") 1086 (eq_attr "type" "ssemov"))))) 1087 "btver2-direct,btver2-fpa,btver2-store") 1088 1089 1090(define_insn_reservation "btver2_scalar_to_sseint_move_with_load" 11 1091 (and (eq_attr "cpu" "btver2") 1092 (and (eq_attr "mode" "TI") 1093 (and (ior ( match_operand:SI 1 "memory_operand") 1094 ( match_operand:DI 1 "memory_operand")) 1095 (eq_attr "type" "ssemov")))) 1096 "btver2-direct,btver2-load,btver2-stc,btver2-valu") 1097 1098(define_insn_reservation "btver2_sseint_to_scalar" 3 1099 (and (eq_attr "cpu" "btver2") 1100 (and (eq_attr "mode" "SI,DI") 1101 (and (eq_attr "memory" "none,unknown") 1102 (and (eq_attr "btver2_decode" "direct") 1103 (eq_attr "type" "ssemov"))))) 1104 "btver2-direct,btver2-fpa") 1105 1106(define_insn_reservation "btver2_scalar_to_sseint" 6 1107 (and (eq_attr "cpu" "btver2") 1108 (and (eq_attr "mode" "TI") 1109 (and (ior ( match_operand:SI 1 "register_operand") 1110 ( match_operand:DI 1 "register_operand")) 1111 (eq_attr "type" "ssemov")))) 1112 "btver2-direct,btver2-stc,btver2-valu") 1113 1114(define_insn_reservation "btver2_sse_int_load" 6 1115 (and (eq_attr "cpu" "btver2") 1116 (and (eq_attr "mode" "TI") 1117 (and (eq_attr "memory" "load") 1118 (and (eq_attr "btver2_decode" "direct") 1119 (eq_attr "type" "ssemov,sselog,sseishft1"))))) 1120 "btver2-direct,btver2-load,btver2-valu") 1121 1122(define_insn_reservation "btver2_sse_int_direct" 1 1123 (and (eq_attr "cpu" "btver2") 1124 (and (eq_attr "mode" "TI") 1125 (and (eq_attr "memory" "none,unknown") 1126 (and (eq_attr "btver2_decode" "direct") 1127 (eq_attr "type" "ssemov,sselog,sseishft1"))))) 1128 "btver2-direct,btver2-valu") 1129 1130(define_insn_reservation "btver2_sse_int_cvt_load" 6 1131 (and (eq_attr "cpu" "btver2") 1132 (and (eq_attr "mode" "DI") 1133 (and (eq_attr "memory" "load") 1134 (and (eq_attr "btver2_decode" "direct") 1135 (eq_attr "type" "sseicvt"))))) 1136 "btver2-direct,btver2-load,btver2-valu") 1137 1138(define_insn_reservation "btver2_sse_int_cvt" 1 1139 (and (eq_attr "cpu" "btver2") 1140 (and (eq_attr "mode" "DI") 1141 (and (eq_attr "memory" "none,unknown") 1142 (and (eq_attr "btver2_decode" "direct") 1143 (eq_attr "type" "sseicvt"))))) 1144 "btver2-direct,btver2-valu") 1145 1146(define_insn_reservation "btver2_sse_int_32_move" 3 1147 (and (eq_attr "cpu" "btver2") 1148 (and (eq_attr "mode" "SI,DI") 1149 (and (eq_attr "memory" "none,unknown") 1150 (and (eq_attr "btver2_decode" "direct") 1151 (eq_attr "type" "ssemov"))))) 1152 "btver2-direct,btver2-fpa") 1153 1154(define_insn_reservation "btver2_int_32_sse_move" 6 1155 (and (eq_attr "cpu" "btver2") 1156 (and (eq_attr "mode" "TI") 1157 (and (ior ( match_operand:SI 1 "register_operand") 1158 ( match_operand:DI 1 "register_operand")) 1159 (eq_attr "type" "ssemov")))) 1160 "btver2-direct,btver2-stc,btver2-valu") 1161 1162(define_insn_reservation "btver2_sse2cvt_load_direct" 8 1163 (and (eq_attr "cpu" "btver2") 1164 (and (eq_attr "mode" "TI,V4SF,V2DF,DI") 1165 (and (eq_attr "memory" "load") 1166 (and (eq_attr "btver2_decode" "direct") 1167 (eq_attr "type" "ssecvt"))))) 1168 "btver2-direct,btver2-load,btver2-stc") 1169 1170(define_insn_reservation "btver2_sse2cvt_reg_direct" 3 1171 (and (eq_attr "cpu" "btver2") 1172 (and (eq_attr "mode" "TI,V4SF,V2DF,DI") 1173 (and (eq_attr "btver2_decode" "direct") 1174 (eq_attr "type" "ssecvt")))) 1175 "btver2-direct,btver2-stc") 1176 1177(define_insn_reservation "btver2_sseicvt_load_si" 11 1178 (and (eq_attr "cpu" "btver2") 1179 (and (eq_attr "mode" "SI") 1180 (and (eq_attr "memory" "load") 1181 (and (eq_attr "btver2_decode" "double") 1182 (eq_attr "type" "sseicvt"))))) 1183 "btver2-double,btver2-load,btver2-stc,btver2-fpa") 1184 1185(define_insn_reservation "btver2_sseicvt_si" 6 1186 (and (eq_attr "cpu" "btver2") 1187 (and (eq_attr "mode" "SI") 1188 (and (eq_attr "btver2_decode" "double") 1189 (eq_attr "type" "sseicvt")))) 1190 "btver2-double,btver2-stc,btver2-fpa") 1191 1192(define_insn_reservation "btver2_ssecvt_load_df" 11 1193 (and (eq_attr "cpu" "btver2") 1194 (and (eq_attr "mode" "DF") 1195 (and (eq_attr "memory" "load") 1196 (and (eq_attr "btver2_decode" "double") 1197 (eq_attr "type" "ssecvt"))))) 1198 "btver2-double,btver2-load,btver2-stc*2") 1199 1200 1201(define_insn_reservation "btver2_ssecvt_df" 6 1202 (and (eq_attr "cpu" "btver2") 1203 (and (eq_attr "mode" "DF") 1204 (and (eq_attr "btver2_decode" "double") 1205 (eq_attr "type" "ssecvt")))) 1206 "btver2-double,btver2-stc*2") 1207 1208(define_insn_reservation "btver2_ssecvt_load_sf" 12 1209 (and (eq_attr "cpu" "btver2") 1210 (and (eq_attr "mode" "SF") 1211 (and (eq_attr "memory" "load") 1212 (and (eq_attr "btver2_decode" "double") 1213 (eq_attr "type" "ssecvt"))))) 1214 "btver2-double,btver2-load,btver2-stc*2") 1215 1216(define_insn_reservation "btver2_ssecvt_sf" 7 1217 (and (eq_attr "cpu" "btver2") 1218 (and (eq_attr "mode" "SF") 1219 (and (eq_attr "btver2_decode" "double") 1220 (eq_attr "type" "ssecvt")))) 1221 "btver2-double,btver2-stc*2") 1222 1223(define_insn_reservation "btver2_sseicvt_load_df" 14 1224 (and (eq_attr "cpu" "btver2") 1225 (and (eq_attr "mode" "DF,SF") 1226 (and (eq_attr "memory" "load") 1227 (and (eq_attr "btver2_decode" "double") 1228 (eq_attr "type" "sseicvt"))))) 1229 "btver2-double,btver2-load,btver2-stc") 1230;;st,ld-stc 1231(define_insn_reservation "btver2_sseicvt_df" 9 1232 (and (eq_attr "cpu" "btver2") 1233 (and (eq_attr "mode" "DF,SF") 1234 (and (eq_attr "btver2_decode" "double") 1235 (eq_attr "type" "sseicvt")))) 1236 "btver2-double,btver2-stc") 1237 1238 1239(define_insn_reservation "btver2_scalar_sse_load_add" 8 1240 (and (eq_attr "cpu" "btver2") 1241 (and (eq_attr "mode" "DF,SF") 1242 (and (eq_attr "memory" "load") 1243 (and (eq_attr "btver2_decode" "direct") 1244 (eq_attr "type" "sseadd"))))) 1245 "btver2-direct,btver2-load,btver2-fpa") 1246 1247(define_insn_reservation "btver2_scalar_sse_add" 3 1248 (and (eq_attr "cpu" "btver2") 1249 (and (eq_attr "mode" "DF,SF") 1250 (and (eq_attr "memory" "none,unknown") 1251 (and (eq_attr "btver2_decode" "direct") 1252 (eq_attr "type" "sseadd"))))) 1253 "btver2-direct,btver2-fpa") 1254 1255(define_insn_reservation "btver2_int_sse_cmp_load" 7 1256 (and (eq_attr "cpu" "btver2") 1257 (and (eq_attr "mode" "V2DF,V4SF,DF,SF") 1258 (and (eq_attr "memory" "load") 1259 (and (eq_attr "btver2_decode" "direct") 1260 (eq_attr "type" "ssecmp"))))) 1261 "btver2-direct,btver2-load,btver2-fpa") 1262 1263(define_insn_reservation "btver2_int_sse_cmp" 2 1264 (and (eq_attr "cpu" "btver2") 1265 (and (eq_attr "mode" "V2DF,V4SF,DF,SF") 1266 (and (eq_attr "memory" "none,unknown") 1267 (and (eq_attr "btver2_decode" "direct") 1268 (eq_attr "type" "ssecmp"))))) 1269 "btver2-direct,btver2-fpa") 1270 1271(define_insn_reservation "btver2_int_sse_comsi_load" 7 1272 (and (eq_attr "cpu" "btver2") 1273 (and (eq_attr "mode" "DF,SF") 1274 (and (eq_attr "memory" "load") 1275 (and (eq_attr "btver2_decode" "direct") 1276 (eq_attr "type" "ssecomi"))))) 1277 "btver2-direct,btver2-fpa") 1278 1279(define_insn_reservation "btver2_int_sse_comsi" 2 1280 (and (eq_attr "cpu" "btver2") 1281 (and (eq_attr "mode" "DF,SF") 1282 (and (eq_attr "memory" "none,unknown") 1283 (and (eq_attr "btver2_decode" "direct") 1284 (eq_attr "type" "ssecomi"))))) 1285 "btver2-direct,btver2-fpa") 1286 1287(define_insn_reservation "btver2_ssemmx_mov_load_default" 6 1288 (and (eq_attr "cpu" "btver2") 1289 (and (eq_attr "memory" "load") 1290 (and (eq_attr "btver2_decode" "direct") 1291 (eq_attr "type" "ssemov,mmxmov")))) 1292 "btver2-direct,btver2-load,(btver2-fpa|btver2-fpm)") 1293 1294(define_insn_reservation "btver2_ssemmx_mov_store_default" 6 1295 (and (eq_attr "cpu" "btver2") 1296 (and (eq_attr "memory" "store,both") 1297 (and (eq_attr "btver2_decode" "direct") 1298 (eq_attr "type" "ssemov,mmxmov")))) 1299 "btver2-direct,(btver2-fpa|btver2-fpm),btver2-store") 1300 1301(define_insn_reservation "btver2_sse_mov_default" 1 1302 (and (eq_attr "cpu" "btver2") 1303 (and (eq_attr "memory" "none,unknown") 1304 (and (eq_attr "btver2_decode" "direct") 1305 (eq_attr "type" "ssemov,mmxmov")))) 1306 "btver2-direct,(btver2-fpa|btver2-fpm)") 1307 1308(define_insn_reservation "btver2_sse_shuf_double" 2 1309 (and (eq_attr "cpu" "btver2") 1310 (and (eq_attr "memory" "none,unknown") 1311 (and (eq_attr "mode" "V4DF,V8SF") 1312 (eq_attr "type" "sseshuf")))) 1313 "btver2-double,(btver2-fpa|btver2-fpm)") 1314 1315(define_insn_reservation "btver2_sse_shuf_direct" 1 1316 (and (eq_attr "cpu" "btver2") 1317 (and (eq_attr "memory" "none,unknown") 1318 (and (eq_attr "mode" "V2DF,V4SF") 1319 (eq_attr "type" "sseshuf,sseshuf1")))) 1320 "btver2-direct,(btver2-fpa|btver2-fpm)") 1321 1322(define_insn_reservation "btver2_sse_shuf_double_load" 7 1323 (and (eq_attr "cpu" "btver2") 1324 (and (eq_attr "memory" "load") 1325 (and (eq_attr "mode" "V4DF,V8SF") 1326 (eq_attr "type" "sseshuf")))) 1327 "btver2-double,btver2-load,(btver2-fpa|btver2-fpm)") 1328 1329(define_insn_reservation "btver2_sse_shuf_direct_load" 6 1330 (and (eq_attr "cpu" "btver2") 1331 (and (eq_attr "memory" "load") 1332 (and (eq_attr "mode" "V2DF,V4SF") 1333 (eq_attr "type" "sseshuf,sseshuf1")))) 1334 "btver2-direct,btver2-load,(btver2-fpa|btver2-fpm)") 1335 1336(define_insn_reservation "btver2_sse_div" 19 1337 (and (eq_attr "cpu" "btver2") 1338 (and (eq_attr "mode" "V2DF,DF,V4SF") 1339 (and (eq_attr "memory" "none,unknown") 1340 (eq_attr "type" "ssediv")))) 1341 "btver2-direct,btver2-fpm*19") 1342 1343(define_insn_reservation "btver2_sse_div_sf" 14 1344 (and (eq_attr "cpu" "btver2") 1345 (and (eq_attr "mode" "SF") 1346 (and (eq_attr "memory" "none,unknown") 1347 (eq_attr "type" "ssediv")))) 1348 "btver2-direct,btver2-fpm*14") 1349 1350(define_insn_reservation "btver2_sse_mul" 4 1351 (and (eq_attr "cpu" "btver2") 1352 (and (eq_attr "mode" "V2DF,DF,V4SF,SF") 1353 (and (eq_attr "memory" "none,unknown") 1354 (eq_attr "type" "ssemul")))) 1355 "btver2-direct,btver2-fpm*2") 1356 1357(define_insn_reservation "btver2_sse_mul_sf" 2 1358 (and (eq_attr "cpu" "btver2") 1359 (and (eq_attr "mode" "V2DF,DF,V4SF,SF") 1360 (and (eq_attr "memory" "none,unknown") 1361 (eq_attr "type" "ssemul")))) 1362 "btver2-direct,btver2-fpm") 1363 1364(define_insn_reservation "btver2_sse_div_load" 24 1365 (and (eq_attr "cpu" "btver2") 1366 (and (eq_attr "mode" "V2DF,DF,V4SF") 1367 (and (eq_attr "memory" "load") 1368 (eq_attr "type" "ssediv")))) 1369 "btver2-direct,btver2-load,btver2-fpm*19") 1370 1371(define_insn_reservation "btver2_sse_div_sf_load" 19 1372 (and (eq_attr "cpu" "btver2") 1373 (and (eq_attr "mode" "SF") 1374 (and (eq_attr "memory" "load") 1375 (eq_attr "type" "ssediv")))) 1376 "btver2-direct,btver2-load,btver2-fpm*14") 1377 1378(define_insn_reservation "btver2_sse_mul_load" 9 1379 (and (eq_attr "cpu" "btver2") 1380 (and (eq_attr "mode" "V2DF,DF,V4SF,SF") 1381 (and (eq_attr "memory" "load") 1382 (eq_attr "type" "ssemul")))) 1383 "btver2-direct,btver2-load,btver2-fpm*2") 1384 1385(define_insn_reservation "btver2_sse_mul_sf_load" 7 1386 (and (eq_attr "cpu" "btver2") 1387 (and (eq_attr "mode" "V2DF,DF,V4SF,SF") 1388 (and (eq_attr "memory" "load") 1389 (eq_attr "type" "ssemul")))) 1390 "btver2-direct,btver2-load,btver2-fpm") 1391 1392