1 VIXL Supported Instruction List 2 =============================== 3 4 This is a list of the AArch64 instructions supported by the VIXL assembler, 5 disassembler and simulator. The simulator may not support all floating point 6 operations to the precision required by AArch64 - please check the simulator 7 source code for details. 8 9 AArch64 integer instructions 10 ---------------------------- 11 12 ### ADC ### 13 14 Add with carry bit. 15 16 void adc(const Register& rd, 17 const Register& rn, 18 const Operand& operand) 19 20 21 ### ADCS ### 22 23 Add with carry bit and update status flags. 24 25 void adcs(const Register& rd, 26 const Register& rn, 27 const Operand& operand) 28 29 30 ### ADD ### 31 32 Add. 33 34 void add(const Register& rd, 35 const Register& rn, 36 const Operand& operand) 37 38 39 ### ADDS ### 40 41 Add and update status flags. 42 43 void adds(const Register& rd, 44 const Register& rn, 45 const Operand& operand) 46 47 48 ### ADR ### 49 50 Calculate the address of a PC offset. 51 52 void adr(const Register& rd, int imm21) 53 54 55 ### ADR ### 56 57 Calculate the address of a label. 58 59 void adr(const Register& rd, Label* label) 60 61 62 ### ADRP ### 63 64 Calculate the page address of a PC offset. 65 66 void adrp(const Register& rd, int imm21) 67 68 69 ### ADRP ### 70 71 Calculate the page address of a label. 72 73 void adrp(const Register& rd, Label* label) 74 75 76 ### AND ### 77 78 Bitwise and (A & B). 79 80 void and_(const Register& rd, 81 const Register& rn, 82 const Operand& operand) 83 84 85 ### ANDS ### 86 87 Bitwise and (A & B) and update status flags. 88 89 void ands(const Register& rd, 90 const Register& rn, 91 const Operand& operand) 92 93 94 ### ASR ### 95 96 Arithmetic shift right. 97 98 void asr(const Register& rd, const Register& rn, unsigned shift) 99 100 101 ### ASRV ### 102 103 Arithmetic shift right by variable. 104 105 void asrv(const Register& rd, const Register& rn, const Register& rm) 106 107 108 ### B ### 109 110 Conditional branch to PC offset. 111 112 void b(int imm19, Condition cond) 113 114 115 ### B ### 116 117 Conditional branch to label. 118 119 void b(Label* label, Condition cond) 120 121 122 ### B ### 123 124 Unconditional branch to PC offset. 125 126 void b(int imm26) 127 128 129 ### B ### 130 131 Unconditional branch to label. 132 133 void b(Label* label) 134 135 136 ### BFI ### 137 138 Bitfield insert. 139 140 void bfi(const Register& rd, 141 const Register& rn, 142 unsigned lsb, 143 unsigned width) 144 145 146 ### BFM ### 147 148 Bitfield move. 149 150 void bfm(const Register& rd, 151 const Register& rn, 152 unsigned immr, 153 unsigned imms) 154 155 156 ### BFXIL ### 157 158 Bitfield extract and insert low. 159 160 void bfxil(const Register& rd, 161 const Register& rn, 162 unsigned lsb, 163 unsigned width) 164 165 166 ### BIC ### 167 168 Bit clear (A & ~B). 169 170 void bic(const Register& rd, 171 const Register& rn, 172 const Operand& operand) 173 174 175 ### BICS ### 176 177 Bit clear (A & ~B) and update status flags. 178 179 void bics(const Register& rd, 180 const Register& rn, 181 const Operand& operand) 182 183 184 ### BL ### 185 186 Branch with link to PC offset. 187 188 void bl(int imm26) 189 190 191 ### BL ### 192 193 Branch with link to label. 194 195 void bl(Label* label) 196 197 198 ### BLR ### 199 200 Branch with link to register. 201 202 void blr(const Register& xn) 203 204 205 ### BR ### 206 207 Branch to register. 208 209 void br(const Register& xn) 210 211 212 ### BRK ### 213 214 Monitor debug-mode breakpoint. 215 216 void brk(int code) 217 218 219 ### CBNZ ### 220 221 Compare and branch to PC offset if not zero. 222 223 void cbnz(const Register& rt, int imm19) 224 225 226 ### CBNZ ### 227 228 Compare and branch to label if not zero. 229 230 void cbnz(const Register& rt, Label* label) 231 232 233 ### CBZ ### 234 235 Compare and branch to PC offset if zero. 236 237 void cbz(const Register& rt, int imm19) 238 239 240 ### CBZ ### 241 242 Compare and branch to label if zero. 243 244 void cbz(const Register& rt, Label* label) 245 246 247 ### CCMN ### 248 249 Conditional compare negative. 250 251 void ccmn(const Register& rn, 252 const Operand& operand, 253 StatusFlags nzcv, 254 Condition cond) 255 256 257 ### CCMP ### 258 259 Conditional compare. 260 261 void ccmp(const Register& rn, 262 const Operand& operand, 263 StatusFlags nzcv, 264 Condition cond) 265 266 267 ### CINC ### 268 269 Conditional increment: rd = cond ? rn + 1 : rn. 270 271 void cinc(const Register& rd, const Register& rn, Condition cond) 272 273 274 ### CINV ### 275 276 Conditional invert: rd = cond ? ~rn : rn. 277 278 void cinv(const Register& rd, const Register& rn, Condition cond) 279 280 281 ### CLREX ### 282 283 Clear exclusive monitor. 284 285 void clrex(int imm4 = 0xf) 286 287 288 ### CLS ### 289 290 Count leading sign bits. 291 292 void cls(const Register& rd, const Register& rn) 293 294 295 ### CLZ ### 296 297 Count leading zeroes. 298 299 void clz(const Register& rd, const Register& rn) 300 301 302 ### CMN ### 303 304 Compare negative. 305 306 void cmn(const Register& rn, const Operand& operand) 307 308 309 ### CMP ### 310 311 Compare. 312 313 void cmp(const Register& rn, const Operand& operand) 314 315 316 ### CNEG ### 317 318 Conditional negate: rd = cond ? -rn : rn. 319 320 void cneg(const Register& rd, const Register& rn, Condition cond) 321 322 323 ### CRC32B ### 324 325 CRC-32 checksum from byte. 326 327 void crc32b(const Register& rd, 328 const Register& rn, 329 const Register& rm) 330 331 332 ### CRC32CB ### 333 334 CRC-32 C checksum from byte. 335 336 void crc32cb(const Register& rd, 337 const Register& rn, 338 const Register& rm) 339 340 341 ### CRC32CH ### 342 343 CRC-32 C checksum from half-word. 344 345 void crc32ch(const Register& rd, 346 const Register& rn, 347 const Register& rm) 348 349 350 ### CRC32CW ### 351 352 CRC-32 C checksum from word. 353 354 void crc32cw(const Register& rd, 355 const Register& rn, 356 const Register& rm) 357 358 359 ### CRC32CX ### 360 361 CRC-32C checksum from double word. 362 363 void crc32cx(const Register& rd, 364 const Register& rn, 365 const Register& rm) 366 367 368 ### CRC32H ### 369 370 CRC-32 checksum from half-word. 371 372 void crc32h(const Register& rd, 373 const Register& rn, 374 const Register& rm) 375 376 377 ### CRC32W ### 378 379 CRC-32 checksum from word. 380 381 void crc32w(const Register& rd, 382 const Register& rn, 383 const Register& rm) 384 385 386 ### CRC32X ### 387 388 CRC-32 checksum from double word. 389 390 void crc32x(const Register& rd, 391 const Register& rn, 392 const Register& rm) 393 394 395 ### CSEL ### 396 397 Conditional select: rd = cond ? rn : rm. 398 399 void csel(const Register& rd, 400 const Register& rn, 401 const Register& rm, 402 Condition cond) 403 404 405 ### CSET ### 406 407 Conditional set: rd = cond ? 1 : 0. 408 409 void cset(const Register& rd, Condition cond) 410 411 412 ### CSETM ### 413 414 Conditional set mask: rd = cond ? -1 : 0. 415 416 void csetm(const Register& rd, Condition cond) 417 418 419 ### CSINC ### 420 421 Conditional select increment: rd = cond ? rn : rm + 1. 422 423 void csinc(const Register& rd, 424 const Register& rn, 425 const Register& rm, 426 Condition cond) 427 428 429 ### CSINV ### 430 431 Conditional select inversion: rd = cond ? rn : ~rm. 432 433 void csinv(const Register& rd, 434 const Register& rn, 435 const Register& rm, 436 Condition cond) 437 438 439 ### CSNEG ### 440 441 Conditional select negation: rd = cond ? rn : -rm. 442 443 void csneg(const Register& rd, 444 const Register& rn, 445 const Register& rm, 446 Condition cond) 447 448 449 ### DC ### 450 451 System data cache operation. 452 453 void dc(DataCacheOp op, const Register& rt) 454 455 456 ### DMB ### 457 458 Data memory barrier. 459 460 void dmb(BarrierDomain domain, BarrierType type) 461 462 463 ### DSB ### 464 465 Data synchronization barrier. 466 467 void dsb(BarrierDomain domain, BarrierType type) 468 469 470 ### EON ### 471 472 Bitwise enor/xnor (A ^ ~B). 473 474 void eon(const Register& rd, const Register& rn, const Operand& operand) 475 476 477 ### EOR ### 478 479 Bitwise eor/xor (A ^ B). 480 481 void eor(const Register& rd, const Register& rn, const Operand& operand) 482 483 484 ### EXTR ### 485 486 Extract. 487 488 void extr(const Register& rd, 489 const Register& rn, 490 const Register& rm, 491 unsigned lsb) 492 493 494 ### HINT ### 495 496 System hint. 497 498 void hint(SystemHint code) 499 500 501 ### HLT ### 502 503 Halting debug-mode breakpoint. 504 505 void hlt(int code) 506 507 508 ### IC ### 509 510 System instruction cache operation. 511 512 void ic(InstructionCacheOp op, const Register& rt) 513 514 515 ### ISB ### 516 517 Instruction synchronization barrier. 518 519 void isb() 520 521 522 ### LDAR ### 523 524 Load-acquire register. 525 526 void ldar(const Register& rt, const MemOperand& src) 527 528 529 ### LDARB ### 530 531 Load-acquire byte. 532 533 void ldarb(const Register& rt, const MemOperand& src) 534 535 536 ### LDARH ### 537 538 Load-acquire half-word. 539 540 void ldarh(const Register& rt, const MemOperand& src) 541 542 543 ### LDAXP ### 544 545 Load-acquire exclusive register pair. 546 547 void ldaxp(const Register& rt, const Register& rt2, const MemOperand& src) 548 549 550 ### LDAXR ### 551 552 Load-acquire exclusive register. 553 554 void ldaxr(const Register& rt, const MemOperand& src) 555 556 557 ### LDAXRB ### 558 559 Load-acquire exclusive byte. 560 561 void ldaxrb(const Register& rt, const MemOperand& src) 562 563 564 ### LDAXRH ### 565 566 Load-acquire exclusive half-word. 567 568 void ldaxrh(const Register& rt, const MemOperand& src) 569 570 571 ### LDNP ### 572 573 Load integer or FP register pair, non-temporal. 574 575 void ldnp(const CPURegister& rt, const CPURegister& rt2, 576 const MemOperand& src) 577 578 579 ### LDP ### 580 581 Load integer or FP register pair. 582 583 void ldp(const CPURegister& rt, const CPURegister& rt2, 584 const MemOperand& src) 585 586 587 ### LDPSW ### 588 589 Load word pair with sign extension. 590 591 void ldpsw(const Register& rt, const Register& rt2, const MemOperand& src) 592 593 594 ### LDR ### 595 596 Load integer or FP register from literal pool. 597 598 void ldr(const CPURegister& rt, RawLiteral* literal) 599 600 601 ### LDR ### 602 603 Load integer or FP register from pc + imm19 << 2. 604 605 void ldr(const CPURegister& rt, int imm19) 606 607 608 ### LDR ### 609 610 Load integer or FP register. 611 612 void ldr(const CPURegister& rt, const MemOperand& src, 613 LoadStoreScalingOption option = PreferScaledOffset) 614 615 616 ### LDRB ### 617 618 Load byte. 619 620 void ldrb(const Register& rt, const MemOperand& src, 621 LoadStoreScalingOption option = PreferScaledOffset) 622 623 624 ### LDRH ### 625 626 Load half-word. 627 628 void ldrh(const Register& rt, const MemOperand& src, 629 LoadStoreScalingOption option = PreferScaledOffset) 630 631 632 ### LDRSB ### 633 634 Load byte with sign extension. 635 636 void ldrsb(const Register& rt, const MemOperand& src, 637 LoadStoreScalingOption option = PreferScaledOffset) 638 639 640 ### LDRSH ### 641 642 Load half-word with sign extension. 643 644 void ldrsh(const Register& rt, const MemOperand& src, 645 LoadStoreScalingOption option = PreferScaledOffset) 646 647 648 ### LDRSW ### 649 650 Load word with sign extension from literal pool. 651 652 void ldrsw(const Register& rt, RawLiteral* literal) 653 654 655 ### LDRSW ### 656 657 Load word with sign extension from pc + imm19 << 2. 658 659 void ldrsw(const Register& rt, int imm19) 660 661 662 ### LDRSW ### 663 664 Load word with sign extension. 665 666 void ldrsw(const Register& rt, const MemOperand& src, 667 LoadStoreScalingOption option = PreferScaledOffset) 668 669 670 ### LDUR ### 671 672 Load integer or FP register (with unscaled offset). 673 674 void ldur(const CPURegister& rt, const MemOperand& src, 675 LoadStoreScalingOption option = PreferUnscaledOffset) 676 677 678 ### LDURB ### 679 680 Load byte (with unscaled offset). 681 682 void ldurb(const Register& rt, const MemOperand& src, 683 LoadStoreScalingOption option = PreferUnscaledOffset) 684 685 686 ### LDURH ### 687 688 Load half-word (with unscaled offset). 689 690 void ldurh(const Register& rt, const MemOperand& src, 691 LoadStoreScalingOption option = PreferUnscaledOffset) 692 693 694 ### LDURSB ### 695 696 Load byte with sign extension (and unscaled offset). 697 698 void ldursb(const Register& rt, const MemOperand& src, 699 LoadStoreScalingOption option = PreferUnscaledOffset) 700 701 702 ### LDURSH ### 703 704 Load half-word with sign extension (and unscaled offset). 705 706 void ldursh(const Register& rt, const MemOperand& src, 707 LoadStoreScalingOption option = PreferUnscaledOffset) 708 709 710 ### LDURSW ### 711 712 Load word with sign extension. 713 714 void ldursw(const Register& rt, const MemOperand& src, 715 LoadStoreScalingOption option = PreferUnscaledOffset) 716 717 718 ### LDXP ### 719 720 Load exclusive register pair. 721 722 void ldxp(const Register& rt, const Register& rt2, const MemOperand& src) 723 724 725 ### LDXR ### 726 727 Load exclusive register. 728 729 void ldxr(const Register& rt, const MemOperand& src) 730 731 732 ### LDXRB ### 733 734 Load exclusive byte. 735 736 void ldxrb(const Register& rt, const MemOperand& src) 737 738 739 ### LDXRH ### 740 741 Load exclusive half-word. 742 743 void ldxrh(const Register& rt, const MemOperand& src) 744 745 746 ### LSL ### 747 748 Logical shift left. 749 750 void lsl(const Register& rd, const Register& rn, unsigned shift) 751 752 753 ### LSLV ### 754 755 Logical shift left by variable. 756 757 void lslv(const Register& rd, const Register& rn, const Register& rm) 758 759 760 ### LSR ### 761 762 Logical shift right. 763 764 void lsr(const Register& rd, const Register& rn, unsigned shift) 765 766 767 ### LSRV ### 768 769 Logical shift right by variable. 770 771 void lsrv(const Register& rd, const Register& rn, const Register& rm) 772 773 774 ### MADD ### 775 776 Multiply and accumulate. 777 778 void madd(const Register& rd, 779 const Register& rn, 780 const Register& rm, 781 const Register& ra) 782 783 784 ### MNEG ### 785 786 Negated multiply. 787 788 void mneg(const Register& rd, const Register& rn, const Register& rm) 789 790 791 ### MOV ### 792 793 Move register to register. 794 795 void mov(const Register& rd, const Register& rn) 796 797 798 ### MOVK ### 799 800 Move immediate and keep. 801 802 void movk(const Register& rd, uint64_t imm, int shift = -1) 803 804 805 ### MOVN ### 806 807 Move inverted immediate. 808 809 void movn(const Register& rd, uint64_t imm, int shift = -1) 810 811 812 ### MOVZ ### 813 814 Move immediate. 815 816 void movz(const Register& rd, uint64_t imm, int shift = -1) 817 818 819 ### MRS ### 820 821 Move to register from system register. 822 823 void mrs(const Register& rt, SystemRegister sysreg) 824 825 826 ### MSR ### 827 828 Move from register to system register. 829 830 void msr(SystemRegister sysreg, const Register& rt) 831 832 833 ### MSUB ### 834 835 Multiply and subtract. 836 837 void msub(const Register& rd, 838 const Register& rn, 839 const Register& rm, 840 const Register& ra) 841 842 843 ### MUL ### 844 845 Multiply. 846 847 void mul(const Register& rd, const Register& rn, const Register& rm) 848 849 850 ### MVN ### 851 852 Move inverted operand to register. 853 854 void mvn(const Register& rd, const Operand& operand) 855 856 857 ### NEG ### 858 859 Negate. 860 861 void neg(const Register& rd, 862 const Operand& operand) 863 864 865 ### NEGS ### 866 867 Negate and update status flags. 868 869 void negs(const Register& rd, 870 const Operand& operand) 871 872 873 ### NGC ### 874 875 Negate with carry bit. 876 877 void ngc(const Register& rd, 878 const Operand& operand) 879 880 881 ### NGCS ### 882 883 Negate with carry bit and update status flags. 884 885 void ngcs(const Register& rd, 886 const Operand& operand) 887 888 889 ### NOP ### 890 891 No-op. 892 893 void nop() 894 895 896 ### ORN ### 897 898 Bitwise nor (A | ~B). 899 900 void orn(const Register& rd, const Register& rn, const Operand& operand) 901 902 903 ### ORR ### 904 905 Bitwise or (A | B). 906 907 void orr(const Register& rd, const Register& rn, const Operand& operand) 908 909 910 ### PRFM ### 911 912 Prefetch from pc + imm19 << 2. 913 914 void prfm(PrefetchOperation op, int imm19) 915 916 917 ### PRFM ### 918 919 Prefetch memory in the literal pool. 920 921 void prfm(PrefetchOperation op, RawLiteral* literal) 922 923 924 ### PRFM ### 925 926 Prefetch memory. 927 928 void prfm(PrefetchOperation op, const MemOperand& addr, 929 LoadStoreScalingOption option = PreferScaledOffset) 930 931 932 ### PRFUM ### 933 934 Prefetch memory (with unscaled offset). 935 936 void prfum(PrefetchOperation op, const MemOperand& addr, 937 LoadStoreScalingOption option = PreferUnscaledOffset) 938 939 940 ### RBIT ### 941 942 Bit reverse. 943 944 void rbit(const Register& rd, const Register& rn) 945 946 947 ### RET ### 948 949 Branch to register with return hint. 950 951 void ret(const Register& xn = lr) 952 953 954 ### REV ### 955 956 Reverse bytes. 957 958 void rev(const Register& rd, const Register& rn) 959 960 961 ### REV16 ### 962 963 Reverse bytes in 16-bit half words. 964 965 void rev16(const Register& rd, const Register& rn) 966 967 968 ### REV32 ### 969 970 Reverse bytes in 32-bit words. 971 972 void rev32(const Register& rd, const Register& rn) 973 974 975 ### ROR ### 976 977 Rotate right. 978 979 void ror(const Register& rd, const Register& rs, unsigned shift) 980 981 982 ### RORV ### 983 984 Rotate right by variable. 985 986 void rorv(const Register& rd, const Register& rn, const Register& rm) 987 988 989 ### SBC ### 990 991 Subtract with carry bit. 992 993 void sbc(const Register& rd, 994 const Register& rn, 995 const Operand& operand) 996 997 998 ### SBCS ### 999 1000 Subtract with carry bit and update status flags. 1001 1002 void sbcs(const Register& rd, 1003 const Register& rn, 1004 const Operand& operand) 1005 1006 1007 ### SBFIZ ### 1008 1009 Signed bitfield insert with zero at right. 1010 1011 void sbfiz(const Register& rd, 1012 const Register& rn, 1013 unsigned lsb, 1014 unsigned width) 1015 1016 1017 ### SBFM ### 1018 1019 Signed bitfield move. 1020 1021 void sbfm(const Register& rd, 1022 const Register& rn, 1023 unsigned immr, 1024 unsigned imms) 1025 1026 1027 ### SBFX ### 1028 1029 Signed bitfield extract. 1030 1031 void sbfx(const Register& rd, 1032 const Register& rn, 1033 unsigned lsb, 1034 unsigned width) 1035 1036 1037 ### SDIV ### 1038 1039 Signed integer divide. 1040 1041 void sdiv(const Register& rd, const Register& rn, const Register& rm) 1042 1043 1044 ### SMADDL ### 1045 1046 Signed long multiply and accumulate: 32 x 32 + 64 -> 64-bit. 1047 1048 void smaddl(const Register& rd, 1049 const Register& rn, 1050 const Register& rm, 1051 const Register& ra) 1052 1053 1054 ### SMSUBL ### 1055 1056 Signed long multiply and subtract: 64 - (32 x 32) -> 64-bit. 1057 1058 void smsubl(const Register& rd, 1059 const Register& rn, 1060 const Register& rm, 1061 const Register& ra) 1062 1063 1064 ### SMULH ### 1065 1066 Signed multiply high: 64 x 64 -> 64-bit <127:64>. 1067 1068 void smulh(const Register& xd, const Register& xn, const Register& xm) 1069 1070 1071 ### SMULL ### 1072 1073 Signed long multiply: 32 x 32 -> 64-bit. 1074 1075 void smull(const Register& rd, const Register& rn, const Register& rm) 1076 1077 1078 ### STLR ### 1079 1080 Store-release register. 1081 1082 void stlr(const Register& rt, const MemOperand& dst) 1083 1084 1085 ### STLRB ### 1086 1087 Store-release byte. 1088 1089 void stlrb(const Register& rt, const MemOperand& dst) 1090 1091 1092 ### STLRH ### 1093 1094 Store-release half-word. 1095 1096 void stlrh(const Register& rt, const MemOperand& dst) 1097 1098 1099 ### STLXP ### 1100 1101 Store-release exclusive register pair. 1102 1103 void stlxp(const Register& rs, 1104 const Register& rt, 1105 const Register& rt2, 1106 const MemOperand& dst) 1107 1108 1109 ### STLXR ### 1110 1111 Store-release exclusive register. 1112 1113 void stlxr(const Register& rs, const Register& rt, const MemOperand& dst) 1114 1115 1116 ### STLXRB ### 1117 1118 Store-release exclusive byte. 1119 1120 void stlxrb(const Register& rs, const Register& rt, const MemOperand& dst) 1121 1122 1123 ### STLXRH ### 1124 1125 Store-release exclusive half-word. 1126 1127 void stlxrh(const Register& rs, const Register& rt, const MemOperand& dst) 1128 1129 1130 ### STNP ### 1131 1132 Store integer or FP register pair, non-temporal. 1133 1134 void stnp(const CPURegister& rt, const CPURegister& rt2, 1135 const MemOperand& dst) 1136 1137 1138 ### STP ### 1139 1140 Store integer or FP register pair. 1141 1142 void stp(const CPURegister& rt, const CPURegister& rt2, 1143 const MemOperand& dst) 1144 1145 1146 ### STR ### 1147 1148 Store integer or FP register. 1149 1150 void str(const CPURegister& rt, const MemOperand& dst, 1151 LoadStoreScalingOption option = PreferScaledOffset) 1152 1153 1154 ### STRB ### 1155 1156 Store byte. 1157 1158 void strb(const Register& rt, const MemOperand& dst, 1159 LoadStoreScalingOption option = PreferScaledOffset) 1160 1161 1162 ### STRH ### 1163 1164 Store half-word. 1165 1166 void strh(const Register& rt, const MemOperand& dst, 1167 LoadStoreScalingOption option = PreferScaledOffset) 1168 1169 1170 ### STUR ### 1171 1172 Store integer or FP register (with unscaled offset). 1173 1174 void stur(const CPURegister& rt, const MemOperand& src, 1175 LoadStoreScalingOption option = PreferUnscaledOffset) 1176 1177 1178 ### STURB ### 1179 1180 Store byte (with unscaled offset). 1181 1182 void sturb(const Register& rt, const MemOperand& dst, 1183 LoadStoreScalingOption option = PreferUnscaledOffset) 1184 1185 1186 ### STURH ### 1187 1188 Store half-word (with unscaled offset). 1189 1190 void sturh(const Register& rt, const MemOperand& dst, 1191 LoadStoreScalingOption option = PreferUnscaledOffset) 1192 1193 1194 ### STXP ### 1195 1196 Store exclusive register pair. 1197 1198 void stxp(const Register& rs, 1199 const Register& rt, 1200 const Register& rt2, 1201 const MemOperand& dst) 1202 1203 1204 ### STXR ### 1205 1206 Store exclusive register. 1207 1208 void stxr(const Register& rs, const Register& rt, const MemOperand& dst) 1209 1210 1211 ### STXRB ### 1212 1213 Store exclusive byte. 1214 1215 void stxrb(const Register& rs, const Register& rt, const MemOperand& dst) 1216 1217 1218 ### STXRH ### 1219 1220 Store exclusive half-word. 1221 1222 void stxrh(const Register& rs, const Register& rt, const MemOperand& dst) 1223 1224 1225 ### SUB ### 1226 1227 Subtract. 1228 1229 void sub(const Register& rd, 1230 const Register& rn, 1231 const Operand& operand) 1232 1233 1234 ### SUBS ### 1235 1236 Subtract and update status flags. 1237 1238 void subs(const Register& rd, 1239 const Register& rn, 1240 const Operand& operand) 1241 1242 1243 ### SVC ### 1244 1245 Generate exception targeting EL1. 1246 1247 void svc(int code) 1248 1249 1250 ### SXTB ### 1251 1252 Signed extend byte. 1253 1254 void sxtb(const Register& rd, const Register& rn) 1255 1256 1257 ### SXTH ### 1258 1259 Signed extend halfword. 1260 1261 void sxth(const Register& rd, const Register& rn) 1262 1263 1264 ### SXTW ### 1265 1266 Signed extend word. 1267 1268 void sxtw(const Register& rd, const Register& rn) 1269 1270 1271 ### SYS ### 1272 1273 System instruction with pre-encoded op (op1:crn:crm:op2). 1274 1275 void sys(int op, const Register& rt = xzr) 1276 1277 1278 ### SYS ### 1279 1280 System instruction. 1281 1282 void sys(int op1, int crn, int crm, int op2, const Register& rt = xzr) 1283 1284 1285 ### TBNZ ### 1286 1287 Test bit and branch to PC offset if not zero. 1288 1289 void tbnz(const Register& rt, unsigned bit_pos, int imm14) 1290 1291 1292 ### TBNZ ### 1293 1294 Test bit and branch to label if not zero. 1295 1296 void tbnz(const Register& rt, unsigned bit_pos, Label* label) 1297 1298 1299 ### TBZ ### 1300 1301 Test bit and branch to PC offset if zero. 1302 1303 void tbz(const Register& rt, unsigned bit_pos, int imm14) 1304 1305 1306 ### TBZ ### 1307 1308 Test bit and branch to label if zero. 1309 1310 void tbz(const Register& rt, unsigned bit_pos, Label* label) 1311 1312 1313 ### TST ### 1314 1315 Bit test and set flags. 1316 1317 void tst(const Register& rn, const Operand& operand) 1318 1319 1320 ### UBFIZ ### 1321 1322 Unsigned bitfield insert with zero at right. 1323 1324 void ubfiz(const Register& rd, 1325 const Register& rn, 1326 unsigned lsb, 1327 unsigned width) 1328 1329 1330 ### UBFM ### 1331 1332 Unsigned bitfield move. 1333 1334 void ubfm(const Register& rd, 1335 const Register& rn, 1336 unsigned immr, 1337 unsigned imms) 1338 1339 1340 ### UBFX ### 1341 1342 Unsigned bitfield extract. 1343 1344 void ubfx(const Register& rd, 1345 const Register& rn, 1346 unsigned lsb, 1347 unsigned width) 1348 1349 1350 ### UDIV ### 1351 1352 Unsigned integer divide. 1353 1354 void udiv(const Register& rd, const Register& rn, const Register& rm) 1355 1356 1357 ### UMADDL ### 1358 1359 Unsigned long multiply and accumulate: 32 x 32 + 64 -> 64-bit. 1360 1361 void umaddl(const Register& rd, 1362 const Register& rn, 1363 const Register& rm, 1364 const Register& ra) 1365 1366 1367 ### UMSUBL ### 1368 1369 Unsigned long multiply and subtract: 64 - (32 x 32) -> 64-bit. 1370 1371 void umsubl(const Register& rd, 1372 const Register& rn, 1373 const Register& rm, 1374 const Register& ra) 1375 1376 1377 ### UMULH ### 1378 1379 Unsigned multiply high: 64 x 64 -> 64-bit <127:64>. 1380 1381 void umulh(const Register& xd, 1382 const Register& xn, 1383 const Register& xm) 1384 1385 1386 ### UMULL ### 1387 1388 Unsigned long multiply: 32 x 32 -> 64-bit. 1389 1390 void umull(const Register& rd, 1391 const Register& rn, 1392 const Register& rm) 1393 1394 1395 ### UXTB ### 1396 1397 Unsigned extend byte. 1398 1399 void uxtb(const Register& rd, const Register& rn) 1400 1401 1402 ### UXTH ### 1403 1404 Unsigned extend halfword. 1405 1406 void uxth(const Register& rd, const Register& rn) 1407 1408 1409 ### UXTW ### 1410 1411 Unsigned extend word. 1412 1413 void uxtw(const Register& rd, const Register& rn) 1414 1415 1416 1417 AArch64 floating point and NEON instructions 1418 -------------------------------------------- 1419 1420 ### ABS ### 1421 1422 Absolute value. 1423 1424 void abs(const VRegister& vd, 1425 const VRegister& vn) 1426 1427 1428 ### ADD ### 1429 1430 Add. 1431 1432 void add(const VRegister& vd, 1433 const VRegister& vn, 1434 const VRegister& vm) 1435 1436 1437 ### ADDHN ### 1438 1439 Add narrow returning high half. 1440 1441 void addhn(const VRegister& vd, 1442 const VRegister& vn, 1443 const VRegister& vm) 1444 1445 1446 ### ADDHN2 ### 1447 1448 Add narrow returning high half (second part). 1449 1450 void addhn2(const VRegister& vd, 1451 const VRegister& vn, 1452 const VRegister& vm) 1453 1454 1455 ### ADDP ### 1456 1457 Add pair of elements scalar. 1458 1459 void addp(const VRegister& vd, 1460 const VRegister& vn) 1461 1462 1463 ### ADDP ### 1464 1465 Add pairwise. 1466 1467 void addp(const VRegister& vd, 1468 const VRegister& vn, 1469 const VRegister& vm) 1470 1471 1472 ### ADDV ### 1473 1474 Add across vector. 1475 1476 void addv(const VRegister& vd, 1477 const VRegister& vn) 1478 1479 1480 ### AND ### 1481 1482 Bitwise and. 1483 1484 void and_(const VRegister& vd, 1485 const VRegister& vn, 1486 const VRegister& vm) 1487 1488 1489 ### BIC ### 1490 1491 Bit clear immediate. 1492 1493 void bic(const VRegister& vd, 1494 const int imm8, 1495 const int left_shift = 0) 1496 1497 1498 ### BIC ### 1499 1500 Bit clear. 1501 1502 void bic(const VRegister& vd, 1503 const VRegister& vn, 1504 const VRegister& vm) 1505 1506 1507 ### BIF ### 1508 1509 Bitwise insert if false. 1510 1511 void bif(const VRegister& vd, 1512 const VRegister& vn, 1513 const VRegister& vm) 1514 1515 1516 ### BIT ### 1517 1518 Bitwise insert if true. 1519 1520 void bit(const VRegister& vd, 1521 const VRegister& vn, 1522 const VRegister& vm) 1523 1524 1525 ### BSL ### 1526 1527 Bitwise select. 1528 1529 void bsl(const VRegister& vd, 1530 const VRegister& vn, 1531 const VRegister& vm) 1532 1533 1534 ### CLS ### 1535 1536 Count leading sign bits. 1537 1538 void cls(const VRegister& vd, 1539 const VRegister& vn) 1540 1541 1542 ### CLZ ### 1543 1544 Count leading zero bits (vector). 1545 1546 void clz(const VRegister& vd, 1547 const VRegister& vn) 1548 1549 1550 ### CMEQ ### 1551 1552 Compare bitwise to zero. 1553 1554 void cmeq(const VRegister& vd, 1555 const VRegister& vn, 1556 int value) 1557 1558 1559 ### CMEQ ### 1560 1561 Compare equal. 1562 1563 void cmeq(const VRegister& vd, 1564 const VRegister& vn, 1565 const VRegister& vm) 1566 1567 1568 ### CMGE ### 1569 1570 Compare signed greater than or equal to zero. 1571 1572 void cmge(const VRegister& vd, 1573 const VRegister& vn, 1574 int value) 1575 1576 1577 ### CMGE ### 1578 1579 Compare signed greater than or equal. 1580 1581 void cmge(const VRegister& vd, 1582 const VRegister& vn, 1583 const VRegister& vm) 1584 1585 1586 ### CMGT ### 1587 1588 Compare signed greater than zero. 1589 1590 void cmgt(const VRegister& vd, 1591 const VRegister& vn, 1592 int value) 1593 1594 1595 ### CMGT ### 1596 1597 Compare signed greater than. 1598 1599 void cmgt(const VRegister& vd, 1600 const VRegister& vn, 1601 const VRegister& vm) 1602 1603 1604 ### CMHI ### 1605 1606 Compare unsigned higher. 1607 1608 void cmhi(const VRegister& vd, 1609 const VRegister& vn, 1610 const VRegister& vm) 1611 1612 1613 ### CMHS ### 1614 1615 Compare unsigned higher or same. 1616 1617 void cmhs(const VRegister& vd, 1618 const VRegister& vn, 1619 const VRegister& vm) 1620 1621 1622 ### CMLE ### 1623 1624 Compare signed less than or equal to zero. 1625 1626 void cmle(const VRegister& vd, 1627 const VRegister& vn, 1628 int value) 1629 1630 1631 ### CMLT ### 1632 1633 Compare signed less than zero. 1634 1635 void cmlt(const VRegister& vd, 1636 const VRegister& vn, 1637 int value) 1638 1639 1640 ### CMTST ### 1641 1642 Compare bitwise test bits nonzero. 1643 1644 void cmtst(const VRegister& vd, 1645 const VRegister& vn, 1646 const VRegister& vm) 1647 1648 1649 ### CNT ### 1650 1651 Population count per byte. 1652 1653 void cnt(const VRegister& vd, 1654 const VRegister& vn) 1655 1656 1657 ### DUP ### 1658 1659 Duplicate general-purpose register to vector. 1660 1661 void dup(const VRegister& vd, 1662 const Register& rn) 1663 1664 1665 ### DUP ### 1666 1667 Duplicate vector element to vector or scalar. 1668 1669 void dup(const VRegister& vd, 1670 const VRegister& vn, 1671 int vn_index) 1672 1673 1674 ### EOR ### 1675 1676 Bitwise eor. 1677 1678 void eor(const VRegister& vd, 1679 const VRegister& vn, 1680 const VRegister& vm) 1681 1682 1683 ### EXT ### 1684 1685 Extract vector from pair of vectors. 1686 1687 void ext(const VRegister& vd, 1688 const VRegister& vn, 1689 const VRegister& vm, 1690 int index) 1691 1692 1693 ### FABD ### 1694 1695 FP absolute difference. 1696 1697 void fabd(const VRegister& vd, 1698 const VRegister& vn, 1699 const VRegister& vm) 1700 1701 1702 ### FABS ### 1703 1704 FP absolute. 1705 1706 void fabs(const VRegister& vd, const VRegister& vn) 1707 1708 1709 ### FACGE ### 1710 1711 FP absolute greater than or equal. 1712 1713 void facge(const VRegister& vd, 1714 const VRegister& vn, 1715 const VRegister& vm) 1716 1717 1718 ### FACGT ### 1719 1720 FP absolute greater than. 1721 1722 void facgt(const VRegister& vd, 1723 const VRegister& vn, 1724 const VRegister& vm) 1725 1726 1727 ### FADD ### 1728 1729 FP add. 1730 1731 void fadd(const VRegister& vd, const VRegister& vn, const VRegister& vm) 1732 1733 1734 ### FADDP ### 1735 1736 FP pairwise add scalar. 1737 1738 void faddp(const VRegister& vd, 1739 const VRegister& vn) 1740 1741 1742 ### FADDP ### 1743 1744 FP pairwise add vector. 1745 1746 void faddp(const VRegister& vd, 1747 const VRegister& vn, 1748 const VRegister& vm) 1749 1750 1751 ### FCCMP ### 1752 1753 FP conditional compare. 1754 1755 void fccmp(const VRegister& vn, 1756 const VRegister& vm, 1757 StatusFlags nzcv, 1758 Condition cond) 1759 1760 1761 ### FCCMPE ### 1762 1763 FP conditional signaling compare. 1764 1765 void fccmpe(const VRegister& vn, 1766 const VRegister& vm, 1767 StatusFlags nzcv, 1768 Condition cond) 1769 1770 1771 ### FCMEQ ### 1772 1773 FP compare equal to zero. 1774 1775 void fcmeq(const VRegister& vd, 1776 const VRegister& vn, 1777 double imm) 1778 1779 1780 ### FCMEQ ### 1781 1782 FP compare equal. 1783 1784 void fcmeq(const VRegister& vd, 1785 const VRegister& vn, 1786 const VRegister& vm) 1787 1788 1789 ### FCMGE ### 1790 1791 FP greater than or equal to zero. 1792 1793 void fcmge(const VRegister& vd, 1794 const VRegister& vn, 1795 double imm) 1796 1797 1798 ### FCMGE ### 1799 1800 FP greater than or equal. 1801 1802 void fcmge(const VRegister& vd, 1803 const VRegister& vn, 1804 const VRegister& vm) 1805 1806 1807 ### FCMGT ### 1808 1809 FP greater than zero. 1810 1811 void fcmgt(const VRegister& vd, 1812 const VRegister& vn, 1813 double imm) 1814 1815 1816 ### FCMGT ### 1817 1818 FP greater than. 1819 1820 void fcmgt(const VRegister& vd, 1821 const VRegister& vn, 1822 const VRegister& vm) 1823 1824 1825 ### FCMLE ### 1826 1827 FP less than or equal to zero. 1828 1829 void fcmle(const VRegister& vd, 1830 const VRegister& vn, 1831 double imm) 1832 1833 1834 ### FCMLT ### 1835 1836 FP less than to zero. 1837 1838 void fcmlt(const VRegister& vd, 1839 const VRegister& vn, 1840 double imm) 1841 1842 1843 ### FCMP ### 1844 1845 FP compare immediate. 1846 1847 void fcmp(const VRegister& vn, double value) 1848 1849 1850 ### FCMP ### 1851 1852 FP compare registers. 1853 1854 void fcmp(const VRegister& vn, const VRegister& vm) 1855 1856 1857 ### FCMPE ### 1858 1859 FP signaling compare immediate. 1860 1861 void fcmpe(const VRegister& vn, double value) 1862 1863 1864 ### FCMPE ### 1865 1866 FP signaling compare registers. 1867 1868 void fcmpe(const VRegister& vn, const VRegister& vm) 1869 1870 1871 ### FCSEL ### 1872 1873 FP conditional select. 1874 1875 void fcsel(const VRegister& vd, 1876 const VRegister& vn, 1877 const VRegister& vm, 1878 Condition cond) 1879 1880 1881 ### FCVT ### 1882 1883 FP convert between precisions. 1884 1885 void fcvt(const VRegister& vd, const VRegister& vn) 1886 1887 1888 ### FCVTAS ### 1889 1890 FP convert to signed integer, nearest with ties to away. 1891 1892 void fcvtas(const Register& rd, const VRegister& vn) 1893 1894 1895 ### FCVTAS ### 1896 1897 FP convert to signed integer, nearest with ties to away. 1898 1899 void fcvtas(const VRegister& vd, const VRegister& vn) 1900 1901 1902 ### FCVTAU ### 1903 1904 FP convert to unsigned integer, nearest with ties to away. 1905 1906 void fcvtau(const Register& rd, const VRegister& vn) 1907 1908 1909 ### FCVTAU ### 1910 1911 FP convert to unsigned integer, nearest with ties to away. 1912 1913 void fcvtau(const VRegister& vd, const VRegister& vn) 1914 1915 1916 ### FCVTL ### 1917 1918 FP convert to higher precision. 1919 1920 void fcvtl(const VRegister& vd, const VRegister& vn) 1921 1922 1923 ### FCVTL2 ### 1924 1925 FP convert to higher precision (second part). 1926 1927 void fcvtl2(const VRegister& vd, const VRegister& vn) 1928 1929 1930 ### FCVTMS ### 1931 1932 FP convert to signed integer, round towards -infinity. 1933 1934 void fcvtms(const Register& rd, const VRegister& vn) 1935 1936 1937 ### FCVTMS ### 1938 1939 FP convert to signed integer, round towards -infinity. 1940 1941 void fcvtms(const VRegister& vd, const VRegister& vn) 1942 1943 1944 ### FCVTMU ### 1945 1946 FP convert to unsigned integer, round towards -infinity. 1947 1948 void fcvtmu(const Register& rd, const VRegister& vn) 1949 1950 1951 ### FCVTMU ### 1952 1953 FP convert to unsigned integer, round towards -infinity. 1954 1955 void fcvtmu(const VRegister& vd, const VRegister& vn) 1956 1957 1958 ### FCVTN ### 1959 1960 FP convert to lower precision. 1961 1962 void fcvtn(const VRegister& vd, const VRegister& vn) 1963 1964 1965 ### FCVTN2 ### 1966 1967 FP convert to lower prevision (second part). 1968 1969 void fcvtn2(const VRegister& vd, const VRegister& vn) 1970 1971 1972 ### FCVTNS ### 1973 1974 FP convert to signed integer, nearest with ties to even. 1975 1976 void fcvtns(const Register& rd, const VRegister& vn) 1977 1978 1979 ### FCVTNS ### 1980 1981 FP convert to signed integer, nearest with ties to even. 1982 1983 void fcvtns(const VRegister& rd, const VRegister& vn) 1984 1985 1986 ### FCVTNU ### 1987 1988 FP convert to unsigned integer, nearest with ties to even. 1989 1990 void fcvtnu(const Register& rd, const VRegister& vn) 1991 1992 1993 ### FCVTNU ### 1994 1995 FP convert to unsigned integer, nearest with ties to even. 1996 1997 void fcvtnu(const VRegister& rd, const VRegister& vn) 1998 1999 2000 ### FCVTPS ### 2001 2002 FP convert to signed integer, round towards +infinity. 2003 2004 void fcvtps(const Register& rd, const VRegister& vn) 2005 2006 2007 ### FCVTPS ### 2008 2009 FP convert to signed integer, round towards +infinity. 2010 2011 void fcvtps(const VRegister& vd, const VRegister& vn) 2012 2013 2014 ### FCVTPU ### 2015 2016 FP convert to unsigned integer, round towards +infinity. 2017 2018 void fcvtpu(const Register& rd, const VRegister& vn) 2019 2020 2021 ### FCVTPU ### 2022 2023 FP convert to unsigned integer, round towards +infinity. 2024 2025 void fcvtpu(const VRegister& vd, const VRegister& vn) 2026 2027 2028 ### FCVTXN ### 2029 2030 FP convert to lower precision, rounding to odd. 2031 2032 void fcvtxn(const VRegister& vd, const VRegister& vn) 2033 2034 2035 ### FCVTXN2 ### 2036 2037 FP convert to lower precision, rounding to odd (second part). 2038 2039 void fcvtxn2(const VRegister& vd, const VRegister& vn) 2040 2041 2042 ### FCVTZS ### 2043 2044 FP convert to signed integer or fixed-point, round towards zero. 2045 2046 void fcvtzs(const Register& rd, const VRegister& vn, int fbits = 0) 2047 2048 2049 ### FCVTZS ### 2050 2051 FP convert to signed integer or fixed-point, round towards zero. 2052 2053 void fcvtzs(const VRegister& vd, const VRegister& vn, int fbits = 0) 2054 2055 2056 ### FCVTZU ### 2057 2058 FP convert to unsigned integer or fixed-point, round towards zero. 2059 2060 void fcvtzu(const Register& rd, const VRegister& vn, int fbits = 0) 2061 2062 2063 ### FCVTZU ### 2064 2065 FP convert to unsigned integer or fixed-point, round towards zero. 2066 2067 void fcvtzu(const VRegister& vd, const VRegister& vn, int fbits = 0) 2068 2069 2070 ### FDIV ### 2071 2072 FP divide. 2073 2074 void fdiv(const VRegister& vd, const VRegister& fn, const VRegister& vm) 2075 2076 2077 ### FMADD ### 2078 2079 FP fused multiply-add. 2080 2081 void fmadd(const VRegister& vd, 2082 const VRegister& vn, 2083 const VRegister& vm, 2084 const VRegister& va) 2085 2086 2087 ### FMAX ### 2088 2089 FP maximum. 2090 2091 void fmax(const VRegister& vd, const VRegister& fn, const VRegister& vm) 2092 2093 2094 ### FMAXNM ### 2095 2096 FP maximum number. 2097 2098 void fmaxnm(const VRegister& vd, const VRegister& fn, const VRegister& vm) 2099 2100 2101 ### FMAXNMP ### 2102 2103 FP pairwise maximum number scalar. 2104 2105 void fmaxnmp(const VRegister& vd, 2106 const VRegister& vn) 2107 2108 2109 ### FMAXNMP ### 2110 2111 FP pairwise maximum number vector. 2112 2113 void fmaxnmp(const VRegister& vd, 2114 const VRegister& vn, 2115 const VRegister& vm) 2116 2117 2118 ### FMAXNMV ### 2119 2120 FP maximum number across vector. 2121 2122 void fmaxnmv(const VRegister& vd, 2123 const VRegister& vn) 2124 2125 2126 ### FMAXP ### 2127 2128 FP pairwise maximum scalar. 2129 2130 void fmaxp(const VRegister& vd, 2131 const VRegister& vn) 2132 2133 2134 ### FMAXP ### 2135 2136 FP pairwise maximum vector. 2137 2138 void fmaxp(const VRegister& vd, 2139 const VRegister& vn, 2140 const VRegister& vm) 2141 2142 2143 ### FMAXV ### 2144 2145 FP maximum across vector. 2146 2147 void fmaxv(const VRegister& vd, 2148 const VRegister& vn) 2149 2150 2151 ### FMIN ### 2152 2153 FP minimum. 2154 2155 void fmin(const VRegister& vd, const VRegister& fn, const VRegister& vm) 2156 2157 2158 ### FMINNM ### 2159 2160 FP minimum number. 2161 2162 void fminnm(const VRegister& vd, const VRegister& fn, const VRegister& vm) 2163 2164 2165 ### FMINNMP ### 2166 2167 FP pairwise minimum number scalar. 2168 2169 void fminnmp(const VRegister& vd, 2170 const VRegister& vn) 2171 2172 2173 ### FMINNMP ### 2174 2175 FP pairwise minimum number vector. 2176 2177 void fminnmp(const VRegister& vd, 2178 const VRegister& vn, 2179 const VRegister& vm) 2180 2181 2182 ### FMINNMV ### 2183 2184 FP minimum number across vector. 2185 2186 void fminnmv(const VRegister& vd, 2187 const VRegister& vn) 2188 2189 2190 ### FMINP ### 2191 2192 FP pairwise minimum scalar. 2193 2194 void fminp(const VRegister& vd, 2195 const VRegister& vn) 2196 2197 2198 ### FMINP ### 2199 2200 FP pairwise minimum vector. 2201 2202 void fminp(const VRegister& vd, 2203 const VRegister& vn, 2204 const VRegister& vm) 2205 2206 2207 ### FMINV ### 2208 2209 FP minimum across vector. 2210 2211 void fminv(const VRegister& vd, 2212 const VRegister& vn) 2213 2214 2215 ### FMLA ### 2216 2217 FP fused multiply-add to accumulator by element. 2218 2219 void fmla(const VRegister& vd, 2220 const VRegister& vn, 2221 const VRegister& vm, 2222 int vm_index) 2223 2224 2225 ### FMLA ### 2226 2227 FP vector multiply accumulate. 2228 2229 void fmla(const VRegister& vd, 2230 const VRegister& vn, 2231 const VRegister& vm) 2232 2233 2234 ### FMLS ### 2235 2236 FP fused multiply-sub from accumulator by element. 2237 2238 void fmls(const VRegister& vd, 2239 const VRegister& vn, 2240 const VRegister& vm, 2241 int vm_index) 2242 2243 2244 ### FMLS ### 2245 2246 FP vector multiply subtract. 2247 2248 void fmls(const VRegister& vd, 2249 const VRegister& vn, 2250 const VRegister& vm) 2251 2252 2253 ### FMOV ### 2254 2255 Move 64-bit register to top half of 128-bit FP register. 2256 2257 void fmov(const VRegister& vd, int index, const Register& rn) 2258 2259 2260 ### FMOV ### 2261 2262 Move FP register to FP register. 2263 2264 void fmov(const VRegister& vd, const VRegister& fn) 2265 2266 2267 ### FMOV ### 2268 2269 Move FP register to register. 2270 2271 void fmov(const Register& rd, const VRegister& fn) 2272 2273 2274 ### FMOV ### 2275 2276 Move double precision immediate to FP register. 2277 2278 void fmov(const VRegister& vd, double imm) 2279 2280 2281 ### FMOV ### 2282 2283 Move register to FP register. 2284 2285 void fmov(const VRegister& vd, const Register& rn) 2286 2287 2288 ### FMOV ### 2289 2290 Move single precision immediate to FP register. 2291 2292 void fmov(const VRegister& vd, float imm) 2293 2294 2295 ### FMOV ### 2296 2297 Move top half of 128-bit FP register to 64-bit register. 2298 2299 void fmov(const Register& rd, const VRegister& vn, int index) 2300 2301 2302 ### FMSUB ### 2303 2304 FP fused multiply-subtract. 2305 2306 void fmsub(const VRegister& vd, 2307 const VRegister& vn, 2308 const VRegister& vm, 2309 const VRegister& va) 2310 2311 2312 ### FMUL ### 2313 2314 FP multiply by element. 2315 2316 void fmul(const VRegister& vd, 2317 const VRegister& vn, 2318 const VRegister& vm, 2319 int vm_index) 2320 2321 2322 ### FMUL ### 2323 2324 FP multiply. 2325 2326 void fmul(const VRegister& vd, const VRegister& vn, const VRegister& vm) 2327 2328 2329 ### FMULX ### 2330 2331 FP multiply extended by element. 2332 2333 void fmulx(const VRegister& vd, 2334 const VRegister& vn, 2335 const VRegister& vm, 2336 int vm_index) 2337 2338 2339 ### FMULX ### 2340 2341 FP vector multiply extended. 2342 2343 void fmulx(const VRegister& vd, 2344 const VRegister& vn, 2345 const VRegister& vm) 2346 2347 2348 ### FNEG ### 2349 2350 FP negate. 2351 2352 void fneg(const VRegister& vd, const VRegister& vn) 2353 2354 2355 ### FNMADD ### 2356 2357 FP fused multiply-add and negate. 2358 2359 void fnmadd(const VRegister& vd, 2360 const VRegister& vn, 2361 const VRegister& vm, 2362 const VRegister& va) 2363 2364 2365 ### FNMSUB ### 2366 2367 FP fused multiply-subtract and negate. 2368 2369 void fnmsub(const VRegister& vd, 2370 const VRegister& vn, 2371 const VRegister& vm, 2372 const VRegister& va) 2373 2374 2375 ### FNMUL ### 2376 2377 FP multiply-negate scalar. 2378 2379 void fnmul(const VRegister& vd, 2380 const VRegister& vn, 2381 const VRegister& vm) 2382 2383 2384 ### FRECPE ### 2385 2386 FP reciprocal estimate. 2387 2388 void frecpe(const VRegister& vd, 2389 const VRegister& vn) 2390 2391 2392 ### FRECPS ### 2393 2394 FP reciprocal step. 2395 2396 void frecps(const VRegister& vd, 2397 const VRegister& vn, 2398 const VRegister& vm) 2399 2400 2401 ### FRECPX ### 2402 2403 FP reciprocal exponent scalar. 2404 2405 void frecpx(const VRegister& vd, 2406 const VRegister& vn) 2407 2408 2409 ### FRINTA ### 2410 2411 FP round to integer, nearest with ties to away. 2412 2413 void frinta(const VRegister& vd, const VRegister& vn) 2414 2415 2416 ### FRINTI ### 2417 2418 FP round to integer, implicit rounding. 2419 2420 void frinti(const VRegister& vd, const VRegister& vn) 2421 2422 2423 ### FRINTM ### 2424 2425 FP round to integer, toward minus infinity. 2426 2427 void frintm(const VRegister& vd, const VRegister& vn) 2428 2429 2430 ### FRINTN ### 2431 2432 FP round to integer, nearest with ties to even. 2433 2434 void frintn(const VRegister& vd, const VRegister& vn) 2435 2436 2437 ### FRINTP ### 2438 2439 FP round to integer, toward plus infinity. 2440 2441 void frintp(const VRegister& vd, const VRegister& vn) 2442 2443 2444 ### FRINTX ### 2445 2446 FP round to integer, exact, implicit rounding. 2447 2448 void frintx(const VRegister& vd, const VRegister& vn) 2449 2450 2451 ### FRINTZ ### 2452 2453 FP round to integer, towards zero. 2454 2455 void frintz(const VRegister& vd, const VRegister& vn) 2456 2457 2458 ### FRSQRTE ### 2459 2460 FP reciprocal square root estimate. 2461 2462 void frsqrte(const VRegister& vd, 2463 const VRegister& vn) 2464 2465 2466 ### FRSQRTS ### 2467 2468 FP reciprocal square root step. 2469 2470 void frsqrts(const VRegister& vd, 2471 const VRegister& vn, 2472 const VRegister& vm) 2473 2474 2475 ### FSQRT ### 2476 2477 FP square root. 2478 2479 void fsqrt(const VRegister& vd, const VRegister& vn) 2480 2481 2482 ### FSUB ### 2483 2484 FP subtract. 2485 2486 void fsub(const VRegister& vd, const VRegister& vn, const VRegister& vm) 2487 2488 2489 ### INS ### 2490 2491 Insert vector element from another vector element. 2492 2493 void ins(const VRegister& vd, 2494 int vd_index, 2495 const VRegister& vn, 2496 int vn_index) 2497 2498 2499 ### INS ### 2500 2501 Insert vector element from general-purpose register. 2502 2503 void ins(const VRegister& vd, 2504 int vd_index, 2505 const Register& rn) 2506 2507 2508 ### LD1 ### 2509 2510 One-element single structure load to one lane. 2511 2512 void ld1(const VRegister& vt, 2513 int lane, 2514 const MemOperand& src) 2515 2516 2517 ### LD1 ### 2518 2519 One-element structure load to four registers. 2520 2521 void ld1(const VRegister& vt, 2522 const VRegister& vt2, 2523 const VRegister& vt3, 2524 const VRegister& vt4, 2525 const MemOperand& src) 2526 2527 2528 ### LD1 ### 2529 2530 One-element structure load to one register. 2531 2532 void ld1(const VRegister& vt, 2533 const MemOperand& src) 2534 2535 2536 ### LD1 ### 2537 2538 One-element structure load to three registers. 2539 2540 void ld1(const VRegister& vt, 2541 const VRegister& vt2, 2542 const VRegister& vt3, 2543 const MemOperand& src) 2544 2545 2546 ### LD1 ### 2547 2548 One-element structure load to two registers. 2549 2550 void ld1(const VRegister& vt, 2551 const VRegister& vt2, 2552 const MemOperand& src) 2553 2554 2555 ### LD1R ### 2556 2557 One-element single structure load to all lanes. 2558 2559 void ld1r(const VRegister& vt, 2560 const MemOperand& src) 2561 2562 2563 ### LD2 ### 2564 2565 Two-element single structure load to one lane. 2566 2567 void ld2(const VRegister& vt, 2568 const VRegister& vt2, 2569 int lane, 2570 const MemOperand& src) 2571 2572 2573 ### LD2 ### 2574 2575 Two-element structure load. 2576 2577 void ld2(const VRegister& vt, 2578 const VRegister& vt2, 2579 const MemOperand& src) 2580 2581 2582 ### LD2R ### 2583 2584 Two-element single structure load to all lanes. 2585 2586 void ld2r(const VRegister& vt, 2587 const VRegister& vt2, 2588 const MemOperand& src) 2589 2590 2591 ### LD3 ### 2592 2593 Three-element single structure load to one lane. 2594 2595 void ld3(const VRegister& vt, 2596 const VRegister& vt2, 2597 const VRegister& vt3, 2598 int lane, 2599 const MemOperand& src) 2600 2601 2602 ### LD3 ### 2603 2604 Three-element structure load. 2605 2606 void ld3(const VRegister& vt, 2607 const VRegister& vt2, 2608 const VRegister& vt3, 2609 const MemOperand& src) 2610 2611 2612 ### LD3R ### 2613 2614 Three-element single structure load to all lanes. 2615 2616 void ld3r(const VRegister& vt, 2617 const VRegister& vt2, 2618 const VRegister& vt3, 2619 const MemOperand& src) 2620 2621 2622 ### LD4 ### 2623 2624 Four-element single structure load to one lane. 2625 2626 void ld4(const VRegister& vt, 2627 const VRegister& vt2, 2628 const VRegister& vt3, 2629 const VRegister& vt4, 2630 int lane, 2631 const MemOperand& src) 2632 2633 2634 ### LD4 ### 2635 2636 Four-element structure load. 2637 2638 void ld4(const VRegister& vt, 2639 const VRegister& vt2, 2640 const VRegister& vt3, 2641 const VRegister& vt4, 2642 const MemOperand& src) 2643 2644 2645 ### LD4R ### 2646 2647 Four-element single structure load to all lanes. 2648 2649 void ld4r(const VRegister& vt, 2650 const VRegister& vt2, 2651 const VRegister& vt3, 2652 const VRegister& vt4, 2653 const MemOperand& src) 2654 2655 2656 ### MLA ### 2657 2658 Multiply-add by scalar element. 2659 2660 void mla(const VRegister& vd, 2661 const VRegister& vn, 2662 const VRegister& vm, 2663 int vm_index) 2664 2665 2666 ### MLA ### 2667 2668 Multiply-add to accumulator. 2669 2670 void mla(const VRegister& vd, 2671 const VRegister& vn, 2672 const VRegister& vm) 2673 2674 2675 ### MLS ### 2676 2677 Multiply-subtract by scalar element. 2678 2679 void mls(const VRegister& vd, 2680 const VRegister& vn, 2681 const VRegister& vm, 2682 int vm_index) 2683 2684 2685 ### MLS ### 2686 2687 Multiply-subtract to accumulator. 2688 2689 void mls(const VRegister& vd, 2690 const VRegister& vn, 2691 const VRegister& vm) 2692 2693 2694 ### MOV ### 2695 2696 Move general-purpose register to a vector element. 2697 2698 void mov(const VRegister& vd, 2699 int vd_index, 2700 const Register& rn) 2701 2702 2703 ### MOV ### 2704 2705 Move register to register. 2706 2707 void mov(const VRegister& vd, 2708 const VRegister& vn) 2709 2710 2711 ### MOV ### 2712 2713 Move vector element to another vector element. 2714 2715 void mov(const VRegister& vd, 2716 int vd_index, 2717 const VRegister& vn, 2718 int vn_index) 2719 2720 2721 ### MOV ### 2722 2723 Move vector element to general-purpose register. 2724 2725 void mov(const Register& rd, 2726 const VRegister& vn, 2727 int vn_index) 2728 2729 2730 ### MOV ### 2731 2732 Move vector element to scalar. 2733 2734 void mov(const VRegister& vd, 2735 const VRegister& vn, 2736 int vn_index) 2737 2738 2739 ### MOVI ### 2740 2741 Vector move immediate. 2742 2743 void movi(const VRegister& vd, 2744 const uint64_t imm, 2745 Shift shift = LSL, 2746 const int shift_amount = 0) 2747 2748 2749 ### MUL ### 2750 2751 Multiply by scalar element. 2752 2753 void mul(const VRegister& vd, 2754 const VRegister& vn, 2755 const VRegister& vm, 2756 int vm_index) 2757 2758 2759 ### MUL ### 2760 2761 Multiply. 2762 2763 void mul(const VRegister& vd, 2764 const VRegister& vn, 2765 const VRegister& vm) 2766 2767 2768 ### MVN ### 2769 2770 Bitwise not. 2771 2772 void mvn(const VRegister& vd, 2773 const VRegister& vn) 2774 2775 2776 ### MVNI ### 2777 2778 Vector move inverted immediate. 2779 2780 void mvni(const VRegister& vd, 2781 const int imm8, 2782 Shift shift = LSL, 2783 const int shift_amount = 0) 2784 2785 2786 ### NEG ### 2787 2788 Negate. 2789 2790 void neg(const VRegister& vd, 2791 const VRegister& vn) 2792 2793 2794 ### NOT ### 2795 2796 Bitwise not. 2797 2798 void not_(const VRegister& vd, 2799 const VRegister& vn) 2800 2801 2802 ### ORN ### 2803 2804 Bitwise orn. 2805 2806 void orn(const VRegister& vd, 2807 const VRegister& vn, 2808 const VRegister& vm) 2809 2810 2811 ### ORR ### 2812 2813 Bitwise or immediate. 2814 2815 void orr(const VRegister& vd, 2816 const int imm8, 2817 const int left_shift = 0) 2818 2819 2820 ### ORR ### 2821 2822 Bitwise or. 2823 2824 void orr(const VRegister& vd, 2825 const VRegister& vn, 2826 const VRegister& vm) 2827 2828 2829 ### PMUL ### 2830 2831 Polynomial multiply. 2832 2833 void pmul(const VRegister& vd, 2834 const VRegister& vn, 2835 const VRegister& vm) 2836 2837 2838 ### PMULL ### 2839 2840 Polynomial multiply long. 2841 2842 void pmull(const VRegister& vd, 2843 const VRegister& vn, 2844 const VRegister& vm) 2845 2846 2847 ### PMULL2 ### 2848 2849 Polynomial multiply long (second part). 2850 2851 void pmull2(const VRegister& vd, 2852 const VRegister& vn, 2853 const VRegister& vm) 2854 2855 2856 ### RADDHN ### 2857 2858 Rounding add narrow returning high half. 2859 2860 void raddhn(const VRegister& vd, 2861 const VRegister& vn, 2862 const VRegister& vm) 2863 2864 2865 ### RADDHN2 ### 2866 2867 Rounding add narrow returning high half (second part). 2868 2869 void raddhn2(const VRegister& vd, 2870 const VRegister& vn, 2871 const VRegister& vm) 2872 2873 2874 ### RBIT ### 2875 2876 Reverse bit order. 2877 2878 void rbit(const VRegister& vd, 2879 const VRegister& vn) 2880 2881 2882 ### REV16 ### 2883 2884 Reverse elements in 16-bit halfwords. 2885 2886 void rev16(const VRegister& vd, 2887 const VRegister& vn) 2888 2889 2890 ### REV32 ### 2891 2892 Reverse elements in 32-bit words. 2893 2894 void rev32(const VRegister& vd, 2895 const VRegister& vn) 2896 2897 2898 ### REV64 ### 2899 2900 Reverse elements in 64-bit doublewords. 2901 2902 void rev64(const VRegister& vd, 2903 const VRegister& vn) 2904 2905 2906 ### RSHRN ### 2907 2908 Rounding shift right narrow by immediate. 2909 2910 void rshrn(const VRegister& vd, 2911 const VRegister& vn, 2912 int shift) 2913 2914 2915 ### RSHRN2 ### 2916 2917 Rounding shift right narrow by immediate (second part). 2918 2919 void rshrn2(const VRegister& vd, 2920 const VRegister& vn, 2921 int shift) 2922 2923 2924 ### RSUBHN ### 2925 2926 Rounding subtract narrow returning high half. 2927 2928 void rsubhn(const VRegister& vd, 2929 const VRegister& vn, 2930 const VRegister& vm) 2931 2932 2933 ### RSUBHN2 ### 2934 2935 Rounding subtract narrow returning high half (second part). 2936 2937 void rsubhn2(const VRegister& vd, 2938 const VRegister& vn, 2939 const VRegister& vm) 2940 2941 2942 ### SABA ### 2943 2944 Signed absolute difference and accumulate. 2945 2946 void saba(const VRegister& vd, 2947 const VRegister& vn, 2948 const VRegister& vm) 2949 2950 2951 ### SABAL ### 2952 2953 Signed absolute difference and accumulate long. 2954 2955 void sabal(const VRegister& vd, 2956 const VRegister& vn, 2957 const VRegister& vm) 2958 2959 2960 ### SABAL2 ### 2961 2962 Signed absolute difference and accumulate long (second part). 2963 2964 void sabal2(const VRegister& vd, 2965 const VRegister& vn, 2966 const VRegister& vm) 2967 2968 2969 ### SABD ### 2970 2971 Signed absolute difference. 2972 2973 void sabd(const VRegister& vd, 2974 const VRegister& vn, 2975 const VRegister& vm) 2976 2977 2978 ### SABDL ### 2979 2980 Signed absolute difference long. 2981 2982 void sabdl(const VRegister& vd, 2983 const VRegister& vn, 2984 const VRegister& vm) 2985 2986 2987 ### SABDL2 ### 2988 2989 Signed absolute difference long (second part). 2990 2991 void sabdl2(const VRegister& vd, 2992 const VRegister& vn, 2993 const VRegister& vm) 2994 2995 2996 ### SADALP ### 2997 2998 Signed pairwise long add and accumulate. 2999 3000 void sadalp(const VRegister& vd, 3001 const VRegister& vn) 3002 3003 3004 ### SADDL ### 3005 3006 Signed add long. 3007 3008 void saddl(const VRegister& vd, 3009 const VRegister& vn, 3010 const VRegister& vm) 3011 3012 3013 ### SADDL2 ### 3014 3015 Signed add long (second part). 3016 3017 void saddl2(const VRegister& vd, 3018 const VRegister& vn, 3019 const VRegister& vm) 3020 3021 3022 ### SADDLP ### 3023 3024 Signed pairwise long add. 3025 3026 void saddlp(const VRegister& vd, 3027 const VRegister& vn) 3028 3029 3030 ### SADDLV ### 3031 3032 Signed add long across vector. 3033 3034 void saddlv(const VRegister& vd, 3035 const VRegister& vn) 3036 3037 3038 ### SADDW ### 3039 3040 Signed add wide. 3041 3042 void saddw(const VRegister& vd, 3043 const VRegister& vn, 3044 const VRegister& vm) 3045 3046 3047 ### SADDW2 ### 3048 3049 Signed add wide (second part). 3050 3051 void saddw2(const VRegister& vd, 3052 const VRegister& vn, 3053 const VRegister& vm) 3054 3055 3056 ### SCVTF ### 3057 3058 Convert signed integer or fixed point to FP. 3059 3060 void scvtf(const VRegister& fd, const Register& rn, int fbits = 0) 3061 3062 3063 ### SCVTF ### 3064 3065 Convert signed integer or fixed-point to FP. 3066 3067 void scvtf(const VRegister& fd, const VRegister& vn, int fbits = 0) 3068 3069 3070 ### SHADD ### 3071 3072 Signed halving add. 3073 3074 void shadd(const VRegister& vd, 3075 const VRegister& vn, 3076 const VRegister& vm) 3077 3078 3079 ### SHL ### 3080 3081 Shift left by immediate. 3082 3083 void shl(const VRegister& vd, 3084 const VRegister& vn, 3085 int shift) 3086 3087 3088 ### SHLL ### 3089 3090 Shift left long by element size. 3091 3092 void shll(const VRegister& vd, 3093 const VRegister& vn, 3094 int shift) 3095 3096 3097 ### SHLL2 ### 3098 3099 Shift left long by element size (second part). 3100 3101 void shll2(const VRegister& vd, 3102 const VRegister& vn, 3103 int shift) 3104 3105 3106 ### SHRN ### 3107 3108 Shift right narrow by immediate. 3109 3110 void shrn(const VRegister& vd, 3111 const VRegister& vn, 3112 int shift) 3113 3114 3115 ### SHRN2 ### 3116 3117 Shift right narrow by immediate (second part). 3118 3119 void shrn2(const VRegister& vd, 3120 const VRegister& vn, 3121 int shift) 3122 3123 3124 ### SHSUB ### 3125 3126 Signed halving sub. 3127 3128 void shsub(const VRegister& vd, 3129 const VRegister& vn, 3130 const VRegister& vm) 3131 3132 3133 ### SLI ### 3134 3135 Shift left by immediate and insert. 3136 3137 void sli(const VRegister& vd, 3138 const VRegister& vn, 3139 int shift) 3140 3141 3142 ### SMAX ### 3143 3144 Signed maximum. 3145 3146 void smax(const VRegister& vd, 3147 const VRegister& vn, 3148 const VRegister& vm) 3149 3150 3151 ### SMAXP ### 3152 3153 Signed pairwise maximum. 3154 3155 void smaxp(const VRegister& vd, 3156 const VRegister& vn, 3157 const VRegister& vm) 3158 3159 3160 ### SMAXV ### 3161 3162 Signed maximum across vector. 3163 3164 void smaxv(const VRegister& vd, 3165 const VRegister& vn) 3166 3167 3168 ### SMIN ### 3169 3170 Signed minimum. 3171 3172 void smin(const VRegister& vd, 3173 const VRegister& vn, 3174 const VRegister& vm) 3175 3176 3177 ### SMINP ### 3178 3179 Signed minimum pairwise. 3180 3181 void sminp(const VRegister& vd, 3182 const VRegister& vn, 3183 const VRegister& vm) 3184 3185 3186 ### SMINV ### 3187 3188 Signed minimum across vector. 3189 3190 void sminv(const VRegister& vd, 3191 const VRegister& vn) 3192 3193 3194 ### SMLAL ### 3195 3196 Signed long multiply-add by scalar element. 3197 3198 void smlal(const VRegister& vd, 3199 const VRegister& vn, 3200 const VRegister& vm, 3201 int vm_index) 3202 3203 3204 ### SMLAL ### 3205 3206 Signed long multiply-add. 3207 3208 void smlal(const VRegister& vd, 3209 const VRegister& vn, 3210 const VRegister& vm) 3211 3212 3213 ### SMLAL2 ### 3214 3215 Signed long multiply-add (second part). 3216 3217 void smlal2(const VRegister& vd, 3218 const VRegister& vn, 3219 const VRegister& vm) 3220 3221 3222 ### SMLAL2 ### 3223 3224 Signed long multiply-add by scalar element (second part). 3225 3226 void smlal2(const VRegister& vd, 3227 const VRegister& vn, 3228 const VRegister& vm, 3229 int vm_index) 3230 3231 3232 ### SMLSL ### 3233 3234 Signed long multiply-sub by scalar element. 3235 3236 void smlsl(const VRegister& vd, 3237 const VRegister& vn, 3238 const VRegister& vm, 3239 int vm_index) 3240 3241 3242 ### SMLSL ### 3243 3244 Signed long multiply-sub. 3245 3246 void smlsl(const VRegister& vd, 3247 const VRegister& vn, 3248 const VRegister& vm) 3249 3250 3251 ### SMLSL2 ### 3252 3253 Signed long multiply-sub (second part). 3254 3255 void smlsl2(const VRegister& vd, 3256 const VRegister& vn, 3257 const VRegister& vm) 3258 3259 3260 ### SMLSL2 ### 3261 3262 Signed long multiply-sub by scalar element (second part). 3263 3264 void smlsl2(const VRegister& vd, 3265 const VRegister& vn, 3266 const VRegister& vm, 3267 int vm_index) 3268 3269 3270 ### SMOV ### 3271 3272 Signed move vector element to general-purpose register. 3273 3274 void smov(const Register& rd, 3275 const VRegister& vn, 3276 int vn_index) 3277 3278 3279 ### SMULL ### 3280 3281 Signed long multiply by scalar element. 3282 3283 void smull(const VRegister& vd, 3284 const VRegister& vn, 3285 const VRegister& vm, 3286 int vm_index) 3287 3288 3289 ### SMULL ### 3290 3291 Signed long multiply. 3292 3293 void smull(const VRegister& vd, 3294 const VRegister& vn, 3295 const VRegister& vm) 3296 3297 3298 ### SMULL2 ### 3299 3300 Signed long multiply (second part). 3301 3302 void smull2(const VRegister& vd, 3303 const VRegister& vn, 3304 const VRegister& vm) 3305 3306 3307 ### SMULL2 ### 3308 3309 Signed long multiply by scalar element (second part). 3310 3311 void smull2(const VRegister& vd, 3312 const VRegister& vn, 3313 const VRegister& vm, 3314 int vm_index) 3315 3316 3317 ### SQABS ### 3318 3319 Signed saturating absolute value. 3320 3321 void sqabs(const VRegister& vd, 3322 const VRegister& vn) 3323 3324 3325 ### SQADD ### 3326 3327 Signed saturating add. 3328 3329 void sqadd(const VRegister& vd, 3330 const VRegister& vn, 3331 const VRegister& vm) 3332 3333 3334 ### SQDMLAL ### 3335 3336 Signed saturating doubling long multiply-add by element. 3337 3338 void sqdmlal(const VRegister& vd, 3339 const VRegister& vn, 3340 const VRegister& vm, 3341 int vm_index) 3342 3343 3344 ### SQDMLAL ### 3345 3346 Signed saturating doubling long multiply-add. 3347 3348 void sqdmlal(const VRegister& vd, 3349 const VRegister& vn, 3350 const VRegister& vm) 3351 3352 3353 ### SQDMLAL2 ### 3354 3355 Signed saturating doubling long multiply-add (second part). 3356 3357 void sqdmlal2(const VRegister& vd, 3358 const VRegister& vn, 3359 const VRegister& vm) 3360 3361 3362 ### SQDMLAL2 ### 3363 3364 Signed saturating doubling long multiply-add by element (second part). 3365 3366 void sqdmlal2(const VRegister& vd, 3367 const VRegister& vn, 3368 const VRegister& vm, 3369 int vm_index) 3370 3371 3372 ### SQDMLSL ### 3373 3374 Signed saturating doubling long multiply-sub by element. 3375 3376 void sqdmlsl(const VRegister& vd, 3377 const VRegister& vn, 3378 const VRegister& vm, 3379 int vm_index) 3380 3381 3382 ### SQDMLSL ### 3383 3384 Signed saturating doubling long multiply-subtract. 3385 3386 void sqdmlsl(const VRegister& vd, 3387 const VRegister& vn, 3388 const VRegister& vm) 3389 3390 3391 ### SQDMLSL2 ### 3392 3393 Signed saturating doubling long multiply-sub by element (second part). 3394 3395 void sqdmlsl2(const VRegister& vd, 3396 const VRegister& vn, 3397 const VRegister& vm, 3398 int vm_index) 3399 3400 3401 ### SQDMLSL2 ### 3402 3403 Signed saturating doubling long multiply-subtract (second part). 3404 3405 void sqdmlsl2(const VRegister& vd, 3406 const VRegister& vn, 3407 const VRegister& vm) 3408 3409 3410 ### SQDMULH ### 3411 3412 Signed saturating doubling multiply element returning high half. 3413 3414 void sqdmulh(const VRegister& vd, 3415 const VRegister& vn, 3416 const VRegister& vm, 3417 int vm_index) 3418 3419 3420 ### SQDMULH ### 3421 3422 Signed saturating doubling multiply returning high half. 3423 3424 void sqdmulh(const VRegister& vd, 3425 const VRegister& vn, 3426 const VRegister& vm) 3427 3428 3429 ### SQDMULL ### 3430 3431 Signed saturating double long multiply by element. 3432 3433 void sqdmull(const VRegister& vd, 3434 const VRegister& vn, 3435 const VRegister& vm, 3436 int vm_index) 3437 3438 3439 ### SQDMULL ### 3440 3441 Signed saturating doubling long multiply. 3442 3443 void sqdmull(const VRegister& vd, 3444 const VRegister& vn, 3445 const VRegister& vm) 3446 3447 3448 ### SQDMULL2 ### 3449 3450 Signed saturating double long multiply by element (second part). 3451 3452 void sqdmull2(const VRegister& vd, 3453 const VRegister& vn, 3454 const VRegister& vm, 3455 int vm_index) 3456 3457 3458 ### SQDMULL2 ### 3459 3460 Signed saturating doubling long multiply (second part). 3461 3462 void sqdmull2(const VRegister& vd, 3463 const VRegister& vn, 3464 const VRegister& vm) 3465 3466 3467 ### SQNEG ### 3468 3469 Signed saturating negate. 3470 3471 void sqneg(const VRegister& vd, 3472 const VRegister& vn) 3473 3474 3475 ### SQRDMULH ### 3476 3477 Signed saturating rounding doubling multiply element returning high half. 3478 3479 void sqrdmulh(const VRegister& vd, 3480 const VRegister& vn, 3481 const VRegister& vm, 3482 int vm_index) 3483 3484 3485 ### SQRDMULH ### 3486 3487 Signed saturating rounding doubling multiply returning high half. 3488 3489 void sqrdmulh(const VRegister& vd, 3490 const VRegister& vn, 3491 const VRegister& vm) 3492 3493 3494 ### SQRSHL ### 3495 3496 Signed saturating rounding shift left by register. 3497 3498 void sqrshl(const VRegister& vd, 3499 const VRegister& vn, 3500 const VRegister& vm) 3501 3502 3503 ### SQRSHRN ### 3504 3505 Signed saturating rounded shift right narrow by immediate. 3506 3507 void sqrshrn(const VRegister& vd, 3508 const VRegister& vn, 3509 int shift) 3510 3511 3512 ### SQRSHRN2 ### 3513 3514 Signed saturating rounded shift right narrow by immediate (second part). 3515 3516 void sqrshrn2(const VRegister& vd, 3517 const VRegister& vn, 3518 int shift) 3519 3520 3521 ### SQRSHRUN ### 3522 3523 Signed sat rounded shift right unsigned narrow by immediate. 3524 3525 void sqrshrun(const VRegister& vd, 3526 const VRegister& vn, 3527 int shift) 3528 3529 3530 ### SQRSHRUN2 ### 3531 3532 Signed sat rounded shift right unsigned narrow by immediate (second part). 3533 3534 void sqrshrun2(const VRegister& vd, 3535 const VRegister& vn, 3536 int shift) 3537 3538 3539 ### SQSHL ### 3540 3541 Signed saturating shift left by immediate. 3542 3543 void sqshl(const VRegister& vd, 3544 const VRegister& vn, 3545 int shift) 3546 3547 3548 ### SQSHL ### 3549 3550 Signed saturating shift left by register. 3551 3552 void sqshl(const VRegister& vd, 3553 const VRegister& vn, 3554 const VRegister& vm) 3555 3556 3557 ### SQSHLU ### 3558 3559 Signed saturating shift left unsigned by immediate. 3560 3561 void sqshlu(const VRegister& vd, 3562 const VRegister& vn, 3563 int shift) 3564 3565 3566 ### SQSHRN ### 3567 3568 Signed saturating shift right narrow by immediate. 3569 3570 void sqshrn(const VRegister& vd, 3571 const VRegister& vn, 3572 int shift) 3573 3574 3575 ### SQSHRN2 ### 3576 3577 Signed saturating shift right narrow by immediate (second part). 3578 3579 void sqshrn2(const VRegister& vd, 3580 const VRegister& vn, 3581 int shift) 3582 3583 3584 ### SQSHRUN ### 3585 3586 Signed saturating shift right unsigned narrow by immediate. 3587 3588 void sqshrun(const VRegister& vd, 3589 const VRegister& vn, 3590 int shift) 3591 3592 3593 ### SQSHRUN2 ### 3594 3595 Signed saturating shift right unsigned narrow by immediate (second part). 3596 3597 void sqshrun2(const VRegister& vd, 3598 const VRegister& vn, 3599 int shift) 3600 3601 3602 ### SQSUB ### 3603 3604 Signed saturating subtract. 3605 3606 void sqsub(const VRegister& vd, 3607 const VRegister& vn, 3608 const VRegister& vm) 3609 3610 3611 ### SQXTN ### 3612 3613 Signed saturating extract narrow. 3614 3615 void sqxtn(const VRegister& vd, 3616 const VRegister& vn) 3617 3618 3619 ### SQXTN2 ### 3620 3621 Signed saturating extract narrow (second part). 3622 3623 void sqxtn2(const VRegister& vd, 3624 const VRegister& vn) 3625 3626 3627 ### SQXTUN ### 3628 3629 Signed saturating extract unsigned narrow. 3630 3631 void sqxtun(const VRegister& vd, 3632 const VRegister& vn) 3633 3634 3635 ### SQXTUN2 ### 3636 3637 Signed saturating extract unsigned narrow (second part). 3638 3639 void sqxtun2(const VRegister& vd, 3640 const VRegister& vn) 3641 3642 3643 ### SRHADD ### 3644 3645 Signed rounding halving add. 3646 3647 void srhadd(const VRegister& vd, 3648 const VRegister& vn, 3649 const VRegister& vm) 3650 3651 3652 ### SRI ### 3653 3654 Shift right by immediate and insert. 3655 3656 void sri(const VRegister& vd, 3657 const VRegister& vn, 3658 int shift) 3659 3660 3661 ### SRSHL ### 3662 3663 Signed rounding shift left by register. 3664 3665 void srshl(const VRegister& vd, 3666 const VRegister& vn, 3667 const VRegister& vm) 3668 3669 3670 ### SRSHR ### 3671 3672 Signed rounding shift right by immediate. 3673 3674 void srshr(const VRegister& vd, 3675 const VRegister& vn, 3676 int shift) 3677 3678 3679 ### SRSRA ### 3680 3681 Signed rounding shift right by immediate and accumulate. 3682 3683 void srsra(const VRegister& vd, 3684 const VRegister& vn, 3685 int shift) 3686 3687 3688 ### SSHL ### 3689 3690 Signed shift left by register. 3691 3692 void sshl(const VRegister& vd, 3693 const VRegister& vn, 3694 const VRegister& vm) 3695 3696 3697 ### SSHLL ### 3698 3699 Signed shift left long by immediate. 3700 3701 void sshll(const VRegister& vd, 3702 const VRegister& vn, 3703 int shift) 3704 3705 3706 ### SSHLL2 ### 3707 3708 Signed shift left long by immediate (second part). 3709 3710 void sshll2(const VRegister& vd, 3711 const VRegister& vn, 3712 int shift) 3713 3714 3715 ### SSHR ### 3716 3717 Signed shift right by immediate. 3718 3719 void sshr(const VRegister& vd, 3720 const VRegister& vn, 3721 int shift) 3722 3723 3724 ### SSRA ### 3725 3726 Signed shift right by immediate and accumulate. 3727 3728 void ssra(const VRegister& vd, 3729 const VRegister& vn, 3730 int shift) 3731 3732 3733 ### SSUBL ### 3734 3735 Signed subtract long. 3736 3737 void ssubl(const VRegister& vd, 3738 const VRegister& vn, 3739 const VRegister& vm) 3740 3741 3742 ### SSUBL2 ### 3743 3744 Signed subtract long (second part). 3745 3746 void ssubl2(const VRegister& vd, 3747 const VRegister& vn, 3748 const VRegister& vm) 3749 3750 3751 ### SSUBW ### 3752 3753 Signed integer subtract wide. 3754 3755 void ssubw(const VRegister& vd, 3756 const VRegister& vn, 3757 const VRegister& vm) 3758 3759 3760 ### SSUBW2 ### 3761 3762 Signed integer subtract wide (second part). 3763 3764 void ssubw2(const VRegister& vd, 3765 const VRegister& vn, 3766 const VRegister& vm) 3767 3768 3769 ### ST1 ### 3770 3771 One-element single structure store from one lane. 3772 3773 void st1(const VRegister& vt, 3774 int lane, 3775 const MemOperand& src) 3776 3777 3778 ### ST1 ### 3779 3780 One-element structure store from four registers. 3781 3782 void st1(const VRegister& vt, 3783 const VRegister& vt2, 3784 const VRegister& vt3, 3785 const VRegister& vt4, 3786 const MemOperand& src) 3787 3788 3789 ### ST1 ### 3790 3791 One-element structure store from one register. 3792 3793 void st1(const VRegister& vt, 3794 const MemOperand& src) 3795 3796 3797 ### ST1 ### 3798 3799 One-element structure store from three registers. 3800 3801 void st1(const VRegister& vt, 3802 const VRegister& vt2, 3803 const VRegister& vt3, 3804 const MemOperand& src) 3805 3806 3807 ### ST1 ### 3808 3809 One-element structure store from two registers. 3810 3811 void st1(const VRegister& vt, 3812 const VRegister& vt2, 3813 const MemOperand& src) 3814 3815 3816 ### ST2 ### 3817 3818 Two-element single structure store from two lanes. 3819 3820 void st2(const VRegister& vt, 3821 const VRegister& vt2, 3822 int lane, 3823 const MemOperand& src) 3824 3825 3826 ### ST2 ### 3827 3828 Two-element structure store from two registers. 3829 3830 void st2(const VRegister& vt, 3831 const VRegister& vt2, 3832 const MemOperand& src) 3833 3834 3835 ### ST3 ### 3836 3837 Three-element single structure store from three lanes. 3838 3839 void st3(const VRegister& vt, 3840 const VRegister& vt2, 3841 const VRegister& vt3, 3842 int lane, 3843 const MemOperand& src) 3844 3845 3846 ### ST3 ### 3847 3848 Three-element structure store from three registers. 3849 3850 void st3(const VRegister& vt, 3851 const VRegister& vt2, 3852 const VRegister& vt3, 3853 const MemOperand& src) 3854 3855 3856 ### ST4 ### 3857 3858 Four-element single structure store from four lanes. 3859 3860 void st4(const VRegister& vt, 3861 const VRegister& vt2, 3862 const VRegister& vt3, 3863 const VRegister& vt4, 3864 int lane, 3865 const MemOperand& src) 3866 3867 3868 ### ST4 ### 3869 3870 Four-element structure store from four registers. 3871 3872 void st4(const VRegister& vt, 3873 const VRegister& vt2, 3874 const VRegister& vt3, 3875 const VRegister& vt4, 3876 const MemOperand& src) 3877 3878 3879 ### SUB ### 3880 3881 Subtract. 3882 3883 void sub(const VRegister& vd, 3884 const VRegister& vn, 3885 const VRegister& vm) 3886 3887 3888 ### SUBHN ### 3889 3890 Subtract narrow returning high half. 3891 3892 void subhn(const VRegister& vd, 3893 const VRegister& vn, 3894 const VRegister& vm) 3895 3896 3897 ### SUBHN2 ### 3898 3899 Subtract narrow returning high half (second part). 3900 3901 void subhn2(const VRegister& vd, 3902 const VRegister& vn, 3903 const VRegister& vm) 3904 3905 3906 ### SUQADD ### 3907 3908 Signed saturating accumulate of unsigned value. 3909 3910 void suqadd(const VRegister& vd, 3911 const VRegister& vn) 3912 3913 3914 ### SXTL ### 3915 3916 Signed extend long. 3917 3918 void sxtl(const VRegister& vd, 3919 const VRegister& vn) 3920 3921 3922 ### SXTL2 ### 3923 3924 Signed extend long (second part). 3925 3926 void sxtl2(const VRegister& vd, 3927 const VRegister& vn) 3928 3929 3930 ### TBL ### 3931 3932 Table lookup from four registers. 3933 3934 void tbl(const VRegister& vd, 3935 const VRegister& vn, 3936 const VRegister& vn2, 3937 const VRegister& vn3, 3938 const VRegister& vn4, 3939 const VRegister& vm) 3940 3941 3942 ### TBL ### 3943 3944 Table lookup from one register. 3945 3946 void tbl(const VRegister& vd, 3947 const VRegister& vn, 3948 const VRegister& vm) 3949 3950 3951 ### TBL ### 3952 3953 Table lookup from three registers. 3954 3955 void tbl(const VRegister& vd, 3956 const VRegister& vn, 3957 const VRegister& vn2, 3958 const VRegister& vn3, 3959 const VRegister& vm) 3960 3961 3962 ### TBL ### 3963 3964 Table lookup from two registers. 3965 3966 void tbl(const VRegister& vd, 3967 const VRegister& vn, 3968 const VRegister& vn2, 3969 const VRegister& vm) 3970 3971 3972 ### TBX ### 3973 3974 Table lookup extension from four registers. 3975 3976 void tbx(const VRegister& vd, 3977 const VRegister& vn, 3978 const VRegister& vn2, 3979 const VRegister& vn3, 3980 const VRegister& vn4, 3981 const VRegister& vm) 3982 3983 3984 ### TBX ### 3985 3986 Table lookup extension from one register. 3987 3988 void tbx(const VRegister& vd, 3989 const VRegister& vn, 3990 const VRegister& vm) 3991 3992 3993 ### TBX ### 3994 3995 Table lookup extension from three registers. 3996 3997 void tbx(const VRegister& vd, 3998 const VRegister& vn, 3999 const VRegister& vn2, 4000 const VRegister& vn3, 4001 const VRegister& vm) 4002 4003 4004 ### TBX ### 4005 4006 Table lookup extension from two registers. 4007 4008 void tbx(const VRegister& vd, 4009 const VRegister& vn, 4010 const VRegister& vn2, 4011 const VRegister& vm) 4012 4013 4014 ### TRN1 ### 4015 4016 Transpose vectors (primary). 4017 4018 void trn1(const VRegister& vd, 4019 const VRegister& vn, 4020 const VRegister& vm) 4021 4022 4023 ### TRN2 ### 4024 4025 Transpose vectors (secondary). 4026 4027 void trn2(const VRegister& vd, 4028 const VRegister& vn, 4029 const VRegister& vm) 4030 4031 4032 ### UABA ### 4033 4034 Unsigned absolute difference and accumulate. 4035 4036 void uaba(const VRegister& vd, 4037 const VRegister& vn, 4038 const VRegister& vm) 4039 4040 4041 ### UABAL ### 4042 4043 Unsigned absolute difference and accumulate long. 4044 4045 void uabal(const VRegister& vd, 4046 const VRegister& vn, 4047 const VRegister& vm) 4048 4049 4050 ### UABAL2 ### 4051 4052 Unsigned absolute difference and accumulate long (second part). 4053 4054 void uabal2(const VRegister& vd, 4055 const VRegister& vn, 4056 const VRegister& vm) 4057 4058 4059 ### UABD ### 4060 4061 Unsigned absolute difference. 4062 4063 void uabd(const VRegister& vd, 4064 const VRegister& vn, 4065 const VRegister& vm) 4066 4067 4068 ### UABDL ### 4069 4070 Unsigned absolute difference long. 4071 4072 void uabdl(const VRegister& vd, 4073 const VRegister& vn, 4074 const VRegister& vm) 4075 4076 4077 ### UABDL2 ### 4078 4079 Unsigned absolute difference long (second part). 4080 4081 void uabdl2(const VRegister& vd, 4082 const VRegister& vn, 4083 const VRegister& vm) 4084 4085 4086 ### UADALP ### 4087 4088 Unsigned pairwise long add and accumulate. 4089 4090 void uadalp(const VRegister& vd, 4091 const VRegister& vn) 4092 4093 4094 ### UADDL ### 4095 4096 Unsigned add long. 4097 4098 void uaddl(const VRegister& vd, 4099 const VRegister& vn, 4100 const VRegister& vm) 4101 4102 4103 ### UADDL2 ### 4104 4105 Unsigned add long (second part). 4106 4107 void uaddl2(const VRegister& vd, 4108 const VRegister& vn, 4109 const VRegister& vm) 4110 4111 4112 ### UADDLP ### 4113 4114 Unsigned pairwise long add. 4115 4116 void uaddlp(const VRegister& vd, 4117 const VRegister& vn) 4118 4119 4120 ### UADDLV ### 4121 4122 Unsigned add long across vector. 4123 4124 void uaddlv(const VRegister& vd, 4125 const VRegister& vn) 4126 4127 4128 ### UADDW ### 4129 4130 Unsigned add wide. 4131 4132 void uaddw(const VRegister& vd, 4133 const VRegister& vn, 4134 const VRegister& vm) 4135 4136 4137 ### UADDW2 ### 4138 4139 Unsigned add wide (second part). 4140 4141 void uaddw2(const VRegister& vd, 4142 const VRegister& vn, 4143 const VRegister& vm) 4144 4145 4146 ### UCVTF ### 4147 4148 Convert unsigned integer or fixed point to FP. 4149 4150 void ucvtf(const VRegister& fd, const Register& rn, int fbits = 0) 4151 4152 4153 ### UCVTF ### 4154 4155 Convert unsigned integer or fixed-point to FP. 4156 4157 void ucvtf(const VRegister& fd, const VRegister& vn, int fbits = 0) 4158 4159 4160 ### UHADD ### 4161 4162 Unsigned halving add. 4163 4164 void uhadd(const VRegister& vd, 4165 const VRegister& vn, 4166 const VRegister& vm) 4167 4168 4169 ### UHSUB ### 4170 4171 Unsigned halving sub. 4172 4173 void uhsub(const VRegister& vd, 4174 const VRegister& vn, 4175 const VRegister& vm) 4176 4177 4178 ### UMAX ### 4179 4180 Unsigned maximum. 4181 4182 void umax(const VRegister& vd, 4183 const VRegister& vn, 4184 const VRegister& vm) 4185 4186 4187 ### UMAXP ### 4188 4189 Unsigned pairwise maximum. 4190 4191 void umaxp(const VRegister& vd, 4192 const VRegister& vn, 4193 const VRegister& vm) 4194 4195 4196 ### UMAXV ### 4197 4198 Unsigned maximum across vector. 4199 4200 void umaxv(const VRegister& vd, 4201 const VRegister& vn) 4202 4203 4204 ### UMIN ### 4205 4206 Unsigned minimum. 4207 4208 void umin(const VRegister& vd, 4209 const VRegister& vn, 4210 const VRegister& vm) 4211 4212 4213 ### UMINP ### 4214 4215 Unsigned pairwise minimum. 4216 4217 void uminp(const VRegister& vd, 4218 const VRegister& vn, 4219 const VRegister& vm) 4220 4221 4222 ### UMINV ### 4223 4224 Unsigned minimum across vector. 4225 4226 void uminv(const VRegister& vd, 4227 const VRegister& vn) 4228 4229 4230 ### UMLAL ### 4231 4232 Unsigned long multiply-add by scalar element. 4233 4234 void umlal(const VRegister& vd, 4235 const VRegister& vn, 4236 const VRegister& vm, 4237 int vm_index) 4238 4239 4240 ### UMLAL ### 4241 4242 Unsigned long multiply-add. 4243 4244 void umlal(const VRegister& vd, 4245 const VRegister& vn, 4246 const VRegister& vm) 4247 4248 4249 ### UMLAL2 ### 4250 4251 Unsigned long multiply-add (second part). 4252 4253 void umlal2(const VRegister& vd, 4254 const VRegister& vn, 4255 const VRegister& vm) 4256 4257 4258 ### UMLAL2 ### 4259 4260 Unsigned long multiply-add by scalar element (second part). 4261 4262 void umlal2(const VRegister& vd, 4263 const VRegister& vn, 4264 const VRegister& vm, 4265 int vm_index) 4266 4267 4268 ### UMLSL ### 4269 4270 Unsigned long multiply-sub by scalar element. 4271 4272 void umlsl(const VRegister& vd, 4273 const VRegister& vn, 4274 const VRegister& vm, 4275 int vm_index) 4276 4277 4278 ### UMLSL ### 4279 4280 Unsigned long multiply-sub. 4281 4282 void umlsl(const VRegister& vd, 4283 const VRegister& vn, 4284 const VRegister& vm) 4285 4286 4287 ### UMLSL2 ### 4288 4289 Unsigned long multiply-sub (second part). 4290 4291 void umlsl2(const VRegister& vd, 4292 const VRegister& vn, 4293 const VRegister& vm) 4294 4295 4296 ### UMLSL2 ### 4297 4298 Unsigned long multiply-sub by scalar element (second part). 4299 4300 void umlsl2(const VRegister& vd, 4301 const VRegister& vn, 4302 const VRegister& vm, 4303 int vm_index) 4304 4305 4306 ### UMOV ### 4307 4308 Unsigned move vector element to general-purpose register. 4309 4310 void umov(const Register& rd, 4311 const VRegister& vn, 4312 int vn_index) 4313 4314 4315 ### UMULL ### 4316 4317 Unsigned long multiply by scalar element. 4318 4319 void umull(const VRegister& vd, 4320 const VRegister& vn, 4321 const VRegister& vm, 4322 int vm_index) 4323 4324 4325 ### UMULL ### 4326 4327 Unsigned long multiply long. 4328 4329 void umull(const VRegister& vd, 4330 const VRegister& vn, 4331 const VRegister& vm) 4332 4333 4334 ### UMULL2 ### 4335 4336 Unsigned long multiply (second part). 4337 4338 void umull2(const VRegister& vd, 4339 const VRegister& vn, 4340 const VRegister& vm) 4341 4342 4343 ### UMULL2 ### 4344 4345 Unsigned long multiply by scalar element (second part). 4346 4347 void umull2(const VRegister& vd, 4348 const VRegister& vn, 4349 const VRegister& vm, 4350 int vm_index) 4351 4352 4353 ### UQADD ### 4354 4355 Unsigned saturating add. 4356 4357 void uqadd(const VRegister& vd, 4358 const VRegister& vn, 4359 const VRegister& vm) 4360 4361 4362 ### UQRSHL ### 4363 4364 Unsigned saturating rounding shift left by register. 4365 4366 void uqrshl(const VRegister& vd, 4367 const VRegister& vn, 4368 const VRegister& vm) 4369 4370 4371 ### UQRSHRN ### 4372 4373 Unsigned saturating rounding shift right narrow by immediate. 4374 4375 void uqrshrn(const VRegister& vd, 4376 const VRegister& vn, 4377 int shift) 4378 4379 4380 ### UQRSHRN2 ### 4381 4382 Unsigned saturating rounding shift right narrow by immediate (second part). 4383 4384 void uqrshrn2(const VRegister& vd, 4385 const VRegister& vn, 4386 int shift) 4387 4388 4389 ### UQSHL ### 4390 4391 Unsigned saturating shift left by immediate. 4392 4393 void uqshl(const VRegister& vd, 4394 const VRegister& vn, 4395 int shift) 4396 4397 4398 ### UQSHL ### 4399 4400 Unsigned saturating shift left by register. 4401 4402 void uqshl(const VRegister& vd, 4403 const VRegister& vn, 4404 const VRegister& vm) 4405 4406 4407 ### UQSHRN ### 4408 4409 Unsigned saturating shift right narrow by immediate. 4410 4411 void uqshrn(const VRegister& vd, 4412 const VRegister& vn, 4413 int shift) 4414 4415 4416 ### UQSHRN2 ### 4417 4418 Unsigned saturating shift right narrow by immediate (second part). 4419 4420 void uqshrn2(const VRegister& vd, 4421 const VRegister& vn, 4422 int shift) 4423 4424 4425 ### UQSUB ### 4426 4427 Unsigned saturating subtract. 4428 4429 void uqsub(const VRegister& vd, 4430 const VRegister& vn, 4431 const VRegister& vm) 4432 4433 4434 ### UQXTN ### 4435 4436 Unsigned saturating extract narrow. 4437 4438 void uqxtn(const VRegister& vd, 4439 const VRegister& vn) 4440 4441 4442 ### UQXTN2 ### 4443 4444 Unsigned saturating extract narrow (second part). 4445 4446 void uqxtn2(const VRegister& vd, 4447 const VRegister& vn) 4448 4449 4450 ### URECPE ### 4451 4452 Unsigned reciprocal estimate. 4453 4454 void urecpe(const VRegister& vd, 4455 const VRegister& vn) 4456 4457 4458 ### URHADD ### 4459 4460 Unsigned rounding halving add. 4461 4462 void urhadd(const VRegister& vd, 4463 const VRegister& vn, 4464 const VRegister& vm) 4465 4466 4467 ### URSHL ### 4468 4469 Unsigned rounding shift left by register. 4470 4471 void urshl(const VRegister& vd, 4472 const VRegister& vn, 4473 const VRegister& vm) 4474 4475 4476 ### URSHR ### 4477 4478 Unsigned rounding shift right by immediate. 4479 4480 void urshr(const VRegister& vd, 4481 const VRegister& vn, 4482 int shift) 4483 4484 4485 ### URSQRTE ### 4486 4487 Unsigned reciprocal square root estimate. 4488 4489 void ursqrte(const VRegister& vd, 4490 const VRegister& vn) 4491 4492 4493 ### URSRA ### 4494 4495 Unsigned rounding shift right by immediate and accumulate. 4496 4497 void ursra(const VRegister& vd, 4498 const VRegister& vn, 4499 int shift) 4500 4501 4502 ### USHL ### 4503 4504 Unsigned shift left by register. 4505 4506 void ushl(const VRegister& vd, 4507 const VRegister& vn, 4508 const VRegister& vm) 4509 4510 4511 ### USHLL ### 4512 4513 Unsigned shift left long by immediate. 4514 4515 void ushll(const VRegister& vd, 4516 const VRegister& vn, 4517 int shift) 4518 4519 4520 ### USHLL2 ### 4521 4522 Unsigned shift left long by immediate (second part). 4523 4524 void ushll2(const VRegister& vd, 4525 const VRegister& vn, 4526 int shift) 4527 4528 4529 ### USHR ### 4530 4531 Unsigned shift right by immediate. 4532 4533 void ushr(const VRegister& vd, 4534 const VRegister& vn, 4535 int shift) 4536 4537 4538 ### USQADD ### 4539 4540 Unsigned saturating accumulate of signed value. 4541 4542 void usqadd(const VRegister& vd, 4543 const VRegister& vn) 4544 4545 4546 ### USRA ### 4547 4548 Unsigned shift right by immediate and accumulate. 4549 4550 void usra(const VRegister& vd, 4551 const VRegister& vn, 4552 int shift) 4553 4554 4555 ### USUBL ### 4556 4557 Unsigned subtract long. 4558 4559 void usubl(const VRegister& vd, 4560 const VRegister& vn, 4561 const VRegister& vm) 4562 4563 4564 ### USUBL2 ### 4565 4566 Unsigned subtract long (second part). 4567 4568 void usubl2(const VRegister& vd, 4569 const VRegister& vn, 4570 const VRegister& vm) 4571 4572 4573 ### USUBW ### 4574 4575 Unsigned subtract wide. 4576 4577 void usubw(const VRegister& vd, 4578 const VRegister& vn, 4579 const VRegister& vm) 4580 4581 4582 ### USUBW2 ### 4583 4584 Unsigned subtract wide (second part). 4585 4586 void usubw2(const VRegister& vd, 4587 const VRegister& vn, 4588 const VRegister& vm) 4589 4590 4591 ### UXTL ### 4592 4593 Unsigned extend long. 4594 4595 void uxtl(const VRegister& vd, 4596 const VRegister& vn) 4597 4598 4599 ### UXTL2 ### 4600 4601 Unsigned extend long (second part). 4602 4603 void uxtl2(const VRegister& vd, 4604 const VRegister& vn) 4605 4606 4607 ### UZP1 ### 4608 4609 Unzip vectors (primary). 4610 4611 void uzp1(const VRegister& vd, 4612 const VRegister& vn, 4613 const VRegister& vm) 4614 4615 4616 ### UZP2 ### 4617 4618 Unzip vectors (secondary). 4619 4620 void uzp2(const VRegister& vd, 4621 const VRegister& vn, 4622 const VRegister& vm) 4623 4624 4625 ### XTN ### 4626 4627 Extract narrow. 4628 4629 void xtn(const VRegister& vd, 4630 const VRegister& vn) 4631 4632 4633 ### XTN2 ### 4634 4635 Extract narrow (second part). 4636 4637 void xtn2(const VRegister& vd, 4638 const VRegister& vn) 4639 4640 4641 ### ZIP1 ### 4642 4643 Zip vectors (primary). 4644 4645 void zip1(const VRegister& vd, 4646 const VRegister& vn, 4647 const VRegister& vm) 4648 4649 4650 ### ZIP2 ### 4651 4652 Zip vectors (secondary). 4653 4654 void zip2(const VRegister& vd, 4655 const VRegister& vn, 4656 const VRegister& vm) 4657 4658 4659 4660 Additional or pseudo instructions 4661 --------------------------------- 4662 4663 ### BIND ### 4664 4665 Bind a label to the current PC. 4666 4667 void bind(Label* label) 4668 4669 4670 ### DC32 ### 4671 4672 Emit 32 bits of data into the instruction stream. 4673 4674 void dc32(uint32_t data) 4675 4676 4677 ### DC64 ### 4678 4679 Emit 64 bits of data into the instruction stream. 4680 4681 void dc64(uint64_t data) 4682 4683 4684 ### DCI ### 4685 4686 Emit raw instructions into the instruction stream. 4687 4688 void dci(Instr raw_inst) 4689 4690 4691 ### PLACE ### 4692 4693 Place a literal at the current PC. 4694 4695 void place(RawLiteral* literal) 4696 4697 4698 4699