1//=- AArch64SchedA64FX.td - Fujitsu A64FX Scheduling Defs -*- tablegen -*-=// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file defines the scheduling model for the Fujitsu A64FX processors. 10// 11//===----------------------------------------------------------------------===// 12 13def A64FXModel : SchedMachineModel { 14 let IssueWidth = 6; // 6 micro-ops dispatched at a time. 15 let MicroOpBufferSize = 180; // 180 entries in micro-op re-order buffer. 16 let LoadLatency = 5; // Optimistic load latency. 17 let MispredictPenalty = 12; // Extra cycles for mispredicted branch. 18 // Determined via a mix of micro-arch details and experimentation. 19 let LoopMicroOpBufferSize = 128; 20 let PostRAScheduler = 1; // Using PostRA sched. 21 let CompleteModel = 0; 22 23 list<Predicate> UnsupportedFeatures = 24 [HasSVE2, HasSVE2AES, HasSVE2SM4, HasSVE2SHA3, HasSVE2BitPerm, HasPAuth, 25 HasSVE2orSME, HasMTE, HasMatMulInt8, HasBF16]; 26 27 let FullInstRWOverlapCheck = 0; 28} 29 30let SchedModel = A64FXModel in { 31 32// Define the issue ports. 33 34// A64FXIP* 35 36// Port 0 37def A64FXIPFLA : ProcResource<1>; 38 39// Port 1 40def A64FXIPPR : ProcResource<1>; 41 42// Port 2 43def A64FXIPEXA : ProcResource<1>; 44 45// Port 3 46def A64FXIPFLB : ProcResource<1>; 47 48// Port 4 49def A64FXIPEXB : ProcResource<1>; 50 51// Port 5 52def A64FXIPEAGA : ProcResource<1>; 53 54// Port 6 55def A64FXIPEAGB : ProcResource<1>; 56 57// Port 7 58def A64FXIPBR : ProcResource<1>; 59 60// Define groups for the functional units on each issue port. Each group 61// created will be used by a WriteRes later on. 62 63def A64FXGI7 : ProcResGroup<[A64FXIPBR]>; 64 65def A64FXGI0 : ProcResGroup<[A64FXIPFLA]>; 66 67def A64FXGI1 : ProcResGroup<[A64FXIPPR]>; 68 69def A64FXGI2 : ProcResGroup<[A64FXIPEXA]>; 70 71def A64FXGI3 : ProcResGroup<[A64FXIPFLB]>; 72 73def A64FXGI4 : ProcResGroup<[A64FXIPEXB]>; 74 75def A64FXGI5 : ProcResGroup<[A64FXIPEAGA]>; 76 77def A64FXGI6 : ProcResGroup<[A64FXIPEAGB]>; 78 79def A64FXGI03 : ProcResGroup<[A64FXIPFLA, A64FXIPFLB]>; 80 81def A64FXGI01 : ProcResGroup<[A64FXIPFLA, A64FXIPPR]>; 82 83def A64FXGI02 : ProcResGroup<[A64FXIPFLA, A64FXIPEXA]>; 84 85def A64FXGI12 : ProcResGroup<[A64FXIPEXA, A64FXIPPR]>; 86 87def A64FXGI15 : ProcResGroup<[A64FXIPEAGA, A64FXIPPR]>; 88 89def A64FXGI05 : ProcResGroup<[A64FXIPFLA, A64FXIPEAGA]>; 90 91def A64FXGI24 : ProcResGroup<[A64FXIPEXA, A64FXIPEXB]>; 92 93def A64FXGI124 : ProcResGroup<[A64FXIPEXA, A64FXIPEXB, A64FXIPPR]>; 94 95def A64FXGI056 : ProcResGroup<[A64FXIPFLA, A64FXIPEAGA, A64FXIPEAGB]>; 96 97def A64FXGI0256 : ProcResGroup<[A64FXIPFLA, A64FXIPEXA, A64FXIPEAGA, A64FXIPEAGB]>; 98 99def A64FXGI56 : ProcResGroup<[A64FXIPEAGA, A64FXIPEAGB]>; 100 101def A64FXGI2456 : ProcResGroup<[A64FXIPEXA, A64FXIPEXB, A64FXIPEAGA, A64FXIPEAGB]>; 102 103def A64FXAny : ProcResGroup<[A64FXIPFLA, A64FXIPPR, A64FXIPEXA, A64FXIPFLB, 104 A64FXIPEXB, A64FXIPEAGA, A64FXIPEAGB, A64FXIPBR]> { 105 let BufferSize = 60; 106} 107 108def A64FXWrite_6Cyc : SchedWriteRes<[]> { 109 let Latency = 6; 110} 111 112def A64FXWrite_1Cyc_GI7 : SchedWriteRes<[A64FXGI7]> { 113 let Latency = 1; 114} 115 116def A64FXWrite_2Cyc_GI0 : SchedWriteRes<[A64FXGI0]> { 117 let Latency = 2; 118} 119 120def A64FXWrite_4Cyc_GI0 : SchedWriteRes<[A64FXGI0]> { 121 let Latency = 4; 122} 123 124def A64FXWrite_5Cyc_GI0 : SchedWriteRes<[A64FXGI0]> { 125 let Latency = 5; 126} 127 128def A64FXWrite_6Cyc_GI0 : SchedWriteRes<[A64FXGI0]> { 129 let Latency = 6; 130} 131 132def A64FXWrite_8Cyc_GI0 : SchedWriteRes<[A64FXGI0]> { 133 let Latency = 8; 134} 135 136def A64FXWrite_9Cyc_GI0 : SchedWriteRes<[A64FXGI0]> { 137 let Latency = 9; 138} 139 140def A64FXWrite_13Cyc_GI0 : SchedWriteRes<[A64FXGI0]> { 141 let Latency = 13; 142} 143 144def A64FXWrite_37Cyc_GI0 : SchedWriteRes<[A64FXGI0]> { 145 let Latency = 37; 146} 147 148def A64FXWrite_98Cyc_GI0 : SchedWriteRes<[A64FXGI0]> { 149 let Latency = 98; 150} 151 152def A64FXWrite_134Cyc_GI0 : SchedWriteRes<[A64FXGI0]> { 153 let Latency = 134; 154} 155 156def A64FXWrite_154Cyc_GI0 : SchedWriteRes<[A64FXGI0]> { 157 let Latency = 154; 158} 159 160def A64FXWrite_4Cyc_GI01 : SchedWriteRes<[A64FXGI01]> { 161 let Latency = 4; 162} 163 164def A64FXWrite_6Cyc_GI01 : SchedWriteRes<[A64FXGI01]> { 165 let Latency = 6; 166} 167 168def A64FXWrite_8Cyc_GI01 : SchedWriteRes<[A64FXGI01]> { 169 let Latency = 8; 170} 171 172def A64FXWrite_12Cyc_GI01 : SchedWriteRes<[A64FXGI01]> { 173 let Latency = 12; 174} 175 176def A64FXWrite_10Cyc_GI02 : SchedWriteRes<[A64FXGI02]> { 177 let Latency = 10; 178} 179 180def A64FXWrite_17Cyc_GI02 : SchedWriteRes<[A64FXGI02]> { 181 let Latency = 17; 182} 183 184def A64FXWrite_21Cyc_GI02 : SchedWriteRes<[A64FXGI02]> { 185 let Latency = 21; 186} 187 188def A64FXWrite_3Cyc_GI1 : SchedWriteRes<[A64FXGI1]> { 189 let Latency = 3; 190} 191 192def A64FXWrite_6Cyc_NGI1 : SchedWriteRes<[A64FXGI1]> { 193 let Latency = 3; 194 let NumMicroOps = 2; 195} 196 197def A64FXWrite_4Cyc_GI12 : SchedWriteRes<[A64FXGI12]> { 198 let Latency = 4; 199} 200 201def A64FXWrite_3Cyc_GI2 : SchedWriteRes<[A64FXGI2]> { 202 let Latency = 3; 203} 204 205def A64FXWrite_5Cyc_GI2 : SchedWriteRes<[A64FXGI2]> { 206 let Latency = 5; 207} 208 209def A64FXWrite_6Cyc_GI2 : SchedWriteRes<[A64FXGI2]> { 210 let Latency = 6; 211} 212 213def A64FXWrite_4Cyc_GI3 : SchedWriteRes<[A64FXGI3]> { 214 let Latency = 4; 215} 216 217def A64FXWrite_6Cyc_GI3 : SchedWriteRes<[A64FXGI3]> { 218 let Latency = 6; 219} 220 221def A64FXWrite_6Cyc_GI15 : SchedWriteRes<[A64FXGI15]> { 222 let Latency = 6; 223} 224 225def A64FXWrite_3Cyc_GI03 : SchedWriteRes<[A64FXGI03]> { 226 let Latency = 3; 227} 228 229def A64FXWrite_4Cyc_GI03 : SchedWriteRes<[A64FXGI03]> { 230 let Latency = 4; 231} 232 233def A64FXWrite_6Cyc_GI03 : SchedWriteRes<[A64FXGI03]> { 234 let Latency = 6; 235} 236 237def A64FXWrite_8Cyc_GI03 : SchedWriteRes<[A64FXGI03]> { 238 let Latency = 8; 239} 240 241def A64FXWrite_9Cyc_GI03 : SchedWriteRes<[A64FXGI03]> { 242 let Latency = 9; 243} 244 245def A64FXWrite_10Cyc_GI03 : SchedWriteRes<[A64FXGI03]> { 246 let Latency = 10; 247} 248 249def A64FXWrite_12Cyc_GI03 : SchedWriteRes<[A64FXGI03]> { 250 let Latency = 12; 251} 252 253def A64FXWrite_14Cyc_GI03 : SchedWriteRes<[A64FXGI03]> { 254 let Latency = 14; 255} 256 257def A64FXWrite_15Cyc_GI03 : SchedWriteRes<[A64FXGI03]> { 258 let Latency = 15; 259} 260 261def A64FXWrite_15Cyc_NGI03 : SchedWriteRes<[A64FXGI03]> { 262 let Latency = 15; 263 let NumMicroOps = 2; 264} 265 266def A64FXWrite_18Cyc_GI03 : SchedWriteRes<[A64FXGI03]> { 267 let Latency = 18; 268} 269 270def A64FXWrite_45Cyc_GI03 : SchedWriteRes<[A64FXGI03]> { 271 let Latency = 45; 272} 273 274def A64FXWrite_60Cyc_GI03 : SchedWriteRes<[A64FXGI03]> { 275 let Latency = 60; 276} 277 278def A64FXWrite_75Cyc_GI03 : SchedWriteRes<[A64FXGI03]> { 279 let Latency = 75; 280} 281 282def A64FXWrite_6Cyc_GI05 : SchedWriteRes<[A64FXGI05]> { 283 let Latency = 6; 284} 285 286def A64FXWrite_10Cyc_GI4 : SchedWriteRes<[A64FXGI4]> { 287 let Latency = 10; 288} 289 290def A64FXWrite_12Cyc_GI4 : SchedWriteRes<[A64FXGI4]> { 291 let Latency = 12; 292} 293 294def A64FXWrite_20Cyc_GI4 : SchedWriteRes<[A64FXGI4]> { 295 let Latency = 20; 296} 297 298def A64FXWrite_5Cyc_GI5 : SchedWriteRes<[A64FXGI5]> { 299 let Latency = 5; 300} 301 302def A64FXWrite_11Cyc_GI5 : SchedWriteRes<[A64FXGI5]> { 303 let Latency = 11; 304} 305 306def A64FXWrite_5Cyc_GI6 : SchedWriteRes<[A64FXGI6]> { 307 let Latency = 5; 308} 309 310def A64FXWrite_1Cyc_GI24 : SchedWriteRes<[A64FXGI24]> { 311 let Latency = 1; 312} 313 314def A64FXWrite_2Cyc_GI24 : SchedWriteRes<[A64FXGI24]> { 315 let Latency = 2; 316} 317 318def A64FXWrite_4Cyc_NGI24 : SchedWriteRes<[A64FXGI24]> { 319 let Latency = 4; 320 let NumMicroOps = 4; 321} 322 323def A64FXWrite_6Cyc_GI124: SchedWriteRes<[A64FXGI124]> { 324 let Latency = 6; 325} 326 327def A64FXWrite_8Cyc_GI124 : SchedWriteRes<[A64FXGI124]> { 328 let Latency = 8; 329 let NumMicroOps = 2; 330} 331 332def A64FXWrite_6Cyc_GI56 : SchedWriteRes<[A64FXGI56]> { 333 let Latency = 0; 334} 335 336def A64FXWrite_1Cyc_GI56 : SchedWriteRes<[A64FXGI56]> { 337 let Latency = 1; 338} 339 340def A64FXWrite_5Cyc_GI56 : SchedWriteRes<[A64FXGI56]> { 341 let Latency = 5; 342} 343 344def A64FXWrite_8Cyc_GI56 : SchedWriteRes<[A64FXGI56]> { 345 let Latency = 8; 346} 347 348def A64FXWrite_11Cyc_GI56 : SchedWriteRes<[A64FXGI56]> { 349 let Latency = 11; 350} 351 352def A64FXWrite_44Cyc_GI56 : SchedWriteRes<[A64FXGI56]> { 353 let Latency = 44; 354} 355 356def A64FXWrite_10Cyc_GI056 : SchedWriteRes<[A64FXGI056]> { 357 let Latency = 10; 358} 359 360def A64FXWrite_15Cyc_GI056 : SchedWriteRes<[A64FXGI056]> { 361 let Latency = 15; 362} 363 364def A64FXWrite_19Cyc_GI056 : SchedWriteRes<[A64FXGI056]> { 365 let Latency = 19; 366} 367 368def A64FXWrite_25Cyc_GI056 : SchedWriteRes<[A64FXGI056]> { 369 let Latency = 25; 370} 371 372def A64FXWrite_14Cyc_GI0256 : SchedWriteRes<[A64FXGI0256]> { 373 let Latency = 14; 374} 375 376def A64FXWrite_19Cyc_GI0256 : SchedWriteRes<[A64FXGI0256]> { 377 let Latency = 19; 378} 379 380def A64FXWrite_29Cyc_GI0256 : SchedWriteRes<[A64FXGI0256]> { 381 let Latency = 29; 382} 383 384def A64FXWrite_LDNP: SchedWriteRes<[A64FXGI56]> { 385 let Latency = 5; 386 let NumMicroOps = 2; 387} 388 389def A64FXWrite_LDP01: SchedWriteRes<[A64FXGI2456]> { 390 let Latency = 5; 391 let NumMicroOps = 3; 392} 393 394def A64FXWrite_LDR01: SchedWriteRes<[A64FXGI2456]> { 395 let Latency = 5; 396 let NumMicroOps = 2; 397} 398 399def A64FXWrite_LD102: SchedWriteRes<[A64FXGI56]> { 400 let Latency = 8; 401 let NumMicroOps = 2; 402} 403 404def A64FXWrite_LD103: SchedWriteRes<[A64FXGI56]> { 405 let Latency = 11; 406 let NumMicroOps = 2; 407 408} 409 410def A64FXWrite_LD104: SchedWriteRes<[A64FXGI56]> { 411 let Latency = 8; 412 let NumMicroOps = 3; 413} 414 415def A64FXWrite_LD105: SchedWriteRes<[A64FXGI56]> { 416 let Latency = 11; 417 let NumMicroOps = 3; 418} 419 420def A64FXWrite_LD106: SchedWriteRes<[A64FXGI56]> { 421 let Latency = 8; 422 let NumMicroOps = 4; 423} 424 425def A64FXWrite_LD107: SchedWriteRes<[A64FXGI56]> { 426 let Latency = 11; 427 let NumMicroOps = 4; 428} 429 430def A64FXWrite_LD108: SchedWriteRes<[A64FXGI56]> { 431 let Latency = 8; 432 let NumMicroOps = 2; 433} 434 435def A64FXWrite_LD109: SchedWriteRes<[A64FXGI56]> { 436 let Latency = 11; 437 let NumMicroOps = 2; 438} 439 440def A64FXWrite_LD110: SchedWriteRes<[A64FXGI56]> { 441 let Latency = 8; 442 let NumMicroOps = 3; 443} 444 445def A64FXWrite_LD111: SchedWriteRes<[A64FXGI56]> { 446 let Latency = 11; 447 let NumMicroOps = 3; 448} 449 450def A64FXWrite_LD112: SchedWriteRes<[A64FXGI56]> { 451 let Latency = 8; 452 let NumMicroOps = 4; 453} 454 455def A64FXWrite_LD113: SchedWriteRes<[A64FXGI56]> { 456 let Latency = 11; 457 let NumMicroOps = 4; 458} 459 460def A64FXWrite_LD114: SchedWriteRes<[A64FXGI56]> { 461 let Latency = 8; 462 let NumMicroOps = 5; 463} 464 465def A64FXWrite_LD115: SchedWriteRes<[A64FXGI56]> { 466 let Latency = 11; 467 let NumMicroOps = 5; 468} 469 470def A64FXWrite_LD1I0: SchedWriteRes<[A64FXGI056]> { 471 let Latency = 8; 472 let NumMicroOps = 2; 473} 474 475def A64FXWrite_LD1I1: SchedWriteRes<[A64FXGI056]> { 476 let Latency = 8; 477 let NumMicroOps = 3; 478} 479 480def A64FXWrite_LD2I0: SchedWriteRes<[A64FXGI056]> { 481 let Latency = 8; 482 let NumMicroOps = 4; 483} 484 485def A64FXWrite_LD2I1: SchedWriteRes<[A64FXGI056]> { 486 let Latency = 8; 487 let NumMicroOps = 5; 488} 489 490def A64FXWrite_LD3I0: SchedWriteRes<[A64FXGI056]> { 491 let Latency = 8; 492 let NumMicroOps = 6; 493} 494 495def A64FXWrite_LD3I1: SchedWriteRes<[A64FXGI056]> { 496 let Latency = 8; 497 let NumMicroOps = 7; 498} 499 500def A64FXWrite_LD4I0: SchedWriteRes<[A64FXGI056]> { 501 let Latency = 8; 502 let NumMicroOps = 8; 503} 504 505def A64FXWrite_LD4I1: SchedWriteRes<[A64FXGI056]> { 506 let Latency = 8; 507 let NumMicroOps = 9; 508} 509 510def A64FXWrite_1Cyc_GI2456 : SchedWriteRes<[A64FXGI2456]> { 511 let Latency = 1; 512} 513 514def A64FXWrite_FMOV_GV : SchedWriteRes<[A64FXGI03]> { 515 let Latency = 10; 516} 517 518def A64FXWrite_FMOV_VG14 : SchedWriteRes<[A64FXGI03]> { 519 let Latency = 14; 520} 521 522def A64FXWrite_FMOV_VG : SchedWriteRes<[A64FXGI03]> { 523 let Latency = 25; 524} 525 526def A64FXWrite_ADDLV : SchedWriteRes<[A64FXGI03]> { 527 let Latency = 12; 528} 529 530def A64FXWrite_MULLE : SchedWriteRes<[A64FXGI03]> { 531 let Latency = 14; 532} 533 534def A64FXWrite_MULLV : SchedWriteRes<[A64FXGI03]> { 535 let Latency = 14; 536} 537 538def A64FXWrite_MADDL : SchedWriteRes<[A64FXGI03]> { 539 let Latency = 6; 540} 541 542def A64FXWrite_ABA : SchedWriteRes<[A64FXGI03]> { 543 let Latency = 8; 544} 545 546def A64FXWrite_ABAL : SchedWriteRes<[A64FXGI03]> { 547 let Latency = 10; 548} 549 550def A64FXWrite_ADDLV1 : SchedWriteRes<[A64FXGI03]> { 551 let Latency = 12; 552 let NumMicroOps = 6; 553} 554 555def A64FXWrite_MINMAXV : SchedWriteRes<[A64FXGI03]> { 556 let Latency = 14; 557 let NumMicroOps = 6; 558} 559 560def A64FXWrite_SQRDMULH : SchedWriteRes<[A64FXGI03]> { 561 let Latency = 9; 562} 563 564def A64FXWrite_PMUL : SchedWriteRes<[A64FXGI03]> { 565 let Latency = 8; 566} 567 568 569def A64FXWrite_SRSRAV : SchedWriteRes<[A64FXGI03]> { 570 let Latency = 8; 571 let NumMicroOps = 3; 572} 573 574def A64FXWrite_SSRAV : SchedWriteRes<[A64FXGI03]> { 575 let Latency = 8; 576 let NumMicroOps = 2; 577} 578 579def A64FXWrite_RSHRN : SchedWriteRes<[A64FXGI03]> { 580 let Latency = 10; 581 let NumMicroOps = 3; 582} 583 584def A64FXWrite_SHRN : SchedWriteRes<[A64FXGI03]> { 585 let Latency = 10; 586 let NumMicroOps = 2; 587} 588 589 590def A64FXWrite_ADDP : SchedWriteRes<[A64FXGI03]> { 591 let Latency = 10; 592 let NumMicroOps = 3; 593} 594 595def A64FXWrite_FMULXE : SchedWriteRes<[A64FXGI03]> { 596 let Latency = 15; 597 let NumMicroOps = 2; 598} 599 600def A64FXWrite_FADDPV : SchedWriteRes<[A64FXGI03]> { 601 let Latency = 15; 602 let NumMicroOps = 3; 603} 604 605def A64FXWrite_SADALP : SchedWriteRes<[A64FXGI03]> { 606 let Latency = 10; 607 let NumMicroOps = 3; 608} 609 610def A64FXWrite_SADDLP : SchedWriteRes<[A64FXGI03]> { 611 let Latency = 10; 612 let NumMicroOps = 2; 613} 614 615def A64FXWrite_FCVTXNV : SchedWriteRes<[A64FXGI03]> { 616 let Latency = 15; 617 let NumMicroOps = 2; 618} 619 620def A64FXWrite_FMAXVVH : SchedWriteRes<[A64FXGI03]> { 621 let Latency = 14; 622 let NumMicroOps = 7; 623} 624 625def A64FXWrite_FMAXVVS : SchedWriteRes<[A64FXGI03]> { 626 let Latency = 14; 627} 628 629def A64FXWrite_BIF : SchedWriteRes<[A64FXGI03]> { 630 let Latency = 5; 631} 632 633def A64FXWrite_DUPGENERAL : SchedWriteRes<[A64FXGI03]> { 634 let Latency = 10; 635} 636 637def A64FXWrite_SHA00 : SchedWriteRes<[A64FXGI0]> { 638 let Latency = 9; 639} 640 641def A64FXWrite_SHA01 : SchedWriteRes<[A64FXGI0]> { 642 let Latency = 12; 643} 644 645def A64FXWrite_SMOV : SchedWriteRes<[A64FXGI03]> { 646 let Latency = 25; 647} 648 649def A64FXWrite_TBX1 : SchedWriteRes<[A64FXGI03]> { 650 let Latency = 10; 651 let NumMicroOps = 3; 652} 653 654def A64FXWrite_TBX2 : SchedWriteRes<[A64FXGI03]> { 655 let Latency = 10; 656 let NumMicroOps = 5; 657} 658 659def A64FXWrite_TBX3 : SchedWriteRes<[A64FXGI03]> { 660 let Latency = 10; 661 let NumMicroOps = 7; 662} 663 664def A64FXWrite_TBX4 : SchedWriteRes<[A64FXGI03]> { 665 let Latency = 10; 666 let NumMicroOps = 9; 667} 668 669def A64FXWrite_PREF0: SchedWriteRes<[A64FXGI56]> { 670 let Latency = 0; 671} 672 673def A64FXWrite_PREF1: SchedWriteRes<[A64FXGI56]> { 674 let Latency = 0; 675} 676 677def A64FXWrite_SWP: SchedWriteRes<[A64FXGI56]> { 678 let Latency = 0; 679} 680 681def A64FXWrite_STUR: SchedWriteRes<[A64FXGI56]> { 682 let Latency = 0; 683} 684 685def A64FXWrite_STNP: SchedWriteRes<[A64FXGI56]> { 686 let Latency = 0; 687} 688 689def A64FXWrite_STP01: SchedWriteRes<[A64FXGI56]> { 690 let Latency = 0; 691} 692 693def A64FXWrite_ST10: SchedWriteRes<[A64FXGI56]> { 694 let Latency = 0; 695} 696 697def A64FXWrite_ST11: SchedWriteRes<[A64FXGI56]> { 698 let Latency = 0; 699} 700 701def A64FXWrite_ST12: SchedWriteRes<[A64FXGI56]> { 702 let Latency = 0; 703} 704 705def A64FXWrite_ST13: SchedWriteRes<[A64FXGI56]> { 706 let Latency = 0; 707} 708 709def A64FXWrite_ST14: SchedWriteRes<[A64FXGI56]> { 710 let Latency = 1; 711} 712 713def A64FXWrite_ST15: SchedWriteRes<[A64FXGI56]> { 714 let Latency = 1; 715} 716 717def A64FXWrite_ST16: SchedWriteRes<[A64FXGI56]> { 718 let Latency = 1; 719} 720 721def A64FXWrite_ST17: SchedWriteRes<[A64FXGI56]> { 722 let Latency = 1; 723} 724 725def A64FXWrite_ST1W_6: SchedWriteRes<[A64FXGI056]> { 726 let Latency = 6; 727} 728 729def A64FXWrite_ST2W_7: SchedWriteRes<[A64FXGI056]> { 730 let Latency = 7; 731} 732 733def A64FXWrite_ST3W_8: SchedWriteRes<[A64FXGI056]> { 734 let Latency = 8; 735} 736 737def A64FXWrite_ST4W_9: SchedWriteRes<[A64FXGI056]> { 738 let Latency = 9; 739} 740 741def A64FXWrite_ST1W_15: SchedWriteRes<[A64FXGI056]> { 742 let Latency = 15; 743} 744 745def A64FXWrite_ST1W_19: SchedWriteRes<[A64FXGI056]> { 746 let Latency = 19; 747} 748 749def A64FXWrite_CAS: SchedWriteRes<[A64FXGI56]> { 750 let Latency = 7; 751} 752 753// Define commonly used read types. 754 755// No forwarding is provided for these types. 756def : ReadAdvance<ReadI, 0>; 757def : ReadAdvance<ReadISReg, 0>; 758def : ReadAdvance<ReadIEReg, 0>; 759def : ReadAdvance<ReadIM, 0>; 760def : ReadAdvance<ReadIMA, 0>; 761def : ReadAdvance<ReadID, 0>; 762def : ReadAdvance<ReadExtrHi, 0>; 763def : ReadAdvance<ReadAdrBase, 0>; 764def : ReadAdvance<ReadST, 0>; 765def : ReadAdvance<ReadVLD, 0>; 766 767//===----------------------------------------------------------------------===// 768// 3. Instruction Tables. 769 770//--- 771// 3.1 Branch Instructions 772//--- 773 774// Branch, immed 775// Branch and link, immed 776// Compare and branch 777def : WriteRes<WriteBr, [A64FXGI7]> { 778 let Latency = 1; 779} 780 781// Branch, register 782// Branch and link, register != LR 783// Branch and link, register = LR 784def : WriteRes<WriteBrReg, [A64FXGI7]> { 785 let Latency = 1; 786} 787 788def : WriteRes<WriteSys, []> { let Latency = 1; } 789def : WriteRes<WriteBarrier, []> { let Latency = 1; } 790def : WriteRes<WriteHint, []> { let Latency = 1; } 791 792def : WriteRes<WriteAtomic, []> { 793 let Latency = 4; 794} 795 796//--- 797// Branch 798//--- 799def : InstRW<[A64FXWrite_1Cyc_GI7], (instrs B, BL, BR, BLR)>; 800def : InstRW<[A64FXWrite_1Cyc_GI7], (instrs RET)>; 801def : InstRW<[A64FXWrite_1Cyc_GI7], (instregex "^B..$")>; 802def : InstRW<[A64FXWrite_1Cyc_GI7], 803 (instregex "^CBZ", "^CBNZ", "^TBZ", "^TBNZ")>; 804 805//--- 806// 3.2 Arithmetic and Logical Instructions 807// 3.3 Move and Shift Instructions 808//--- 809 810// ALU, basic 811// Conditional compare 812// Conditional select 813// Address generation 814def : WriteRes<WriteI, [A64FXGI2456]> { 815 let Latency = 1; 816 let ResourceCycles = [1]; 817} 818 819def : InstRW<[WriteI], 820 (instregex "ADD?(W|X)r(i|r|s|x)", "ADDS?(W|X)r(i|r|s|x)(64)?", 821 "AND?(W|X)r(i|r|s|x)", "ANDS?(W|X)r(i|r|s|x)", 822 "ADC(W|X)r", 823 "BIC?(W|X)r(i|r|s|x)", "BICS?(W|X)r(i|r|s|x)", 824 "EON?(W|X)r(i|r|s|x)", "ORN?(W|X)r(i|r|s|x)", 825 "ORR?(W|X)r(i|r|s|x)", "SUB?(W|X)r(i|r|s|x)", 826 "SUBS?(W|X)r(i|r|s|x)", "SBC(W|X)r", 827 "SBCS(W|X)r", "CCMN(W|X)(i|r)", 828 "CCMP(W|X)(i|r)", "CSEL(W|X)r", 829 "CSINC(W|X)r", "CSINV(W|X)r", 830 "CSNEG(W|X)r")>; 831 832def : InstRW<[WriteI], (instrs COPY)>; 833 834// ALU, extend and/or shift 835def : WriteRes<WriteISReg, [A64FXGI2456]> { 836 let Latency = 2; 837 let ResourceCycles = [1]; 838} 839 840def : InstRW<[WriteISReg], 841 (instregex "ADD?(W|X)r(i|r|s|x)", "ADDS?(W|X)r(i|r|s|x)(64)?", 842 "AND?(W|X)r(i|r|s|x)", "ANDS?(W|X)r(i|r|s|x)", 843 "ADC(W|X)r", 844 "BIC?(W|X)r(i|r|s|x)", "BICS?(W|X)r(i|r|s|x)", 845 "EON?(W|X)r(i|r|s|x)", "ORN?(W|X)r(i|r|s|x)", 846 "ORR?(W|X)r(i|r|s|x)", "SUB?(W|X)r(i|r|s|x)", 847 "SUBS?(W|X)r(i|r|s|x)", "SBC(W|X)r", 848 "SBCS(W|X)r", "CCMN(W|X)(i|r)", 849 "CCMP(W|X)(i|r)", "CSEL(W|X)r", 850 "CSINC(W|X)r", "CSINV(W|X)r", 851 "CSNEG(W|X)r")>; 852 853def : WriteRes<WriteIEReg, [A64FXGI2456]> { 854 let Latency = 1; 855 let ResourceCycles = [1]; 856} 857 858def : InstRW<[WriteIEReg], 859 (instregex "ADD?(W|X)r(i|r|s|x)", "ADDS?(W|X)r(i|r|s|x)(64)?", 860 "AND?(W|X)r(i|r|s|x)", "ANDS?(W|X)r(i|r|s|x)", 861 "ADC(W|X)r", 862 "BIC?(W|X)r(i|r|s|x)", "BICS?(W|X)r(i|r|s|x)", 863 "EON?(W|X)r(i|r|s|x)", "ORN?(W|X)r(i|r|s|x)", 864 "ORR?(W|X)r(i|r|s|x)", "SUB?(W|X)r(i|r|s|x)", 865 "SUBS?(W|X)r(i|r|s|x)", "SBC(W|X)r", 866 "SBCS(W|X)r", "CCMN(W|X)(i|r)", 867 "CCMP(W|X)(i|r)", "CSEL(W|X)r", 868 "CSINC(W|X)r", "CSINV(W|X)r", 869 "CSNEG(W|X)r")>; 870 871// Move immed 872def : WriteRes<WriteImm, [A64FXGI2456]> { 873 let Latency = 1; 874 let ResourceCycles = [1]; 875} 876 877def : InstRW<[A64FXWrite_1Cyc_GI2456], 878 (instrs MOVKWi, MOVKXi, MOVNWi, MOVNXi, MOVZWi, MOVZXi)>; 879 880def : InstRW<[A64FXWrite_2Cyc_GI24], 881 (instrs ASRVWr, ASRVXr, LSLVWr, LSLVXr, RORVWr, RORVXr)>; 882 883// Variable shift 884def : WriteRes<WriteIS, [A64FXGI2456]> { 885 let Latency = 1; 886 let ResourceCycles = [1]; 887} 888 889//--- 890// 3.4 Divide and Multiply Instructions 891//--- 892 893// Divide, W-form 894def : WriteRes<WriteID32, [A64FXGI4]> { 895 let Latency = 39; 896 let ResourceCycles = [39]; 897} 898 899// Divide, X-form 900def : WriteRes<WriteID64, [A64FXGI4]> { 901 let Latency = 23; 902 let ResourceCycles = [23]; 903} 904 905// Multiply accumulate, W-form 906def : WriteRes<WriteIM32, [A64FXGI2456]> { 907 let Latency = 5; 908 let ResourceCycles = [1]; 909} 910 911// Multiply accumulate, X-form 912def : WriteRes<WriteIM64, [A64FXGI2456]> { 913 let Latency = 5; 914 let ResourceCycles = [1]; 915} 916 917def : InstRW<[WriteIM32], (instrs MADDWrrr, MSUBWrrr)>; 918def : InstRW<[WriteIM32], (instrs MADDXrrr, MSUBXrrr)>; 919def : InstRW<[A64FXWrite_MADDL], 920 (instregex "(S|U)(MADDL|MSUBL)rrr")>; 921 922def : InstRW<[WriteID32], (instrs SDIVWr, UDIVWr)>; 923def : InstRW<[WriteID64], (instrs SDIVXr, UDIVXr)>; 924 925// Bitfield extract, two reg 926def : WriteRes<WriteExtr, [A64FXGI2456]> { 927 let Latency = 1; 928 let ResourceCycles = [1]; 929} 930 931// Multiply high 932def : InstRW<[A64FXWrite_5Cyc_GI2], (instrs SMULHrr, UMULHrr)>; 933 934// Miscellaneous Data-Processing Instructions 935// Bitfield extract 936def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs EXTRWrri, EXTRXrri)>; 937 938// Bitifield move - basic 939def : InstRW<[A64FXWrite_1Cyc_GI24], 940 (instrs SBFMWri, SBFMXri, UBFMWri, UBFMXri)>; 941 942// Bitfield move, insert 943def : InstRW<[A64FXWrite_4Cyc_NGI24], (instregex "^BFM")>; 944def : InstRW<[A64FXWrite_1Cyc_GI24], (instregex "(S|U)?BFM.*")>; 945 946// Count leading 947def : InstRW<[A64FXWrite_2Cyc_GI0], (instregex "^CLS(W|X)r$", 948 "^CLZ(W|X)r$")>; 949 950// Reverse bits 951def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs RBITWr, RBITXr)>; 952 953// Cryptography Extensions 954def : InstRW<[A64FXWrite_8Cyc_GI0], (instregex "^AES[DE]")>; 955def : InstRW<[A64FXWrite_8Cyc_GI0], (instregex "^AESI?MC")>; 956def : InstRW<[A64FXWrite_8Cyc_GI0], (instregex "^PMULL")>; 957def : InstRW<[A64FXWrite_SHA00], (instregex "^SHA1SU0")>; 958def : InstRW<[A64FXWrite_8Cyc_GI0], (instregex "^SHA1(H|SU1)")>; 959def : InstRW<[A64FXWrite_SHA01], (instregex "^SHA1[CMP]")>; 960def : InstRW<[A64FXWrite_8Cyc_GI0], (instregex "^SHA256SU0")>; 961def : InstRW<[A64FXWrite_8Cyc_GI0], (instregex "^SHA256SU1")>; 962def : InstRW<[A64FXWrite_SHA01], (instregex "^SHA256(H|H2)")>; 963 964// CRC Instructions 965def : InstRW<[A64FXWrite_10Cyc_GI4], (instrs CRC32Brr, CRC32Hrr)>; 966def : InstRW<[A64FXWrite_12Cyc_GI4], (instrs CRC32Wrr)>; 967def : InstRW<[A64FXWrite_20Cyc_GI4], (instrs CRC32Xrr)>; 968 969def : InstRW<[A64FXWrite_10Cyc_GI4], (instrs CRC32CBrr, CRC32CHrr)>; 970def : InstRW<[A64FXWrite_12Cyc_GI4], (instrs CRC32CWrr)>; 971def : InstRW<[A64FXWrite_20Cyc_GI4], (instrs CRC32CXrr)>; 972 973// Reverse bits/bytes 974// NOTE: Handled by WriteI. 975 976//--- 977// 3.6 Load Instructions 978// 3.10 FP Load Instructions 979//--- 980 981// Load register, literal 982// Load register, unscaled immed 983// Load register, immed unprivileged 984// Load register, unsigned immed 985def : WriteRes<WriteLD, [A64FXGI56]> { 986 let Latency = 4; 987 let ResourceCycles = [3]; 988} 989 990// Load register, immed post-index 991// NOTE: Handled by WriteLD, WriteI. 992// Load register, immed pre-index 993// NOTE: Handled by WriteLD, WriteAdr. 994def : WriteRes<WriteAdr, [A64FXGI2456]> { 995 let Latency = 1; 996 let ResourceCycles = [1]; 997} 998 999// Load pair, immed offset, normal 1000// Load pair, immed offset, signed words, base != SP 1001// Load pair, immed offset signed words, base = SP 1002// LDP only breaks into *one* LS micro-op. Thus 1003// the resources are handled by WriteLD. 1004def : WriteRes<WriteLDHi, []> { 1005 let Latency = 5; 1006} 1007 1008// Load register offset, basic 1009// Load register, register offset, scale by 4/8 1010// Load register, register offset, scale by 2 1011// Load register offset, extend 1012// Load register, register offset, extend, scale by 4/8 1013// Load register, register offset, extend, scale by 2 1014def A64FXWriteLDIdx : SchedWriteVariant<[ 1015 SchedVar<ScaledIdxPred, [A64FXWrite_1Cyc_GI56]>, 1016 SchedVar<NoSchedPred, [A64FXWrite_1Cyc_GI56]>]>; 1017def : SchedAlias<WriteLDIdx, A64FXWriteLDIdx>; 1018 1019def A64FXReadAdrBase : SchedReadVariant<[ 1020 SchedVar<ScaledIdxPred, [ReadDefault]>, 1021 SchedVar<NoSchedPred, [ReadDefault]>]>; 1022def : SchedAlias<ReadAdrBase, A64FXReadAdrBase>; 1023 1024// Load pair, immed pre-index, normal 1025// Load pair, immed pre-index, signed words 1026// Load pair, immed post-index, normal 1027// Load pair, immed post-index, signed words 1028// NOTE: Handled by WriteLD, WriteLDHi, WriteAdr. 1029 1030def : InstRW<[A64FXWrite_LDNP, WriteLDHi], (instrs LDNPDi)>; 1031def : InstRW<[A64FXWrite_LDNP, WriteLDHi], (instrs LDNPQi)>; 1032def : InstRW<[A64FXWrite_LDNP, WriteLDHi], (instrs LDNPSi)>; 1033def : InstRW<[A64FXWrite_LDNP, WriteLDHi], (instrs LDNPWi)>; 1034def : InstRW<[A64FXWrite_LDNP, WriteLDHi], (instrs LDNPXi)>; 1035 1036def : InstRW<[A64FXWrite_LDNP, WriteLDHi], (instrs LDPDi)>; 1037def : InstRW<[A64FXWrite_LDNP, WriteLDHi], (instrs LDPQi)>; 1038def : InstRW<[A64FXWrite_LDNP, WriteLDHi], (instrs LDPSi)>; 1039def : InstRW<[A64FXWrite_LDNP, WriteLDHi], (instrs LDPSWi)>; 1040def : InstRW<[A64FXWrite_LDNP, WriteLDHi], (instrs LDPWi)>; 1041def : InstRW<[A64FXWrite_LDNP, WriteLDHi], (instrs LDPXi)>; 1042 1043def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDRBui)>; 1044def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDRDui)>; 1045def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDRHui)>; 1046def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDRQui)>; 1047def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDRSui)>; 1048 1049def : InstRW<[A64FXWrite_5Cyc_GI6], (instrs LDRDl)>; 1050def : InstRW<[A64FXWrite_5Cyc_GI6], (instrs LDRQl)>; 1051def : InstRW<[A64FXWrite_5Cyc_GI6], (instrs LDRWl)>; 1052def : InstRW<[A64FXWrite_5Cyc_GI6], (instrs LDRXl)>; 1053 1054def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDTRBi)>; 1055def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDTRHi)>; 1056def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDTRWi)>; 1057def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDTRXi)>; 1058 1059def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDTRSBWi)>; 1060def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDTRSBXi)>; 1061def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDTRSHWi)>; 1062def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDTRSHXi)>; 1063def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDTRSWi)>; 1064 1065def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1066 (instrs LDPDpre)>; 1067def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1068 (instrs LDPQpre)>; 1069def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1070 (instrs LDPSpre)>; 1071def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1072 (instrs LDPWpre)>; 1073def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1074 (instrs LDPWpre)>; 1075 1076def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRBpre)>; 1077def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRDpre)>; 1078def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRHpre)>; 1079def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRQpre)>; 1080def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRSpre)>; 1081def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRWpre)>; 1082def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRXpre)>; 1083 1084def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRSBWpre)>; 1085def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRSBXpre)>; 1086def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRSBWpost)>; 1087def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRSBXpost)>; 1088 1089def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRSHWpre)>; 1090def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRSHXpre)>; 1091def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRSHWpost)>; 1092def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRSHXpost)>; 1093 1094def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRBBpre)>; 1095def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRBBpost)>; 1096 1097def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRHHpre)>; 1098def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRHHpost)>; 1099 1100def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1101 (instrs LDPDpost)>; 1102def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1103 (instrs LDPQpost)>; 1104def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1105 (instrs LDPSpost)>; 1106def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1107 (instrs LDPWpost)>; 1108def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1109 (instrs LDPXpost)>; 1110 1111def : InstRW<[A64FXWrite_LDR01, WriteI], (instrs LDRBpost)>; 1112def : InstRW<[A64FXWrite_LDR01, WriteI], (instrs LDRDpost)>; 1113def : InstRW<[A64FXWrite_LDR01, WriteI], (instrs LDRHpost)>; 1114def : InstRW<[A64FXWrite_LDR01, WriteI], (instrs LDRQpost)>; 1115def : InstRW<[A64FXWrite_LDR01, WriteI], (instrs LDRSpost)>; 1116def : InstRW<[A64FXWrite_LDR01, WriteI], (instrs LDRWpost)>; 1117def : InstRW<[A64FXWrite_LDR01, WriteI], (instrs LDRXpost)>; 1118 1119def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1120 (instrs LDPDpre)>; 1121def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1122 (instrs LDPQpre)>; 1123def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1124 (instrs LDPSpre)>; 1125def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1126 (instrs LDPWpre)>; 1127def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1128 (instrs LDPXpre)>; 1129 1130def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRBpre)>; 1131def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRDpre)>; 1132def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRHpre)>; 1133def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRQpre)>; 1134def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRSpre)>; 1135def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRWpre)>; 1136def : InstRW<[A64FXWrite_LDR01, WriteAdr], (instrs LDRXpre)>; 1137 1138def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1139 (instrs LDPDpost)>; 1140def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1141 (instrs LDPQpost)>; 1142def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1143 (instrs LDPSpost)>; 1144def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1145 (instrs LDPWpost)>; 1146def : InstRW<[A64FXWrite_LDP01, WriteLDHi, WriteAdr], 1147 (instrs LDPXpost)>; 1148 1149def : InstRW<[A64FXWrite_LDR01, WriteI], (instrs LDRBpost)>; 1150def : InstRW<[A64FXWrite_LDR01, WriteI], (instrs LDRDpost)>; 1151def : InstRW<[A64FXWrite_LDR01, WriteI], (instrs LDRHpost)>; 1152def : InstRW<[A64FXWrite_LDR01, WriteI], (instrs LDRQpost)>; 1153def : InstRW<[A64FXWrite_LDR01, WriteI], (instrs LDRSpost)>; 1154def : InstRW<[A64FXWrite_LDR01, WriteI], (instrs LDRWpost)>; 1155def : InstRW<[A64FXWrite_LDR01, WriteI], (instrs LDRXpost)>; 1156 1157def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRBroW)>; 1158def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRDroW)>; 1159def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRHroW)>; 1160def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRHHroW)>; 1161def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRQroW)>; 1162def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRSroW)>; 1163def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRSHWroW)>; 1164def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRSHXroW)>; 1165def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRWroW)>; 1166def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRXroW)>; 1167 1168def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRBroX)>; 1169def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRDroX)>; 1170def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRHHroX)>; 1171def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRHroX)>; 1172def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRQroX)>; 1173def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRSroX)>; 1174def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRSHWroX)>; 1175def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRSHXroX)>; 1176def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRWroX)>; 1177def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], (instrs LDRXroX)>; 1178 1179def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1180 (instrs LDRBroW)>; 1181def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1182 (instrs LDRBroW)>; 1183def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1184 (instrs LDRDroW)>; 1185def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1186 (instrs LDRHroW)>; 1187def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1188 (instrs LDRHHroW)>; 1189def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1190 (instrs LDRQroW)>; 1191def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1192 (instrs LDRSroW)>; 1193def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1194 (instrs LDRSHWroW)>; 1195def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1196 (instrs LDRSHXroW)>; 1197def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1198 (instrs LDRWroW)>; 1199def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1200 (instrs LDRXroW)>; 1201def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1202 (instrs LDRBroX)>; 1203def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1204 (instrs LDRDroX)>; 1205def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1206 (instrs LDRHroX)>; 1207def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1208 (instrs LDRHHroX)>; 1209def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1210 (instrs LDRQroX)>; 1211def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1212 (instrs LDRSroX)>; 1213def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1214 (instrs LDRSHWroX)>; 1215def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1216 (instrs LDRSHXroX)>; 1217def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1218 (instrs LDRWroX)>; 1219def : InstRW<[A64FXWrite_5Cyc_GI56, ReadAdrBase], 1220 (instrs LDRXroX)>; 1221 1222def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDURBi)>; 1223def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDURBBi)>; 1224def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDURDi)>; 1225def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDURHi)>; 1226def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDURHHi)>; 1227def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDURQi)>; 1228def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDURSi)>; 1229def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDURXi)>; 1230def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDURSBWi)>; 1231def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDURSBXi)>; 1232def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDURSHWi)>; 1233def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDURSHXi)>; 1234def : InstRW<[A64FXWrite_5Cyc_GI56], (instrs LDURSWi)>; 1235 1236//--- 1237// Prefetch 1238//--- 1239def : InstRW<[A64FXWrite_PREF0], (instrs PRFMl)>; 1240def : InstRW<[A64FXWrite_PREF1], (instrs PRFUMi)>; 1241def : InstRW<[A64FXWrite_PREF1], (instrs PRFMui)>; 1242def : InstRW<[A64FXWrite_PREF1], (instrs PRFMroW)>; 1243def : InstRW<[A64FXWrite_PREF1], (instrs PRFMroX)>; 1244 1245//-- 1246// 3.7 Store Instructions 1247// 3.11 FP Store Instructions 1248//-- 1249 1250// Store register, unscaled immed 1251// Store register, immed unprivileged 1252// Store register, unsigned immed 1253def : WriteRes<WriteST, [A64FXGI56]> { 1254 let Latency = 1; 1255} 1256 1257// Store register, immed post-index 1258// NOTE: Handled by WriteAdr, WriteST, ReadAdrBase 1259 1260// Store register, immed pre-index 1261// NOTE: Handled by WriteAdr, WriteST 1262 1263// Store register, register offset, basic 1264// Store register, register offset, scaled by 4/8 1265// Store register, register offset, scaled by 2 1266// Store register, register offset, extend 1267// Store register, register offset, extend, scale by 4/8 1268// Store register, register offset, extend, scale by 1 1269def : WriteRes<WriteSTIdx, [A64FXGI56, A64FXGI2456]> { 1270 let Latency = 1; 1271} 1272 1273// Store pair, immed offset, W-form 1274// Store pair, immed offset, X-form 1275def : WriteRes<WriteSTP, [A64FXGI56]> { 1276 let Latency = 1; 1277} 1278 1279// Store pair, immed post-index, W-form 1280// Store pair, immed post-index, X-form 1281// Store pair, immed pre-index, W-form 1282// Store pair, immed pre-index, X-form 1283// NOTE: Handled by WriteAdr, WriteSTP. 1284 1285def : InstRW<[A64FXWrite_STUR], (instrs STURBi)>; 1286def : InstRW<[A64FXWrite_STUR], (instrs STURBBi)>; 1287def : InstRW<[A64FXWrite_STUR], (instrs STURDi)>; 1288def : InstRW<[A64FXWrite_STUR], (instrs STURHi)>; 1289def : InstRW<[A64FXWrite_STUR], (instrs STURHHi)>; 1290def : InstRW<[A64FXWrite_STUR], (instrs STURQi)>; 1291def : InstRW<[A64FXWrite_STUR], (instrs STURSi)>; 1292def : InstRW<[A64FXWrite_STUR], (instrs STURWi)>; 1293def : InstRW<[A64FXWrite_STUR], (instrs STURXi)>; 1294 1295def : InstRW<[WriteAdr, A64FXWrite_STUR], (instrs STTRBi)>; 1296def : InstRW<[WriteAdr, A64FXWrite_STUR], (instrs STTRHi)>; 1297def : InstRW<[WriteAdr, A64FXWrite_STUR], (instrs STTRWi)>; 1298def : InstRW<[WriteAdr, A64FXWrite_STUR], (instrs STTRXi)>; 1299 1300def : InstRW<[A64FXWrite_STNP], (instrs STNPDi)>; 1301def : InstRW<[A64FXWrite_STNP], (instrs STNPQi)>; 1302def : InstRW<[A64FXWrite_STNP], (instrs STNPXi)>; 1303def : InstRW<[A64FXWrite_STNP], (instrs STNPWi)>; 1304 1305def : InstRW<[A64FXWrite_STNP], (instrs STPDi)>; 1306def : InstRW<[A64FXWrite_STNP], (instrs STPQi)>; 1307def : InstRW<[A64FXWrite_STNP], (instrs STPXi)>; 1308def : InstRW<[A64FXWrite_STNP], (instrs STPWi)>; 1309 1310def : InstRW<[A64FXWrite_STUR], (instrs STRBui)>; 1311def : InstRW<[A64FXWrite_STUR], (instrs STRBui)>; 1312def : InstRW<[A64FXWrite_STUR], (instrs STRDui)>; 1313def : InstRW<[A64FXWrite_STUR], (instrs STRDui)>; 1314def : InstRW<[A64FXWrite_STUR], (instrs STRHui)>; 1315def : InstRW<[A64FXWrite_STUR], (instrs STRHui)>; 1316def : InstRW<[A64FXWrite_STUR], (instrs STRQui)>; 1317def : InstRW<[A64FXWrite_STUR], (instrs STRQui)>; 1318def : InstRW<[A64FXWrite_STUR], (instrs STRXui)>; 1319def : InstRW<[A64FXWrite_STUR], (instrs STRXui)>; 1320def : InstRW<[A64FXWrite_STUR], (instrs STRWui)>; 1321def : InstRW<[A64FXWrite_STUR], (instrs STRWui)>; 1322 1323def : InstRW<[A64FXWrite_STP01], 1324 (instrs STPDpre, STPDpost)>; 1325def : InstRW<[A64FXWrite_STP01, ReadAdrBase], 1326 (instrs STPDpre, STPDpost)>; 1327def : InstRW<[A64FXWrite_STP01], 1328 (instrs STPDpre, STPDpost)>; 1329def : InstRW<[A64FXWrite_STP01, ReadAdrBase], 1330 (instrs STPDpre, STPDpost)>; 1331def : InstRW<[A64FXWrite_STP01], 1332 (instrs STPQpre, STPQpost)>; 1333def : InstRW<[A64FXWrite_STP01, ReadAdrBase], 1334 (instrs STPQpre, STPQpost)>; 1335def : InstRW<[A64FXWrite_STP01], 1336 (instrs STPQpre, STPQpost)>; 1337def : InstRW<[A64FXWrite_STP01, ReadAdrBase], 1338 (instrs STPQpre, STPQpost)>; 1339def : InstRW<[A64FXWrite_STP01], 1340 (instrs STPSpre, STPSpost)>; 1341def : InstRW<[A64FXWrite_STP01, ReadAdrBase], 1342 (instrs STPSpre, STPSpost)>; 1343def : InstRW<[A64FXWrite_STP01], 1344 (instrs STPSpre, STPSpost)>; 1345def : InstRW<[A64FXWrite_STP01, ReadAdrBase], 1346 (instrs STPSpre, STPSpost)>; 1347def : InstRW<[A64FXWrite_STP01], 1348 (instrs STPWpre, STPWpost)>; 1349def : InstRW<[A64FXWrite_STP01, ReadAdrBase], 1350 (instrs STPWpre, STPWpost)>; 1351def : InstRW<[A64FXWrite_STP01], 1352 (instrs STPWpre, STPWpost)>; 1353def : InstRW<[A64FXWrite_STP01, ReadAdrBase], 1354 (instrs STPWpre, STPWpost)>; 1355def : InstRW<[A64FXWrite_STP01], 1356 (instrs STPXpre, STPXpost)>; 1357def : InstRW<[A64FXWrite_STP01, ReadAdrBase], 1358 (instrs STPXpre, STPXpost)>; 1359def : InstRW<[A64FXWrite_STP01], 1360 (instrs STPXpre, STPXpost)>; 1361def : InstRW<[A64FXWrite_STP01, ReadAdrBase], 1362 (instrs STPXpre, STPXpost)>; 1363 1364def : InstRW<[WriteAdr, A64FXWrite_STP01], 1365 (instrs STRBpre, STRBpost)>; 1366def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1367 (instrs STRBpre, STRBpost)>; 1368def : InstRW<[WriteAdr, A64FXWrite_STP01], 1369 (instrs STRBpre, STRBpost)>; 1370def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1371 (instrs STRBpre, STRBpost)>; 1372def : InstRW<[WriteAdr, A64FXWrite_STP01], 1373 (instrs STRBBpre, STRBBpost)>; 1374def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1375 (instrs STRBBpre, STRBBpost)>; 1376def : InstRW<[WriteAdr, A64FXWrite_STP01], 1377 (instrs STRBBpre, STRBBpost)>; 1378def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1379 (instrs STRBBpre, STRBBpost)>; 1380def : InstRW<[WriteAdr, A64FXWrite_STP01], 1381 (instrs STRDpre, STRDpost)>; 1382def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1383 (instrs STRDpre, STRDpost)>; 1384def : InstRW<[WriteAdr, A64FXWrite_STP01], 1385 (instrs STRDpre, STRDpost)>; 1386def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1387 (instrs STRDpre, STRDpost)>; 1388def : InstRW<[WriteAdr, A64FXWrite_STP01], 1389 (instrs STRHpre, STRHpost)>; 1390def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1391 (instrs STRHpre, STRHpost)>; 1392def : InstRW<[WriteAdr, A64FXWrite_STP01], 1393 (instrs STRHpre, STRHpost)>; 1394def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1395 (instrs STRHpre, STRHpost)>; 1396def : InstRW<[WriteAdr, A64FXWrite_STP01], 1397 (instrs STRHHpre, STRHHpost)>; 1398def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1399 (instrs STRHHpre, STRHHpost)>; 1400def : InstRW<[WriteAdr, A64FXWrite_STP01], 1401 (instrs STRHHpre, STRHHpost)>; 1402def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1403 (instrs STRHHpre, STRHHpost)>; 1404def : InstRW<[WriteAdr, A64FXWrite_STP01], 1405 (instrs STRQpre, STRQpost)>; 1406def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1407 (instrs STRQpre, STRQpost)>; 1408def : InstRW<[WriteAdr, A64FXWrite_STP01], 1409 (instrs STRQpre, STRQpost)>; 1410def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1411 (instrs STRQpre, STRQpost)>; 1412def : InstRW<[WriteAdr, A64FXWrite_STP01], 1413 (instrs STRSpre, STRSpost)>; 1414def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1415 (instrs STRSpre, STRSpost)>; 1416def : InstRW<[WriteAdr, A64FXWrite_STP01], 1417 (instrs STRSpre, STRSpost)>; 1418def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1419 (instrs STRSpre, STRSpost)>; 1420def : InstRW<[WriteAdr, A64FXWrite_STP01], 1421 (instrs STRWpre, STRWpost)>; 1422def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1423 (instrs STRWpre, STRWpost)>; 1424def : InstRW<[WriteAdr, A64FXWrite_STP01], 1425 (instrs STRWpre, STRWpost)>; 1426def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1427 (instrs STRWpre, STRWpost)>; 1428def : InstRW<[WriteAdr, A64FXWrite_STP01], 1429 (instrs STRXpre, STRXpost)>; 1430def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1431 (instrs STRXpre, STRXpost)>; 1432def : InstRW<[WriteAdr, A64FXWrite_STP01], 1433 (instrs STRXpre, STRXpost)>; 1434def : InstRW<[WriteAdr, A64FXWrite_STP01, ReadAdrBase], 1435 (instrs STRXpre, STRXpost)>; 1436 1437def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1438 (instrs STRBroW, STRBroX)>; 1439def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1440 (instrs STRBroW, STRBroX)>; 1441def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1442 (instrs STRBBroW, STRBBroX)>; 1443def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1444 (instrs STRBBroW, STRBBroX)>; 1445def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1446 (instrs STRDroW, STRDroX)>; 1447def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1448 (instrs STRDroW, STRDroX)>; 1449def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1450 (instrs STRHroW, STRHroX)>; 1451def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1452 (instrs STRHroW, STRHroX)>; 1453def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1454 (instrs STRHHroW, STRHHroX)>; 1455def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1456 (instrs STRHHroW, STRHHroX)>; 1457def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1458 (instrs STRQroW, STRQroX)>; 1459def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1460 (instrs STRQroW, STRQroX)>; 1461def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1462 (instrs STRSroW, STRSroX)>; 1463def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1464 (instrs STRSroW, STRSroX)>; 1465def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1466 (instrs STRWroW, STRWroX)>; 1467def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1468 (instrs STRWroW, STRWroX)>; 1469def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1470 (instrs STRXroW, STRXroX)>; 1471def : InstRW<[A64FXWrite_STUR, ReadAdrBase], 1472 (instrs STRXroW, STRXroX)>; 1473 1474//--- 1475// 3.8 FP Data Processing Instructions 1476//--- 1477 1478// FP absolute value 1479// FP min/max 1480// FP negate 1481def : WriteRes<WriteF, [A64FXGI03]> { 1482 let Latency = 4; 1483 let ResourceCycles = [2]; 1484} 1485 1486// FP arithmetic 1487 1488def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs FADDDrr, FADDHrr)>; 1489def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs FSUBDrr, FSUBHrr)>; 1490 1491// FP compare 1492def : WriteRes<WriteFCmp, [A64FXGI03]> { 1493 let Latency = 4; 1494 let ResourceCycles = [2]; 1495} 1496 1497// FP Div, Sqrt 1498def : WriteRes<WriteFDiv, [A64FXGI0]> { 1499 let Latency = 43; 1500} 1501 1502def A64FXXWriteFDiv : SchedWriteRes<[A64FXGI0]> { 1503 let Latency = 38; 1504} 1505 1506def A64FXXWriteFDivSP : SchedWriteRes<[A64FXGI0]> { 1507 let Latency = 29; 1508} 1509 1510def A64FXXWriteFDivDP : SchedWriteRes<[A64FXGI0]> { 1511 let Latency = 43; 1512} 1513 1514def A64FXXWriteFSqrtSP : SchedWriteRes<[A64FXGI0]> { 1515 let Latency = 29; 1516} 1517 1518def A64FXXWriteFSqrtDP : SchedWriteRes<[A64FXGI0]> { 1519 let Latency = 43; 1520} 1521 1522// FP divide, S-form 1523// FP square root, S-form 1524def : InstRW<[A64FXXWriteFDivSP], (instrs FDIVSrr)>; 1525def : InstRW<[A64FXXWriteFSqrtSP], (instrs FSQRTSr)>; 1526def : InstRW<[A64FXXWriteFDivSP], (instregex "^FDIVv.*32$")>; 1527def : InstRW<[A64FXXWriteFSqrtSP], (instregex "^.*SQRT.*32$")>; 1528def : InstRW<[A64FXXWriteFDivSP], (instregex "^FDIVSrr")>; 1529def : InstRW<[A64FXXWriteFSqrtSP], (instregex "^FSQRTSr")>; 1530 1531// FP divide, D-form 1532// FP square root, D-form 1533def : InstRW<[A64FXXWriteFDivDP], (instrs FDIVDrr)>; 1534def : InstRW<[A64FXXWriteFSqrtDP], (instrs FSQRTDr)>; 1535def : InstRW<[A64FXXWriteFDivDP], (instregex "^FDIVv.*64$")>; 1536def : InstRW<[A64FXXWriteFSqrtDP], (instregex "^.*SQRT.*64$")>; 1537def : InstRW<[A64FXXWriteFDivDP], (instregex "^FDIVDrr")>; 1538def : InstRW<[A64FXXWriteFSqrtDP], (instregex "^FSQRTDr")>; 1539 1540// FP multiply 1541// FP multiply accumulate 1542def : WriteRes<WriteFMul, [A64FXGI03]> { 1543 let Latency = 9; 1544 let ResourceCycles = [2]; 1545} 1546 1547def A64FXXWriteFMul : SchedWriteRes<[A64FXGI03]> { 1548 let Latency = 9; 1549 let ResourceCycles = [2]; 1550} 1551 1552def A64FXXWriteFMulAcc : SchedWriteRes<[A64FXGI03]> { 1553 let Latency = 9; 1554 let ResourceCycles = [2]; 1555} 1556 1557def : InstRW<[A64FXXWriteFMul], (instregex "^FMUL", "^FNMUL")>; 1558def : InstRW<[A64FXXWriteFMulAcc], 1559 (instregex "^FMADD", "^FMSUB", "^FNMADD", "^FNMSUB")>; 1560 1561// FP round to integral 1562def : InstRW<[A64FXWrite_9Cyc_GI03], 1563 (instregex "^FRINT(A|I|M|N|P|X|Z)(Sr|Dr)")>; 1564 1565// FP select 1566def : InstRW<[A64FXWrite_4Cyc_GI03], (instregex "^FCSEL")>; 1567 1568//--- 1569// 3.9 FP Miscellaneous Instructions 1570//--- 1571 1572// FP convert, from vec to vec reg 1573// FP convert, from gen to vec reg 1574// FP convert, from vec to gen reg 1575def : WriteRes<WriteFCvt, [A64FXGI03]> { 1576 let Latency = 9; 1577 let ResourceCycles = [2]; 1578} 1579 1580// FP move, immed 1581// FP move, register 1582def : WriteRes<WriteFImm, [A64FXGI0]> { 1583 let Latency = 4; 1584 let ResourceCycles = [2]; 1585} 1586 1587// FP transfer, from gen to vec reg 1588// FP transfer, from vec to gen reg 1589def : WriteRes<WriteFCopy, [A64FXGI0]> { 1590 let Latency = 4; 1591 let ResourceCycles = [2]; 1592} 1593 1594def : InstRW<[A64FXWrite_FMOV_GV], (instrs FMOVXDHighr)>; 1595def : InstRW<[A64FXWrite_FMOV_VG14], (instrs FMOVDXHighr)>; 1596 1597//--- 1598// 3.12 ASIMD Integer Instructions 1599//--- 1600 1601// ASIMD absolute diff, D-form 1602// ASIMD absolute diff, Q-form 1603// ASIMD absolute diff accum, D-form 1604// ASIMD absolute diff accum, Q-form 1605// ASIMD absolute diff accum long 1606// ASIMD absolute diff long 1607// ASIMD arith, basic 1608// ASIMD arith, complex 1609// ASIMD compare 1610// ASIMD logical (AND, BIC, EOR) 1611// ASIMD max/min, basic 1612// ASIMD max/min, reduce, 4H/4S 1613// ASIMD max/min, reduce, 8B/8H 1614// ASIMD max/min, reduce, 16B 1615// ASIMD multiply, D-form 1616// ASIMD multiply, Q-form 1617// ASIMD multiply accumulate long 1618// ASIMD multiply accumulate saturating long 1619// ASIMD multiply long 1620// ASIMD pairwise add and accumulate 1621// ASIMD shift accumulate 1622// ASIMD shift by immed, basic 1623// ASIMD shift by immed and insert, basic, D-form 1624// ASIMD shift by immed and insert, basic, Q-form 1625// ASIMD shift by immed, complex 1626// ASIMD shift by register, basic, D-form 1627// ASIMD shift by register, basic, Q-form 1628// ASIMD shift by register, complex, D-form 1629// ASIMD shift by register, complex, Q-form 1630def : WriteRes<WriteVd, [A64FXGI03]> { 1631 let Latency = 4; 1632 let ResourceCycles = [1]; 1633} 1634def : WriteRes<WriteVq, [A64FXGI03]> { 1635 let Latency = 4; 1636 let ResourceCycles = [1]; 1637} 1638 1639// ASIMD arith, reduce, 4H/4S 1640// ASIMD arith, reduce, 8B/8H 1641// ASIMD arith, reduce, 16B 1642 1643// ASIMD logical (MVN (alias for NOT), ORN, ORR) 1644def : InstRW<[A64FXWrite_4Cyc_GI03], 1645 (instregex "^ANDv", "^BICv", "^EORv", "^ORRv", "^ORNv", "^NOTv")>; 1646 1647// ASIMD arith, reduce 1648def : InstRW<[A64FXWrite_ADDLV], 1649 (instregex "^ADDVv", "^SADDLVv", "^UADDLVv")>; 1650 1651// ASIMD polynomial (8x8) multiply long 1652def : InstRW<[A64FXWrite_MULLE], (instregex "^(S|U|SQD)MULL")>; 1653def : InstRW<[A64FXWrite_MULLV], 1654 (instregex "(S|U|SQD)(MLAL|MLSL|MULL)v.*")>; 1655def : InstRW<[A64FXWrite_8Cyc_GI03], (instregex "^PMULL(v8i8|v16i8)")>; 1656def : InstRW<[A64FXWrite_8Cyc_GI03], (instregex "^PMULL(v1i64|v2i64)")>; 1657 1658// ASIMD absolute diff accum, D-form 1659def : InstRW<[A64FXWrite_ABA], 1660 (instregex "^[SU]ABA(v8i8|v4i16|v2i32)$")>; 1661// ASIMD absolute diff accum, Q-form 1662def : InstRW<[A64FXWrite_ABA], 1663 (instregex "^[SU]ABA(v16i8|v8i16|v4i32)$")>; 1664// ASIMD absolute diff accum long 1665def : InstRW<[A64FXWrite_ABAL], 1666 (instregex "^[SU]ABAL")>; 1667// ASIMD arith, reduce, 4H/4S 1668def : InstRW<[A64FXWrite_ADDLV1], 1669 (instregex "^[SU]?ADDL?V(v8i8|v4i16|v2i32)v$")>; 1670// ASIMD arith, reduce, 8B 1671def : InstRW<[A64FXWrite_ADDLV1], 1672 (instregex "^[SU]?ADDL?V(v8i16|v4i32)v$")>; 1673// ASIMD arith, reduce, 16B/16H 1674def : InstRW<[A64FXWrite_ADDLV1], 1675 (instregex "^[SU]?ADDL?Vv16i8v$")>; 1676// ASIMD max/min, reduce, 4H/4S 1677def : InstRW<[A64FXWrite_MINMAXV], 1678 (instregex "^[SU](MIN|MAX)V(v4i16|v4i32)v$")>; 1679// ASIMD max/min, reduce, 8B/8H 1680def : InstRW<[A64FXWrite_MINMAXV], 1681 (instregex "^[SU](MIN|MAX)V(v8i8|v8i16)v$")>; 1682// ASIMD max/min, reduce, 16B/16H 1683def : InstRW<[A64FXWrite_MINMAXV], 1684 (instregex "^[SU](MIN|MAX)Vv16i8v$")>; 1685// ASIMD multiply, D-form 1686def : InstRW<[A64FXWrite_PMUL], 1687 (instregex "^(P?MUL|SQR?DMUL)" # 1688 "(v8i8|v4i16|v2i32|v1i8|v1i16|v1i32|v1i64)" # 1689 "(_indexed)?$")>; 1690 1691// ASIMD multiply, Q-form 1692def : InstRW<[A64FXWrite_PMUL], 1693 (instregex "^(P?MUL)(v16i8|v8i16|v4i32)(_indexed)?$")>; 1694 1695// ASIMD multiply, Q-form 1696def : InstRW<[A64FXWrite_SQRDMULH], 1697 (instregex "^(SQR?DMULH)(v16i8|v8i16|v4i32)(_indexed)?$")>; 1698 1699// ASIMD multiply accumulate, D-form 1700def : InstRW<[A64FXWrite_9Cyc_GI03], 1701 (instregex "^ML[AS](v8i8|v4i16|v2i32)(_indexed)?$")>; 1702// ASIMD multiply accumulate, Q-form 1703def : InstRW<[A64FXWrite_9Cyc_GI03], 1704 (instregex "^ML[AS](v16i8|v8i16|v4i32)(_indexed)?$")>; 1705// ASIMD shift accumulate 1706def : InstRW<[A64FXWrite_SRSRAV], 1707 (instregex "SRSRAv", "URSRAv")>; 1708def : InstRW<[A64FXWrite_SSRAV], 1709 (instregex "SSRAv", "USRAv")>; 1710 1711// ASIMD shift by immed, basic 1712def : InstRW<[A64FXWrite_RSHRN], 1713 (instregex "RSHRNv", "SQRSHRNv", "SQRSHRUNv", "UQRSHRNv")>; 1714def : InstRW<[A64FXWrite_SHRN], 1715 (instregex "SHRNv", "SQSHRNv", "SQSHRUNv", "UQSHRNv")>; 1716 1717def : InstRW<[A64FXWrite_6Cyc_GI3], 1718 (instregex "SQXTNv", "SQXTUNv", "UQXTNv")>; 1719 1720// ASIMD shift by immed, complex 1721def : InstRW<[A64FXWrite_ABA], (instregex "^[SU]?(Q|R){1,2}SHR")>; 1722def : InstRW<[A64FXWrite_6Cyc_GI3], (instregex "^SQSHLU")>; 1723// ASIMD shift by register, basic, Q-form 1724def : InstRW<[A64FXWrite_6Cyc_GI3], 1725 (instregex "^[SU]SHL(v16i8|v8i16|v4i32|v2i64)")>; 1726// ASIMD shift by register, complex, D-form 1727def : InstRW<[A64FXWrite_6Cyc_GI3], 1728 (instregex "^[SU][QR]{1,2}SHL" # 1729 "(v1i8|v1i16|v1i32|v1i64|v8i8|v4i16|v2i32|b|d|h|s)")>; 1730// ASIMD shift by register, complex, Q-form 1731def : InstRW<[A64FXWrite_6Cyc_GI3], 1732 (instregex "^[SU][QR]{1,2}SHL(v16i8|v8i16|v4i32|v2i64)")>; 1733 1734// ASIMD Arithmetic 1735def : InstRW<[A64FXWrite_4Cyc_GI03], 1736 (instregex "(ADD|SUB)(v8i8|v4i16|v2i32|v1i64)")>; 1737def : InstRW<[A64FXWrite_4Cyc_GI03], 1738 (instregex "(ADD|SUB)(v16i8|v8i16|v4i32|v2i64)")>; 1739def : InstRW<[A64FXWrite_SHRN], (instregex "(ADD|SUB)HNv.*")>; 1740def : InstRW<[A64FXWrite_RSHRN], (instregex "(RADD|RSUB)HNv.*")>; 1741def : InstRW<[A64FXWrite_4Cyc_GI03], 1742 (instregex "^SQADD", "^SQNEG", "^SQSUB", "^SRHADD", 1743 "^SUQADD", "^UQADD", "^UQSUB", "^URHADD", "^USQADD")>; 1744def : InstRW<[A64FXWrite_ADDP], 1745 (instregex "ADDP(v16i8|v8i16|v4i32|v2i64)")>; 1746def : InstRW<[A64FXWrite_4Cyc_GI03], 1747 (instregex "((AND|ORN|EOR|EON)S?(Xr[rsi]|v16i8|v8i16|v4i32)|" # 1748 "(ORR|BIC)S?(Xr[rs]|v16i8|v8i16|v4i32))")>; 1749def : InstRW<[A64FXWrite_4Cyc_GI0], 1750 (instregex "(CLS|CLZ|CNT)(v4i32|v8i16|v16i8)")>; 1751def : InstRW<[A64FXWrite_SADALP], (instregex "^SADALP", "^UADALP")>; 1752def : InstRW<[A64FXWrite_SADDLP], (instregex "^SADDLPv", "^UADDLPv")>; 1753def : InstRW<[A64FXWrite_ADDLV1], (instregex "^SADDLV", "^UADDLV")>; 1754def : InstRW<[A64FXWrite_MINMAXV], 1755 (instregex "^ADDVv", "^SMAXVv", "^UMAXVv", "^SMINVv", "^UMINVv")>; 1756def : InstRW<[A64FXWrite_ABA], 1757 (instregex "^SABAv", "^UABAv", "^SABALv", "^UABALv")>; 1758def : InstRW<[A64FXWrite_4Cyc_GI03], 1759 (instregex "^SQADDv", "^SQSUBv", "^UQADDv", "^UQSUBv")>; 1760def : InstRW<[A64FXWrite_4Cyc_GI03], (instregex "^SUQADDv", "^USQADDv")>; 1761def : InstRW<[A64FXWrite_SHRN], 1762 (instregex "^ADDHNv", "^SUBHNv")>; 1763def : InstRW<[A64FXWrite_RSHRN], 1764 (instregex "^RADDHNv", "^RSUBHNv")>; 1765def : InstRW<[A64FXWrite_4Cyc_GI03], 1766 (instregex "^SQABS", "^SQADD", "^SQNEG", "^SQSUB", 1767 "^SRHADD", "^SUQADD", "^UQADD", "^UQSUB", 1768 "^URHADD", "^USQADD")>; 1769 1770def : InstRW<[A64FXWrite_4Cyc_GI03], 1771 (instregex "^CMEQv", "^CMGEv", "^CMGTv", 1772 "^CMLEv", "^CMLTv", "^CMHIv", "^CMHSv")>; 1773def : InstRW<[A64FXWrite_MINMAXV], 1774 (instregex "^SMAXv", "^SMINv", "^UMAXv", "^UMINv")>; 1775def : InstRW<[A64FXWrite_ADDP], 1776 (instregex "^SMAXPv", "^SMINPv", "^UMAXPv", "^UMINPv")>; 1777def : InstRW<[A64FXWrite_4Cyc_GI03], 1778 (instregex "^SABDv", "^UABDv")>; 1779def : InstRW<[A64FXWrite_TBX1], 1780 (instregex "^SABDLv", "^UABDLv")>; 1781 1782//--- 1783// 3.13 ASIMD Floating-point Instructions 1784//--- 1785 1786// ASIMD FP absolute value 1787def : InstRW<[A64FXWrite_4Cyc_GI03], (instregex "^FABSv")>; 1788 1789// ASIMD FP arith, normal, D-form 1790// ASIMD FP arith, normal, Q-form 1791def : InstRW<[A64FXWrite_9Cyc_GI03], 1792 (instregex "^FABDv", "^FADDv", "^FSUBv")>; 1793 1794// ASIMD FP arith, pairwise, D-form 1795// ASIMD FP arith, pairwise, Q-form 1796def : InstRW<[A64FXWrite_FADDPV], (instregex "^FADDPv")>; 1797 1798// ASIMD FP compare, D-form 1799// ASIMD FP compare, Q-form 1800def : InstRW<[A64FXWrite_4Cyc_GI03], (instregex "^FACGEv", "^FACGTv")>; 1801def : InstRW<[A64FXWrite_4Cyc_GI03], (instregex "^FCMEQv", "^FCMGEv", 1802 "^FCMGTv", "^FCMLEv", 1803 "^FCMLTv")>; 1804// ASIMD FP round, D-form 1805def : InstRW<[A64FXWrite_9Cyc_GI03], 1806 (instregex "^FRINT[AIMNPXZ](v2f32)")>; 1807// ASIMD FP round, Q-form 1808def : InstRW<[A64FXWrite_9Cyc_GI03], 1809 (instregex "^FRINT[AIMNPXZ](v4f32|v2f64)")>; 1810 1811// ASIMD FP convert, long 1812// ASIMD FP convert, narrow 1813// ASIMD FP convert, other, D-form 1814// ASIMD FP convert, other, Q-form 1815 1816// ASIMD FP convert, long and narrow 1817def : InstRW<[A64FXWrite_FCVTXNV], (instregex "^FCVT(L|N|XN)v")>; 1818// ASIMD FP convert, other, D-form 1819def : InstRW<[A64FXWrite_FCVTXNV], 1820 (instregex "^[FVSU]CVT([AMNPZ][SU])?(_Int)?(v2f32|v1i32|v2i32|v1i64)")>; 1821// ASIMD FP convert, other, Q-form 1822def : InstRW<[A64FXWrite_FCVTXNV], 1823 (instregex "^[FVSU]CVT([AMNPZ][SU])?(_Int)?(v4f32|v2f64|v4i32|v2i64)")>; 1824 1825// ASIMD FP divide, D-form, F32 1826def : InstRW<[A64FXXWriteFDivSP], (instrs FDIVv2f32)>; 1827def : InstRW<[A64FXXWriteFDivSP], (instregex "FDIVv2f32")>; 1828 1829// ASIMD FP divide, Q-form, F32 1830def : InstRW<[A64FXXWriteFDiv], (instrs FDIVv4f32)>; 1831def : InstRW<[A64FXXWriteFDiv], (instregex "FDIVv4f32")>; 1832 1833// ASIMD FP divide, Q-form, F64 1834def : InstRW<[A64FXXWriteFDivDP], (instrs FDIVv2f64)>; 1835def : InstRW<[A64FXXWriteFDivDP], (instregex "FDIVv2f64")>; 1836 1837// ASIMD FP max/min, normal, D-form 1838// ASIMD FP max/min, normal, Q-form 1839def : InstRW<[A64FXWrite_4Cyc_GI0], (instregex "^FMAXv", "^FMAXNMv", 1840 "^FMINv", "^FMINNMv")>; 1841 1842// ASIMD FP max/min, pairwise, D-form 1843// ASIMD FP max/min, pairwise, Q-form 1844def : InstRW<[A64FXWrite_ADDP], (instregex "^FMAXPv", "^FMAXNMPv", 1845 "^FMINPv", "^FMINNMPv")>; 1846 1847// ASIMD FP max/min, reduce 1848def : InstRW<[A64FXWrite_FMAXVVH], (instregex "^FMAXVv", "^FMAXNMVv", 1849 "^FMINVv", "^FMINNMVv")>; 1850 1851// ASIMD FP multiply, D-form, FZ 1852// ASIMD FP multiply, D-form, no FZ 1853// ASIMD FP multiply, Q-form, FZ 1854// ASIMD FP multiply, Q-form, no FZ 1855def : InstRW<[A64FXWrite_9Cyc_GI03], (instregex "^FMULv", "^FMULXv")>; 1856def : InstRW<[A64FXWrite_FMULXE], 1857 (instregex "^FMULX?(v2f32|v1i32|v2i32|v1i64|32|64)")>; 1858def : InstRW<[A64FXWrite_FMULXE], 1859 (instregex "^FMULX?(v4f32|v2f64|v4i32|v2i64)")>; 1860 1861// ASIMD FP multiply accumulate, Dform, FZ 1862// ASIMD FP multiply accumulate, Dform, no FZ 1863// ASIMD FP multiply accumulate, Qform, FZ 1864// ASIMD FP multiply accumulate, Qform, no FZ 1865def : InstRW<[A64FXWrite_9Cyc_GI03], (instregex "^FMLAv", "^FMLSv")>; 1866def : InstRW<[A64FXWrite_FMULXE], 1867 (instregex "^FML[AS](v2f32|v1i32|v2i32|v1i64)")>; 1868def : InstRW<[A64FXWrite_FMULXE], 1869 (instregex "^FML[AS](v4f32|v2f64|v4i32|v2i64)")>; 1870 1871// ASIMD FP negate 1872def : InstRW<[A64FXWrite_4Cyc_GI03], (instregex "^FNEGv")>; 1873 1874//-- 1875// 3.14 ASIMD Miscellaneous Instructions 1876//-- 1877 1878// ASIMD bit reverse 1879def : InstRW<[A64FXWrite_1Cyc_GI2456], (instregex "^RBITv")>; 1880 1881// ASIMD bitwise insert, D-form 1882// ASIMD bitwise insert, Q-form 1883def : InstRW<[A64FXWrite_BIF], 1884 (instregex "^BIFv", "^BITv", "^BSLv")>; 1885 1886// ASIMD count, D-form 1887// ASIMD count, Q-form 1888def : InstRW<[A64FXWrite_4Cyc_GI0], 1889 (instregex "^CLSv", "^CLZv", "^CNTv")>; 1890 1891// ASIMD duplicate, gen reg 1892// ASIMD duplicate, element 1893def : InstRW<[A64FXWrite_DUPGENERAL], (instregex "^DUPv")>; 1894def : InstRW<[A64FXWrite_6Cyc_GI0], (instregex "^DUP(i8|i16|i32|i64)$")>; 1895def : InstRW<[A64FXWrite_6Cyc_GI0], (instregex "^DUPv.+gpr")>; 1896 1897// ASIMD extract 1898def : InstRW<[A64FXWrite_6Cyc_GI0], (instregex "^EXTv")>; 1899 1900// ASIMD extract narrow 1901def : InstRW<[A64FXWrite_6Cyc_GI3], (instregex "^XTNv")>; 1902 1903// ASIMD extract narrow, saturating 1904def : InstRW<[A64FXWrite_6Cyc_GI3], 1905 (instregex "^SQXTNv", "^SQXTUNv", "^UQXTNv")>; 1906 1907// ASIMD insert, element to element 1908def : InstRW<[A64FXWrite_6Cyc_GI0], (instregex "^INSv")>; 1909 1910// ASIMD transfer, element to gen reg 1911def : InstRW<[A64FXWrite_SMOV], (instregex "^[SU]MOVv")>; 1912 1913// ASIMD move, integer immed 1914def : InstRW<[A64FXWrite_4Cyc_GI0], (instregex "^MOVIv")>; 1915 1916// ASIMD move, FP immed 1917def : InstRW<[A64FXWrite_4Cyc_GI0], (instregex "^FMOVv")>; 1918 1919// ASIMD table lookup, D-form 1920def : InstRW<[A64FXWrite_6Cyc_GI3], (instregex "^TBLv8i8One")>; 1921def : InstRW<[A64FXWrite_TBX1], (instregex "^TBLv8i8Two")>; 1922def : InstRW<[A64FXWrite_TBX2], (instregex "^TBLv8i8Three")>; 1923def : InstRW<[A64FXWrite_TBX3], (instregex "^TBLv8i8Four")>; 1924def : InstRW<[A64FXWrite_TBX1], (instregex "^TBXv8i8One")>; 1925def : InstRW<[A64FXWrite_TBX2], (instregex "^TBXv8i8Two")>; 1926def : InstRW<[A64FXWrite_TBX3], (instregex "^TBXv8i8Three")>; 1927def : InstRW<[A64FXWrite_TBX4], (instregex "^TBXv8i8Four")>; 1928 1929// ASIMD table lookup, Q-form 1930def : InstRW<[A64FXWrite_6Cyc_GI3], (instregex "^TBLv16i8One")>; 1931def : InstRW<[A64FXWrite_TBX1], (instregex "^TBLv16i8Two")>; 1932def : InstRW<[A64FXWrite_TBX2], (instregex "^TBLv16i8Three")>; 1933def : InstRW<[A64FXWrite_TBX3], (instregex "^TBLv16i8Four")>; 1934def : InstRW<[A64FXWrite_TBX1], (instregex "^TBXv16i8One")>; 1935def : InstRW<[A64FXWrite_TBX2], (instregex "^TBXv16i8Two")>; 1936def : InstRW<[A64FXWrite_TBX3], (instregex "^TBXv16i8Three")>; 1937def : InstRW<[A64FXWrite_TBX4], (instregex "^TBXv16i8Four")>; 1938 1939// ASIMD transpose 1940def : InstRW<[A64FXWrite_6Cyc_GI0], (instregex "^TRN1", "^TRN2")>; 1941 1942// ASIMD unzip/zip 1943def : InstRW<[A64FXWrite_6Cyc_GI0], 1944 (instregex "^UZP1", "^UZP2", "^ZIP1", "^ZIP2")>; 1945 1946// ASIMD reciprocal estimate, D-form 1947// ASIMD reciprocal estimate, Q-form 1948def : InstRW<[A64FXWrite_4Cyc_GI03], 1949 (instregex "^FRECPEv", "^FRECPXv", "^URECPEv", 1950 "^FRSQRTEv", "^URSQRTEv")>; 1951 1952// ASIMD reciprocal step, D-form, FZ 1953// ASIMD reciprocal step, D-form, no FZ 1954// ASIMD reciprocal step, Q-form, FZ 1955// ASIMD reciprocal step, Q-form, no FZ 1956def : InstRW<[A64FXWrite_9Cyc_GI0], (instregex "^FRECPSv", "^FRSQRTSv")>; 1957 1958// ASIMD reverse 1959def : InstRW<[A64FXWrite_4Cyc_GI03], 1960 (instregex "^REV16v", "^REV32v", "^REV64v")>; 1961 1962// ASIMD table lookup, D-form 1963// ASIMD table lookup, Q-form 1964def : InstRW<[A64FXWrite_6Cyc_GI0], (instregex "^TBLv", "^TBXv")>; 1965 1966// ASIMD transfer, element to word or word 1967def : InstRW<[A64FXWrite_SMOV], (instregex "^[SU]MOVv")>; 1968 1969// ASIMD transfer, element to gen reg 1970def : InstRW<[A64FXWrite_SMOV], (instregex "(S|U)MOVv.*")>; 1971 1972// ASIMD transfer gen reg to element 1973def : InstRW<[A64FXWrite_6Cyc_GI0], (instregex "^INSv")>; 1974 1975// ASIMD transpose 1976def : InstRW<[A64FXWrite_6Cyc_GI0], (instregex "^TRN1v", "^TRN2v", 1977 "^UZP1v", "^UZP2v")>; 1978 1979// ASIMD unzip/zip 1980def : InstRW<[A64FXWrite_6Cyc_GI0], (instregex "^ZIP1v", "^ZIP2v")>; 1981 1982//-- 1983// 3.15 ASIMD Load Instructions 1984//-- 1985 1986// ASIMD load, 1 element, multiple, 1 reg, D-form 1987// ASIMD load, 1 element, multiple, 1 reg, Q-form 1988def : InstRW<[A64FXWrite_8Cyc_GI56], 1989 (instregex "^LD1Onev(8b|4h|2s|1d|2d)$")>; 1990def : InstRW<[A64FXWrite_11Cyc_GI56], 1991 (instregex "^LD1Onev(16b|8h|4s)$")>; 1992def : InstRW<[A64FXWrite_LD108, WriteAdr], 1993 (instregex "^LD1Onev(8b|4h|2s|1d|2d)_POST$")>; 1994def : InstRW<[A64FXWrite_LD109, WriteAdr], 1995 (instregex "^LD1Onev(16b|8h|4s)_POST$")>; 1996 1997// ASIMD load, 1 element, multiple, 2 reg, D-form 1998// ASIMD load, 1 element, multiple, 2 reg, Q-form 1999def : InstRW<[A64FXWrite_LD102], 2000 (instregex "^LD1Twov(8b|4h|2s|1d|2d)$")>; 2001def : InstRW<[A64FXWrite_LD103], 2002 (instregex "^LD1Twov(16b|8h|4s)$")>; 2003def : InstRW<[A64FXWrite_LD110, WriteAdr], 2004 (instregex "^LD1Twov(8b|4h|2s|1d|2d)_POST$")>; 2005def : InstRW<[A64FXWrite_LD111, WriteAdr], 2006 (instregex "^LD1Twov(16b|8h|4s)_POST$")>; 2007 2008// ASIMD load, 1 element, multiple, 3 reg, D-form 2009// ASIMD load, 1 element, multiple, 3 reg, Q-form 2010def : InstRW<[A64FXWrite_LD104], 2011 (instregex "^LD1Threev(8b|4h|2s|1d|2d)$")>; 2012def : InstRW<[A64FXWrite_LD105], 2013 (instregex "^LD1Threev(16b|8h|4s)$")>; 2014def : InstRW<[A64FXWrite_LD112, WriteAdr], 2015 (instregex "^LD1Threev(8b|4h|2s|1d|2d)_POST$")>; 2016def : InstRW<[A64FXWrite_LD113, WriteAdr], 2017 (instregex "^LD1Threev(16b|8h|4s)_POST$")>; 2018 2019// ASIMD load, 1 element, multiple, 4 reg, D-form 2020// ASIMD load, 1 element, multiple, 4 reg, Q-form 2021def : InstRW<[A64FXWrite_LD106], 2022 (instregex "^LD1Fourv(8b|4h|2s|1d|2d)$")>; 2023def : InstRW<[A64FXWrite_LD107], 2024 (instregex "^LD1Fourv(16b|8h|4s)$")>; 2025def : InstRW<[A64FXWrite_LD114, WriteAdr], 2026 (instregex "^LD1Fourv(8b|4h|2s|1d|2d)_POST$")>; 2027def : InstRW<[A64FXWrite_LD115, WriteAdr], 2028 (instregex "^LD1Fourv(16b|8h|4s)_POST$")>; 2029 2030// ASIMD load, 1 element, one lane, B/H/S 2031// ASIMD load, 1 element, one lane, D 2032def : InstRW<[A64FXWrite_LD1I0], (instregex "^LD1i(8|16|32|64)$")>; 2033def : InstRW<[A64FXWrite_LD1I1, WriteAdr], 2034 (instregex "^LD1i(8|16|32|64)_POST$")>; 2035 2036// ASIMD load, 1 element, all lanes, D-form, B/H/S 2037// ASIMD load, 1 element, all lanes, D-form, D 2038// ASIMD load, 1 element, all lanes, Q-form 2039def : InstRW<[A64FXWrite_8Cyc_GI03], 2040 (instregex "^LD1Rv(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 2041def : InstRW<[A64FXWrite_LD108, WriteAdr], 2042 (instregex "^LD1Rv(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 2043 2044// ASIMD load, 2 element, multiple, D-form, B/H/S 2045// ASIMD load, 2 element, multiple, Q-form, D 2046def : InstRW<[A64FXWrite_LD103], 2047 (instregex "^LD2Twov(8b|4h|2s|16b|8h|4s|2d)$")>; 2048def : InstRW<[A64FXWrite_LD111, WriteAdr], 2049 (instregex "^LD2Twov(8b|4h|2s|16b|8h|4s|2d)_POST$")>; 2050 2051// ASIMD load, 2 element, one lane, B/H 2052// ASIMD load, 2 element, one lane, S 2053// ASIMD load, 2 element, one lane, D 2054def : InstRW<[A64FXWrite_LD2I0], (instregex "^LD2i(8|16|32|64)$")>; 2055def : InstRW<[A64FXWrite_LD2I1, WriteAdr], 2056 (instregex "^LD2i(8|16|32|64)_POST$")>; 2057 2058// ASIMD load, 2 element, all lanes, D-form, B/H/S 2059// ASIMD load, 2 element, all lanes, D-form, D 2060// ASIMD load, 2 element, all lanes, Q-form 2061def : InstRW<[A64FXWrite_LD102], 2062 (instregex "^LD2Rv(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 2063def : InstRW<[A64FXWrite_LD110, WriteAdr], 2064 (instregex "^LD2Rv(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 2065 2066// ASIMD load, 3 element, multiple, D-form, B/H/S 2067// ASIMD load, 3 element, multiple, Q-form, B/H/S 2068// ASIMD load, 3 element, multiple, Q-form, D 2069def : InstRW<[A64FXWrite_LD105], 2070 (instregex "^LD3Threev(8b|4h|2s|16b|8h|4s|2d)$")>; 2071def : InstRW<[A64FXWrite_LD113, WriteAdr], 2072 (instregex "^LD3Threev(8b|4h|2s|16b|8h|4s|2d)_POST$")>; 2073 2074// ASIMD load, 3 element, one lone, B/H 2075// ASIMD load, 3 element, one lane, S 2076// ASIMD load, 3 element, one lane, D 2077def : InstRW<[A64FXWrite_LD3I0], (instregex "^LD3i(8|16|32|64)$")>; 2078def : InstRW<[A64FXWrite_LD3I1, WriteAdr], 2079 (instregex "^LD3i(8|16|32|64)_POST$")>; 2080 2081// ASIMD load, 3 element, all lanes, D-form, B/H/S 2082// ASIMD load, 3 element, all lanes, D-form, D 2083// ASIMD load, 3 element, all lanes, Q-form, B/H/S 2084// ASIMD load, 3 element, all lanes, Q-form, D 2085def : InstRW<[A64FXWrite_LD104], 2086 (instregex "^LD3Rv(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 2087def : InstRW<[A64FXWrite_LD112, WriteAdr], 2088 (instregex "^LD3Rv(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 2089 2090// ASIMD load, 4 element, multiple, D-form, B/H/S 2091// ASIMD load, 4 element, multiple, Q-form, B/H/S 2092// ASIMD load, 4 element, multiple, Q-form, D 2093def : InstRW<[A64FXWrite_LD107], 2094 (instregex "^LD4Fourv(8b|4h|2s|16b|8h|4s|2d)$")>; 2095def : InstRW<[A64FXWrite_LD115, WriteAdr], 2096 (instregex "^LD4Fourv(8b|4h|2s|16b|8h|4s|2d)_POST$")>; 2097 2098// ASIMD load, 4 element, one lane, B/H 2099// ASIMD load, 4 element, one lane, S 2100// ASIMD load, 4 element, one lane, D 2101def : InstRW<[A64FXWrite_LD4I0], (instregex "^LD4i(8|16|32|64)$")>; 2102def : InstRW<[A64FXWrite_LD4I1, WriteAdr], 2103 (instregex "^LD4i(8|16|32|64)_POST$")>; 2104 2105// ASIMD load, 4 element, all lanes, D-form, B/H/S 2106// ASIMD load, 4 element, all lanes, D-form, D 2107// ASIMD load, 4 element, all lanes, Q-form, B/H/S 2108// ASIMD load, 4 element, all lanes, Q-form, D 2109def : InstRW<[A64FXWrite_LD106], 2110 (instregex "^LD4Rv(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 2111def : InstRW<[A64FXWrite_LD114, WriteAdr], 2112 (instregex "^LD4Rv(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 2113 2114//-- 2115// 3.16 ASIMD Store Instructions 2116//-- 2117 2118// ASIMD store, 1 element, multiple, 1 reg, D-form 2119// ASIMD store, 1 element, multiple, 1 reg, Q-form 2120def : InstRW<[A64FXWrite_ST10], 2121 (instregex "^ST1Onev(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 2122def : InstRW<[A64FXWrite_ST14, WriteAdr], 2123 (instregex "^ST1Onev(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 2124 2125// ASIMD store, 1 element, multiple, 2 reg, D-form 2126// ASIMD store, 1 element, multiple, 2 reg, Q-form 2127def : InstRW<[A64FXWrite_ST11], 2128 (instregex "^ST1Twov(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 2129def : InstRW<[A64FXWrite_ST15, WriteAdr], 2130 (instregex "^ST1Twov(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 2131 2132// ASIMD store, 1 element, multiple, 3 reg, D-form 2133// ASIMD store, 1 element, multiple, 3 reg, Q-form 2134def : InstRW<[A64FXWrite_ST12], 2135 (instregex "^ST1Threev(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 2136def : InstRW<[A64FXWrite_ST16, WriteAdr], 2137 (instregex "^ST1Threev(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 2138 2139// ASIMD store, 1 element, multiple, 4 reg, D-form 2140// ASIMD store, 1 element, multiple, 4 reg, Q-form 2141def : InstRW<[A64FXWrite_ST13], 2142 (instregex "^ST1Fourv(8b|4h|2s|1d|16b|8h|4s|2d)$")>; 2143def : InstRW<[A64FXWrite_ST17, WriteAdr], 2144 (instregex "^ST1Fourv(8b|4h|2s|1d|16b|8h|4s|2d)_POST$")>; 2145 2146// ASIMD store, 1 element, one lane, B/H/S 2147// ASIMD store, 1 element, one lane, D 2148def : InstRW<[A64FXWrite_ST10], 2149 (instregex "^ST1i(8|16|32|64)$")>; 2150def : InstRW<[A64FXWrite_ST14, WriteAdr], 2151 (instregex "^ST1i(8|16|32|64)_POST$")>; 2152 2153// ASIMD store, 2 element, multiple, D-form, B/H/S 2154// ASIMD store, 2 element, multiple, Q-form, B/H/S 2155// ASIMD store, 2 element, multiple, Q-form, D 2156def : InstRW<[A64FXWrite_ST11], 2157 (instregex "^ST2Twov(8b|4h|2s|16b|8h|4s|2d)$")>; 2158def : InstRW<[A64FXWrite_ST15, WriteAdr], 2159 (instregex "^ST2Twov(8b|4h|2s|16b|8h|4s|2d)_POST$")>; 2160 2161// ASIMD store, 2 element, one lane, B/H/S 2162// ASIMD store, 2 element, one lane, D 2163def : InstRW<[A64FXWrite_ST11], 2164 (instregex "^ST2i(8|16|32|64)$")>; 2165def : InstRW<[A64FXWrite_ST15, WriteAdr], 2166 (instregex "^ST2i(8|16|32|64)_POST$")>; 2167 2168// ASIMD store, 3 element, multiple, D-form, B/H/S 2169// ASIMD store, 3 element, multiple, Q-form, B/H/S 2170// ASIMD store, 3 element, multiple, Q-form, D 2171def : InstRW<[A64FXWrite_ST12], 2172 (instregex "^ST3Threev(8b|4h|2s|16b|8h|4s|2d)$")>; 2173def : InstRW<[A64FXWrite_ST16, WriteAdr], 2174 (instregex "^ST3Threev(8b|4h|2s|16b|8h|4s|2d)_POST$")>; 2175 2176// ASIMD store, 3 element, one lane, B/H 2177// ASIMD store, 3 element, one lane, S 2178// ASIMD store, 3 element, one lane, D 2179def : InstRW<[A64FXWrite_ST12], (instregex "^ST3i(8|16|32|64)$")>; 2180def : InstRW<[A64FXWrite_ST16, WriteAdr], 2181 (instregex "^ST3i(8|16|32|64)_POST$")>; 2182 2183// ASIMD store, 4 element, multiple, D-form, B/H/S 2184// ASIMD store, 4 element, multiple, Q-form, B/H/S 2185// ASIMD store, 4 element, multiple, Q-form, D 2186def : InstRW<[A64FXWrite_ST13], 2187 (instregex "^ST4Fourv(8b|4h|2s|16b|8h|4s|2d)$")>; 2188def : InstRW<[A64FXWrite_ST17, WriteAdr], 2189 (instregex "^ST4Fourv(8b|4h|2s|16b|8h|4s|2d)_POST$")>; 2190 2191// ASIMD store, 4 element, one lane, B/H 2192// ASIMD store, 4 element, one lane, S 2193// ASIMD store, 4 element, one lane, D 2194def : InstRW<[A64FXWrite_ST13], (instregex "^ST4i(8|16|32|64)$")>; 2195def : InstRW<[A64FXWrite_ST17, WriteAdr], 2196 (instregex "^ST4i(8|16|32|64)_POST$")>; 2197 2198// V8.1a Atomics (LSE) 2199def : InstRW<[A64FXWrite_CAS, WriteAtomic], 2200 (instrs CASB, CASH, CASW, CASX)>; 2201 2202def : InstRW<[A64FXWrite_CAS, WriteAtomic], 2203 (instrs CASAB, CASAH, CASAW, CASAX)>; 2204 2205def : InstRW<[A64FXWrite_CAS, WriteAtomic], 2206 (instrs CASLB, CASLH, CASLW, CASLX)>; 2207 2208def : InstRW<[A64FXWrite_CAS, WriteAtomic], 2209 (instrs CASALB, CASALH, CASALW, CASALX)>; 2210 2211def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2212 (instrs LDLARB, LDLARH, LDLARW, LDLARX)>; 2213 2214def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2215 (instrs LDADDB, LDADDH, LDADDW, LDADDX)>; 2216 2217def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2218 (instrs LDADDAB, LDADDAH, LDADDAW, LDADDAX)>; 2219 2220def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2221 (instrs LDADDLB, LDADDLH, LDADDLW, LDADDLX)>; 2222 2223def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2224 (instrs LDADDALB, LDADDALH, LDADDALW, LDADDALX)>; 2225 2226def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2227 (instrs LDCLRB, LDCLRH, LDCLRW, LDCLRX)>; 2228 2229def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2230 (instrs LDCLRAB, LDCLRAH, LDCLRAW, LDCLRAX)>; 2231 2232def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2233 (instrs LDCLRLB, LDCLRLH, LDCLRLW, LDCLRLX)>; 2234 2235def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2236 (instrs LDCLRALB, LDCLRALH, LDCLRALW, LDCLRALX)>; 2237 2238def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2239 (instrs LDEORB, LDEORH, LDEORW, LDEORX)>; 2240 2241def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2242 (instrs LDEORAB, LDEORAH, LDEORAW, LDEORAX)>; 2243 2244def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2245 (instrs LDEORLB, LDEORLH, LDEORLW, LDEORLX)>; 2246 2247def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2248 (instrs LDEORALB, LDEORALH, LDEORALW, LDEORALX)>; 2249 2250def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2251 (instrs LDSETB, LDSETH, LDSETW, LDSETX)>; 2252 2253def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2254 (instrs LDSETAB, LDSETAH, LDSETAW, LDSETAX)>; 2255 2256def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2257 (instrs LDSETLB, LDSETLH, LDSETLW, LDSETLX)>; 2258 2259def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2260 (instrs LDSETALB, LDSETALH, LDSETALW, LDSETALX)>; 2261 2262def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2263 (instrs LDSMAXB, LDSMAXH, LDSMAXW, LDSMAXX, 2264 LDSMAXAB, LDSMAXAH, LDSMAXAW, LDSMAXAX, 2265 LDSMAXLB, LDSMAXLH, LDSMAXLW, LDSMAXLX, 2266 LDSMAXALB, LDSMAXALH, LDSMAXALW, LDSMAXALX)>; 2267 2268def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2269 (instrs LDSMINB, LDSMINH, LDSMINW, LDSMINX, 2270 LDSMINAB, LDSMINAH, LDSMINAW, LDSMINAX, 2271 LDSMINLB, LDSMINLH, LDSMINLW, LDSMINLX, 2272 LDSMINALB, LDSMINALH, LDSMINALW, LDSMINALX)>; 2273 2274def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2275 (instrs LDUMAXB, LDUMAXH, LDUMAXW, LDUMAXX, 2276 LDUMAXAB, LDUMAXAH, LDUMAXAW, LDUMAXAX, 2277 LDUMAXLB, LDUMAXLH, LDUMAXLW, LDUMAXLX, 2278 LDUMAXALB, LDUMAXALH, LDUMAXALW, LDUMAXALX)>; 2279 2280def : InstRW<[A64FXWrite_5Cyc_GI5, WriteAtomic], 2281 (instrs LDUMINB, LDUMINH, LDUMINW, LDUMINX, 2282 LDUMINAB, LDUMINAH, LDUMINAW, LDUMINAX, 2283 LDUMINLB, LDUMINLH, LDUMINLW, LDUMINLX, 2284 LDUMINALB, LDUMINALH, LDUMINALW, LDUMINALX)>; 2285 2286def : InstRW<[A64FXWrite_SWP, WriteAtomic], 2287 (instrs SWPB, SWPH, SWPW, SWPX)>; 2288 2289def : InstRW<[A64FXWrite_SWP, WriteAtomic], 2290 (instrs SWPAB, SWPAH, SWPAW, SWPAX)>; 2291 2292def : InstRW<[A64FXWrite_SWP, WriteAtomic], 2293 (instrs SWPLB, SWPLH, SWPLW, SWPLX)>; 2294 2295def : InstRW<[A64FXWrite_SWP, WriteAtomic], 2296 (instrs SWPALB, SWPALH, SWPALW, SWPALX)>; 2297 2298def : InstRW<[A64FXWrite_STUR, WriteAtomic], 2299 (instrs STLLRB, STLLRH, STLLRW, STLLRX)>; 2300 2301// [ 1] "abs $Zd, $Pg/m, $Zn"; 2302def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs ABS_ZPmZ_B, ABS_ZPmZ_D, ABS_ZPmZ_H, ABS_ZPmZ_S)>; 2303 2304// [ 2] "add $Zd, $Zn, $Zm"; 2305def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs ADD_ZZZ_B, ADD_ZZZ_D, ADD_ZZZ_H, ADD_ZZZ_S)>; 2306 2307// [ 3] "add $Zdn, $Pg/m, $_Zdn, $Zm"; 2308def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs ADD_ZPmZ_B, ADD_ZPmZ_D, ADD_ZPmZ_H, ADD_ZPmZ_S)>; 2309 2310// [ 4] "add $Zdn, $_Zdn, $imm"; 2311def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs ADD_ZI_B, ADD_ZI_D, ADD_ZI_H, ADD_ZI_S)>; 2312 2313// [ 5] "addpl $Rd, $Rn, $imm6"; 2314def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs ADDPL_XXI)>; 2315 2316// [ 6] "addvl $Rd, $Rn, $imm6"; 2317def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs ADDVL_XXI)>; 2318 2319// [ 7] "adr $Zd, [$Zn, $Zm]"; 2320def : InstRW<[A64FXWrite_5Cyc_GI0], (instrs ADR_LSL_ZZZ_D_0, ADR_LSL_ZZZ_D_1, ADR_LSL_ZZZ_D_2, ADR_LSL_ZZZ_D_3, ADR_LSL_ZZZ_S_0, ADR_LSL_ZZZ_S_1, ADR_LSL_ZZZ_S_2, ADR_LSL_ZZZ_S_3, ADR_SXTW_ZZZ_D_0, ADR_SXTW_ZZZ_D_1, ADR_SXTW_ZZZ_D_2, ADR_SXTW_ZZZ_D_3, ADR_UXTW_ZZZ_D_0, ADR_UXTW_ZZZ_D_1, ADR_UXTW_ZZZ_D_2, ADR_UXTW_ZZZ_D_3)>; 2321 2322// [ 8] "and $Pd, $Pg/z, $Pn, $Pm"; 2323def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs AND_PPzPP)>; 2324 2325// [ 9] "and $Zd, $Zn, $Zm"; 2326def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs AND_ZZZ)>; 2327 2328// [10] "and $Zdn, $Pg/m, $_Zdn, $Zm"; 2329def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs AND_ZPmZ_B, AND_ZPmZ_D, AND_ZPmZ_H, AND_ZPmZ_S)>; 2330 2331// [11] "and $Zdn, $_Zdn, $imms13"; 2332def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs AND_ZI)>; 2333 2334// [12] "ands $Pd, $Pg/z, $Pn, $Pm"; 2335def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs ANDS_PPzPP)>; 2336 2337// [13] "andv $Vd, $Pg, $Zn"; 2338def : InstRW<[A64FXWrite_14Cyc_GI03], (instrs ANDV_VPZ_B, ANDV_VPZ_D, ANDV_VPZ_H, ANDV_VPZ_S)>; 2339 2340// [14] "asr $Zd, $Zn, $Zm"; 2341def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs ASR_WIDE_ZZZ_B, ASR_WIDE_ZZZ_H, ASR_WIDE_ZZZ_S)>; 2342 2343// [15] "asr $Zd, $Zn, $imm"; 2344def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs ASR_ZZI_B, ASR_ZZI_D, ASR_ZZI_H, ASR_ZZI_S)>; 2345 2346// [16] "asr $Zdn, $Pg/m, $_Zdn, $Zm"; 2347def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs ASR_WIDE_ZPmZ_B, ASR_WIDE_ZPmZ_H, ASR_WIDE_ZPmZ_S, ASR_ZPmZ_B, ASR_ZPmZ_D, ASR_ZPmZ_H, ASR_ZPmZ_S)>; 2348 2349// [17] "asr $Zdn, $Pg/m, $_Zdn, $imm"; 2350def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs ASR_ZPmI_B, ASR_ZPmI_D, ASR_ZPmI_H, ASR_ZPmI_S)>; 2351 2352// [18] "asrd $Zdn, $Pg/m, $_Zdn, $imm"; 2353def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs ASRD_ZPmI_B, ASRD_ZPmI_D, ASRD_ZPmI_H, ASRD_ZPmI_S)>; 2354 2355// [19] "asrr $Zdn, $Pg/m, $_Zdn, $Zm"; 2356def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs ASRR_ZPmZ_B, ASRR_ZPmZ_D, ASRR_ZPmZ_H, ASRR_ZPmZ_S)>; 2357 2358// [20] "bic $Pd, $Pg/z, $Pn, $Pm"; 2359def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs BIC_PPzPP)>; 2360 2361// [21] "bic $Zd, $Zn, $Zm"; 2362def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs BIC_ZZZ)>; 2363 2364// [22] "bic $Zdn, $Pg/m, $_Zdn, $Zm"; 2365def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs BIC_ZPmZ_B, BIC_ZPmZ_D, BIC_ZPmZ_H, BIC_ZPmZ_S)>; 2366 2367// [23] "bics $Pd, $Pg/z, $Pn, $Pm"; 2368def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs BICS_PPzPP)>; 2369 2370// [24] "brka $Pd, $Pg/m, $Pn"; 2371def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs BRKA_PPmP)>; 2372 2373// [25] "brka $Pd, $Pg/z, $Pn"; 2374def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs BRKA_PPzP)>; 2375 2376// [26] "brkas $Pd, $Pg/z, $Pn"; 2377def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs BRKAS_PPzP)>; 2378 2379// [27] "brkb $Pd, $Pg/m, $Pn"; 2380def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs BRKB_PPmP)>; 2381 2382// [28] "brkb $Pd, $Pg/z, $Pn"; 2383def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs BRKB_PPzP)>; 2384 2385// [29] "brkbs $Pd, $Pg/z, $Pn"; 2386def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs BRKBS_PPzP)>; 2387 2388// [30] "brkn $Pdm, $Pg/z, $Pn, $_Pdm"; 2389def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs BRKN_PPzP)>; 2390 2391// [31] "brkns $Pdm, $Pg/z, $Pn, $_Pdm"; 2392def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs BRKNS_PPzP)>; 2393 2394// [32] "brkpa $Pd, $Pg/z, $Pn, $Pm"; 2395def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs BRKPA_PPzPP)>; 2396 2397// [33] "brkpas $Pd, $Pg/z, $Pn, $Pm"; 2398def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs BRKPAS_PPzPP)>; 2399 2400// [34] "brkpb $Pd, $Pg/z, $Pn, $Pm"; 2401def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs BRKPB_PPzPP)>; 2402 2403// [35] "brkpbs $Pd, $Pg/z, $Pn, $Pm"; 2404def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs BRKPBS_PPzPP)>; 2405 2406// [36] "clasta $Rdn, $Pg, $_Rdn, $Zm"; 2407def : InstRW<[A64FXWrite_29Cyc_GI0256], (instrs CLASTA_RPZ_B, CLASTA_RPZ_D, CLASTA_RPZ_H, CLASTA_RPZ_S)>; 2408 2409// [37] "clasta $Vdn, $Pg, $_Vdn, $Zm"; 2410def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs CLASTA_VPZ_B, CLASTA_VPZ_D, CLASTA_VPZ_H, CLASTA_VPZ_S)>; 2411 2412// [38] "clasta $Zdn, $Pg, $_Zdn, $Zm"; 2413def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs CLASTA_ZPZ_B, CLASTA_ZPZ_D, CLASTA_ZPZ_H, CLASTA_ZPZ_S)>; 2414 2415// [39] "clastb $Rdn, $Pg, $_Rdn, $Zm"; 2416def : InstRW<[A64FXWrite_29Cyc_GI0256], (instrs CLASTB_RPZ_B, CLASTB_RPZ_D, CLASTB_RPZ_H, CLASTB_RPZ_S)>; 2417 2418// [40] "clastb $Vdn, $Pg, $_Vdn, $Zm"; 2419def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs CLASTB_VPZ_B, CLASTB_VPZ_D, CLASTB_VPZ_H, CLASTB_VPZ_S)>; 2420 2421// [41] "clastb $Zdn, $Pg, $_Zdn, $Zm"; 2422def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs CLASTB_ZPZ_B, CLASTB_ZPZ_D, CLASTB_ZPZ_H, CLASTB_ZPZ_S)>; 2423 2424// [42] "cls $Zd, $Pg/m, $Zn"; 2425def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs CLS_ZPmZ_B, CLS_ZPmZ_D, CLS_ZPmZ_H, CLS_ZPmZ_S)>; 2426 2427// [43] "clz $Zd, $Pg/m, $Zn"; 2428def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs CLZ_ZPmZ_B, CLZ_ZPmZ_D, CLZ_ZPmZ_H, CLZ_ZPmZ_S)>; 2429 2430// [44] "cmpeq $Pd, $Pg/z, $Zn, $Zm"; 2431def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPEQ_PPzZZ_B, CMPEQ_PPzZZ_D, CMPEQ_PPzZZ_H, CMPEQ_PPzZZ_S, CMPEQ_WIDE_PPzZZ_B, CMPEQ_WIDE_PPzZZ_H, CMPEQ_WIDE_PPzZZ_S)>; 2432 2433// [45] "cmpeq $Pd, $Pg/z, $Zn, $imm5"; 2434def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPEQ_PPzZI_B, CMPEQ_PPzZI_D, CMPEQ_PPzZI_H, CMPEQ_PPzZI_S)>; 2435 2436// [46] "cmpge $Pd, $Pg/z, $Zn, $Zm"; 2437def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPGE_PPzZZ_B, CMPGE_PPzZZ_D, CMPGE_PPzZZ_H, CMPGE_PPzZZ_S, CMPGE_WIDE_PPzZZ_B, CMPGE_WIDE_PPzZZ_H, CMPGE_WIDE_PPzZZ_S)>; 2438 2439// [47] "cmpge $Pd, $Pg/z, $Zn, $imm5"; 2440def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPGE_PPzZI_B, CMPGE_PPzZI_D, CMPGE_PPzZI_H, CMPGE_PPzZI_S)>; 2441 2442// [48] "cmpgt $Pd, $Pg/z, $Zn, $Zm"; 2443def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPGT_PPzZZ_B, CMPGT_PPzZZ_D, CMPGT_PPzZZ_H, CMPGT_PPzZZ_S, CMPGT_WIDE_PPzZZ_B, CMPGT_WIDE_PPzZZ_H, CMPGT_WIDE_PPzZZ_S)>; 2444 2445// [49] "cmpgt $Pd, $Pg/z, $Zn, $imm5"; 2446def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPGT_PPzZI_B, CMPGT_PPzZI_D, CMPGT_PPzZI_H, CMPGT_PPzZI_S)>; 2447 2448// [50] "cmphi $Pd, $Pg/z, $Zn, $Zm"; 2449def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPHI_PPzZZ_B, CMPHI_PPzZZ_D, CMPHI_PPzZZ_H, CMPHI_PPzZZ_S, CMPHI_WIDE_PPzZZ_B, CMPHI_WIDE_PPzZZ_H, CMPHI_WIDE_PPzZZ_S)>; 2450 2451// [51] "cmphi $Pd, $Pg/z, $Zn, $imm7"; 2452def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPHI_PPzZI_B, CMPHI_PPzZI_D, CMPHI_PPzZI_H, CMPHI_PPzZI_S)>; 2453 2454// [52] "cmphs $Pd, $Pg/z, $Zn, $Zm"; 2455def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPHS_PPzZZ_B, CMPHS_PPzZZ_D, CMPHS_PPzZZ_H, CMPHS_PPzZZ_S, CMPHS_WIDE_PPzZZ_B, CMPHS_WIDE_PPzZZ_H, CMPHS_WIDE_PPzZZ_S)>; 2456 2457// [53] "cmphs $Pd, $Pg/z, $Zn, $imm7"; 2458def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPHS_PPzZI_B, CMPHS_PPzZI_D, CMPHS_PPzZI_H, CMPHS_PPzZI_S)>; 2459 2460// [54] "cmple $Pd, $Pg/z, $Zn, $Zm"; 2461def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPLE_WIDE_PPzZZ_B, CMPLE_WIDE_PPzZZ_H, CMPLE_WIDE_PPzZZ_S)>; 2462 2463// [55] "cmple $Pd, $Pg/z, $Zn, $imm5"; 2464def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPLE_PPzZI_B, CMPLE_PPzZI_D, CMPLE_PPzZI_H, CMPLE_PPzZI_S)>; 2465 2466// [56] "cmplo $Pd, $Pg/z, $Zn, $Zm"; 2467def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPLO_WIDE_PPzZZ_B, CMPLO_WIDE_PPzZZ_H, CMPLO_WIDE_PPzZZ_S)>; 2468 2469// [57] "cmplo $Pd, $Pg/z, $Zn, $imm7"; 2470def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPLO_PPzZI_B, CMPLO_PPzZI_D, CMPLO_PPzZI_H, CMPLO_PPzZI_S)>; 2471 2472// [58] "cmpls $Pd, $Pg/z, $Zn, $Zm"; 2473def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPLS_WIDE_PPzZZ_B, CMPLS_WIDE_PPzZZ_H, CMPLS_WIDE_PPzZZ_S)>; 2474 2475// [59] "cmpls $Pd, $Pg/z, $Zn, $imm7"; 2476def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPLS_PPzZI_B, CMPLS_PPzZI_D, CMPLS_PPzZI_H, CMPLS_PPzZI_S)>; 2477 2478// [60] "cmplt $Pd, $Pg/z, $Zn, $Zm"; 2479def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPLT_WIDE_PPzZZ_B, CMPLT_WIDE_PPzZZ_H, CMPLT_WIDE_PPzZZ_S)>; 2480 2481// [61] "cmplt $Pd, $Pg/z, $Zn, $imm5"; 2482def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPLT_PPzZI_B, CMPLT_PPzZI_D, CMPLT_PPzZI_H, CMPLT_PPzZI_S)>; 2483 2484// [62] "cmpne $Pd, $Pg/z, $Zn, $Zm"; 2485def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPNE_PPzZZ_B, CMPNE_PPzZZ_D, CMPNE_PPzZZ_H, CMPNE_PPzZZ_S, CMPNE_WIDE_PPzZZ_B, CMPNE_WIDE_PPzZZ_H, CMPNE_WIDE_PPzZZ_S)>; 2486 2487// [63] "cmpne $Pd, $Pg/z, $Zn, $imm5"; 2488def : InstRW<[A64FXWrite_4Cyc_GI01], (instrs CMPNE_PPzZI_B, CMPNE_PPzZI_D, CMPNE_PPzZI_H, CMPNE_PPzZI_S)>; 2489 2490// [64] "cnot $Zd, $Pg/m, $Zn"; 2491def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs CNOT_ZPmZ_B, CNOT_ZPmZ_D, CNOT_ZPmZ_H, CNOT_ZPmZ_S)>; 2492 2493// [65] "cnt $Zd, $Pg/m, $Zn"; 2494def : InstRW<[A64FXWrite_4Cyc_GI3], (instrs CNT_ZPmZ_B, CNT_ZPmZ_D, CNT_ZPmZ_H, CNT_ZPmZ_S)>; 2495 2496// [66] "cntb $Rd, $pattern, mul $imm4"; 2497def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs CNTB_XPiI)>; 2498 2499// [67] "cntd $Rd, $pattern, mul $imm4"; 2500def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs CNTD_XPiI)>; 2501 2502// [68] "cnth $Rd, $pattern, mul $imm4"; 2503def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs CNTH_XPiI)>; 2504 2505// [69] "cntp $Rd, $Pg, $Pn"; 2506def : InstRW<[A64FXWrite_6Cyc_GI01], (instrs CNTP_XPP_B, CNTP_XPP_D, CNTP_XPP_H, CNTP_XPP_S)>; 2507 2508// [70] "cntw $Rd, $pattern, mul $imm4"; 2509def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs CNTW_XPiI)>; 2510 2511// [71] "compact $Zd, $Pg, $Zn"; 2512def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs COMPACT_ZPZ_D, COMPACT_ZPZ_S)>; 2513 2514// [72] "cpy $Zd, $Pg/m, $Rn"; 2515def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs CPY_ZPmR_B, CPY_ZPmR_D, CPY_ZPmR_H, CPY_ZPmR_S)>; 2516 2517// [73] "cpy $Zd, $Pg/m, $Vn"; 2518def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs CPY_ZPmV_B, CPY_ZPmV_D, CPY_ZPmV_H, CPY_ZPmV_S)>; 2519 2520// [74] "cpy $Zd, $Pg/m, $imm"; 2521def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs CPY_ZPmI_B, CPY_ZPmI_D, CPY_ZPmI_H, CPY_ZPmI_S)>; 2522 2523// [75] "cpy $Zd, $Pg/z, $imm"; 2524def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs CPY_ZPzI_B, CPY_ZPzI_D, CPY_ZPzI_H, CPY_ZPzI_S)>; 2525 2526// [76] "ctermeq $Rn, $Rm"; 2527def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs CTERMEQ_WW, CTERMEQ_XX)>; 2528 2529// [77] "ctermne $Rn, $Rm"; 2530def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs CTERMNE_WW, CTERMNE_XX)>; 2531 2532// [78] "decb $Rdn, $pattern, mul $imm4"; 2533def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs DECB_XPiI)>; 2534 2535// [79] "decd $Rdn, $pattern, mul $imm4"; 2536def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs DECD_XPiI)>; 2537 2538// [80] "decd $Zdn, $pattern, mul $imm4"; 2539def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs DECD_ZPiI)>; 2540 2541// [81] "dech $Rdn, $pattern, mul $imm4"; 2542def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs DECH_XPiI)>; 2543 2544// [82] "dech $Zdn, $pattern, mul $imm4"; 2545def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs DECH_ZPiI)>; 2546 2547// [83] "decp $Rdn, $Pg"; 2548def : InstRW<[A64FXWrite_6Cyc_GI124], (instrs DECP_XP_B, DECP_XP_D, DECP_XP_H, DECP_XP_S)>; 2549 2550// [84] "decp $Zdn, $Pg"; 2551def : InstRW<[A64FXWrite_12Cyc_GI01], (instrs DECP_ZP_D, DECP_ZP_H, DECP_ZP_S)>; 2552 2553// [85] "decw $Rdn, $pattern, mul $imm4"; 2554def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs DECW_XPiI)>; 2555 2556// [86] "decw $Zdn, $pattern, mul $imm4"; 2557def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs DECW_ZPiI)>; 2558 2559// [87] "dup $Zd, $Rn"; 2560def : InstRW<[A64FXWrite_8Cyc_GI01], (instrs DUP_ZR_B, DUP_ZR_D, DUP_ZR_H, DUP_ZR_S)>; 2561 2562// [88] "dup $Zd, $Zn$idx"; 2563def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs DUP_ZZI_B, DUP_ZZI_D, DUP_ZZI_H, DUP_ZZI_Q, DUP_ZZI_S)>; 2564 2565// [89] "dup $Zd, $imm"; 2566def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs DUP_ZI_B, DUP_ZI_D, DUP_ZI_H, DUP_ZI_S)>; 2567 2568// [90] "dupm $Zd, $imms"; 2569def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs DUPM_ZI)>; 2570 2571// [91] "eor $Pd, $Pg/z, $Pn, $Pm"; 2572def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs EOR_PPzPP)>; 2573 2574// [92] "eor $Zd, $Zn, $Zm"; 2575def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs EOR_ZZZ)>; 2576 2577// [93] "eor $Zdn, $Pg/m, $_Zdn, $Zm"; 2578def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs EOR_ZPmZ_B, EOR_ZPmZ_D, EOR_ZPmZ_H, EOR_ZPmZ_S)>; 2579 2580// [94] "eor $Zdn, $_Zdn, $imms13"; 2581def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs EOR_ZI)>; 2582 2583// [95] "eors $Pd, $Pg/z, $Pn, $Pm"; 2584def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs EORS_PPzPP)>; 2585 2586// [96] "eorv $Vd, $Pg, $Zn"; 2587def : InstRW<[A64FXWrite_14Cyc_GI03], (instrs EORV_VPZ_B, EORV_VPZ_D, EORV_VPZ_H, EORV_VPZ_S)>; 2588 2589// [97] "ext $Zdn, $_Zdn, $Zm, $imm8"; 2590def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs EXT_ZZI)>; 2591 2592// [99] "fabd $Zdn, $Pg/m, $_Zdn, $Zm"; 2593def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FABD_ZPmZ_D, FABD_ZPmZ_H, FABD_ZPmZ_S)>; 2594 2595// [100] "fabs $Zd, $Pg/m, $Zn"; 2596def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs FABS_ZPmZ_D, FABS_ZPmZ_H, FABS_ZPmZ_S)>; 2597 2598// [101] "facge $Pd, $Pg/z, $Zn, $Zm"; 2599def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FACGE_PPzZZ_D, FACGE_PPzZZ_H, FACGE_PPzZZ_S)>; 2600 2601// [102] "facgt $Pd, $Pg/z, $Zn, $Zm"; 2602def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FACGT_PPzZZ_D, FACGT_PPzZZ_H, FACGT_PPzZZ_S)>; 2603 2604// [103] "fadd $Zd, $Zn, $Zm"; def is line 1638 2605def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FADD_ZZZ_D, FADD_ZZZ_H, FADD_ZZZ_S)>; 2606 2607// [104] "fadd $Zdn, $Pg/m, $_Zdn, $Zm"; def is line 1638 2608def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FADD_ZPmZ_D, FADD_ZPmZ_H, FADD_ZPmZ_S)>; 2609 2610// [105] "fadd $Zdn, $Pg/m, $_Zdn, $i1"; def is line 1638 2611def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FADD_ZPmI_D, FADD_ZPmI_H, FADD_ZPmI_S)>; 2612 2613// [106] "fadda $Vdn, $Pg, $_Vdn, $Zm"; 2614def : InstRW<[A64FXWrite_18Cyc_GI03], (instrs FADDA_VPZ_D, FADDA_VPZ_H, FADDA_VPZ_S)>; 2615 2616// [107] "faddv $Vd, $Pg, $Zn"; 2617// H : 4 / 6 / ([1,2]9 / [1]6) x 4 / [1,2]9 = 75 cycle 2618// S : 4 / 6 / ([1,2]9 / [1]6) x 3 / [1,2]9 = 60 cycle 2619// D : 4 / 6 / ([1,2]9 / [1]6) x 2 / [1,2]9 = 45 cycle 2620def : InstRW<[A64FXWrite_75Cyc_GI03], (instrs FADDV_VPZ_H)>; 2621def : InstRW<[A64FXWrite_60Cyc_GI03], (instrs FADDV_VPZ_S)>; 2622def : InstRW<[A64FXWrite_45Cyc_GI03], (instrs FADDV_VPZ_D)>; 2623 2624// [108] "fcadd $Zdn, $Pg/m, $_Zdn, $Zm, $imm"; 2625def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FCADD_ZPmZ_D, FCADD_ZPmZ_H, FCADD_ZPmZ_S)>; 2626 2627// [109] "fcmeq $Pd, $Pg/z, $Zn, #0.0"; 2628def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FCMEQ_PPzZ0_D, FCMEQ_PPzZ0_H, FCMEQ_PPzZ0_S)>; 2629 2630// [110] "fcmeq $Pd, $Pg/z, $Zn, $Zm"; 2631def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FCMEQ_PPzZZ_D, FCMEQ_PPzZZ_H, FCMEQ_PPzZZ_S)>; 2632 2633// [111] "fcmge $Pd, $Pg/z, $Zn, #0.0"; 2634def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FCMGE_PPzZ0_D, FCMGE_PPzZ0_H, FCMGE_PPzZ0_S)>; 2635 2636// [112] "fcmge $Pd, $Pg/z, $Zn, $Zm"; 2637def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FCMGE_PPzZZ_D, FCMGE_PPzZZ_H, FCMGE_PPzZZ_S)>; 2638 2639// [113] "fcmgt $Pd, $Pg/z, $Zn, #0.0"; 2640def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FCMGT_PPzZ0_D, FCMGT_PPzZ0_H, FCMGT_PPzZ0_S)>; 2641 2642// [114] "fcmgt $Pd, $Pg/z, $Zn, $Zm"; 2643def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FCMGT_PPzZZ_D, FCMGT_PPzZZ_H, FCMGT_PPzZZ_S)>; 2644 2645// [115] "fcmla $Zda, $Pg/m, $Zn, $Zm, $imm"; 2646def : InstRW<[A64FXWrite_15Cyc_GI03], (instrs FCMLA_ZPmZZ_D, FCMLA_ZPmZZ_H, FCMLA_ZPmZZ_S)>; 2647 2648// [116] "fcmla $Zda, $Zn, $Zm$iop, $imm"; 2649def : InstRW<[A64FXWrite_15Cyc_GI03], (instrs FCMLA_ZZZI_H, FCMLA_ZZZI_S)>; 2650 2651// [117] "fcmle $Pd, $Pg/z, $Zn, #0.0"; 2652def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FCMLE_PPzZ0_D, FCMLE_PPzZ0_H, FCMLE_PPzZ0_S)>; 2653 2654// [118] "fcmlt $Pd, $Pg/z, $Zn, #0.0"; 2655def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FCMLT_PPzZ0_D, FCMLT_PPzZ0_H, FCMLT_PPzZ0_S)>; 2656 2657// [119] "fcmne $Pd, $Pg/z, $Zn, #0.0"; 2658def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FCMNE_PPzZ0_D, FCMNE_PPzZ0_H, FCMNE_PPzZ0_S)>; 2659 2660// [120] "fcmne $Pd, $Pg/z, $Zn, $Zm"; 2661def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FCMNE_PPzZZ_D, FCMNE_PPzZZ_H, FCMNE_PPzZZ_S)>; 2662 2663// [121] "fcmuo $Pd, $Pg/z, $Zn, $Zm"; 2664def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FCMUO_PPzZZ_D, FCMUO_PPzZZ_H, FCMUO_PPzZZ_S)>; 2665 2666// [122] "fcpy $Zd, $Pg/m, $imm8"; 2667def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FCPY_ZPmI_D, FCPY_ZPmI_H, FCPY_ZPmI_S)>; 2668 2669// [123] "fcvt $Zd, $Pg/m, $Zn"; 2670def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FCVT_ZPmZ_DtoH, FCVT_ZPmZ_DtoS, FCVT_ZPmZ_HtoD, FCVT_ZPmZ_HtoS, FCVT_ZPmZ_StoD, FCVT_ZPmZ_StoH)>; 2671 2672// [124] "fcvtzs $Zd, $Pg/m, $Zn"; 2673def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FCVTZS_ZPmZ_DtoD, FCVTZS_ZPmZ_DtoS, FCVTZS_ZPmZ_HtoD, FCVTZS_ZPmZ_HtoH, FCVTZS_ZPmZ_HtoS, FCVTZS_ZPmZ_StoD, FCVTZS_ZPmZ_StoS)>; 2674 2675// [125] "fcvtzu $Zd, $Pg/m, $Zn"; 2676def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FCVTZU_ZPmZ_DtoD, FCVTZU_ZPmZ_DtoS, FCVTZU_ZPmZ_HtoD, FCVTZU_ZPmZ_HtoH, FCVTZU_ZPmZ_HtoS, FCVTZU_ZPmZ_StoD, FCVTZU_ZPmZ_StoS)>; 2677 2678// [126] "fdiv $Zdn, $Pg/m, $_Zdn, $Zm"; 2679def : InstRW<[A64FXWrite_154Cyc_GI0], (instrs FDIV_ZPmZ_D)>; 2680def : InstRW<[A64FXWrite_134Cyc_GI0], (instrs FDIV_ZPmZ_H)>; 2681def : InstRW<[A64FXWrite_98Cyc_GI0], (instrs FDIV_ZPmZ_S)>; 2682 2683// [127] "fdivr $Zdn, $Pg/m, $_Zdn, $Zm"; 2684def : InstRW<[A64FXWrite_154Cyc_GI0], (instrs FDIVR_ZPmZ_D)>; 2685def : InstRW<[A64FXWrite_134Cyc_GI0], (instrs FDIVR_ZPmZ_H)>; 2686def : InstRW<[A64FXWrite_98Cyc_GI0], (instrs FDIVR_ZPmZ_S)>; 2687 2688// [128] "fdup $Zd, $imm8"; 2689def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FDUP_ZI_D, FDUP_ZI_H, FDUP_ZI_S)>; 2690 2691// [129] "fexpa $Zd, $Zn"; 2692def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs FEXPA_ZZ_D, FEXPA_ZZ_H, FEXPA_ZZ_S)>; 2693 2694// [130] "fmad $Zdn, $Pg/m, $Zm, $Za"; 2695def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FMAD_ZPmZZ_D, FMAD_ZPmZZ_H, FMAD_ZPmZZ_S)>; 2696 2697// [131] "fmax $Zdn, $Pg/m, $_Zdn, $Zm"; 2698def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs FMAX_ZPmZ_D, FMAX_ZPmZ_H, FMAX_ZPmZ_S)>; 2699 2700// [132] "fmax $Zdn, $Pg/m, $_Zdn, $i1"; 2701def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FMAX_ZPmI_D, FMAX_ZPmI_H, FMAX_ZPmI_S)>; 2702 2703// [133] "fmaxnm $Zdn, $Pg/m, $_Zdn, $Zm"; 2704def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FMAXNM_ZPmZ_D, FMAXNM_ZPmZ_H, FMAXNM_ZPmZ_S)>; 2705 2706// [134] "fmaxnm $Zdn, $Pg/m, $_Zdn, $i1"; 2707def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs FMAXNM_ZPmI_D, FMAXNM_ZPmI_H, FMAXNM_ZPmI_S)>; 2708 2709// [135] "fmaxnmv $Vd, $Pg, $Zn"; 2710def : InstRW<[A64FXWrite_10Cyc_GI03], (instrs FMAXNMV_VPZ_D, FMAXNMV_VPZ_H, FMAXNMV_VPZ_S)>; 2711 2712// [136] "fmaxv $Vd, $Pg, $Zn"; 2713def : InstRW<[A64FXWrite_10Cyc_GI03], (instrs FMAXV_VPZ_D, FMAXV_VPZ_H, FMAXV_VPZ_S)>; 2714 2715// [137] "fmin $Zdn, $Pg/m, $_Zdn, $Zm"; 2716def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs FMIN_ZPmZ_D, FMIN_ZPmZ_H, FMIN_ZPmZ_S)>; 2717 2718// [138] "fmin $Zdn, $Pg/m, $_Zdn, $i1"; 2719def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FMIN_ZPmI_D, FMIN_ZPmI_H, FMIN_ZPmI_S)>; 2720 2721// [139] "fminnm $Zdn, $Pg/m, $_Zdn, $Zm"; 2722def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs FMINNM_ZPmZ_D, FMINNM_ZPmZ_H, FMINNM_ZPmZ_S)>; 2723 2724// [140] "fminnm $Zdn, $Pg/m, $_Zdn, $i1"; 2725def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs FMINNM_ZPmI_D, FMINNM_ZPmI_H, FMINNM_ZPmI_S)>; 2726 2727// [141] "fminnmv $Vd, $Pg, $Zn"; 2728def : InstRW<[A64FXWrite_10Cyc_GI03], (instrs FMINNMV_VPZ_D, FMINNMV_VPZ_H, FMINNMV_VPZ_S)>; 2729 2730// [142] "fminv $Vd, $Pg, $Zn"; 2731def : InstRW<[A64FXWrite_10Cyc_GI03], (instrs FMINV_VPZ_D, FMINV_VPZ_H, FMINV_VPZ_S)>; 2732 2733// [143] "fmla $Zda, $Pg/m, $Zn, $Zm"; 2734def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FMLA_ZPmZZ_D, FMLA_ZPmZZ_H, FMLA_ZPmZZ_S)>; 2735 2736// [144] "fmla $Zda, $Zn, $Zm$iop"; 2737def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FMLA_ZZZI_D, FMLA_ZZZI_H, FMLA_ZZZI_S)>; 2738 2739// [145] "fmls $Zda, $Pg/m, $Zn, $Zm"; 2740def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FMLS_ZPmZZ_D, FMLS_ZPmZZ_H, FMLS_ZPmZZ_S)>; 2741 2742// [146] "fmls $Zda, $Zn, $Zm$iop"; 2743def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FMLS_ZZZI_D, FMLS_ZZZI_H, FMLS_ZZZI_S)>; 2744 2745// [147] "fmsb $Zdn, $Pg/m, $Zm, $Za"; 2746 2747// [148] "fmul $Zd, $Zn, $Zm"; 2748 2749// [149] "fmul $Zd, $Zn, $Zm$iop"; 2750 2751// [150] "fmul $Zdn, $Pg/m, $_Zdn, $Zm"; 2752 2753// [151] "fmul $Zdn, $Pg/m, $_Zdn, $i1"; 2754 2755// [152] "fmulx $Zdn, $Pg/m, $_Zdn, $Zm"; 2756 2757// [153] "fneg $Zd, $Pg/m, $Zn"; 2758def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs FNEG_ZPmZ_D, FNEG_ZPmZ_H, FNEG_ZPmZ_S)>; 2759 2760// [154] "fnmad $Zdn, $Pg/m, $Zm, $Za"; 2761def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FNMAD_ZPmZZ_D, FNMAD_ZPmZZ_H, FNMAD_ZPmZZ_S)>; 2762 2763// [155] "fnmla $Zda, $Pg/m, $Zn, $Zm"; 2764def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FNMLA_ZPmZZ_D, FNMLA_ZPmZZ_H, FNMLA_ZPmZZ_S)>; 2765 2766// [156] "fnmls $Zda, $Pg/m, $Zn, $Zm"; 2767def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FNMLS_ZPmZZ_D, FNMLS_ZPmZZ_H, FNMLS_ZPmZZ_S)>; 2768 2769// [157] "fnmsb $Zdn, $Pg/m, $Zm, $Za"; 2770def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FNMSB_ZPmZZ_D, FNMSB_ZPmZZ_H, FNMSB_ZPmZZ_S)>; 2771 2772// [158] "frecpe $Zd, $Zn"; 2773def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs FRECPE_ZZ_D, FRECPE_ZZ_H, FRECPE_ZZ_S)>; 2774 2775// [159] "frecps $Zd, $Zn, $Zm"; 2776def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FRECPS_ZZZ_D, FRECPS_ZZZ_H, FRECPS_ZZZ_S)>; 2777 2778// [160] "frecpx $Zd, $Pg/m, $Zn"; 2779def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs FRECPX_ZPmZ_D, FRECPX_ZPmZ_H, FRECPX_ZPmZ_S)>; 2780 2781// [161] "frinta $Zd, $Pg/m, $Zn"; 2782def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FRINTA_ZPmZ_D, FRINTA_ZPmZ_H, FRINTA_ZPmZ_S)>; 2783 2784// [162] "frinti $Zd, $Pg/m, $Zn"; 2785def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FRINTI_ZPmZ_D, FRINTI_ZPmZ_H, FRINTI_ZPmZ_S)>; 2786 2787// [163] "frintm $Zd, $Pg/m, $Zn"; 2788def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FRINTM_ZPmZ_D, FRINTM_ZPmZ_H, FRINTM_ZPmZ_S)>; 2789 2790// [164] "frintn $Zd, $Pg/m, $Zn"; 2791def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FRINTN_ZPmZ_D, FRINTN_ZPmZ_H, FRINTN_ZPmZ_S)>; 2792 2793// [165] "frintp $Zd, $Pg/m, $Zn"; 2794def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FRINTP_ZPmZ_D, FRINTP_ZPmZ_H, FRINTP_ZPmZ_S)>; 2795 2796// [166] "frintx $Zd, $Pg/m, $Zn"; 2797def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FRINTX_ZPmZ_D, FRINTX_ZPmZ_H, FRINTX_ZPmZ_S)>; 2798 2799// [167] "frintz $Zd, $Pg/m, $Zn"; 2800def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FRINTZ_ZPmZ_D, FRINTZ_ZPmZ_H, FRINTZ_ZPmZ_S)>; 2801 2802// [168] "frsqrte $Zd, $Zn"; 2803def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FRSQRTE_ZZ_D, FRSQRTE_ZZ_H, FRSQRTE_ZZ_S)>; 2804 2805// [169] "frsqrts $Zd, $Zn, $Zm"; 2806def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs FRSQRTS_ZZZ_D, FRSQRTS_ZZZ_H, FRSQRTS_ZZZ_S)>; 2807 2808// [170] "fscale $Zdn, $Pg/m, $_Zdn, $Zm"; 2809def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FSCALE_ZPmZ_D, FSCALE_ZPmZ_H, FSCALE_ZPmZ_S)>; 2810 2811// [171] "fsqrt $Zd, $Pg/m, $Zn"; 2812def : InstRW<[A64FXWrite_154Cyc_GI0], (instrs FSQRT_ZPmZ_D)>; 2813def : InstRW<[A64FXWrite_134Cyc_GI0], (instrs FSQRT_ZPmZ_H)>; 2814def : InstRW<[A64FXWrite_98Cyc_GI0], (instrs FSQRT_ZPmZ_S)>; 2815 2816// [172] "fsub $Zd, $Zn, $Zm"; 2817def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FSUB_ZZZ_D, FSUB_ZZZ_H, FSUB_ZZZ_S)>; 2818 2819// [173] "fsub $Zdn, $Pg/m, $_Zdn, $Zm"; 2820def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FSUB_ZPmZ_D, FSUB_ZPmZ_H, FSUB_ZPmZ_S)>; 2821 2822// [174] "fsub $Zdn, $Pg/m, $_Zdn, $i1"; 2823def : InstRW<[A64FXWrite_9Cyc_GI0], (instrs FSUB_ZPmI_D, FSUB_ZPmI_H, FSUB_ZPmI_S)>; 2824 2825// [175] "fsubr $Zdn, $Pg/m, $_Zdn, $Zm"; 2826def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FSUBR_ZPmZ_D, FSUBR_ZPmZ_H, FSUBR_ZPmZ_S)>; 2827 2828// [176] "fsubr $Zdn, $Pg/m, $_Zdn, $i1"; 2829def : InstRW<[A64FXWrite_9Cyc_GI0], (instrs FSUBR_ZPmI_D, FSUBR_ZPmI_H, FSUBR_ZPmI_S)>; 2830 2831// [177] "ftmad $Zdn, $_Zdn, $Zm, $imm3"; 2832def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FTMAD_ZZI_D, FTMAD_ZZI_H, FTMAD_ZZI_S)>; 2833 2834// [178] "ftsmul $Zd, $Zn, $Zm"; 2835def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs FTSMUL_ZZZ_D, FTSMUL_ZZZ_H, FTSMUL_ZZZ_S)>; 2836 2837// [180] "incb $Rdn, $pattern, mul $imm4"; 2838def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs INCB_XPiI)>; 2839 2840// [181] "incd $Rdn, $pattern, mul $imm4"; 2841def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs INCD_XPiI)>; 2842 2843// [182] "incd $Zdn, $pattern, mul $imm4"; 2844def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs INCD_ZPiI)>; 2845 2846// [183] "inch $Rdn, $pattern, mul $imm4"; 2847def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs INCH_XPiI)>; 2848 2849// [184] "inch $Zdn, $pattern, mul $imm4"; 2850def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs INCH_ZPiI)>; 2851 2852// [185] "incp $Rdn, $Pg"; 2853def : InstRW<[A64FXWrite_6Cyc_GI124], (instrs INCP_XP_B, INCP_XP_D, INCP_XP_H, INCP_XP_S)>; 2854 2855// [186] "incp $Zdn, $Pg"; 2856def : InstRW<[A64FXWrite_12Cyc_GI01], (instrs INCP_ZP_D, INCP_ZP_H, INCP_ZP_S)>; 2857 2858// [187] "incw $Rdn, $pattern, mul $imm4"; 2859def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs INCW_XPiI)>; 2860 2861// [188] "incw $Zdn, $pattern, mul $imm4"; 2862def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs INCW_ZPiI)>; 2863 2864// [189] "index $Zd, $Rn, $Rm"; 2865def : InstRW<[A64FXWrite_17Cyc_GI02], (instrs INDEX_RR_B, INDEX_RR_D, INDEX_RR_H, INDEX_RR_S)>; 2866 2867// [190] "index $Zd, $Rn, $imm5"; 2868def : InstRW<[A64FXWrite_21Cyc_GI02], (instrs INDEX_RI_B, INDEX_RI_D, INDEX_RI_H, INDEX_RI_S)>; 2869 2870// [191] "index $Zd, $imm5, $Rm"; 2871def : InstRW<[A64FXWrite_21Cyc_GI02], (instrs INDEX_IR_B, INDEX_IR_D, INDEX_IR_H, INDEX_IR_S)>; 2872 2873// [192] "index $Zd, $imm5, $imm5b"; 2874def : InstRW<[A64FXWrite_13Cyc_GI0], (instrs INDEX_II_B, INDEX_II_D, INDEX_II_H, INDEX_II_S)>; 2875 2876// [193] "insr $Zdn, $Rm"; 2877def : InstRW<[A64FXWrite_10Cyc_GI02], (instrs INSR_ZR_B, INSR_ZR_D, INSR_ZR_H, INSR_ZR_S)>; 2878 2879// [194] "insr $Zdn, $Vm"; 2880def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs INSR_ZV_B, INSR_ZV_D, INSR_ZV_H, INSR_ZV_S)>; 2881 2882// [195] "lasta $Rd, $Pg, $Zn"; 2883def : InstRW<[A64FXWrite_25Cyc_GI056], (instrs LASTA_RPZ_B, LASTA_RPZ_D, LASTA_RPZ_H, LASTA_RPZ_S)>; 2884 2885// [196] "lasta $Vd, $Pg, $Zn"; 2886def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs LASTA_VPZ_B, LASTA_VPZ_D, LASTA_VPZ_H, LASTA_VPZ_S)>; 2887 2888// [197] "lastb $Rd, $Pg, $Zn"; 2889def : InstRW<[A64FXWrite_25Cyc_GI056], (instrs LASTB_RPZ_B, LASTB_RPZ_D, LASTB_RPZ_H, LASTB_RPZ_S)>; 2890 2891// [198] "lastb $Vd, $Pg, $Zn"; 2892def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs LASTB_VPZ_B, LASTB_VPZ_D, LASTB_VPZ_H, LASTB_VPZ_S)>; 2893 2894// [199] "ld1b $Zt, $Pg/z, [$Rn, $Rm]"; 2895def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1B, LD1B_D, LD1B_H, LD1B_S)>; 2896 2897// [200] "ld1b $Zt, $Pg/z, [$Rn, $Zm]"; 2898def : InstRW<[A64FXWrite_19Cyc_GI0256], (instrs GLD1B_D_REAL, GLD1B_D_SXTW_REAL, GLD1B_D_UXTW_REAL, GLD1B_S_SXTW_REAL, GLD1B_S_UXTW_REAL)>; 2899 2900// [201] "ld1b $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 2901def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1B_D_IMM_REAL, LD1B_H_IMM_REAL, LD1B_IMM_REAL, LD1B_S_IMM_REAL)>; 2902 2903// [202] "ld1b $Zt, $Pg/z, [$Zn, $imm5]"; 2904def : InstRW<[A64FXWrite_15Cyc_GI056], (instrs GLD1B_D_IMM_REAL, GLD1B_S_IMM_REAL)>; 2905 2906// [203] "ld1d $Zt, $Pg/z, [$Rn, $Rm]"; 2907def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1D)>; 2908 2909// [204] "ld1d $Zt, $Pg/z, [$Rn, $Zm]"; 2910def : InstRW<[A64FXWrite_19Cyc_GI0256], (instrs GLD1D_REAL, GLD1D_SCALED_REAL, GLD1D_SXTW_REAL, GLD1D_SXTW_SCALED_REAL, GLD1D_UXTW_REAL, GLD1D_UXTW_SCALED_REAL)>; 2911 2912// [205] "ld1d $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 2913def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1D_IMM_REAL)>; 2914 2915// [206] "ld1d $Zt, $Pg/z, [$Zn, $imm5]"; 2916def : InstRW<[A64FXWrite_15Cyc_GI056], (instrs GLD1D_IMM_REAL)>; 2917 2918// [207] "ld1h $Zt, $Pg/z, [$Rn, $Rm]"; 2919def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1H, LD1H_D, LD1H_S)>; 2920 2921// [208] "ld1h $Zt, $Pg/z, [$Rn, $Zm]"; 2922def : InstRW<[A64FXWrite_19Cyc_GI0256], (instrs GLD1H_D_REAL, GLD1H_D_SCALED_REAL, GLD1H_D_SXTW_REAL, GLD1H_D_SXTW_SCALED_REAL, GLD1H_D_UXTW_REAL, GLD1H_D_UXTW_SCALED_REAL, GLD1H_S_SXTW_REAL, GLD1H_S_SXTW_SCALED_REAL, GLD1H_S_UXTW_REAL, GLD1H_S_UXTW_SCALED_REAL)>; 2923 2924// [209] "ld1h $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 2925def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1H_D_IMM_REAL, LD1H_IMM_REAL, LD1H_S_IMM_REAL)>; 2926 2927// [210] "ld1h $Zt, $Pg/z, [$Zn, $imm5]"; 2928def : InstRW<[A64FXWrite_15Cyc_GI056], (instrs GLD1H_D_IMM_REAL, GLD1H_S_IMM_REAL)>; 2929 2930// [211] "ld1rb $Zt, $Pg/z, [$Rn, $imm6]"; 2931def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RB_D_IMM, LD1RB_H_IMM, LD1RB_IMM, LD1RB_S_IMM)>; 2932 2933// [212] "ld1rd $Zt, $Pg/z, [$Rn, $imm6]"; 2934def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RD_IMM)>; 2935 2936// [213] "ld1rh $Zt, $Pg/z, [$Rn, $imm6]"; 2937def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RH_D_IMM, LD1RH_IMM, LD1RH_S_IMM)>; 2938 2939// [214] "ld1rqb $Zt, $Pg/z, [$Rn, $Rm]"; 2940def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RQ_B)>; 2941 2942// [215] "ld1rqb $Zt, $Pg/z, [$Rn, $imm4]"; 2943def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RQ_B_IMM)>; 2944 2945// [216] "ld1rqd $Zt, $Pg/z, [$Rn, $Rm]"; 2946def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RQ_D)>; 2947 2948// [217] "ld1rqd $Zt, $Pg/z, [$Rn, $imm4]"; 2949def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RQ_D_IMM)>; 2950 2951// [218] "ld1rqh $Zt, $Pg/z, [$Rn, $Rm]"; 2952def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RQ_H)>; 2953 2954// [219] "ld1rqh $Zt, $Pg/z, [$Rn, $imm4]"; 2955def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RQ_H_IMM)>; 2956 2957// [220] "ld1rqw $Zt, $Pg/z, [$Rn, $Rm]"; 2958def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RQ_W)>; 2959 2960// [221] "ld1rqw $Zt, $Pg/z, [$Rn, $imm4]"; 2961def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RQ_W_IMM)>; 2962 2963// [222] "ld1rsb $Zt, $Pg/z, [$Rn, $imm6]"; 2964def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RSB_D_IMM, LD1RSB_H_IMM, LD1RSB_S_IMM)>; 2965 2966// [223] "ld1rsh $Zt, $Pg/z, [$Rn, $imm6]"; 2967def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RSH_D_IMM, LD1RSH_S_IMM)>; 2968 2969// [224] "ld1rsw $Zt, $Pg/z, [$Rn, $imm6]"; 2970def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RSW_IMM)>; 2971 2972// [225] "ld1rw $Zt, $Pg/z, [$Rn, $imm6]"; 2973def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1RW_D_IMM, LD1RW_IMM)>; 2974 2975// [226] "ld1sb $Zt, $Pg/z, [$Rn, $Rm]"; 2976def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1SB_D, LD1SB_H, LD1SB_S)>; 2977 2978// [227] "ld1sb $Zt, $Pg/z, [$Rn, $Zm]"; 2979def : InstRW<[A64FXWrite_19Cyc_GI0256], (instrs GLD1SB_D_REAL, GLD1SB_D_SXTW_REAL, GLD1SB_D_UXTW_REAL, GLD1SB_S_SXTW_REAL, GLD1SB_S_UXTW_REAL)>; 2980 2981// [228] "ld1sb $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 2982def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1SB_D_IMM_REAL, LD1SB_H_IMM_REAL, LD1SB_S_IMM_REAL)>; 2983 2984// [229] "ld1sb $Zt, $Pg/z, [$Zn, $imm5]"; 2985def : InstRW<[A64FXWrite_15Cyc_GI056], (instrs GLD1SB_D_IMM_REAL, GLD1SB_S_IMM_REAL)>; 2986 2987// [230] "ld1sh $Zt, $Pg/z, [$Rn, $Rm]"; 2988def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1SH_D, LD1SH_S)>; 2989 2990// [231] "ld1sh $Zt, $Pg/z, [$Rn, $Zm]"; 2991def : InstRW<[A64FXWrite_19Cyc_GI0256], (instrs GLD1SH_D_REAL, GLD1SH_D_SCALED_REAL, GLD1SH_D_SXTW_REAL, GLD1SH_D_SXTW_SCALED_REAL, GLD1SH_D_UXTW_REAL, GLD1SH_D_UXTW_SCALED_REAL, GLD1SH_S_SXTW_REAL, GLD1SH_S_SXTW_SCALED_REAL, GLD1SH_S_UXTW_REAL, GLD1SH_S_UXTW_SCALED_REAL)>; 2992 2993// [232] "ld1sh $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 2994def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1SH_D_IMM_REAL, LD1SH_S_IMM_REAL)>; 2995 2996// [233] "ld1sh $Zt, $Pg/z, [$Zn, $imm5]"; 2997def : InstRW<[A64FXWrite_15Cyc_GI056], (instrs GLD1SH_D_IMM_REAL, GLD1SH_S_IMM_REAL)>; 2998 2999// [234] "ld1sw $Zt, $Pg/z, [$Rn, $Rm]"; 3000def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1SW_D)>; 3001 3002// [235] "ld1sw $Zt, $Pg/z, [$Rn, $Zm]"; 3003def : InstRW<[A64FXWrite_19Cyc_GI0256], (instrs GLD1SW_D_REAL, GLD1SW_D_SCALED_REAL, GLD1SW_D_SXTW_REAL, GLD1SW_D_SXTW_SCALED_REAL, GLD1SW_D_UXTW_REAL, GLD1SW_D_UXTW_SCALED_REAL)>; 3004 3005// [236] "ld1sw $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3006def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1SW_D_IMM_REAL)>; 3007 3008// [237] "ld1sw $Zt, $Pg/z, [$Zn, $imm5]"; 3009def : InstRW<[A64FXWrite_15Cyc_GI056], (instrs GLD1SW_D_IMM_REAL)>; 3010 3011// [238] "ld1w $Zt, $Pg/z, [$Rn, $Rm]"; 3012def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1W, LD1W_D)>; 3013 3014// [239] "ld1w $Zt, $Pg/z, [$Rn, $Zm]"; 3015def : InstRW<[A64FXWrite_19Cyc_GI0256], (instrs GLD1W_D_REAL, GLD1W_D_SCALED_REAL, GLD1W_D_SXTW_REAL, GLD1W_D_SXTW_SCALED_REAL, GLD1W_D_UXTW_REAL, GLD1W_D_UXTW_SCALED_REAL, GLD1W_SXTW_REAL, GLD1W_SXTW_SCALED_REAL, GLD1W_UXTW_REAL, GLD1W_UXTW_SCALED_REAL)>; 3016 3017// [240] "ld1w $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3018def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD1W_D_IMM_REAL, LD1W_IMM_REAL)>; 3019 3020// [241] "ld1w $Zt, $Pg/z, [$Zn, $imm5]"; 3021def : InstRW<[A64FXWrite_15Cyc_GI056], (instrs GLD1W_D_IMM_REAL, GLD1W_IMM_REAL)>; 3022 3023// [242] "ld2b $Zt, $Pg/z, [$Rn, $Rm]"; 3024def : InstRW<[A64FXWrite_44Cyc_GI56], (instrs LD2B)>; 3025 3026// [243] "ld2b $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3027def : InstRW<[A64FXWrite_44Cyc_GI56], (instrs LD2B_IMM)>; 3028 3029// [244] "ld2d $Zt, $Pg/z, [$Rn, $Rm]"; 3030def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD2D)>; 3031 3032// [245] "ld2d $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3033def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD2D_IMM)>; 3034 3035// [246] "ld2h $Zt, $Pg/z, [$Rn, $Rm]"; 3036def : InstRW<[A64FXWrite_44Cyc_GI56], (instrs LD2H)>; 3037 3038// [247] "ld2h $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3039def : InstRW<[A64FXWrite_44Cyc_GI56], (instrs LD2H_IMM)>; 3040 3041// [248] "ld2w $Zt, $Pg/z, [$Rn, $Rm]"; 3042def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD2W)>; 3043 3044// [249] "ld2w $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3045def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD2W_IMM)>; 3046 3047// [250] "ld3b $Zt, $Pg/z, [$Rn, $Rm]"; 3048def : InstRW<[A64FXWrite_44Cyc_GI56], (instrs LD3B)>; 3049 3050// [251] "ld3b $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3051def : InstRW<[A64FXWrite_44Cyc_GI56], (instrs LD3B_IMM)>; 3052 3053// [252] "ld3d $Zt, $Pg/z, [$Rn, $Rm]"; 3054def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD3D)>; 3055 3056// [253] "ld3d $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3057def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD3D_IMM)>; 3058 3059// [254] "ld3h $Zt, $Pg/z, [$Rn, $Rm]"; 3060def : InstRW<[A64FXWrite_44Cyc_GI56], (instrs LD3H)>; 3061 3062// [255] "ld3h $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3063def : InstRW<[A64FXWrite_44Cyc_GI56], (instrs LD3H_IMM)>; 3064 3065// [256] "ld3w $Zt, $Pg/z, [$Rn, $Rm]"; 3066def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD3W)>; 3067 3068// [257] "ld3w $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3069def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD3W_IMM)>; 3070 3071// [258] "ld4b $Zt, $Pg/z, [$Rn, $Rm]"; 3072def : InstRW<[A64FXWrite_44Cyc_GI56], (instrs LD4B)>; 3073 3074// [259] "ld4b $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3075def : InstRW<[A64FXWrite_44Cyc_GI56], (instrs LD4B_IMM)>; 3076 3077// [260] "ld4d $Zt, $Pg/z, [$Rn, $Rm]"; 3078def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD4D)>; 3079 3080// [261] "ld4d $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3081def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD4D_IMM)>; 3082 3083// [262] "ld4h $Zt, $Pg/z, [$Rn, $Rm]"; 3084def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD4H)>; 3085 3086// [263] "ld4h $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3087def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD4H_IMM)>; 3088 3089// [264] "ld4w $Zt, $Pg/z, [$Rn, $Rm]"; 3090def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD4W)>; 3091 3092// [265] "ld4w $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3093def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LD4W_IMM)>; 3094 3095// [266] "ldff1b $Zt, $Pg/z, [$Rn, $Rm]"; 3096def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDFF1B_D_REAL, LDFF1B_H_REAL, LDFF1B_REAL, LDFF1B_S_REAL)>; 3097 3098// [267] "ldff1b $Zt, $Pg/z, [$Rn, $Zm]"; 3099def : InstRW<[A64FXWrite_19Cyc_GI0256], (instrs GLDFF1B_D_REAL, GLDFF1B_D_SXTW_REAL, GLDFF1B_D_UXTW_REAL, GLDFF1B_S_SXTW_REAL, GLDFF1B_S_UXTW_REAL)>; 3100 3101// [268] "ldff1b $Zt, $Pg/z, [$Zn, $imm5]"; 3102def : InstRW<[A64FXWrite_15Cyc_GI056], (instrs GLDFF1B_D_IMM_REAL, GLDFF1B_S_IMM_REAL)>; 3103 3104// [269] "ldff1d $Zt, $Pg/z, [$Rn, $Rm]"; 3105def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDFF1D_REAL)>; 3106 3107// [270] "ldff1d $Zt, $Pg/z, [$Rn, $Zm]"; 3108def : InstRW<[A64FXWrite_19Cyc_GI0256], (instrs GLDFF1D_REAL, GLDFF1D_SCALED_REAL, GLDFF1D_SXTW_REAL, GLDFF1D_SXTW_SCALED_REAL, GLDFF1D_UXTW_REAL, GLDFF1D_UXTW_SCALED_REAL)>; 3109 3110// [271] "ldff1d $Zt, $Pg/z, [$Zn, $imm5]"; 3111def : InstRW<[A64FXWrite_15Cyc_GI056], (instrs GLDFF1D_IMM_REAL)>; 3112 3113// [272] "ldff1h $Zt, $Pg/z, [$Rn, $Rm]"; 3114def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDFF1H_D_REAL, LDFF1H_REAL, LDFF1H_S_REAL)>; 3115 3116// [273] "ldff1h $Zt, $Pg/z, [$Rn, $Zm]"; 3117def : InstRW<[A64FXWrite_19Cyc_GI0256], (instrs GLDFF1H_D_REAL, GLDFF1H_D_SCALED_REAL, GLDFF1H_D_SXTW_REAL, GLDFF1H_D_SXTW_SCALED_REAL, GLDFF1H_D_UXTW_REAL, GLDFF1H_D_UXTW_SCALED_REAL, GLDFF1H_S_SXTW_REAL, GLDFF1H_S_SXTW_SCALED_REAL, GLDFF1H_S_UXTW_REAL, GLDFF1H_S_UXTW_SCALED_REAL)>; 3118 3119// [274] "ldff1h $Zt, $Pg/z, [$Zn, $imm5]"; 3120def : InstRW<[A64FXWrite_15Cyc_GI056], (instrs GLDFF1H_D_IMM_REAL, GLDFF1H_S_IMM_REAL)>; 3121 3122// [275] "ldff1sb $Zt, $Pg/z, [$Rn, $Rm]"; 3123def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDFF1SB_D_REAL, LDFF1SB_H_REAL, LDFF1SB_S_REAL)>; 3124 3125// [276] "ldff1sb $Zt, $Pg/z, [$Rn, $Zm]"; 3126def : InstRW<[A64FXWrite_19Cyc_GI0256], (instrs GLDFF1SB_D_REAL, GLDFF1SB_D_SXTW_REAL, GLDFF1SB_D_UXTW_REAL, GLDFF1SB_S_SXTW_REAL, GLDFF1SB_S_UXTW_REAL)>; 3127 3128// [277] "ldff1sb $Zt, $Pg/z, [$Zn, $imm5]"; 3129def : InstRW<[A64FXWrite_15Cyc_GI056], (instrs GLDFF1SB_D_IMM_REAL, GLDFF1SB_S_IMM_REAL)>; 3130 3131// [278] "ldff1sh $Zt, $Pg/z, [$Rn, $Rm]"; 3132def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDFF1SH_D_REAL, LDFF1SH_S_REAL)>; 3133 3134// [279] "ldff1sh $Zt, $Pg/z, [$Rn, $Zm]"; 3135def : InstRW<[A64FXWrite_19Cyc_GI0256], (instrs GLDFF1SH_D_REAL, GLDFF1SH_D_SCALED_REAL, GLDFF1SH_D_SXTW_REAL, GLDFF1SH_D_SXTW_SCALED_REAL, GLDFF1SH_D_UXTW_REAL, GLDFF1SH_D_UXTW_SCALED_REAL, GLDFF1SH_S_SXTW_REAL, GLDFF1SH_S_SXTW_SCALED_REAL, GLDFF1SH_S_UXTW_REAL, GLDFF1SH_S_UXTW_SCALED_REAL)>; 3136 3137// [280] "ldff1sh $Zt, $Pg/z, [$Zn, $imm5]"; 3138def : InstRW<[A64FXWrite_15Cyc_GI056], (instrs GLDFF1SH_D_IMM_REAL, GLDFF1SH_S_IMM_REAL)>; 3139 3140// [281] "ldff1sw $Zt, $Pg/z, [$Rn, $Rm]"; 3141def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDFF1SW_D_REAL)>; 3142 3143// [282] "ldff1sw $Zt, $Pg/z, [$Rn, $Zm]"; 3144def : InstRW<[A64FXWrite_19Cyc_GI0256], (instrs GLDFF1SW_D_REAL, GLDFF1SW_D_SCALED_REAL, GLDFF1SW_D_SXTW_REAL, GLDFF1SW_D_SXTW_SCALED_REAL, GLDFF1SW_D_UXTW_REAL, GLDFF1SW_D_UXTW_SCALED_REAL)>; 3145 3146// [283] "ldff1sw $Zt, $Pg/z, [$Zn, $imm5]"; 3147def : InstRW<[A64FXWrite_15Cyc_GI056], (instrs GLDFF1SW_D_IMM_REAL)>; 3148 3149// [284] "ldff1w $Zt, $Pg/z, [$Rn, $Rm]"; 3150def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDFF1W_D_REAL, LDFF1W_REAL)>; 3151 3152// [285] "ldff1w $Zt, $Pg/z, [$Rn, $Zm]"; 3153def : InstRW<[A64FXWrite_19Cyc_GI0256], (instrs GLDFF1W_D_REAL, GLDFF1W_D_SCALED_REAL, GLDFF1W_D_SXTW_REAL, GLDFF1W_D_SXTW_SCALED_REAL, GLDFF1W_D_UXTW_REAL, GLDFF1W_D_UXTW_SCALED_REAL, GLDFF1W_SXTW_REAL, GLDFF1W_SXTW_SCALED_REAL, GLDFF1W_UXTW_REAL, GLDFF1W_UXTW_SCALED_REAL)>; 3154 3155// [286] "ldff1w $Zt, $Pg/z, [$Zn, $imm5]"; 3156def : InstRW<[A64FXWrite_15Cyc_GI056], (instrs GLDFF1W_D_IMM_REAL, GLDFF1W_IMM_REAL)>; 3157 3158// [287] "ldnf1b $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3159def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNF1B_D_IMM_REAL, LDNF1B_H_IMM_REAL, LDNF1B_IMM_REAL, LDNF1B_S_IMM_REAL)>; 3160 3161// [288] "ldnf1d $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3162def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNF1D_IMM_REAL)>; 3163 3164// [289] "ldnf1h $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3165def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNF1H_D_IMM_REAL, LDNF1H_IMM_REAL, LDNF1H_S_IMM_REAL)>; 3166 3167// [290] "ldnf1sb $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3168def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNF1SB_D_IMM_REAL, LDNF1SB_H_IMM_REAL, LDNF1SB_S_IMM_REAL)>; 3169 3170// [291] "ldnf1sh $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3171def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNF1SH_D_IMM_REAL, LDNF1SH_S_IMM_REAL)>; 3172 3173// [292] "ldnf1sw $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3174def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNF1SW_D_IMM_REAL)>; 3175 3176// [293] "ldnf1w $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3177def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNF1W_D_IMM_REAL, LDNF1W_IMM_REAL)>; 3178 3179// [294] "ldnt1b $Zt, $Pg/z, [$Rn, $Rm]"; 3180def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNT1B_ZRR)>; 3181 3182// [295] "ldnt1b $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3183def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNT1B_ZRI)>; 3184 3185// [296] "ldnt1d $Zt, $Pg/z, [$Rn, $Rm]"; 3186def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNT1D_ZRR)>; 3187 3188// [297] "ldnt1d $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3189def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNT1D_ZRI)>; 3190 3191// [298] "ldnt1h $Zt, $Pg/z, [$Rn, $Rm]"; 3192def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNT1H_ZRR)>; 3193 3194// [299] "ldnt1h $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3195def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNT1H_ZRI)>; 3196 3197// [300] "ldnt1w $Zt, $Pg/z, [$Rn, $Rm]"; 3198def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNT1W_ZRR)>; 3199 3200// [301] "ldnt1w $Zt, $Pg/z, [$Rn, $imm4, mul vl]"; 3201def : InstRW<[A64FXWrite_11Cyc_GI56], (instrs LDNT1W_ZRI)>; 3202 3203// [302] "ldr $Pt, [$Rn, $imm9, mul vl]"; 3204def : InstRW<[A64FXWrite_11Cyc_GI5], (instrs LDR_PXI)>; 3205 3206// [303] "ldr $Zt, [$Rn, $imm9, mul vl]"; 3207def : InstRW<[A64FXWrite_11Cyc_GI5], (instrs LDR_ZXI)>; 3208 3209// [304] "lsl $Zd, $Zn, $Zm"; 3210def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs LSL_WIDE_ZZZ_B, LSL_WIDE_ZZZ_H, LSL_WIDE_ZZZ_S)>; 3211 3212// [305] "lsl $Zd, $Zn, $imm"; 3213def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs LSL_ZZI_B, LSL_ZZI_D, LSL_ZZI_H, LSL_ZZI_S)>; 3214 3215// [306] "lsl $Zdn, $Pg/m, $_Zdn, $Zm"; 3216def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs LSL_WIDE_ZPmZ_B, LSL_WIDE_ZPmZ_H, LSL_WIDE_ZPmZ_S, LSL_ZPmZ_B, LSL_ZPmZ_D, LSL_ZPmZ_H, LSL_ZPmZ_S)>; 3217 3218// [307] "lsl $Zdn, $Pg/m, $_Zdn, $imm"; 3219def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs LSL_ZPmI_B, LSL_ZPmI_D, LSL_ZPmI_H, LSL_ZPmI_S)>; 3220 3221// [308] "lslr $Zdn, $Pg/m, $_Zdn, $Zm"; 3222def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs LSLR_ZPmZ_B, LSLR_ZPmZ_D, LSLR_ZPmZ_H, LSLR_ZPmZ_S)>; 3223 3224// [309] "lsr $Zd, $Zn, $Zm"; 3225def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs LSR_WIDE_ZZZ_B, LSR_WIDE_ZZZ_H, LSR_WIDE_ZZZ_S)>; 3226 3227// [310] "lsr $Zd, $Zn, $imm"; 3228def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs LSR_ZZI_B, LSR_ZZI_D, LSR_ZZI_H, LSR_ZZI_S)>; 3229 3230// [311] "lsr $Zdn, $Pg/m, $_Zdn, $Zm"; 3231def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs LSR_WIDE_ZPmZ_B, LSR_WIDE_ZPmZ_H, LSR_WIDE_ZPmZ_S, LSR_ZPmZ_B, LSR_ZPmZ_D, LSR_ZPmZ_H, LSR_ZPmZ_S)>; 3232 3233// [312] "lsr $Zdn, $Pg/m, $_Zdn, $imm"; 3234def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs LSR_ZPmI_B, LSR_ZPmI_D, LSR_ZPmI_H, LSR_ZPmI_S)>; 3235 3236// [313] "lsrr $Zdn, $Pg/m, $_Zdn, $Zm"; 3237def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs LSRR_ZPmZ_B, LSRR_ZPmZ_D, LSRR_ZPmZ_H, LSRR_ZPmZ_S)>; 3238 3239// [314] "mad $Zdn, $Pg/m, $Zm, $Za"; 3240def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs MAD_ZPmZZ_B, MAD_ZPmZZ_D, MAD_ZPmZZ_H, MAD_ZPmZZ_S)>; 3241 3242// [315] "mla $Zda, $Pg/m, $Zn, $Zm"; 3243def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs MLA_ZPmZZ_B, MLA_ZPmZZ_D, MLA_ZPmZZ_H, MLA_ZPmZZ_S)>; 3244 3245// [316] "mls $Zda, $Pg/m, $Zn, $Zm"; 3246def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs MLS_ZPmZZ_B, MLS_ZPmZZ_D, MLS_ZPmZZ_H, MLS_ZPmZZ_S)>; 3247 3248// [317] "movprfx $Zd, $Pg/m, $Zn"; 3249def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs MOVPRFX_ZPmZ_B, MOVPRFX_ZPmZ_D, MOVPRFX_ZPmZ_H, MOVPRFX_ZPmZ_S)>; 3250 3251// [318] "movprfx $Zd, $Pg/z, $Zn"; 3252def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs MOVPRFX_ZPzZ_B, MOVPRFX_ZPzZ_D, MOVPRFX_ZPzZ_H, MOVPRFX_ZPzZ_S)>; 3253 3254// [319] "movprfx $Zd, $Zn"; 3255def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs MOVPRFX_ZZ)>; 3256 3257// [320] "msb $Zdn, $Pg/m, $Zm, $Za"; 3258def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs MSB_ZPmZZ_B, MSB_ZPmZZ_D, MSB_ZPmZZ_H, MSB_ZPmZZ_S)>; 3259 3260// [321] "mul $Zdn, $Pg/m, $_Zdn, $Zm"; 3261def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs MUL_ZPmZ_B, MUL_ZPmZ_D, MUL_ZPmZ_H, MUL_ZPmZ_S)>; 3262 3263// [322] "mul $Zdn, $_Zdn, $imm"; 3264def : InstRW<[A64FXWrite_9Cyc_GI0], (instrs MUL_ZI_B, MUL_ZI_D, MUL_ZI_H, MUL_ZI_S)>; 3265 3266// [323] "nand $Pd, $Pg/z, $Pn, $Pm"; 3267def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs NAND_PPzPP)>; 3268 3269// [324] "nands $Pd, $Pg/z, $Pn, $Pm"; 3270def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs NANDS_PPzPP)>; 3271 3272// [325] "neg $Zd, $Pg/m, $Zn"; 3273def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs NEG_ZPmZ_B, NEG_ZPmZ_D, NEG_ZPmZ_H, NEG_ZPmZ_S)>; 3274 3275// [326] "nor $Pd, $Pg/z, $Pn, $Pm"; 3276def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs NOR_PPzPP)>; 3277 3278// [327] "nors $Pd, $Pg/z, $Pn, $Pm"; 3279def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs NORS_PPzPP)>; 3280 3281// [328] "not $Zd, $Pg/m, $Zn"; 3282def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs NOT_ZPmZ_B, NOT_ZPmZ_D, NOT_ZPmZ_H, NOT_ZPmZ_S)>; 3283 3284// [329] "orn $Pd, $Pg/z, $Pn, $Pm"; 3285def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs ORN_PPzPP)>; 3286 3287// [330] "orns $Pd, $Pg/z, $Pn, $Pm"; 3288def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs ORNS_PPzPP)>; 3289 3290// [331] "orr $Pd, $Pg/z, $Pn, $Pm"; 3291def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs ORR_PPzPP)>; 3292 3293// [332] "orr $Zd, $Zn, $Zm"; 3294def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs ORR_ZZZ)>; 3295 3296// [333] "orr $Zdn, $Pg/m, $_Zdn, $Zm"; 3297def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs ORR_ZPmZ_B, ORR_ZPmZ_D, ORR_ZPmZ_H, ORR_ZPmZ_S)>; 3298 3299// [334] "orr $Zdn, $_Zdn, $imms13"; 3300def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs ORR_ZI)>; 3301 3302// [335] "orrs $Pd, $Pg/z, $Pn, $Pm"; 3303def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs ORRS_PPzPP)>; 3304 3305// [336] "orv $Vd, $Pg, $Zn"; 3306def : InstRW<[A64FXWrite_14Cyc_GI03], (instrs ORV_VPZ_B, ORV_VPZ_D, ORV_VPZ_H, ORV_VPZ_S)>; 3307 3308// [337] "pfalse $Pd"; 3309def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs PFALSE)>; 3310 3311// [338] "pnext $Pdn, $Pg, $_Pdn"; 3312def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs PNEXT_B, PNEXT_D, PNEXT_H, PNEXT_S)>; 3313 3314// [339] "prfb $prfop, $Pg, [$Rn, $Rm]"; 3315def : InstRW<[A64FXWrite_6Cyc_GI56], (instrs PRFB_PRR)>; 3316 3317// [340] "prfb $prfop, $Pg, [$Rn, $Zm]"; 3318def : InstRW<[A64FXWrite_14Cyc_GI0256], (instrs PRFB_D_SCALED, PRFB_D_SXTW_SCALED, PRFB_D_UXTW_SCALED, PRFB_S_SXTW_SCALED, PRFB_S_UXTW_SCALED)>; 3319 3320// [341] "prfb $prfop, $Pg, [$Rn, $imm6, mul vl]"; 3321def : InstRW<[A64FXWrite_6Cyc_GI56], (instrs PRFB_PRI)>; 3322 3323// [342] "prfb $prfop, $Pg, [$Zn, $imm5]"; 3324def : InstRW<[A64FXWrite_10Cyc_GI056], (instrs PRFB_D_PZI, PRFB_S_PZI)>; 3325 3326// [343] "prfd $prfop, $Pg, [$Rn, $Rm]"; 3327def : InstRW<[A64FXWrite_6Cyc_GI56], (instrs PRFD_PRR)>; 3328 3329// [344] "prfd $prfop, $Pg, [$Rn, $Zm]"; 3330def : InstRW<[A64FXWrite_14Cyc_GI0256], (instrs PRFD_D_SCALED, PRFD_D_SXTW_SCALED, PRFD_D_UXTW_SCALED, PRFD_S_SXTW_SCALED, PRFD_S_UXTW_SCALED)>; 3331 3332// [345] "prfd $prfop, $Pg, [$Rn, $imm6, mul vl]"; 3333def : InstRW<[A64FXWrite_6Cyc_GI56], (instrs PRFD_PRI)>; 3334 3335// [346] "prfd $prfop, $Pg, [$Zn, $imm5]"; 3336def : InstRW<[A64FXWrite_10Cyc_GI056], (instrs PRFD_D_PZI, PRFD_S_PZI)>; 3337 3338// [347] "prfh $prfop, $Pg, [$Rn, $Rm]"; 3339def : InstRW<[A64FXWrite_6Cyc_GI56], (instrs PRFH_PRR)>; 3340 3341// [348] "prfh $prfop, $Pg, [$Rn, $Zm]"; 3342def : InstRW<[A64FXWrite_14Cyc_GI0256], (instrs PRFH_D_SCALED, PRFH_D_SXTW_SCALED, PRFH_D_UXTW_SCALED, PRFH_S_SXTW_SCALED, PRFH_S_UXTW_SCALED)>; 3343 3344// [349] "prfh $prfop, $Pg, [$Rn, $imm6, mul vl]"; 3345def : InstRW<[A64FXWrite_6Cyc_GI56], (instrs PRFH_PRI)>; 3346 3347// [350] "prfh $prfop, $Pg, [$Zn, $imm5]"; 3348def : InstRW<[A64FXWrite_10Cyc_GI056], (instrs PRFH_D_PZI, PRFH_S_PZI)>; 3349 3350// [351] "prfw $prfop, $Pg, [$Rn, $Rm]"; 3351def : InstRW<[A64FXWrite_6Cyc_GI56], (instrs PRFW_PRR)>; 3352 3353// [352] "prfw $prfop, $Pg, [$Rn, $Zm]"; 3354def : InstRW<[A64FXWrite_14Cyc_GI0256], (instrs PRFW_D_SCALED, PRFW_D_SXTW_SCALED, PRFW_D_UXTW_SCALED, PRFW_S_SXTW_SCALED, PRFW_S_UXTW_SCALED)>; 3355 3356// [353] "prfw $prfop, $Pg, [$Rn, $imm6, mul vl]"; 3357def : InstRW<[A64FXWrite_6Cyc_GI56], (instrs PRFW_PRI)>; 3358 3359// [354] "prfw $prfop, $Pg, [$Zn, $imm5]"; 3360def : InstRW<[A64FXWrite_10Cyc_GI056], (instrs PRFW_D_PZI, PRFW_S_PZI)>; 3361 3362// [355] "ptest $Pg, $Pn"; 3363def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs PTEST_PP)>; 3364 3365// [356] "ptrue $Pd, $pattern"; 3366def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs PTRUE_B, PTRUE_D, PTRUE_H, PTRUE_S)>; 3367 3368// [357] "ptrues $Pd, $pattern"; 3369def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs PTRUES_B, PTRUES_D, PTRUES_H, PTRUES_S)>; 3370 3371// [358] "punpkhi $Pd, $Pn"; 3372def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs PUNPKHI_PP)>; 3373 3374// [359] "punpklo $Pd, $Pn"; 3375def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs PUNPKLO_PP)>; 3376 3377// [360] "rbit $Zd, $Pg/m, $Zn"; 3378def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs RBIT_ZPmZ_B, RBIT_ZPmZ_D, RBIT_ZPmZ_H, RBIT_ZPmZ_S)>; 3379 3380// [361] "rdffr $Pd"; 3381def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs RDFFR_P)>; 3382 3383// [362] "rdffr $Pd, $Pg/z"; 3384def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs RDFFR_PPz)>; 3385 3386// [363] "rdffrs $Pd, $Pg/z"; 3387def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs RDFFRS_PPz)>; 3388 3389// [364] "rdvl $Rd, $imm6"; 3390def : InstRW<[A64FXWrite_1Cyc_GI24], (instrs RDVLI_XI)>; 3391 3392// [365] "rev $Pd, $Pn"; 3393def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs REV_PP_B, REV_PP_D, REV_PP_H, REV_PP_S)>; 3394 3395// [366] "rev $Zd, $Zn"; 3396def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs REV_ZZ_B, REV_ZZ_D, REV_ZZ_H, REV_ZZ_S)>; 3397 3398// [367] "revb $Zd, $Pg/m, $Zn"; 3399def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs REVB_ZPmZ_D, REVB_ZPmZ_H, REVB_ZPmZ_S)>; 3400 3401// [368] "revh $Zd, $Pg/m, $Zn"; 3402def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs REVH_ZPmZ_D, REVH_ZPmZ_S)>; 3403 3404// [369] "revw $Zd, $Pg/m, $Zn"; 3405def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs REVW_ZPmZ_D)>; 3406 3407// [370] "sabd $Zdn, $Pg/m, $_Zdn, $Zm"; 3408def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SABD_ZPmZ_B, SABD_ZPmZ_D, SABD_ZPmZ_H, SABD_ZPmZ_S)>; 3409 3410// [371] "saddv $Vd, $Pg, $Zn"; 3411def : InstRW<[A64FXWrite_12Cyc_GI03], (instrs SADDV_VPZ_B, SADDV_VPZ_H, SADDV_VPZ_S)>; 3412 3413// [372] "scvtf $Zd, $Pg/m, $Zn"; 3414def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs SCVTF_ZPmZ_DtoD, SCVTF_ZPmZ_DtoH, SCVTF_ZPmZ_DtoS, SCVTF_ZPmZ_HtoH, SCVTF_ZPmZ_StoD, SCVTF_ZPmZ_StoH, SCVTF_ZPmZ_StoS)>; 3415 3416// [373] "sdiv $Zdn, $Pg/m, $_Zdn, $Zm"; 3417def : InstRW<[A64FXWrite_37Cyc_GI0], (instrs SDIV_ZPmZ_D, SDIV_ZPmZ_S)>; 3418 3419// [374] "sdivr $Zdn, $Pg/m, $_Zdn, $Zm"; 3420def : InstRW<[A64FXWrite_37Cyc_GI0], (instrs SDIVR_ZPmZ_D, SDIVR_ZPmZ_S)>; 3421 3422// [375] "sdot $Zda, $Zn, $Zm"; 3423def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs SDOT_ZZZ_D, SDOT_ZZZ_S)>; 3424 3425// [376] "sdot $Zda, $Zn, $Zm$iop"; 3426def : InstRW<[A64FXWrite_15Cyc_NGI03], (instrs SDOT_ZZZI_D, SDOT_ZZZI_S)>; 3427 3428// [377] "sel $Pd, $Pg, $Pn, $Pm"; 3429def : InstRW<[A64FXWrite_3Cyc_GI1], (instrs SEL_PPPP)>; 3430 3431// [378] "sel $Zd, $Pg, $Zn, $Zm"; 3432def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SEL_ZPZZ_B, SEL_ZPZZ_D, SEL_ZPZZ_H, SEL_ZPZZ_S)>; 3433 3434// [379] "setffr"; 3435def : InstRW<[A64FXWrite_6Cyc], (instrs SETFFR)>; 3436 3437// [380] "smax $Zdn, $Pg/m, $_Zdn, $Zm"; 3438def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SMAX_ZPmZ_B, SMAX_ZPmZ_D, SMAX_ZPmZ_H, SMAX_ZPmZ_S)>; 3439 3440// [381] "smax $Zdn, $_Zdn, $imm"; 3441def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs SMAX_ZI_B, SMAX_ZI_D, SMAX_ZI_H, SMAX_ZI_S)>; 3442 3443// [382] "smaxv $Vd, $Pg, $Zn"; 3444def : InstRW<[A64FXWrite_14Cyc_GI03], (instrs SMAXV_VPZ_B, SMAXV_VPZ_D, SMAXV_VPZ_H, SMAXV_VPZ_S)>; 3445 3446// [383] "smin $Zdn, $Pg/m, $_Zdn, $Zm"; 3447def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SMIN_ZPmZ_B, SMIN_ZPmZ_D, SMIN_ZPmZ_H, SMIN_ZPmZ_S)>; 3448 3449// [384] "smin $Zdn, $_Zdn, $imm"; 3450def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs SMIN_ZI_B, SMIN_ZI_D, SMIN_ZI_H, SMIN_ZI_S)>; 3451 3452// [385] "sminv $Vd, $Pg, $Zn"; 3453def : InstRW<[A64FXWrite_14Cyc_GI03], (instrs SMINV_VPZ_B, SMINV_VPZ_D, SMINV_VPZ_H, SMINV_VPZ_S)>; 3454 3455// [386] "smulh $Zdn, $Pg/m, $_Zdn, $Zm"; 3456def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs SMULH_ZPmZ_B, SMULH_ZPmZ_D, SMULH_ZPmZ_H, SMULH_ZPmZ_S)>; 3457 3458// [387] "splice $Zdn, $Pg, $_Zdn, $Zm"; 3459def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs SPLICE_ZPZ_B, SPLICE_ZPZ_D, SPLICE_ZPZ_H, SPLICE_ZPZ_S)>; 3460 3461// [388] "sqadd $Zd, $Zn, $Zm"; 3462 3463// [389] "sqadd $Zdn, $_Zdn, $imm"; 3464 3465// [390] "sqdecb $Rdn, $_Rdn, $pattern, mul $imm4"; 3466def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQDECB_XPiWdI)>; 3467 3468// [391] "sqdecb $Rdn, $pattern, mul $imm4"; 3469def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQDECB_XPiI)>; 3470 3471// [392] "sqdecd $Rdn, $_Rdn, $pattern, mul $imm4"; 3472def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQDECD_XPiWdI)>; 3473 3474// [393] "sqdecd $Rdn, $pattern, mul $imm4"; 3475def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQDECD_XPiI)>; 3476 3477// [394] "sqdecd $Zdn, $pattern, mul $imm4"; 3478def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SQDECD_ZPiI)>; 3479 3480// [395] "sqdech $Rdn, $_Rdn, $pattern, mul $imm4"; 3481def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQDECH_XPiWdI)>; 3482 3483// [396] "sqdech $Rdn, $pattern, mul $imm4"; 3484def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQDECH_XPiI)>; 3485 3486// [397] "sqdech $Zdn, $pattern, mul $imm4"; 3487def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SQDECH_ZPiI)>; 3488 3489// [398] "sqdecp $Rdn, $Pg"; 3490def : InstRW<[A64FXWrite_8Cyc_GI124], (instrs SQDECP_XP_B, SQDECP_XP_D, SQDECP_XP_H, SQDECP_XP_S)>; 3491 3492// [399] "sqdecp $Rdn, $Pg, $_Rdn"; 3493def : InstRW<[A64FXWrite_8Cyc_GI124], (instrs SQDECP_XPWd_B, SQDECP_XPWd_D, SQDECP_XPWd_H, SQDECP_XPWd_S)>; 3494 3495// [400] "sqdecp $Zdn, $Pg"; 3496def : InstRW<[A64FXWrite_12Cyc_GI01], (instrs SQDECP_ZP_D, SQDECP_ZP_H, SQDECP_ZP_S)>; 3497 3498// [401] "sqdecw $Rdn, $_Rdn, $pattern, mul $imm4"; 3499def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQDECW_XPiWdI)>; 3500 3501// [402] "sqdecw $Rdn, $pattern, mul $imm4"; 3502def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQDECW_XPiI)>; 3503 3504// [403] "sqdecw $Zdn, $pattern, mul $imm4"; 3505def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SQDECW_ZPiI)>; 3506 3507// [404] "sqincb $Rdn, $_Rdn, $pattern, mul $imm4"; 3508def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQINCB_XPiWdI)>; 3509 3510// [405] "sqincb $Rdn, $pattern, mul $imm4"; 3511def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQINCB_XPiI)>; 3512 3513// [406] "sqincd $Rdn, $_Rdn, $pattern, mul $imm4"; 3514def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQINCD_XPiWdI)>; 3515 3516// [407] "sqincd $Rdn, $pattern, mul $imm4"; 3517def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQINCD_XPiI)>; 3518 3519// [408] "sqincd $Zdn, $pattern, mul $imm4"; 3520def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SQINCD_ZPiI)>; 3521 3522// [409] "sqinch $Rdn, $_Rdn, $pattern, mul $imm4"; 3523def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQINCH_XPiWdI)>; 3524 3525// [410] "sqinch $Rdn, $pattern, mul $imm4"; 3526def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQINCH_XPiI)>; 3527 3528// [411] "sqinch $Zdn, $pattern, mul $imm4"; 3529def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SQINCH_ZPiI)>; 3530 3531// [412] "sqincp $Rdn, $Pg"; 3532def : InstRW<[A64FXWrite_8Cyc_GI124], (instrs SQINCP_XP_B, SQINCP_XP_D, SQINCP_XP_H, SQINCP_XP_S)>; 3533 3534// [413] "sqincp $Rdn, $Pg, $_Rdn"; 3535def : InstRW<[A64FXWrite_8Cyc_GI124], (instrs SQINCP_XPWd_B, SQINCP_XPWd_D, SQINCP_XPWd_H, SQINCP_XPWd_S)>; 3536 3537// [414] "sqincp $Zdn, $Pg"; 3538def : InstRW<[A64FXWrite_12Cyc_GI01], (instrs SQINCP_ZP_D, SQINCP_ZP_H, SQINCP_ZP_S)>; 3539 3540// [415] "sqincw $Rdn, $_Rdn, $pattern, mul $imm4"; 3541def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQINCW_XPiWdI)>; 3542 3543// [416] "sqincw $Rdn, $pattern, mul $imm4"; 3544def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs SQINCW_XPiI)>; 3545 3546// [417] "sqincw $Zdn, $pattern, mul $imm4"; 3547def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SQINCW_ZPiI)>; 3548 3549// [418] "sqsub $Zd, $Zn, $Zm"; 3550 3551// [419] "sqsub $Zdn, $_Zdn, $imm"; 3552 3553// [420] "st1b $Zt, $Pg, [$Rn, $Rm]"; 3554def : InstRW<[A64FXWrite_ST1W_6], (instrs ST1B, ST1B_D, ST1B_H, ST1B_S)>; 3555 3556// [421] "st1b $Zt, $Pg, [$Rn, $Zm]"; 3557def : InstRW<[A64FXWrite_ST1W_19], (instrs SST1B_D, SST1B_D_SXTW, SST1B_D_UXTW, SST1B_S_SXTW, SST1B_S_UXTW)>; 3558 3559// [422] "st1b $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3560def : InstRW<[A64FXWrite_ST1W_6], (instrs ST1B_D_IMM, ST1B_H_IMM, ST1B_IMM, ST1B_S_IMM)>; 3561 3562// [423] "st1b $Zt, $Pg, [$Zn, $imm5]"; 3563def : InstRW<[A64FXWrite_ST1W_15], (instrs SST1B_D_IMM, SST1B_S_IMM)>; 3564 3565// [424] "st1d $Zt, $Pg, [$Rn, $Rm]"; 3566def : InstRW<[A64FXWrite_ST1W_6], (instrs ST1D)>; 3567 3568// [425] "st1d $Zt, $Pg, [$Rn, $Zm]"; 3569def : InstRW<[A64FXWrite_ST1W_19], (instrs SST1D, SST1D_SCALED, SST1D_SXTW, SST1D_SXTW_SCALED, SST1D_UXTW, SST1D_UXTW_SCALED)>; 3570 3571// [426] "st1d $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3572def : InstRW<[A64FXWrite_ST1W_6], (instrs ST1D_IMM)>; 3573 3574// [427] "st1d $Zt, $Pg, [$Zn, $imm5]"; 3575def : InstRW<[A64FXWrite_ST1W_15], (instrs SST1D_IMM)>; 3576 3577// [428] "st1h $Zt, $Pg, [$Rn, $Rm]"; 3578def : InstRW<[A64FXWrite_ST1W_6], (instrs ST1H, ST1H_D, ST1H_S)>; 3579 3580// [429] "st1h $Zt, $Pg, [$Rn, $Zm]"; 3581def : InstRW<[A64FXWrite_ST1W_19], (instrs SST1H_D, SST1H_D_SCALED, SST1H_D_SXTW, SST1H_D_SXTW_SCALED, SST1H_D_UXTW, SST1H_D_UXTW_SCALED, SST1H_S_SXTW, SST1H_S_SXTW_SCALED, SST1H_S_UXTW, SST1H_S_UXTW_SCALED)>; 3582 3583// [430] "st1h $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3584def : InstRW<[A64FXWrite_ST1W_6], (instrs ST1H_D_IMM, ST1H_IMM, ST1H_S_IMM)>; 3585 3586// [431] "st1h $Zt, $Pg, [$Zn, $imm5]"; 3587def : InstRW<[A64FXWrite_ST1W_15], (instrs SST1H_D_IMM, SST1H_S_IMM)>; 3588 3589// [432] "st1w $Zt, $Pg, [$Rn, $Rm]"; 3590def : InstRW<[A64FXWrite_ST1W_6], (instrs ST1W, ST1W_D)>; 3591 3592// [433] "st1w $Zt, $Pg, [$Rn, $Zm]"; 3593def : InstRW<[A64FXWrite_ST1W_19], (instrs SST1W_D, SST1W_D_SCALED, SST1W_D_SXTW, SST1W_D_SXTW_SCALED, SST1W_D_UXTW, SST1W_D_UXTW_SCALED, SST1W_SXTW, SST1W_SXTW_SCALED, SST1W_UXTW, SST1W_UXTW_SCALED)>; 3594 3595// [434] "st1w $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3596def : InstRW<[A64FXWrite_ST1W_6], (instrs ST1W_D_IMM, ST1W_IMM)>; 3597 3598// [435] "st1w $Zt, $Pg, [$Zn, $imm5]"; 3599def : InstRW<[A64FXWrite_ST1W_15], (instrs SST1W_D_IMM, SST1W_IMM)>; 3600 3601// [436] "st2b $Zt, $Pg, [$Rn, $Rm]"; 3602def : InstRW<[A64FXWrite_ST2W_7], (instrs ST2B)>; 3603 3604// [437] "st2b $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3605def : InstRW<[A64FXWrite_ST2W_7], (instrs ST2B_IMM)>; 3606 3607// [438] "st2d $Zt, $Pg, [$Rn, $Rm]"; 3608def : InstRW<[A64FXWrite_ST2W_7], (instrs ST2D)>; 3609 3610// [439] "st2d $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3611def : InstRW<[A64FXWrite_ST2W_7], (instrs ST2D_IMM)>; 3612 3613// [440] "st2h $Zt, $Pg, [$Rn, $Rm]"; 3614def : InstRW<[A64FXWrite_ST2W_7], (instrs ST2H)>; 3615 3616// [441] "st2h $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3617def : InstRW<[A64FXWrite_ST2W_7], (instrs ST2H_IMM)>; 3618 3619// [442] "st2w $Zt, $Pg, [$Rn, $Rm]"; 3620def : InstRW<[A64FXWrite_ST2W_7], (instrs ST2W)>; 3621 3622// [443] "st2w $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3623def : InstRW<[A64FXWrite_ST2W_7], (instrs ST2W_IMM)>; 3624 3625// [444] "st3b $Zt, $Pg, [$Rn, $Rm]"; 3626def : InstRW<[A64FXWrite_ST3W_8], (instrs ST3B)>; 3627 3628// [445] "st3b $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3629def : InstRW<[A64FXWrite_ST3W_8], (instrs ST3B_IMM)>; 3630 3631// [446] "st3d $Zt, $Pg, [$Rn, $Rm]"; 3632def : InstRW<[A64FXWrite_ST3W_8], (instrs ST3D)>; 3633 3634// [447] "st3d $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3635def : InstRW<[A64FXWrite_ST3W_8], (instrs ST3D_IMM)>; 3636 3637// [448] "st3h $Zt, $Pg, [$Rn, $Rm]"; 3638def : InstRW<[A64FXWrite_ST3W_8], (instrs ST3H)>; 3639 3640// [449] "st3h $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3641def : InstRW<[A64FXWrite_ST3W_8], (instrs ST3H_IMM)>; 3642 3643// [450] "st3w $Zt, $Pg, [$Rn, $Rm]"; 3644def : InstRW<[A64FXWrite_ST3W_8], (instrs ST3W)>; 3645 3646// [451] "st3w $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3647def : InstRW<[A64FXWrite_ST3W_8], (instrs ST3W_IMM)>; 3648 3649// [452] "st4b $Zt, $Pg, [$Rn, $Rm]"; 3650def : InstRW<[A64FXWrite_ST4W_9], (instrs ST4B)>; 3651 3652// [453] "st4b $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3653def : InstRW<[A64FXWrite_ST4W_9], (instrs ST4B_IMM)>; 3654 3655// [454] "st4d $Zt, $Pg, [$Rn, $Rm]"; 3656def : InstRW<[A64FXWrite_ST4W_9], (instrs ST4D)>; 3657 3658// [455] "st4d $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3659def : InstRW<[A64FXWrite_ST4W_9], (instrs ST4D_IMM)>; 3660 3661// [456] "st4h $Zt, $Pg, [$Rn, $Rm]"; 3662def : InstRW<[A64FXWrite_ST4W_9], (instrs ST4H)>; 3663 3664// [457] "st4h $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3665def : InstRW<[A64FXWrite_ST4W_9], (instrs ST4H_IMM)>; 3666 3667// [458] "st4w $Zt, $Pg, [$Rn, $Rm]"; 3668def : InstRW<[A64FXWrite_ST4W_9], (instrs ST4W)>; 3669 3670// [459] "st4w $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3671def : InstRW<[A64FXWrite_ST4W_9], (instrs ST4W_IMM)>; 3672 3673// [460] "stnt1b $Zt, $Pg, [$Rn, $Rm]"; 3674def : InstRW<[A64FXWrite_ST1W_6], (instrs STNT1B_ZRR)>; 3675 3676// [461] "stnt1b $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3677def : InstRW<[A64FXWrite_ST1W_6], (instrs STNT1B_ZRI)>; 3678 3679// [462] "stnt1d $Zt, $Pg, [$Rn, $Rm]"; 3680def : InstRW<[A64FXWrite_ST1W_6], (instrs STNT1D_ZRR)>; 3681 3682// [463] "stnt1d $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3683def : InstRW<[A64FXWrite_ST1W_6], (instrs STNT1D_ZRI)>; 3684 3685// [464] "stnt1h $Zt, $Pg, [$Rn, $Rm]"; 3686def : InstRW<[A64FXWrite_ST1W_6], (instrs STNT1H_ZRR)>; 3687 3688// [465] "stnt1h $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3689def : InstRW<[A64FXWrite_ST1W_6], (instrs STNT1H_ZRI)>; 3690 3691// [466] "stnt1w $Zt, $Pg, [$Rn, $Rm]"; 3692def : InstRW<[A64FXWrite_ST1W_6], (instrs STNT1W_ZRR)>; 3693 3694// [467] "stnt1w $Zt, $Pg, [$Rn, $imm4, mul vl]"; 3695def : InstRW<[A64FXWrite_ST1W_6], (instrs STNT1W_ZRI)>; 3696 3697// [468] "str $Pt, [$Rn, $imm9, mul vl]"; 3698def : InstRW<[A64FXWrite_6Cyc_GI15], (instrs STR_PXI)>; 3699 3700// [469] "str $Zt, [$Rn, $imm9, mul vl]"; 3701def : InstRW<[A64FXWrite_6Cyc_GI05], (instrs STR_ZXI)>; 3702 3703// [470] "sub $Zd, $Zn, $Zm"; 3704def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SUB_ZZZ_B, SUB_ZZZ_D, SUB_ZZZ_H, SUB_ZZZ_S)>; 3705 3706// [471] "sub $Zdn, $Pg/m, $_Zdn, $Zm"; 3707def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SUB_ZPmZ_B, SUB_ZPmZ_D, SUB_ZPmZ_H, SUB_ZPmZ_S)>; 3708 3709// [472] "sub $Zdn, $_Zdn, $imm"; 3710def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SUB_ZI_B, SUB_ZI_D, SUB_ZI_H, SUB_ZI_S)>; 3711 3712// [473] "subr $Zdn, $Pg/m, $_Zdn, $Zm"; 3713def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SUBR_ZPmZ_B, SUBR_ZPmZ_D, SUBR_ZPmZ_H, SUBR_ZPmZ_S)>; 3714 3715// [474] "subr $Zdn, $_Zdn, $imm"; 3716def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs SUBR_ZI_B, SUBR_ZI_D, SUBR_ZI_H, SUBR_ZI_S)>; 3717 3718// [475] "sunpkhi $Zd, $Zn"; 3719def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs SUNPKHI_ZZ_D, SUNPKHI_ZZ_H, SUNPKHI_ZZ_S)>; 3720 3721// [476] "sunpklo $Zd, $Zn"; 3722def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs SUNPKLO_ZZ_D, SUNPKLO_ZZ_H, SUNPKLO_ZZ_S)>; 3723 3724// [477] "sxtb $Zd, $Pg/m, $Zn"; 3725def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SXTB_ZPmZ_D, SXTB_ZPmZ_H, SXTB_ZPmZ_S)>; 3726 3727// [478] "sxth $Zd, $Pg/m, $Zn"; 3728def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SXTH_ZPmZ_D, SXTH_ZPmZ_S)>; 3729 3730// [479] "sxtw $Zd, $Pg/m, $Zn"; 3731def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs SXTW_ZPmZ_D)>; 3732 3733// [480] "tbl $Zd, $Zn, $Zm"; 3734def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs TBL_ZZZ_B, TBL_ZZZ_D, TBL_ZZZ_H, TBL_ZZZ_S)>; 3735 3736// [481] "trn1 $Pd, $Pn, $Pm"; 3737 3738// [482] "trn1 $Zd, $Zn, $Zm"; 3739 3740// [483] "trn2 $Pd, $Pn, $Pm"; 3741 3742// [484] "trn2 $Zd, $Zn, $Zm"; 3743 3744// [486] "uabd $Zdn, $Pg/m, $_Zdn, $Zm"; 3745def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs UABD_ZPmZ_B, UABD_ZPmZ_D, UABD_ZPmZ_H, UABD_ZPmZ_S)>; 3746 3747// [487] "uaddv $Vd, $Pg, $Zn"; 3748def : InstRW<[A64FXWrite_12Cyc_GI03], (instrs UADDV_VPZ_B, UADDV_VPZ_D, UADDV_VPZ_H, UADDV_VPZ_S)>; 3749 3750// [488] "ucvtf $Zd, $Pg/m, $Zn"; 3751def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs UCVTF_ZPmZ_DtoD, UCVTF_ZPmZ_DtoH, UCVTF_ZPmZ_DtoS, UCVTF_ZPmZ_HtoH, UCVTF_ZPmZ_StoD, UCVTF_ZPmZ_StoH, UCVTF_ZPmZ_StoS)>; 3752 3753// [489] "udiv $Zdn, $Pg/m, $_Zdn, $Zm"; 3754def : InstRW<[A64FXWrite_37Cyc_GI0], (instrs UDIV_ZPmZ_D, UDIV_ZPmZ_S)>; 3755 3756// [490] "udivr $Zdn, $Pg/m, $_Zdn, $Zm"; 3757def : InstRW<[A64FXWrite_37Cyc_GI0], (instrs UDIVR_ZPmZ_D, UDIVR_ZPmZ_S)>; 3758 3759// [491] "udot $Zda, $Zn, $Zm"; 3760def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs UDOT_ZZZ_D, UDOT_ZZZ_S)>; 3761 3762// [492] "udot $Zda, $Zn, $Zm$iop"; 3763def : InstRW<[A64FXWrite_15Cyc_NGI03], (instrs UDOT_ZZZI_D, UDOT_ZZZI_S)>; 3764 3765// [493] "umax $Zdn, $Pg/m, $_Zdn, $Zm"; 3766def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs UMAX_ZPmZ_B, UMAX_ZPmZ_D, UMAX_ZPmZ_H, UMAX_ZPmZ_S)>; 3767 3768// [494] "umax $Zdn, $_Zdn, $imm"; 3769def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs UMAX_ZI_B, UMAX_ZI_D, UMAX_ZI_H, UMAX_ZI_S)>; 3770 3771// [495] "umaxv $Vd, $Pg, $Zn"; 3772def : InstRW<[A64FXWrite_14Cyc_GI03], (instrs UMAXV_VPZ_B, UMAXV_VPZ_D, UMAXV_VPZ_H, UMAXV_VPZ_S)>; 3773 3774// [496] "umin $Zdn, $Pg/m, $_Zdn, $Zm"; 3775def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs UMIN_ZPmZ_B, UMIN_ZPmZ_D, UMIN_ZPmZ_H, UMIN_ZPmZ_S)>; 3776 3777// [497] "umin $Zdn, $_Zdn, $imm"; 3778def : InstRW<[A64FXWrite_4Cyc_GI0], (instrs UMIN_ZI_B, UMIN_ZI_D, UMIN_ZI_H, UMIN_ZI_S)>; 3779 3780// [498] "uminv $Vd, $Pg, $Zn"; 3781def : InstRW<[A64FXWrite_14Cyc_GI03], (instrs UMINV_VPZ_B, UMINV_VPZ_D, UMINV_VPZ_H, UMINV_VPZ_S)>; 3782 3783// [499] "umulh $Zdn, $Pg/m, $_Zdn, $Zm"; 3784def : InstRW<[A64FXWrite_9Cyc_GI03], (instrs UMULH_ZPmZ_B, UMULH_ZPmZ_D, UMULH_ZPmZ_H, UMULH_ZPmZ_S)>; 3785 3786// [500] "uqadd $Zd, $Zn, $Zm"; 3787 3788// [501] "uqadd $Zdn, $_Zdn, $imm"; 3789 3790// [502] "uqdecb $Rdn, $pattern, mul $imm4"; 3791def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs UQDECB_WPiI, UQDECB_XPiI)>; 3792 3793// [503] "uqdecd $Rdn, $pattern, mul $imm4"; 3794def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs UQDECD_WPiI, UQDECD_XPiI)>; 3795 3796// [504] "uqdecd $Zdn, $pattern, mul $imm4"; 3797def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs UQDECD_ZPiI)>; 3798 3799// [505] "uqdech $Rdn, $pattern, mul $imm4"; 3800def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs UQDECH_WPiI, UQDECH_XPiI)>; 3801 3802// [506] "uqdech $Zdn, $pattern, mul $imm4"; 3803def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs UQDECH_ZPiI)>; 3804 3805// [507] "uqdecp $Rdn, $Pg"; 3806def : InstRW<[A64FXWrite_8Cyc_GI124], (instrs UQDECP_WP_B, UQDECP_WP_D, UQDECP_WP_H, UQDECP_WP_S, UQDECP_XP_B, UQDECP_XP_D, UQDECP_XP_H, UQDECP_XP_S)>; 3807 3808// [508] "uqdecp $Zdn, $Pg"; 3809def : InstRW<[A64FXWrite_12Cyc_GI01], (instrs UQDECP_ZP_D, UQDECP_ZP_H, UQDECP_ZP_S)>; 3810 3811// [509] "uqdecw $Rdn, $pattern, mul $imm4"; 3812def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs UQDECW_WPiI, UQDECW_XPiI)>; 3813 3814// [510] "uqdecw $Zdn, $pattern, mul $imm4"; 3815def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs UQDECW_ZPiI)>; 3816 3817// [511] "uqincb $Rdn, $pattern, mul $imm4"; 3818def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs UQINCB_WPiI, UQINCB_XPiI)>; 3819 3820// [512] "uqincd $Rdn, $pattern, mul $imm4"; 3821def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs UQINCD_WPiI, UQINCD_XPiI)>; 3822 3823// [513] "uqincd $Zdn, $pattern, mul $imm4"; 3824def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs UQINCD_ZPiI)>; 3825 3826// [514] "uqinch $Rdn, $pattern, mul $imm4"; 3827def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs UQINCH_WPiI, UQINCH_XPiI)>; 3828 3829// [515] "uqinch $Zdn, $pattern, mul $imm4"; 3830def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs UQINCH_ZPiI)>; 3831 3832// [516] "uqincp $Rdn, $Pg"; 3833def : InstRW<[A64FXWrite_8Cyc_GI124], (instrs UQINCP_WP_B, UQINCP_WP_D, UQINCP_WP_H, UQINCP_WP_S, UQINCP_XP_B, UQINCP_XP_D, UQINCP_XP_H, UQINCP_XP_S)>; 3834 3835// [517] "uqincp $Zdn, $Pg"; 3836def : InstRW<[A64FXWrite_12Cyc_GI01], (instrs UQINCP_ZP_D, UQINCP_ZP_H, UQINCP_ZP_S)>; 3837 3838// [518] "uqincw $Rdn, $pattern, mul $imm4"; 3839def : InstRW<[A64FXWrite_2Cyc_GI24], (instrs UQINCW_WPiI, UQINCW_XPiI)>; 3840 3841// [519] "uqincw $Zdn, $pattern, mul $imm4"; 3842def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs UQINCW_ZPiI)>; 3843 3844// [520] "uqsub $Zd, $Zn, $Zm"; 3845//@@@ def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs UQSUB_ZZZ_B, UQSUB_ZZZ_D, UQSUB_ZZZ_H, UQSUB_ZZZ_S)>; 3846 3847// [521] "uqsub $Zdn, $_Zdn, $imm"; 3848//@@@ def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs UQSUB_ZI_B, UQSUB_ZI_D, UQSUB_ZI_H, UQSUB_ZI_S)>; 3849 3850// [522] "uunpkhi $Zd, $Zn"; 3851def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs UUNPKHI_ZZ_D, UUNPKHI_ZZ_H, UUNPKHI_ZZ_S)>; 3852 3853// [523] "uunpklo $Zd, $Zn"; 3854def : InstRW<[A64FXWrite_6Cyc_GI0], (instrs UUNPKLO_ZZ_D, UUNPKLO_ZZ_H, UUNPKLO_ZZ_S)>; 3855 3856// [524] "uxtb $Zd, $Pg/m, $Zn"; 3857def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs UXTB_ZPmZ_D, UXTB_ZPmZ_H, UXTB_ZPmZ_S)>; 3858 3859// [525] "uxth $Zd, $Pg/m, $Zn"; 3860def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs UXTH_ZPmZ_D, UXTH_ZPmZ_S)>; 3861 3862// [526] "uxtw $Zd, $Pg/m, $Zn"; 3863def : InstRW<[A64FXWrite_4Cyc_GI03], (instrs UXTW_ZPmZ_D)>; 3864 3865// [527] "uzp1 $Pd, $Pn, $Pm"; 3866 3867// [528] "uzp1 $Zd, $Zn, $Zm"; 3868 3869// [529] "uzp2 $Pd, $Pn, $Pm"; 3870 3871// [530] "uzp2 $Zd, $Zn, $Zm"; 3872 3873// [531] "whilele $Pd, $Rn, $Rm"; 3874def : InstRW<[A64FXWrite_4Cyc_GI12], (instrs WHILELE_PWW_B, WHILELE_PWW_D, WHILELE_PWW_H, WHILELE_PWW_S, WHILELE_PXX_B, WHILELE_PXX_D, WHILELE_PXX_H, WHILELE_PXX_S)>; 3875 3876// [532] "whilelo $Pd, $Rn, $Rm"; 3877def : InstRW<[A64FXWrite_4Cyc_GI12], (instrs WHILELO_PWW_B, WHILELO_PWW_D, WHILELO_PWW_H, WHILELO_PWW_S, WHILELO_PXX_B, WHILELO_PXX_D, WHILELO_PXX_H, WHILELO_PXX_S)>; 3878 3879// [533] "whilels $Pd, $Rn, $Rm"; 3880def : InstRW<[A64FXWrite_4Cyc_GI12], (instrs WHILELS_PWW_B, WHILELS_PWW_D, WHILELS_PWW_H, WHILELS_PWW_S, WHILELS_PXX_B, WHILELS_PXX_D, WHILELS_PXX_H, WHILELS_PXX_S)>; 3881 3882// [534] "whilelt $Pd, $Rn, $Rm"; 3883def : InstRW<[A64FXWrite_4Cyc_GI12], (instrs WHILELT_PWW_B, WHILELT_PWW_D, WHILELT_PWW_H, WHILELT_PWW_S, WHILELT_PXX_B, WHILELT_PXX_D, WHILELT_PXX_H, WHILELT_PXX_S)>; 3884 3885// [535] "wrffr $Pn"; 3886def : InstRW<[A64FXWrite_6Cyc_NGI1], (instrs WRFFR)>; 3887 3888// [536] "zip1 $Pd, $Pn, $Pm"; 3889 3890// [537] "zip1 $Zd, $Zn, $Zm"; 3891 3892// [538] "zip2 $Pd, $Pn, $Pm"; 3893 3894// [539] "zip2 $Zd, $Zn, $Zm"; 3895 3896} // SchedModel = A64FXModel 3897