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 ### and ### 63 64 Bitwise and (A & B). 65 66 void and_(const Register& rd, 67 const Register& rn, 68 const Operand& operand) 69 70 71 ### ands ### 72 73 Bitwise and (A & B) and update status flags. 74 75 void ands(const Register& rd, 76 const Register& rn, 77 const Operand& operand) 78 79 80 ### asr ### 81 82 Arithmetic shift right. 83 84 inline void asr(const Register& rd, const Register& rn, unsigned shift) 85 86 87 ### asrv ### 88 89 Arithmetic shift right by variable. 90 91 void asrv(const Register& rd, const Register& rn, const Register& rm) 92 93 94 ### b ### 95 96 Conditional branch to PC offset. 97 98 void b(int imm19, Condition cond) 99 100 101 ### b ### 102 103 Conditional branch to label. 104 105 void b(Label* label, Condition cond) 106 107 108 ### b ### 109 110 Unconditional branch to PC offset. 111 112 void b(int imm26) 113 114 115 ### b ### 116 117 Unconditional branch to label. 118 119 void b(Label* label) 120 121 122 ### bfi ### 123 124 Bitfield insert. 125 126 inline void bfi(const Register& rd, 127 const Register& rn, 128 unsigned lsb, 129 unsigned width) 130 131 132 ### bfm ### 133 134 Bitfield move. 135 136 void bfm(const Register& rd, 137 const Register& rn, 138 unsigned immr, 139 unsigned imms) 140 141 142 ### bfxil ### 143 144 Bitfield extract and insert low. 145 146 inline void bfxil(const Register& rd, 147 const Register& rn, 148 unsigned lsb, 149 unsigned width) 150 151 152 ### bic ### 153 154 Bit clear (A & ~B). 155 156 void bic(const Register& rd, 157 const Register& rn, 158 const Operand& operand) 159 160 161 ### bics ### 162 163 Bit clear (A & ~B) and update status flags. 164 165 void bics(const Register& rd, 166 const Register& rn, 167 const Operand& operand) 168 169 170 ### bl ### 171 172 Branch with link to PC offset. 173 174 void bl(int imm26) 175 176 177 ### bl ### 178 179 Branch with link to label. 180 181 void bl(Label* label) 182 183 184 ### blr ### 185 186 Branch with link to register. 187 188 void blr(const Register& xn) 189 190 191 ### br ### 192 193 Branch to register. 194 195 void br(const Register& xn) 196 197 198 ### brk ### 199 200 Monitor debug-mode breakpoint. 201 202 void brk(int code) 203 204 205 ### cbnz ### 206 207 Compare and branch to PC offset if not zero. 208 209 void cbnz(const Register& rt, int imm19) 210 211 212 ### cbnz ### 213 214 Compare and branch to label if not zero. 215 216 void cbnz(const Register& rt, Label* label) 217 218 219 ### cbz ### 220 221 Compare and branch to PC offset if zero. 222 223 void cbz(const Register& rt, int imm19) 224 225 226 ### cbz ### 227 228 Compare and branch to label if zero. 229 230 void cbz(const Register& rt, Label* label) 231 232 233 ### ccmn ### 234 235 Conditional compare negative. 236 237 void ccmn(const Register& rn, 238 const Operand& operand, 239 StatusFlags nzcv, 240 Condition cond) 241 242 243 ### ccmp ### 244 245 Conditional compare. 246 247 void ccmp(const Register& rn, 248 const Operand& operand, 249 StatusFlags nzcv, 250 Condition cond) 251 252 253 ### cinc ### 254 255 Conditional increment: rd = cond ? rn + 1 : rn. 256 257 void cinc(const Register& rd, const Register& rn, Condition cond) 258 259 260 ### cinv ### 261 262 Conditional invert: rd = cond ? ~rn : rn. 263 264 void cinv(const Register& rd, const Register& rn, Condition cond) 265 266 267 ### cls ### 268 269 Count leading sign bits. 270 271 void cls(const Register& rd, const Register& rn) 272 273 274 ### clz ### 275 276 Count leading zeroes. 277 278 void clz(const Register& rd, const Register& rn) 279 280 281 ### cmn ### 282 283 Compare negative. 284 285 void cmn(const Register& rn, const Operand& operand) 286 287 288 ### cmp ### 289 290 Compare. 291 292 void cmp(const Register& rn, const Operand& operand) 293 294 295 ### cneg ### 296 297 Conditional negate: rd = cond ? -rn : rn. 298 299 void cneg(const Register& rd, const Register& rn, Condition cond) 300 301 302 ### csel ### 303 304 Conditional select: rd = cond ? rn : rm. 305 306 void csel(const Register& rd, 307 const Register& rn, 308 const Register& rm, 309 Condition cond) 310 311 312 ### cset ### 313 314 Conditional set: rd = cond ? 1 : 0. 315 316 void cset(const Register& rd, Condition cond) 317 318 319 ### csetm ### 320 321 Conditional set mask: rd = cond ? -1 : 0. 322 323 void csetm(const Register& rd, Condition cond) 324 325 326 ### csinc ### 327 328 Conditional select increment: rd = cond ? rn : rm + 1. 329 330 void csinc(const Register& rd, 331 const Register& rn, 332 const Register& rm, 333 Condition cond) 334 335 336 ### csinv ### 337 338 Conditional select inversion: rd = cond ? rn : ~rm. 339 340 void csinv(const Register& rd, 341 const Register& rn, 342 const Register& rm, 343 Condition cond) 344 345 346 ### csneg ### 347 348 Conditional select negation: rd = cond ? rn : -rm. 349 350 void csneg(const Register& rd, 351 const Register& rn, 352 const Register& rm, 353 Condition cond) 354 355 356 ### dmb ### 357 358 Data memory barrier. 359 360 void dmb(BarrierDomain domain, BarrierType type) 361 362 363 ### dsb ### 364 365 Data synchronization barrier. 366 367 void dsb(BarrierDomain domain, BarrierType type) 368 369 370 ### eon ### 371 372 Bitwise enor/xnor (A ^ ~B). 373 374 void eon(const Register& rd, const Register& rn, const Operand& operand) 375 376 377 ### eor ### 378 379 Bitwise eor/xor (A ^ B). 380 381 void eor(const Register& rd, const Register& rn, const Operand& operand) 382 383 384 ### extr ### 385 386 Extract. 387 388 void extr(const Register& rd, 389 const Register& rn, 390 const Register& rm, 391 unsigned lsb) 392 393 394 ### hint ### 395 396 System hint. 397 398 void hint(SystemHint code) 399 400 401 ### hlt ### 402 403 Halting debug-mode breakpoint. 404 405 void hlt(int code) 406 407 408 ### isb ### 409 410 Instruction synchronization barrier. 411 412 void isb() 413 414 415 ### ldnp ### 416 417 Load integer or FP register pair, non-temporal. 418 419 void ldnp(const CPURegister& rt, const CPURegister& rt2, 420 const MemOperand& src) 421 422 423 ### ldp ### 424 425 Load integer or FP register pair. 426 427 void ldp(const CPURegister& rt, const CPURegister& rt2, 428 const MemOperand& src) 429 430 431 ### ldpsw ### 432 433 Load word pair with sign extension. 434 435 void ldpsw(const Register& rt, const Register& rt2, const MemOperand& src) 436 437 438 ### ldr ### 439 440 Load double precision floating point literal to FP register. 441 442 void ldr(const FPRegister& ft, double imm) 443 444 445 ### ldr ### 446 447 Load integer or FP register. 448 449 void ldr(const CPURegister& rt, const MemOperand& src) 450 451 452 ### ldr ### 453 454 Load literal to register. 455 456 void ldr(const Register& rt, uint64_t imm) 457 458 459 ### ldr ### 460 461 Load single precision floating point literal to FP register. 462 463 void ldr(const FPRegister& ft, float imm) 464 465 466 ### ldrb ### 467 468 Load byte. 469 470 void ldrb(const Register& rt, const MemOperand& src) 471 472 473 ### ldrh ### 474 475 Load half-word. 476 477 void ldrh(const Register& rt, const MemOperand& src) 478 479 480 ### ldrsb ### 481 482 Load byte with sign extension. 483 484 void ldrsb(const Register& rt, const MemOperand& src) 485 486 487 ### ldrsh ### 488 489 Load half-word with sign extension. 490 491 void ldrsh(const Register& rt, const MemOperand& src) 492 493 494 ### ldrsw ### 495 496 Load word with sign extension. 497 498 void ldrsw(const Register& rt, const MemOperand& src) 499 500 501 ### lsl ### 502 503 Logical shift left. 504 505 inline void lsl(const Register& rd, const Register& rn, unsigned shift) 506 507 508 ### lslv ### 509 510 Logical shift left by variable. 511 512 void lslv(const Register& rd, const Register& rn, const Register& rm) 513 514 515 ### lsr ### 516 517 Logical shift right. 518 519 inline void lsr(const Register& rd, const Register& rn, unsigned shift) 520 521 522 ### lsrv ### 523 524 Logical shift right by variable. 525 526 void lsrv(const Register& rd, const Register& rn, const Register& rm) 527 528 529 ### madd ### 530 531 Multiply and accumulate. 532 533 void madd(const Register& rd, 534 const Register& rn, 535 const Register& rm, 536 const Register& ra) 537 538 539 ### mneg ### 540 541 Negated multiply. 542 543 void mneg(const Register& rd, const Register& rn, const Register& rm) 544 545 546 ### mov ### 547 548 Move register to register. 549 550 void mov(const Register& rd, const Register& rn) 551 552 553 ### movk ### 554 555 Move immediate and keep. 556 557 void movk(const Register& rd, uint64_t imm, int shift = -1) 558 559 560 ### movn ### 561 562 Move inverted immediate. 563 564 void movn(const Register& rd, uint64_t imm, int shift = -1) 565 566 567 ### movz ### 568 569 Move immediate. 570 571 void movz(const Register& rd, uint64_t imm, int shift = -1) 572 573 574 ### mrs ### 575 576 Move to register from system register. 577 578 void mrs(const Register& rt, SystemRegister sysreg) 579 580 581 ### msr ### 582 583 Move from register to system register. 584 585 void msr(SystemRegister sysreg, const Register& rt) 586 587 588 ### msub ### 589 590 Multiply and subtract. 591 592 void msub(const Register& rd, 593 const Register& rn, 594 const Register& rm, 595 const Register& ra) 596 597 598 ### mul ### 599 600 Multiply. 601 602 void mul(const Register& rd, const Register& rn, const Register& rm) 603 604 605 ### mvn ### 606 607 Move inverted operand to register. 608 609 void mvn(const Register& rd, const Operand& operand) 610 611 612 ### neg ### 613 614 Negate. 615 616 void neg(const Register& rd, 617 const Operand& operand) 618 619 620 ### negs ### 621 622 Negate and update status flags. 623 624 void negs(const Register& rd, 625 const Operand& operand) 626 627 628 ### ngc ### 629 630 Negate with carry bit. 631 632 void ngc(const Register& rd, 633 const Operand& operand) 634 635 636 ### ngcs ### 637 638 Negate with carry bit and update status flags. 639 640 void ngcs(const Register& rd, 641 const Operand& operand) 642 643 644 ### nop ### 645 646 No-op. 647 648 void nop() 649 650 651 ### orn ### 652 653 Bitwise nor (A | ~B). 654 655 void orn(const Register& rd, const Register& rn, const Operand& operand) 656 657 658 ### orr ### 659 660 Bitwise or (A | B). 661 662 void orr(const Register& rd, const Register& rn, const Operand& operand) 663 664 665 ### rbit ### 666 667 Bit reverse. 668 669 void rbit(const Register& rd, const Register& rn) 670 671 672 ### ret ### 673 674 Branch to register with return hint. 675 676 void ret(const Register& xn = lr) 677 678 679 ### rev ### 680 681 Reverse bytes. 682 683 void rev(const Register& rd, const Register& rn) 684 685 686 ### rev16 ### 687 688 Reverse bytes in 16-bit half words. 689 690 void rev16(const Register& rd, const Register& rn) 691 692 693 ### rev32 ### 694 695 Reverse bytes in 32-bit words. 696 697 void rev32(const Register& rd, const Register& rn) 698 699 700 ### ror ### 701 702 Rotate right. 703 704 inline void ror(const Register& rd, const Register& rs, unsigned shift) 705 706 707 ### rorv ### 708 709 Rotate right by variable. 710 711 void rorv(const Register& rd, const Register& rn, const Register& rm) 712 713 714 ### sbc ### 715 716 Subtract with carry bit. 717 718 void sbc(const Register& rd, 719 const Register& rn, 720 const Operand& operand) 721 722 723 ### sbcs ### 724 725 Subtract with carry bit and update status flags. 726 727 void sbcs(const Register& rd, 728 const Register& rn, 729 const Operand& operand) 730 731 732 ### sbfiz ### 733 734 Signed bitfield insert with zero at right. 735 736 inline void sbfiz(const Register& rd, 737 const Register& rn, 738 unsigned lsb, 739 unsigned width) 740 741 742 ### sbfm ### 743 744 Signed bitfield move. 745 746 void sbfm(const Register& rd, 747 const Register& rn, 748 unsigned immr, 749 unsigned imms) 750 751 752 ### sbfx ### 753 754 Signed bitfield extract. 755 756 inline void sbfx(const Register& rd, 757 const Register& rn, 758 unsigned lsb, 759 unsigned width) 760 761 762 ### scvtf ### 763 764 Convert signed integer or fixed point to FP. 765 766 void scvtf(const FPRegister& fd, const Register& rn, unsigned fbits = 0) 767 768 769 ### sdiv ### 770 771 Signed integer divide. 772 773 void sdiv(const Register& rd, const Register& rn, const Register& rm) 774 775 776 ### smaddl ### 777 778 Signed long multiply and accumulate: 32 x 32 + 64 -> 64-bit. 779 780 void smaddl(const Register& rd, 781 const Register& rn, 782 const Register& rm, 783 const Register& ra) 784 785 786 ### smsubl ### 787 788 Signed long multiply and subtract: 64 - (32 x 32) -> 64-bit. 789 790 void smsubl(const Register& rd, 791 const Register& rn, 792 const Register& rm, 793 const Register& ra) 794 795 796 ### smulh ### 797 798 Signed multiply high: 64 x 64 -> 64-bit <127:64>. 799 800 void smulh(const Register& xd, const Register& xn, const Register& xm) 801 802 803 ### smull ### 804 805 Signed long multiply: 32 x 32 -> 64-bit. 806 807 void smull(const Register& rd, const Register& rn, const Register& rm) 808 809 810 ### stnp ### 811 812 Store integer or FP register pair, non-temporal. 813 814 void stnp(const CPURegister& rt, const CPURegister& rt2, 815 const MemOperand& dst) 816 817 818 ### stp ### 819 820 Store integer or FP register pair. 821 822 void stp(const CPURegister& rt, const CPURegister& rt2, 823 const MemOperand& dst) 824 825 826 ### str ### 827 828 Store integer or FP register. 829 830 void str(const CPURegister& rt, const MemOperand& dst) 831 832 833 ### strb ### 834 835 Store byte. 836 837 void strb(const Register& rt, const MemOperand& dst) 838 839 840 ### strh ### 841 842 Store half-word. 843 844 void strh(const Register& rt, const MemOperand& dst) 845 846 847 ### sub ### 848 849 Subtract. 850 851 void sub(const Register& rd, 852 const Register& rn, 853 const Operand& operand) 854 855 856 ### subs ### 857 858 Subtract and update status flags. 859 860 void subs(const Register& rd, 861 const Register& rn, 862 const Operand& operand) 863 864 865 ### sxtb ### 866 867 Signed extend byte. 868 869 inline void sxtb(const Register& rd, const Register& rn) 870 871 872 ### sxth ### 873 874 Signed extend halfword. 875 876 inline void sxth(const Register& rd, const Register& rn) 877 878 879 ### sxtw ### 880 881 Signed extend word. 882 883 inline void sxtw(const Register& rd, const Register& rn) 884 885 886 ### tbnz ### 887 888 Test bit and branch to PC offset if not zero. 889 890 void tbnz(const Register& rt, unsigned bit_pos, int imm14) 891 892 893 ### tbnz ### 894 895 Test bit and branch to label if not zero. 896 897 void tbnz(const Register& rt, unsigned bit_pos, Label* label) 898 899 900 ### tbz ### 901 902 Test bit and branch to PC offset if zero. 903 904 void tbz(const Register& rt, unsigned bit_pos, int imm14) 905 906 907 ### tbz ### 908 909 Test bit and branch to label if zero. 910 911 void tbz(const Register& rt, unsigned bit_pos, Label* label) 912 913 914 ### tst ### 915 916 Bit test and set flags. 917 918 void tst(const Register& rn, const Operand& operand) 919 920 921 ### ubfiz ### 922 923 Unsigned bitfield insert with zero at right. 924 925 inline void ubfiz(const Register& rd, 926 const Register& rn, 927 unsigned lsb, 928 unsigned width) 929 930 931 ### ubfm ### 932 933 Unsigned bitfield move. 934 935 void ubfm(const Register& rd, 936 const Register& rn, 937 unsigned immr, 938 unsigned imms) 939 940 941 ### ubfx ### 942 943 Unsigned bitfield extract. 944 945 inline void ubfx(const Register& rd, 946 const Register& rn, 947 unsigned lsb, 948 unsigned width) 949 950 951 ### ucvtf ### 952 953 Convert unsigned integer or fixed point to FP. 954 955 void ucvtf(const FPRegister& fd, const Register& rn, unsigned fbits = 0) 956 957 958 ### udiv ### 959 960 Unsigned integer divide. 961 962 void udiv(const Register& rd, const Register& rn, const Register& rm) 963 964 965 ### umaddl ### 966 967 Unsigned long multiply and accumulate: 32 x 32 + 64 -> 64-bit. 968 969 void umaddl(const Register& rd, 970 const Register& rn, 971 const Register& rm, 972 const Register& ra) 973 974 975 ### umsubl ### 976 977 Unsigned long multiply and subtract: 64 - (32 x 32) -> 64-bit. 978 979 void umsubl(const Register& rd, 980 const Register& rn, 981 const Register& rm, 982 const Register& ra) 983 984 985 ### uxtb ### 986 987 Unsigned extend byte. 988 989 inline void uxtb(const Register& rd, const Register& rn) 990 991 992 ### uxth ### 993 994 Unsigned extend halfword. 995 996 inline void uxth(const Register& rd, const Register& rn) 997 998 999 ### uxtw ### 1000 1001 Unsigned extend word. 1002 1003 inline void uxtw(const Register& rd, const Register& rn) 1004 1005 1006 1007 AArch64 floating point instructions 1008 ----------------------------------- 1009 1010 ### fabs ### 1011 1012 FP absolute. 1013 1014 void fabs(const FPRegister& fd, const FPRegister& fn) 1015 1016 1017 ### fadd ### 1018 1019 FP add. 1020 1021 void fadd(const FPRegister& fd, const FPRegister& fn, const FPRegister& fm) 1022 1023 1024 ### fccmp ### 1025 1026 FP conditional compare. 1027 1028 void fccmp(const FPRegister& fn, 1029 const FPRegister& fm, 1030 StatusFlags nzcv, 1031 Condition cond) 1032 1033 1034 ### fcmp ### 1035 1036 FP compare immediate. 1037 1038 void fcmp(const FPRegister& fn, double value) 1039 1040 1041 ### fcmp ### 1042 1043 FP compare registers. 1044 1045 void fcmp(const FPRegister& fn, const FPRegister& fm) 1046 1047 1048 ### fcsel ### 1049 1050 FP conditional select. 1051 1052 void fcsel(const FPRegister& fd, 1053 const FPRegister& fn, 1054 const FPRegister& fm, 1055 Condition cond) 1056 1057 1058 ### fcvt ### 1059 1060 FP convert between single and double precision. 1061 1062 void fcvt(const FPRegister& fd, const FPRegister& fn) 1063 1064 1065 ### fcvtas ### 1066 1067 Convert FP to signed integer (nearest with ties to away). 1068 1069 void fcvtas(const Register& rd, const FPRegister& fn) 1070 1071 1072 ### fcvtau ### 1073 1074 Convert FP to unsigned integer (nearest with ties to away). 1075 1076 void fcvtau(const Register& rd, const FPRegister& fn) 1077 1078 1079 ### fcvtms ### 1080 1081 Convert FP to signed integer (round towards -infinity). 1082 1083 void fcvtms(const Register& rd, const FPRegister& fn) 1084 1085 1086 ### fcvtmu ### 1087 1088 Convert FP to unsigned integer (round towards -infinity). 1089 1090 void fcvtmu(const Register& rd, const FPRegister& fn) 1091 1092 1093 ### fcvtns ### 1094 1095 Convert FP to signed integer (nearest with ties to even). 1096 1097 void fcvtns(const Register& rd, const FPRegister& fn) 1098 1099 1100 ### fcvtnu ### 1101 1102 Convert FP to unsigned integer (nearest with ties to even). 1103 1104 void fcvtnu(const Register& rd, const FPRegister& fn) 1105 1106 1107 ### fcvtzs ### 1108 1109 Convert FP to signed integer (round towards zero). 1110 1111 void fcvtzs(const Register& rd, const FPRegister& fn) 1112 1113 1114 ### fcvtzu ### 1115 1116 Convert FP to unsigned integer (round towards zero). 1117 1118 void fcvtzu(const Register& rd, const FPRegister& fn) 1119 1120 1121 ### fdiv ### 1122 1123 FP divide. 1124 1125 void fdiv(const FPRegister& fd, const FPRegister& fn, const FPRegister& fm) 1126 1127 1128 ### fmadd ### 1129 1130 FP fused multiply and add. 1131 1132 void fmadd(const FPRegister& fd, 1133 const FPRegister& fn, 1134 const FPRegister& fm, 1135 const FPRegister& fa) 1136 1137 1138 ### fmax ### 1139 1140 FP maximum. 1141 1142 void fmax(const FPRegister& fd, const FPRegister& fn, const FPRegister& fm) 1143 1144 1145 ### fmaxnm ### 1146 1147 FP maximum number. 1148 1149 void fmaxnm(const FPRegister& fd, const FPRegister& fn, const FPRegister& fm) 1150 1151 1152 ### fmin ### 1153 1154 FP minimum. 1155 1156 void fmin(const FPRegister& fd, const FPRegister& fn, const FPRegister& fm) 1157 1158 1159 ### fminnm ### 1160 1161 FP minimum number. 1162 1163 void fminnm(const FPRegister& fd, const FPRegister& fn, const FPRegister& fm) 1164 1165 1166 ### fmov ### 1167 1168 Move FP register to FP register. 1169 1170 void fmov(const FPRegister& fd, const FPRegister& fn) 1171 1172 1173 ### fmov ### 1174 1175 Move FP register to register. 1176 1177 void fmov(const Register& rd, const FPRegister& fn) 1178 1179 1180 ### fmov ### 1181 1182 Move double precision immediate to FP register. 1183 1184 void fmov(const FPRegister& fd, double imm) 1185 1186 1187 ### fmov ### 1188 1189 Move register to FP register. 1190 1191 void fmov(const FPRegister& fd, const Register& rn) 1192 1193 1194 ### fmov ### 1195 1196 Move single precision immediate to FP register. 1197 1198 void fmov(const FPRegister& fd, float imm) 1199 1200 1201 ### fmsub ### 1202 1203 FP fused multiply and subtract. 1204 1205 void fmsub(const FPRegister& fd, 1206 const FPRegister& fn, 1207 const FPRegister& fm, 1208 const FPRegister& fa) 1209 1210 1211 ### fmul ### 1212 1213 FP multiply. 1214 1215 void fmul(const FPRegister& fd, const FPRegister& fn, const FPRegister& fm) 1216 1217 1218 ### fneg ### 1219 1220 FP negate. 1221 1222 void fneg(const FPRegister& fd, const FPRegister& fn) 1223 1224 1225 ### fnmadd ### 1226 1227 FP fused multiply, add and negate. 1228 1229 void fnmadd(const FPRegister& fd, 1230 const FPRegister& fn, 1231 const FPRegister& fm, 1232 const FPRegister& fa) 1233 1234 1235 ### fnmsub ### 1236 1237 FP fused multiply, subtract and negate. 1238 1239 void fnmsub(const FPRegister& fd, 1240 const FPRegister& fn, 1241 const FPRegister& fm, 1242 const FPRegister& fa) 1243 1244 1245 ### frinta ### 1246 1247 FP round to integer (nearest with ties to away). 1248 1249 void frinta(const FPRegister& fd, const FPRegister& fn) 1250 1251 1252 ### frintm ### 1253 1254 FP round to integer (toward minus infinity). 1255 1256 void frintm(const FPRegister& fd, const FPRegister& fn) 1257 1258 1259 ### frintn ### 1260 1261 FP round to integer (nearest with ties to even). 1262 1263 void frintn(const FPRegister& fd, const FPRegister& fn) 1264 1265 1266 ### frintz ### 1267 1268 FP round to integer (towards zero). 1269 1270 void frintz(const FPRegister& fd, const FPRegister& fn) 1271 1272 1273 ### fsqrt ### 1274 1275 FP square root. 1276 1277 void fsqrt(const FPRegister& fd, const FPRegister& fn) 1278 1279 1280 ### fsub ### 1281 1282 FP subtract. 1283 1284 void fsub(const FPRegister& fd, const FPRegister& fn, const FPRegister& fm) 1285 1286 1287 1288 Additional or pseudo instructions 1289 --------------------------------- 1290 1291 ### bind ### 1292 1293 Bind a label to the current PC. 1294 1295 void bind(Label* label) 1296 1297 1298 ### dc32 ### 1299 1300 Emit 32 bits of data into the instruction stream. 1301 1302 inline void dc32(uint32_t data) 1303 1304 1305 ### dc64 ### 1306 1307 Emit 64 bits of data into the instruction stream. 1308 1309 inline void dc64(uint64_t data) 1310 1311 1312 ### dci ### 1313 1314 Emit raw instructions into the instruction stream. 1315 1316 inline void dci(Instr raw_inst) 1317 1318 1319 1320