disasm-aarch32.h revision 87c05f09dbb6cada9998bdaeacb5d87d7ad82917
1// Copyright 2015, VIXL authors 2// All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions are met: 6// 7// * Redistributions of source code must retain the above copyright notice, 8// this list of conditions and the following disclaimer. 9// * Redistributions in binary form must reproduce the above copyright notice, 10// this list of conditions and the following disclaimer in the documentation 11// and/or other materials provided with the distribution. 12// * Neither the name of ARM Limited nor the names of its contributors may be 13// used to endorse or promote products derived from this software without 14// specific prior written permission. 15// 16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND 17// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 20// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 27#ifndef VIXL_DISASM_AARCH32_H_ 28#define VIXL_DISASM_AARCH32_H_ 29 30extern "C" { 31#include <stdint.h> 32} 33 34#include "aarch32/constants-aarch32.h" 35#include "aarch32/label-aarch32.h" 36#include "aarch32/operand-aarch32.h" 37 38namespace vixl { 39namespace aarch32 { 40 41class ITBlock { 42 Condition first_condition_; 43 Condition condition_; 44 uint16_t it_mask_; 45 46 public: 47 ITBlock() : first_condition_(al), condition_(al), it_mask_(0) {} 48 void Advance() { 49 condition_ = Condition((condition_.GetCondition() & 0xe) | (it_mask_ >> 3)); 50 it_mask_ = (it_mask_ << 1) & 0xf; 51 } 52 bool InITBlock() const { return it_mask_ != 0; } 53 bool OutsideITBlock() const { return !InITBlock(); } 54 bool LastInITBlock() const { return it_mask_ == 0x8; } 55 bool OutsideITBlockOrLast() const { 56 return OutsideITBlock() || LastInITBlock(); 57 } 58 void Set(Condition first_condition, uint16_t mask) { 59 condition_ = first_condition_ = first_condition; 60 it_mask_ = mask; 61 } 62 Condition GetFirstCondition() const { return first_condition_; } 63 Condition GetCurrentCondition() const { return condition_; } 64}; 65 66class Disassembler { 67 public: 68 enum LocationType { 69 kAnyLocation, 70 kCodeLocation, 71 kDataLocation, 72 kCoprocLocation, 73 kLoadByteLocation, 74 kLoadHalfWordLocation, 75 kLoadWordLocation, 76 kLoadDoubleWordLocation, 77 kLoadSignedByteLocation, 78 kLoadSignedHalfWordLocation, 79 kLoadSinglePrecisionLocation, 80 kLoadDoublePrecisionLocation, 81 kStoreByteLocation, 82 kStoreHalfWordLocation, 83 kStoreWordLocation, 84 kStoreDoubleWordLocation, 85 kStoreSinglePrecisionLocation, 86 kStoreDoublePrecisionLocation, 87 kVld1Location, 88 kVld2Location, 89 kVld3Location, 90 kVld4Location, 91 kVst1Location, 92 kVst2Location, 93 kVst3Location, 94 kVst4Location 95 }; 96 97 class ConditionPrinter { 98 const ITBlock& it_block_; 99 Condition cond_; 100 101 public: 102 ConditionPrinter(const ITBlock& it_block, Condition cond) 103 : it_block_(it_block), cond_(cond) {} 104 friend std::ostream& operator<<(std::ostream& os, ConditionPrinter cond) { 105 if (cond.it_block_.InITBlock() && cond.cond_.Is(al) && 106 !cond.cond_.IsNone()) { 107 return os << "al"; 108 } 109 return os << cond.cond_; 110 } 111 }; 112 113 class PrintLabel { 114 LocationType location_type_; 115 Label* label_; 116 Label::Offset position_; 117 118 public: 119 PrintLabel(LocationType location_type, Label* label, Label::Offset position) 120 : location_type_(location_type), label_(label), position_(position) {} 121 LocationType GetLocationType() const { return location_type_; } 122 Label* GetLabel() const { return label_; } 123 Label::Offset GetPosition() const { return position_; } 124 friend inline std::ostream& operator<<(std::ostream& os, 125 const PrintLabel& label) { 126 if (label.label_->IsMinusZero()) { 127 os << "[pc, #-0]"; 128 } else { 129 os << "0x" << std::hex << std::setw(8) << std::setfill('0') 130 << static_cast<int32_t>(label.label_->GetLocation() + 131 label.position_) << std::dec; 132 } 133 return os; 134 } 135 }; 136 137 class PrintMemOperand { 138 LocationType location_type_; 139 const MemOperand& operand_; 140 141 public: 142 PrintMemOperand(LocationType location_type, const MemOperand& operand) 143 : location_type_(location_type), operand_(operand) {} 144 LocationType GetLocationType() const { return location_type_; } 145 const MemOperand& GetOperand() const { return operand_; } 146 }; 147 148 class PrintAlignedMemOperand { 149 LocationType location_type_; 150 const AlignedMemOperand& operand_; 151 152 public: 153 PrintAlignedMemOperand(LocationType location_type, 154 const AlignedMemOperand& operand) 155 : location_type_(location_type), operand_(operand) {} 156 LocationType GetLocationType() const { return location_type_; } 157 const AlignedMemOperand& GetOperand() const { return operand_; } 158 }; 159 160 class DisassemblerStream { 161 std::ostream& os_; 162 163 public: 164 explicit DisassemblerStream(std::ostream& os) : os_(os) {} 165 virtual ~DisassemblerStream() {} 166 std::ostream& os() const { return os_; } 167 template <typename T> 168 DisassemblerStream& operator<<(T value) { 169 os_ << value; 170 return *this; 171 } 172 virtual DisassemblerStream& operator<<(const ConditionPrinter& cond) { 173 os_ << cond; 174 return *this; 175 } 176 virtual DisassemblerStream& operator<<(const Condition cond) { 177 os_ << cond; 178 return *this; 179 } 180 virtual DisassemblerStream& operator<<(const EncodingSize& size) { 181 os_ << size; 182 return *this; 183 } 184 virtual DisassemblerStream& operator<<(const DataType& type) { 185 os_ << type; 186 return *this; 187 } 188 virtual DisassemblerStream& operator<<(const Shift shift) { 189 os_ << shift; 190 return *this; 191 } 192 virtual DisassemblerStream& operator<<(const Sign sign) { 193 os_ << sign; 194 return *this; 195 } 196 virtual DisassemblerStream& operator<<(const Alignment alignment) { 197 os_ << alignment; 198 return *this; 199 } 200 virtual DisassemblerStream& operator<<(const PrintLabel& label) { 201 os_ << label; 202 return *this; 203 } 204 virtual DisassemblerStream& operator<<(const WriteBack& write_back) { 205 os_ << write_back; 206 return *this; 207 } 208 virtual DisassemblerStream& operator<<(const NeonImmediate& immediate) { 209 os_ << immediate; 210 return *this; 211 } 212 virtual DisassemblerStream& operator<<(const Register reg) { 213 os_ << reg; 214 return *this; 215 } 216 virtual DisassemblerStream& operator<<(const SRegister reg) { 217 os_ << reg; 218 return *this; 219 } 220 virtual DisassemblerStream& operator<<(const DRegister reg) { 221 os_ << reg; 222 return *this; 223 } 224 virtual DisassemblerStream& operator<<(const QRegister reg) { 225 os_ << reg; 226 return *this; 227 } 228 virtual DisassemblerStream& operator<<(const SpecialRegister reg) { 229 os_ << reg; 230 return *this; 231 } 232 virtual DisassemblerStream& operator<<(const MaskedSpecialRegister reg) { 233 os_ << reg; 234 return *this; 235 } 236 virtual DisassemblerStream& operator<<(const SpecialFPRegister reg) { 237 os_ << reg; 238 return *this; 239 } 240 virtual DisassemblerStream& operator<<(const BankedRegister reg) { 241 os_ << reg; 242 return *this; 243 } 244 virtual DisassemblerStream& operator<<(const RegisterList& list) { 245 os_ << list; 246 return *this; 247 } 248 virtual DisassemblerStream& operator<<(const SRegisterList& list) { 249 os_ << list; 250 return *this; 251 } 252 virtual DisassemblerStream& operator<<(const DRegisterList& list) { 253 os_ << list; 254 return *this; 255 } 256 virtual DisassemblerStream& operator<<(const NeonRegisterList& list) { 257 os_ << list; 258 return *this; 259 } 260 virtual DisassemblerStream& operator<<(const Coprocessor coproc) { 261 os_ << coproc; 262 return *this; 263 } 264 virtual DisassemblerStream& operator<<(const CRegister reg) { 265 os_ << reg; 266 return *this; 267 } 268 virtual DisassemblerStream& operator<<(const Endianness endian_specifier) { 269 os_ << endian_specifier; 270 return *this; 271 } 272 virtual DisassemblerStream& operator<<(const MemoryBarrier option) { 273 os_ << option; 274 return *this; 275 } 276 virtual DisassemblerStream& operator<<(const InterruptFlags iflags) { 277 os_ << iflags; 278 return *this; 279 } 280 virtual DisassemblerStream& operator<<(const Operand& operand) { 281 if (operand.IsImmediate()) { 282 return *this << "#" << operand.GetImmediate(); 283 } 284 if (operand.IsImmediateShiftedRegister()) { 285 if ((operand.GetShift().IsLSL() || operand.GetShift().IsROR()) && 286 (operand.GetShiftAmount() == 0)) { 287 return *this << operand.GetBaseRegister(); 288 } 289 if (operand.GetShift().IsRRX()) { 290 return *this << operand.GetBaseRegister() << ", rrx"; 291 } 292 return *this << operand.GetBaseRegister() << ", " << operand.GetShift() 293 << " #" << operand.GetShiftAmount(); 294 } 295 if (operand.IsRegisterShiftedRegister()) { 296 return *this << operand.GetBaseRegister() << ", " << operand.GetShift() 297 << " " << operand.GetShiftRegister(); 298 } 299 VIXL_UNREACHABLE(); 300 return *this; 301 } 302 virtual DisassemblerStream& operator<<(const SOperand& operand) { 303 if (operand.IsImmediate()) { 304 return *this << operand.GetNeonImmediate(); 305 } 306 return *this << operand.GetRegister(); 307 } 308 virtual DisassemblerStream& operator<<(const DOperand& operand) { 309 if (operand.IsImmediate()) { 310 return *this << operand.GetNeonImmediate(); 311 } 312 return *this << operand.GetRegister(); 313 } 314 virtual DisassemblerStream& operator<<(const QOperand& operand) { 315 if (operand.IsImmediate()) { 316 return *this << operand.GetNeonImmediate(); 317 } 318 return *this << operand.GetRegister(); 319 } 320 virtual DisassemblerStream& operator<<(const MemOperand& operand) { 321 *this << "[" << operand.GetBaseRegister(); 322 if (operand.GetAddrMode() == PostIndex) { 323 *this << "]"; 324 } 325 if (operand.IsImmediate()) { 326 if ((operand.GetOffsetImmediate() != 0) || 327 operand.GetSign().IsMinus() || 328 ((operand.GetAddrMode() != Offset) && !operand.IsRegisterOnly())) { 329 if (operand.GetOffsetImmediate() == 0) { 330 *this << ", #" << operand.GetSign() << operand.GetOffsetImmediate(); 331 } else { 332 *this << ", #" << operand.GetOffsetImmediate(); 333 } 334 } 335 } else if (operand.IsPlainRegister()) { 336 *this << ", " << operand.GetSign() << operand.GetOffsetRegister(); 337 } else if (operand.IsShiftedRegister()) { 338 *this << ", " << operand.GetSign() << operand.GetOffsetRegister() 339 << ImmediateShiftOperand(operand.GetShift(), 340 operand.GetShiftAmount()); 341 } else { 342 VIXL_UNREACHABLE(); 343 return *this; 344 } 345 if (operand.GetAddrMode() == Offset) { 346 *this << "]"; 347 } else if (operand.GetAddrMode() == PreIndex) { 348 *this << "]!"; 349 } 350 return *this; 351 } 352 virtual DisassemblerStream& operator<<(const PrintMemOperand& operand) { 353 return *this << operand.GetOperand(); 354 } 355 virtual DisassemblerStream& operator<<(const AlignedMemOperand& operand) { 356 *this << "[" << operand.GetBaseRegister() << operand.GetAlignment() 357 << "]"; 358 if (operand.GetAddrMode() == PostIndex) { 359 if (operand.IsPlainRegister()) { 360 *this << ", " << operand.GetOffsetRegister(); 361 } else { 362 *this << "!"; 363 } 364 } 365 return *this; 366 } 367 virtual DisassemblerStream& operator<<( 368 const PrintAlignedMemOperand& operand) { 369 return *this << operand.GetOperand(); 370 } 371 }; 372 373 private: 374 class ITBlockScope { 375 ITBlock* const it_block_; 376 bool inside_; 377 378 public: 379 explicit ITBlockScope(ITBlock* it_block) 380 : it_block_(it_block), inside_(it_block->InITBlock()) {} 381 ~ITBlockScope() { 382 if (inside_) it_block_->Advance(); 383 } 384 }; 385 386 ITBlock it_block_; 387 DisassemblerStream* os_; 388 bool owns_os_; 389 uint32_t pc_; 390 391 public: 392 explicit Disassembler(std::ostream& os, uint32_t pc = 0) // NOLINT 393 : os_(new DisassemblerStream(os)), 394 owns_os_(true), 395 pc_(pc) {} 396 explicit Disassembler(DisassemblerStream* os, uint32_t pc = 0) // NOLINT 397 : os_(os), 398 owns_os_(false), 399 pc_(pc) {} 400 virtual ~Disassembler() { 401 if (owns_os_) { 402 delete os_; 403 } 404 } 405 DisassemblerStream& os() const { return *os_; } 406 void SetIT(Condition first_condition, uint16_t it_mask) { 407 it_block_.Set(first_condition, it_mask); 408 } 409 const ITBlock& GetITBlock() const { return it_block_; } 410 bool InITBlock() const { return it_block_.InITBlock(); } 411 bool OutsideITBlock() const { return it_block_.OutsideITBlock(); } 412 bool OutsideITBlockOrLast() const { return it_block_.OutsideITBlockOrLast(); } 413 void CheckNotIT() const { VIXL_ASSERT(it_block_.OutsideITBlock()); } 414 // Return the current condition depending on the IT state for T32. 415 Condition CurrentCond() const { 416 if (it_block_.OutsideITBlock()) return al; 417 return it_block_.GetCurrentCondition(); 418 } 419 420 virtual void UnallocatedT32(uint32_t instruction) { 421 if (T32Size(instruction) == 2) { 422 os() << "unallocated " << std::hex << std::setw(4) << std::setfill('0') 423 << (instruction >> 16) << std::dec; 424 } else { 425 os() << "unallocated " << std::hex << std::setw(8) << std::setfill('0') 426 << instruction << std::dec; 427 } 428 } 429 virtual void UnallocatedA32(uint32_t instruction) { 430 os() << "unallocated " << std::hex << std::setw(8) << std::setfill('0') 431 << instruction << std::dec; 432 } 433 virtual void UnimplementedT32_16(const char* name, uint32_t instruction) { 434 os() << "unimplemented " << name << " T32:" << std::hex << std::setw(4) 435 << std::setfill('0') << (instruction >> 16) << std::dec; 436 } 437 virtual void UnimplementedT32_32(const char* name, uint32_t instruction) { 438 os() << "unimplemented " << name << " T32:" << std::hex << std::setw(8) 439 << std::setfill('0') << instruction << std::dec; 440 } 441 virtual void UnimplementedA32(const char* name, uint32_t instruction) { 442 os() << "unimplemented " << name << " ARM:" << std::hex << std::setw(8) 443 << std::setfill('0') << instruction << std::dec; 444 } 445 virtual void Unpredictable() { os() << " ; unpredictable"; } 446 virtual void UnpredictableT32(uint32_t /*instr*/) { return Unpredictable(); } 447 virtual void UnpredictableA32(uint32_t /*instr*/) { return Unpredictable(); } 448 449 static bool Is16BitEncoding(uint32_t instr) { return instr < 0xe8000000; } 450 uint32_t GetPc() const { return pc_; } 451 void JumpToPc(uint32_t pc) { pc_ = pc; } 452 453 // Start of generated code. 454 455 void adc(Condition cond, 456 EncodingSize size, 457 Register rd, 458 Register rn, 459 const Operand& operand); 460 461 void adcs(Condition cond, 462 EncodingSize size, 463 Register rd, 464 Register rn, 465 const Operand& operand); 466 467 void add(Condition cond, 468 EncodingSize size, 469 Register rd, 470 Register rn, 471 const Operand& operand); 472 473 void add(Condition cond, Register rd, const Operand& operand); 474 475 void adds(Condition cond, 476 EncodingSize size, 477 Register rd, 478 Register rn, 479 const Operand& operand); 480 481 void adds(Register rd, const Operand& operand); 482 483 void addw(Condition cond, Register rd, Register rn, const Operand& operand); 484 485 void adr(Condition cond, EncodingSize size, Register rd, Label* label); 486 487 void and_(Condition cond, 488 EncodingSize size, 489 Register rd, 490 Register rn, 491 const Operand& operand); 492 493 void ands(Condition cond, 494 EncodingSize size, 495 Register rd, 496 Register rn, 497 const Operand& operand); 498 499 void asr(Condition cond, 500 EncodingSize size, 501 Register rd, 502 Register rm, 503 const Operand& operand); 504 505 void asrs(Condition cond, 506 EncodingSize size, 507 Register rd, 508 Register rm, 509 const Operand& operand); 510 511 void b(Condition cond, EncodingSize size, Label* label); 512 513 void bfc(Condition cond, Register rd, uint32_t lsb, const Operand& operand); 514 515 void bfi(Condition cond, 516 Register rd, 517 Register rn, 518 uint32_t lsb, 519 const Operand& operand); 520 521 void bic(Condition cond, 522 EncodingSize size, 523 Register rd, 524 Register rn, 525 const Operand& operand); 526 527 void bics(Condition cond, 528 EncodingSize size, 529 Register rd, 530 Register rn, 531 const Operand& operand); 532 533 void bkpt(Condition cond, uint32_t imm); 534 535 void bl(Condition cond, Label* label); 536 537 void blx(Condition cond, Label* label); 538 539 void blx(Condition cond, Register rm); 540 541 void bx(Condition cond, Register rm); 542 543 void bxj(Condition cond, Register rm); 544 545 void cbnz(Register rn, Label* label); 546 547 void cbz(Register rn, Label* label); 548 549 void clrex(Condition cond); 550 551 void clz(Condition cond, Register rd, Register rm); 552 553 void cmn(Condition cond, 554 EncodingSize size, 555 Register rn, 556 const Operand& operand); 557 558 void cmp(Condition cond, 559 EncodingSize size, 560 Register rn, 561 const Operand& operand); 562 563 void crc32b(Condition cond, Register rd, Register rn, Register rm); 564 565 void crc32cb(Condition cond, Register rd, Register rn, Register rm); 566 567 void crc32ch(Condition cond, Register rd, Register rn, Register rm); 568 569 void crc32cw(Condition cond, Register rd, Register rn, Register rm); 570 571 void crc32h(Condition cond, Register rd, Register rn, Register rm); 572 573 void crc32w(Condition cond, Register rd, Register rn, Register rm); 574 575 void dmb(Condition cond, MemoryBarrier option); 576 577 void dsb(Condition cond, MemoryBarrier option); 578 579 void eor(Condition cond, 580 EncodingSize size, 581 Register rd, 582 Register rn, 583 const Operand& operand); 584 585 void eors(Condition cond, 586 EncodingSize size, 587 Register rd, 588 Register rn, 589 const Operand& operand); 590 591 void fldmdbx(Condition cond, 592 Register rn, 593 WriteBack write_back, 594 DRegisterList dreglist); 595 596 void fldmiax(Condition cond, 597 Register rn, 598 WriteBack write_back, 599 DRegisterList dreglist); 600 601 void fstmdbx(Condition cond, 602 Register rn, 603 WriteBack write_back, 604 DRegisterList dreglist); 605 606 void fstmiax(Condition cond, 607 Register rn, 608 WriteBack write_back, 609 DRegisterList dreglist); 610 611 void hlt(Condition cond, uint32_t imm); 612 613 void hvc(Condition cond, uint32_t imm); 614 615 void isb(Condition cond, MemoryBarrier option); 616 617 void it(Condition cond, uint16_t mask); 618 619 void lda(Condition cond, Register rt, const MemOperand& operand); 620 621 void ldab(Condition cond, Register rt, const MemOperand& operand); 622 623 void ldaex(Condition cond, Register rt, const MemOperand& operand); 624 625 void ldaexb(Condition cond, Register rt, const MemOperand& operand); 626 627 void ldaexd(Condition cond, 628 Register rt, 629 Register rt2, 630 const MemOperand& operand); 631 632 void ldaexh(Condition cond, Register rt, const MemOperand& operand); 633 634 void ldah(Condition cond, Register rt, const MemOperand& operand); 635 636 void ldm(Condition cond, 637 EncodingSize size, 638 Register rn, 639 WriteBack write_back, 640 RegisterList registers); 641 642 void ldmda(Condition cond, 643 Register rn, 644 WriteBack write_back, 645 RegisterList registers); 646 647 void ldmdb(Condition cond, 648 Register rn, 649 WriteBack write_back, 650 RegisterList registers); 651 652 void ldmea(Condition cond, 653 Register rn, 654 WriteBack write_back, 655 RegisterList registers); 656 657 void ldmed(Condition cond, 658 Register rn, 659 WriteBack write_back, 660 RegisterList registers); 661 662 void ldmfa(Condition cond, 663 Register rn, 664 WriteBack write_back, 665 RegisterList registers); 666 667 void ldmfd(Condition cond, 668 EncodingSize size, 669 Register rn, 670 WriteBack write_back, 671 RegisterList registers); 672 673 void ldmib(Condition cond, 674 Register rn, 675 WriteBack write_back, 676 RegisterList registers); 677 678 void ldr(Condition cond, 679 EncodingSize size, 680 Register rt, 681 const MemOperand& operand); 682 683 void ldr(Condition cond, EncodingSize size, Register rt, Label* label); 684 685 void ldrb(Condition cond, 686 EncodingSize size, 687 Register rt, 688 const MemOperand& operand); 689 690 void ldrb(Condition cond, Register rt, Label* label); 691 692 void ldrd(Condition cond, 693 Register rt, 694 Register rt2, 695 const MemOperand& operand); 696 697 void ldrd(Condition cond, Register rt, Register rt2, Label* label); 698 699 void ldrex(Condition cond, Register rt, const MemOperand& operand); 700 701 void ldrexb(Condition cond, Register rt, const MemOperand& operand); 702 703 void ldrexd(Condition cond, 704 Register rt, 705 Register rt2, 706 const MemOperand& operand); 707 708 void ldrexh(Condition cond, Register rt, const MemOperand& operand); 709 710 void ldrh(Condition cond, 711 EncodingSize size, 712 Register rt, 713 const MemOperand& operand); 714 715 void ldrh(Condition cond, Register rt, Label* label); 716 717 void ldrsb(Condition cond, 718 EncodingSize size, 719 Register rt, 720 const MemOperand& operand); 721 722 void ldrsb(Condition cond, Register rt, Label* label); 723 724 void ldrsh(Condition cond, 725 EncodingSize size, 726 Register rt, 727 const MemOperand& operand); 728 729 void ldrsh(Condition cond, Register rt, Label* label); 730 731 void lsl(Condition cond, 732 EncodingSize size, 733 Register rd, 734 Register rm, 735 const Operand& operand); 736 737 void lsls(Condition cond, 738 EncodingSize size, 739 Register rd, 740 Register rm, 741 const Operand& operand); 742 743 void lsr(Condition cond, 744 EncodingSize size, 745 Register rd, 746 Register rm, 747 const Operand& operand); 748 749 void lsrs(Condition cond, 750 EncodingSize size, 751 Register rd, 752 Register rm, 753 const Operand& operand); 754 755 void mla(Condition cond, Register rd, Register rn, Register rm, Register ra); 756 757 void mlas(Condition cond, Register rd, Register rn, Register rm, Register ra); 758 759 void mls(Condition cond, Register rd, Register rn, Register rm, Register ra); 760 761 void mov(Condition cond, 762 EncodingSize size, 763 Register rd, 764 const Operand& operand); 765 766 void movs(Condition cond, 767 EncodingSize size, 768 Register rd, 769 const Operand& operand); 770 771 void movt(Condition cond, Register rd, const Operand& operand); 772 773 void movw(Condition cond, Register rd, const Operand& operand); 774 775 void mrs(Condition cond, Register rd, SpecialRegister spec_reg); 776 777 void msr(Condition cond, 778 MaskedSpecialRegister spec_reg, 779 const Operand& operand); 780 781 void mul( 782 Condition cond, EncodingSize size, Register rd, Register rn, Register rm); 783 784 void muls(Condition cond, Register rd, Register rn, Register rm); 785 786 void mvn(Condition cond, 787 EncodingSize size, 788 Register rd, 789 const Operand& operand); 790 791 void mvns(Condition cond, 792 EncodingSize size, 793 Register rd, 794 const Operand& operand); 795 796 void nop(Condition cond, EncodingSize size); 797 798 void orn(Condition cond, Register rd, Register rn, const Operand& operand); 799 800 void orns(Condition cond, Register rd, Register rn, const Operand& operand); 801 802 void orr(Condition cond, 803 EncodingSize size, 804 Register rd, 805 Register rn, 806 const Operand& operand); 807 808 void orrs(Condition cond, 809 EncodingSize size, 810 Register rd, 811 Register rn, 812 const Operand& operand); 813 814 void pkhbt(Condition cond, Register rd, Register rn, const Operand& operand); 815 816 void pkhtb(Condition cond, Register rd, Register rn, const Operand& operand); 817 818 void pld(Condition cond, Label* label); 819 820 void pld(Condition cond, const MemOperand& operand); 821 822 void pldw(Condition cond, const MemOperand& operand); 823 824 void pli(Condition cond, const MemOperand& operand); 825 826 void pli(Condition cond, Label* label); 827 828 void pop(Condition cond, EncodingSize size, RegisterList registers); 829 830 void pop(Condition cond, EncodingSize size, Register rt); 831 832 void push(Condition cond, EncodingSize size, RegisterList registers); 833 834 void push(Condition cond, EncodingSize size, Register rt); 835 836 void qadd(Condition cond, Register rd, Register rm, Register rn); 837 838 void qadd16(Condition cond, Register rd, Register rn, Register rm); 839 840 void qadd8(Condition cond, Register rd, Register rn, Register rm); 841 842 void qasx(Condition cond, Register rd, Register rn, Register rm); 843 844 void qdadd(Condition cond, Register rd, Register rm, Register rn); 845 846 void qdsub(Condition cond, Register rd, Register rm, Register rn); 847 848 void qsax(Condition cond, Register rd, Register rn, Register rm); 849 850 void qsub(Condition cond, Register rd, Register rm, Register rn); 851 852 void qsub16(Condition cond, Register rd, Register rn, Register rm); 853 854 void qsub8(Condition cond, Register rd, Register rn, Register rm); 855 856 void rbit(Condition cond, Register rd, Register rm); 857 858 void rev(Condition cond, EncodingSize size, Register rd, Register rm); 859 860 void rev16(Condition cond, EncodingSize size, Register rd, Register rm); 861 862 void revsh(Condition cond, EncodingSize size, Register rd, Register rm); 863 864 void ror(Condition cond, 865 EncodingSize size, 866 Register rd, 867 Register rm, 868 const Operand& operand); 869 870 void rors(Condition cond, 871 EncodingSize size, 872 Register rd, 873 Register rm, 874 const Operand& operand); 875 876 void rrx(Condition cond, Register rd, Register rm); 877 878 void rrxs(Condition cond, Register rd, Register rm); 879 880 void rsb(Condition cond, 881 EncodingSize size, 882 Register rd, 883 Register rn, 884 const Operand& operand); 885 886 void rsbs(Condition cond, 887 EncodingSize size, 888 Register rd, 889 Register rn, 890 const Operand& operand); 891 892 void rsc(Condition cond, Register rd, Register rn, const Operand& operand); 893 894 void rscs(Condition cond, Register rd, Register rn, const Operand& operand); 895 896 void sadd16(Condition cond, Register rd, Register rn, Register rm); 897 898 void sadd8(Condition cond, Register rd, Register rn, Register rm); 899 900 void sasx(Condition cond, Register rd, Register rn, Register rm); 901 902 void sbc(Condition cond, 903 EncodingSize size, 904 Register rd, 905 Register rn, 906 const Operand& operand); 907 908 void sbcs(Condition cond, 909 EncodingSize size, 910 Register rd, 911 Register rn, 912 const Operand& operand); 913 914 void sbfx(Condition cond, 915 Register rd, 916 Register rn, 917 uint32_t lsb, 918 const Operand& operand); 919 920 void sdiv(Condition cond, Register rd, Register rn, Register rm); 921 922 void sel(Condition cond, Register rd, Register rn, Register rm); 923 924 void shadd16(Condition cond, Register rd, Register rn, Register rm); 925 926 void shadd8(Condition cond, Register rd, Register rn, Register rm); 927 928 void shasx(Condition cond, Register rd, Register rn, Register rm); 929 930 void shsax(Condition cond, Register rd, Register rn, Register rm); 931 932 void shsub16(Condition cond, Register rd, Register rn, Register rm); 933 934 void shsub8(Condition cond, Register rd, Register rn, Register rm); 935 936 void smlabb( 937 Condition cond, Register rd, Register rn, Register rm, Register ra); 938 939 void smlabt( 940 Condition cond, Register rd, Register rn, Register rm, Register ra); 941 942 void smlad( 943 Condition cond, Register rd, Register rn, Register rm, Register ra); 944 945 void smladx( 946 Condition cond, Register rd, Register rn, Register rm, Register ra); 947 948 void smlal( 949 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 950 951 void smlalbb( 952 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 953 954 void smlalbt( 955 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 956 957 void smlald( 958 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 959 960 void smlaldx( 961 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 962 963 void smlals( 964 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 965 966 void smlaltb( 967 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 968 969 void smlaltt( 970 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 971 972 void smlatb( 973 Condition cond, Register rd, Register rn, Register rm, Register ra); 974 975 void smlatt( 976 Condition cond, Register rd, Register rn, Register rm, Register ra); 977 978 void smlawb( 979 Condition cond, Register rd, Register rn, Register rm, Register ra); 980 981 void smlawt( 982 Condition cond, Register rd, Register rn, Register rm, Register ra); 983 984 void smlsd( 985 Condition cond, Register rd, Register rn, Register rm, Register ra); 986 987 void smlsdx( 988 Condition cond, Register rd, Register rn, Register rm, Register ra); 989 990 void smlsld( 991 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 992 993 void smlsldx( 994 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 995 996 void smmla( 997 Condition cond, Register rd, Register rn, Register rm, Register ra); 998 999 void smmlar( 1000 Condition cond, Register rd, Register rn, Register rm, Register ra); 1001 1002 void smmls( 1003 Condition cond, Register rd, Register rn, Register rm, Register ra); 1004 1005 void smmlsr( 1006 Condition cond, Register rd, Register rn, Register rm, Register ra); 1007 1008 void smmul(Condition cond, Register rd, Register rn, Register rm); 1009 1010 void smmulr(Condition cond, Register rd, Register rn, Register rm); 1011 1012 void smuad(Condition cond, Register rd, Register rn, Register rm); 1013 1014 void smuadx(Condition cond, Register rd, Register rn, Register rm); 1015 1016 void smulbb(Condition cond, Register rd, Register rn, Register rm); 1017 1018 void smulbt(Condition cond, Register rd, Register rn, Register rm); 1019 1020 void smull( 1021 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 1022 1023 void smulls( 1024 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 1025 1026 void smultb(Condition cond, Register rd, Register rn, Register rm); 1027 1028 void smultt(Condition cond, Register rd, Register rn, Register rm); 1029 1030 void smulwb(Condition cond, Register rd, Register rn, Register rm); 1031 1032 void smulwt(Condition cond, Register rd, Register rn, Register rm); 1033 1034 void smusd(Condition cond, Register rd, Register rn, Register rm); 1035 1036 void smusdx(Condition cond, Register rd, Register rn, Register rm); 1037 1038 void ssat(Condition cond, Register rd, uint32_t imm, const Operand& operand); 1039 1040 void ssat16(Condition cond, Register rd, uint32_t imm, Register rn); 1041 1042 void ssax(Condition cond, Register rd, Register rn, Register rm); 1043 1044 void ssub16(Condition cond, Register rd, Register rn, Register rm); 1045 1046 void ssub8(Condition cond, Register rd, Register rn, Register rm); 1047 1048 void stl(Condition cond, Register rt, const MemOperand& operand); 1049 1050 void stlb(Condition cond, Register rt, const MemOperand& operand); 1051 1052 void stlex(Condition cond, 1053 Register rd, 1054 Register rt, 1055 const MemOperand& operand); 1056 1057 void stlexb(Condition cond, 1058 Register rd, 1059 Register rt, 1060 const MemOperand& operand); 1061 1062 void stlexd(Condition cond, 1063 Register rd, 1064 Register rt, 1065 Register rt2, 1066 const MemOperand& operand); 1067 1068 void stlexh(Condition cond, 1069 Register rd, 1070 Register rt, 1071 const MemOperand& operand); 1072 1073 void stlh(Condition cond, Register rt, const MemOperand& operand); 1074 1075 void stm(Condition cond, 1076 EncodingSize size, 1077 Register rn, 1078 WriteBack write_back, 1079 RegisterList registers); 1080 1081 void stmda(Condition cond, 1082 Register rn, 1083 WriteBack write_back, 1084 RegisterList registers); 1085 1086 void stmdb(Condition cond, 1087 EncodingSize size, 1088 Register rn, 1089 WriteBack write_back, 1090 RegisterList registers); 1091 1092 void stmea(Condition cond, 1093 EncodingSize size, 1094 Register rn, 1095 WriteBack write_back, 1096 RegisterList registers); 1097 1098 void stmed(Condition cond, 1099 Register rn, 1100 WriteBack write_back, 1101 RegisterList registers); 1102 1103 void stmfa(Condition cond, 1104 Register rn, 1105 WriteBack write_back, 1106 RegisterList registers); 1107 1108 void stmfd(Condition cond, 1109 Register rn, 1110 WriteBack write_back, 1111 RegisterList registers); 1112 1113 void stmib(Condition cond, 1114 Register rn, 1115 WriteBack write_back, 1116 RegisterList registers); 1117 1118 void str(Condition cond, 1119 EncodingSize size, 1120 Register rt, 1121 const MemOperand& operand); 1122 1123 void strb(Condition cond, 1124 EncodingSize size, 1125 Register rt, 1126 const MemOperand& operand); 1127 1128 void strd(Condition cond, 1129 Register rt, 1130 Register rt2, 1131 const MemOperand& operand); 1132 1133 void strex(Condition cond, 1134 Register rd, 1135 Register rt, 1136 const MemOperand& operand); 1137 1138 void strexb(Condition cond, 1139 Register rd, 1140 Register rt, 1141 const MemOperand& operand); 1142 1143 void strexd(Condition cond, 1144 Register rd, 1145 Register rt, 1146 Register rt2, 1147 const MemOperand& operand); 1148 1149 void strexh(Condition cond, 1150 Register rd, 1151 Register rt, 1152 const MemOperand& operand); 1153 1154 void strh(Condition cond, 1155 EncodingSize size, 1156 Register rt, 1157 const MemOperand& operand); 1158 1159 void sub(Condition cond, 1160 EncodingSize size, 1161 Register rd, 1162 Register rn, 1163 const Operand& operand); 1164 1165 void sub(Condition cond, Register rd, const Operand& operand); 1166 1167 void subs(Condition cond, 1168 EncodingSize size, 1169 Register rd, 1170 Register rn, 1171 const Operand& operand); 1172 1173 void subs(Register rd, const Operand& operand); 1174 1175 void subw(Condition cond, Register rd, Register rn, const Operand& operand); 1176 1177 void svc(Condition cond, uint32_t imm); 1178 1179 void sxtab(Condition cond, Register rd, Register rn, const Operand& operand); 1180 1181 void sxtab16(Condition cond, 1182 Register rd, 1183 Register rn, 1184 const Operand& operand); 1185 1186 void sxtah(Condition cond, Register rd, Register rn, const Operand& operand); 1187 1188 void sxtb(Condition cond, 1189 EncodingSize size, 1190 Register rd, 1191 const Operand& operand); 1192 1193 void sxtb16(Condition cond, Register rd, const Operand& operand); 1194 1195 void sxth(Condition cond, 1196 EncodingSize size, 1197 Register rd, 1198 const Operand& operand); 1199 1200 void tbb(Condition cond, Register rn, Register rm); 1201 1202 void tbh(Condition cond, Register rn, Register rm); 1203 1204 void teq(Condition cond, Register rn, const Operand& operand); 1205 1206 void tst(Condition cond, 1207 EncodingSize size, 1208 Register rn, 1209 const Operand& operand); 1210 1211 void uadd16(Condition cond, Register rd, Register rn, Register rm); 1212 1213 void uadd8(Condition cond, Register rd, Register rn, Register rm); 1214 1215 void uasx(Condition cond, Register rd, Register rn, Register rm); 1216 1217 void ubfx(Condition cond, 1218 Register rd, 1219 Register rn, 1220 uint32_t lsb, 1221 const Operand& operand); 1222 1223 void udf(Condition cond, EncodingSize size, uint32_t imm); 1224 1225 void udiv(Condition cond, Register rd, Register rn, Register rm); 1226 1227 void uhadd16(Condition cond, Register rd, Register rn, Register rm); 1228 1229 void uhadd8(Condition cond, Register rd, Register rn, Register rm); 1230 1231 void uhasx(Condition cond, Register rd, Register rn, Register rm); 1232 1233 void uhsax(Condition cond, Register rd, Register rn, Register rm); 1234 1235 void uhsub16(Condition cond, Register rd, Register rn, Register rm); 1236 1237 void uhsub8(Condition cond, Register rd, Register rn, Register rm); 1238 1239 void umaal( 1240 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 1241 1242 void umlal( 1243 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 1244 1245 void umlals( 1246 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 1247 1248 void umull( 1249 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 1250 1251 void umulls( 1252 Condition cond, Register rdlo, Register rdhi, Register rn, Register rm); 1253 1254 void uqadd16(Condition cond, Register rd, Register rn, Register rm); 1255 1256 void uqadd8(Condition cond, Register rd, Register rn, Register rm); 1257 1258 void uqasx(Condition cond, Register rd, Register rn, Register rm); 1259 1260 void uqsax(Condition cond, Register rd, Register rn, Register rm); 1261 1262 void uqsub16(Condition cond, Register rd, Register rn, Register rm); 1263 1264 void uqsub8(Condition cond, Register rd, Register rn, Register rm); 1265 1266 void usad8(Condition cond, Register rd, Register rn, Register rm); 1267 1268 void usada8( 1269 Condition cond, Register rd, Register rn, Register rm, Register ra); 1270 1271 void usat(Condition cond, Register rd, uint32_t imm, const Operand& operand); 1272 1273 void usat16(Condition cond, Register rd, uint32_t imm, Register rn); 1274 1275 void usax(Condition cond, Register rd, Register rn, Register rm); 1276 1277 void usub16(Condition cond, Register rd, Register rn, Register rm); 1278 1279 void usub8(Condition cond, Register rd, Register rn, Register rm); 1280 1281 void uxtab(Condition cond, Register rd, Register rn, const Operand& operand); 1282 1283 void uxtab16(Condition cond, 1284 Register rd, 1285 Register rn, 1286 const Operand& operand); 1287 1288 void uxtah(Condition cond, Register rd, Register rn, const Operand& operand); 1289 1290 void uxtb(Condition cond, 1291 EncodingSize size, 1292 Register rd, 1293 const Operand& operand); 1294 1295 void uxtb16(Condition cond, Register rd, const Operand& operand); 1296 1297 void uxth(Condition cond, 1298 EncodingSize size, 1299 Register rd, 1300 const Operand& operand); 1301 1302 void vaba( 1303 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1304 1305 void vaba( 1306 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1307 1308 void vabal( 1309 Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm); 1310 1311 void vabd( 1312 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1313 1314 void vabd( 1315 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1316 1317 void vabdl( 1318 Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm); 1319 1320 void vabs(Condition cond, DataType dt, DRegister rd, DRegister rm); 1321 1322 void vabs(Condition cond, DataType dt, QRegister rd, QRegister rm); 1323 1324 void vabs(Condition cond, DataType dt, SRegister rd, SRegister rm); 1325 1326 void vacge( 1327 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1328 1329 void vacge( 1330 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1331 1332 void vacgt( 1333 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1334 1335 void vacgt( 1336 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1337 1338 void vacle( 1339 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1340 1341 void vacle( 1342 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1343 1344 void vaclt( 1345 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1346 1347 void vaclt( 1348 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1349 1350 void vadd( 1351 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1352 1353 void vadd( 1354 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1355 1356 void vadd( 1357 Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm); 1358 1359 void vaddhn( 1360 Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm); 1361 1362 void vaddl( 1363 Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm); 1364 1365 void vaddw( 1366 Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm); 1367 1368 void vand(Condition cond, 1369 DataType dt, 1370 DRegister rd, 1371 DRegister rn, 1372 const DOperand& operand); 1373 1374 void vand(Condition cond, 1375 DataType dt, 1376 QRegister rd, 1377 QRegister rn, 1378 const QOperand& operand); 1379 1380 void vbic(Condition cond, 1381 DataType dt, 1382 DRegister rd, 1383 DRegister rn, 1384 const DOperand& operand); 1385 1386 void vbic(Condition cond, 1387 DataType dt, 1388 QRegister rd, 1389 QRegister rn, 1390 const QOperand& operand); 1391 1392 void vbif( 1393 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1394 1395 void vbif( 1396 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1397 1398 void vbit( 1399 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1400 1401 void vbit( 1402 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1403 1404 void vbsl( 1405 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1406 1407 void vbsl( 1408 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1409 1410 void vceq(Condition cond, 1411 DataType dt, 1412 DRegister rd, 1413 DRegister rm, 1414 const DOperand& operand); 1415 1416 void vceq(Condition cond, 1417 DataType dt, 1418 QRegister rd, 1419 QRegister rm, 1420 const QOperand& operand); 1421 1422 void vceq( 1423 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1424 1425 void vceq( 1426 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1427 1428 void vcge(Condition cond, 1429 DataType dt, 1430 DRegister rd, 1431 DRegister rm, 1432 const DOperand& operand); 1433 1434 void vcge(Condition cond, 1435 DataType dt, 1436 QRegister rd, 1437 QRegister rm, 1438 const QOperand& operand); 1439 1440 void vcge( 1441 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1442 1443 void vcge( 1444 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1445 1446 void vcgt(Condition cond, 1447 DataType dt, 1448 DRegister rd, 1449 DRegister rm, 1450 const DOperand& operand); 1451 1452 void vcgt(Condition cond, 1453 DataType dt, 1454 QRegister rd, 1455 QRegister rm, 1456 const QOperand& operand); 1457 1458 void vcgt( 1459 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1460 1461 void vcgt( 1462 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1463 1464 void vcle(Condition cond, 1465 DataType dt, 1466 DRegister rd, 1467 DRegister rm, 1468 const DOperand& operand); 1469 1470 void vcle(Condition cond, 1471 DataType dt, 1472 QRegister rd, 1473 QRegister rm, 1474 const QOperand& operand); 1475 1476 void vcle( 1477 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1478 1479 void vcle( 1480 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1481 1482 void vcls(Condition cond, DataType dt, DRegister rd, DRegister rm); 1483 1484 void vcls(Condition cond, DataType dt, QRegister rd, QRegister rm); 1485 1486 void vclt(Condition cond, 1487 DataType dt, 1488 DRegister rd, 1489 DRegister rm, 1490 const DOperand& operand); 1491 1492 void vclt(Condition cond, 1493 DataType dt, 1494 QRegister rd, 1495 QRegister rm, 1496 const QOperand& operand); 1497 1498 void vclt( 1499 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1500 1501 void vclt( 1502 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1503 1504 void vclz(Condition cond, DataType dt, DRegister rd, DRegister rm); 1505 1506 void vclz(Condition cond, DataType dt, QRegister rd, QRegister rm); 1507 1508 void vcmp(Condition cond, DataType dt, SRegister rd, SRegister rm); 1509 1510 void vcmp(Condition cond, DataType dt, DRegister rd, DRegister rm); 1511 1512 void vcmp(Condition cond, DataType dt, SRegister rd, double imm); 1513 1514 void vcmp(Condition cond, DataType dt, DRegister rd, double imm); 1515 1516 void vcmpe(Condition cond, DataType dt, SRegister rd, SRegister rm); 1517 1518 void vcmpe(Condition cond, DataType dt, DRegister rd, DRegister rm); 1519 1520 void vcmpe(Condition cond, DataType dt, SRegister rd, double imm); 1521 1522 void vcmpe(Condition cond, DataType dt, DRegister rd, double imm); 1523 1524 void vcnt(Condition cond, DataType dt, DRegister rd, DRegister rm); 1525 1526 void vcnt(Condition cond, DataType dt, QRegister rd, QRegister rm); 1527 1528 void vcvt( 1529 Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm); 1530 1531 void vcvt( 1532 Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm); 1533 1534 void vcvt(Condition cond, 1535 DataType dt1, 1536 DataType dt2, 1537 DRegister rd, 1538 DRegister rm, 1539 int32_t fbits); 1540 1541 void vcvt(Condition cond, 1542 DataType dt1, 1543 DataType dt2, 1544 QRegister rd, 1545 QRegister rm, 1546 int32_t fbits); 1547 1548 void vcvt(Condition cond, 1549 DataType dt1, 1550 DataType dt2, 1551 SRegister rd, 1552 SRegister rm, 1553 int32_t fbits); 1554 1555 void vcvt( 1556 Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm); 1557 1558 void vcvt( 1559 Condition cond, DataType dt1, DataType dt2, QRegister rd, QRegister rm); 1560 1561 void vcvt( 1562 Condition cond, DataType dt1, DataType dt2, DRegister rd, QRegister rm); 1563 1564 void vcvt( 1565 Condition cond, DataType dt1, DataType dt2, QRegister rd, DRegister rm); 1566 1567 void vcvt( 1568 Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm); 1569 1570 void vcvta(DataType dt1, DataType dt2, DRegister rd, DRegister rm); 1571 1572 void vcvta(DataType dt1, DataType dt2, QRegister rd, QRegister rm); 1573 1574 void vcvta(DataType dt1, DataType dt2, SRegister rd, SRegister rm); 1575 1576 void vcvta(DataType dt1, DataType dt2, SRegister rd, DRegister rm); 1577 1578 void vcvtb( 1579 Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm); 1580 1581 void vcvtb( 1582 Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm); 1583 1584 void vcvtb( 1585 Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm); 1586 1587 void vcvtm(DataType dt1, DataType dt2, DRegister rd, DRegister rm); 1588 1589 void vcvtm(DataType dt1, DataType dt2, QRegister rd, QRegister rm); 1590 1591 void vcvtm(DataType dt1, DataType dt2, SRegister rd, SRegister rm); 1592 1593 void vcvtm(DataType dt1, DataType dt2, SRegister rd, DRegister rm); 1594 1595 void vcvtn(DataType dt1, DataType dt2, DRegister rd, DRegister rm); 1596 1597 void vcvtn(DataType dt1, DataType dt2, QRegister rd, QRegister rm); 1598 1599 void vcvtn(DataType dt1, DataType dt2, SRegister rd, SRegister rm); 1600 1601 void vcvtn(DataType dt1, DataType dt2, SRegister rd, DRegister rm); 1602 1603 void vcvtp(DataType dt1, DataType dt2, DRegister rd, DRegister rm); 1604 1605 void vcvtp(DataType dt1, DataType dt2, QRegister rd, QRegister rm); 1606 1607 void vcvtp(DataType dt1, DataType dt2, SRegister rd, SRegister rm); 1608 1609 void vcvtp(DataType dt1, DataType dt2, SRegister rd, DRegister rm); 1610 1611 void vcvtr( 1612 Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm); 1613 1614 void vcvtr( 1615 Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm); 1616 1617 void vcvtt( 1618 Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm); 1619 1620 void vcvtt( 1621 Condition cond, DataType dt1, DataType dt2, DRegister rd, SRegister rm); 1622 1623 void vcvtt( 1624 Condition cond, DataType dt1, DataType dt2, SRegister rd, DRegister rm); 1625 1626 void vdiv( 1627 Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm); 1628 1629 void vdiv( 1630 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1631 1632 void vdup(Condition cond, DataType dt, QRegister rd, Register rt); 1633 1634 void vdup(Condition cond, DataType dt, DRegister rd, Register rt); 1635 1636 void vdup(Condition cond, DataType dt, DRegister rd, DRegisterLane rm); 1637 1638 void vdup(Condition cond, DataType dt, QRegister rd, DRegisterLane rm); 1639 1640 void veor( 1641 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1642 1643 void veor( 1644 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1645 1646 void vext(Condition cond, 1647 DataType dt, 1648 DRegister rd, 1649 DRegister rn, 1650 DRegister rm, 1651 const DOperand& operand); 1652 1653 void vext(Condition cond, 1654 DataType dt, 1655 QRegister rd, 1656 QRegister rn, 1657 QRegister rm, 1658 const QOperand& operand); 1659 1660 void vfma( 1661 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1662 1663 void vfma( 1664 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1665 1666 void vfma( 1667 Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm); 1668 1669 void vfms( 1670 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1671 1672 void vfms( 1673 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1674 1675 void vfms( 1676 Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm); 1677 1678 void vfnma( 1679 Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm); 1680 1681 void vfnma( 1682 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1683 1684 void vfnms( 1685 Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm); 1686 1687 void vfnms( 1688 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1689 1690 void vhadd( 1691 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1692 1693 void vhadd( 1694 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1695 1696 void vhsub( 1697 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1698 1699 void vhsub( 1700 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1701 1702 void vld1(Condition cond, 1703 DataType dt, 1704 const NeonRegisterList& nreglist, 1705 const AlignedMemOperand& operand); 1706 1707 void vld2(Condition cond, 1708 DataType dt, 1709 const NeonRegisterList& nreglist, 1710 const AlignedMemOperand& operand); 1711 1712 void vld3(Condition cond, 1713 DataType dt, 1714 const NeonRegisterList& nreglist, 1715 const AlignedMemOperand& operand); 1716 1717 void vld3(Condition cond, 1718 DataType dt, 1719 const NeonRegisterList& nreglist, 1720 const MemOperand& operand); 1721 1722 void vld4(Condition cond, 1723 DataType dt, 1724 const NeonRegisterList& nreglist, 1725 const AlignedMemOperand& operand); 1726 1727 void vldm(Condition cond, 1728 DataType dt, 1729 Register rn, 1730 WriteBack write_back, 1731 DRegisterList dreglist); 1732 1733 void vldm(Condition cond, 1734 DataType dt, 1735 Register rn, 1736 WriteBack write_back, 1737 SRegisterList sreglist); 1738 1739 void vldmdb(Condition cond, 1740 DataType dt, 1741 Register rn, 1742 WriteBack write_back, 1743 DRegisterList dreglist); 1744 1745 void vldmdb(Condition cond, 1746 DataType dt, 1747 Register rn, 1748 WriteBack write_back, 1749 SRegisterList sreglist); 1750 1751 void vldmia(Condition cond, 1752 DataType dt, 1753 Register rn, 1754 WriteBack write_back, 1755 DRegisterList dreglist); 1756 1757 void vldmia(Condition cond, 1758 DataType dt, 1759 Register rn, 1760 WriteBack write_back, 1761 SRegisterList sreglist); 1762 1763 void vldr(Condition cond, DataType dt, DRegister rd, Label* label); 1764 1765 void vldr(Condition cond, 1766 DataType dt, 1767 DRegister rd, 1768 const MemOperand& operand); 1769 1770 void vldr(Condition cond, DataType dt, SRegister rd, Label* label); 1771 1772 void vldr(Condition cond, 1773 DataType dt, 1774 SRegister rd, 1775 const MemOperand& operand); 1776 1777 void vmax( 1778 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1779 1780 void vmax( 1781 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1782 1783 void vmaxnm(DataType dt, DRegister rd, DRegister rn, DRegister rm); 1784 1785 void vmaxnm(DataType dt, QRegister rd, QRegister rn, QRegister rm); 1786 1787 void vmaxnm(DataType dt, SRegister rd, SRegister rn, SRegister rm); 1788 1789 void vmin( 1790 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1791 1792 void vmin( 1793 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1794 1795 void vminnm(DataType dt, DRegister rd, DRegister rn, DRegister rm); 1796 1797 void vminnm(DataType dt, QRegister rd, QRegister rn, QRegister rm); 1798 1799 void vminnm(DataType dt, SRegister rd, SRegister rn, SRegister rm); 1800 1801 void vmla(Condition cond, 1802 DataType dt, 1803 DRegister rd, 1804 DRegister rn, 1805 DRegisterLane rm); 1806 1807 void vmla(Condition cond, 1808 DataType dt, 1809 QRegister rd, 1810 QRegister rn, 1811 DRegisterLane rm); 1812 1813 void vmla( 1814 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1815 1816 void vmla( 1817 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1818 1819 void vmla( 1820 Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm); 1821 1822 void vmlal(Condition cond, 1823 DataType dt, 1824 QRegister rd, 1825 DRegister rn, 1826 DRegisterLane rm); 1827 1828 void vmlal( 1829 Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm); 1830 1831 void vmls(Condition cond, 1832 DataType dt, 1833 DRegister rd, 1834 DRegister rn, 1835 DRegisterLane rm); 1836 1837 void vmls(Condition cond, 1838 DataType dt, 1839 QRegister rd, 1840 QRegister rn, 1841 DRegisterLane rm); 1842 1843 void vmls( 1844 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1845 1846 void vmls( 1847 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1848 1849 void vmls( 1850 Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm); 1851 1852 void vmlsl(Condition cond, 1853 DataType dt, 1854 QRegister rd, 1855 DRegister rn, 1856 DRegisterLane rm); 1857 1858 void vmlsl( 1859 Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm); 1860 1861 void vmov(Condition cond, Register rt, SRegister rn); 1862 1863 void vmov(Condition cond, SRegister rn, Register rt); 1864 1865 void vmov(Condition cond, Register rt, Register rt2, DRegister rm); 1866 1867 void vmov(Condition cond, DRegister rm, Register rt, Register rt2); 1868 1869 void vmov( 1870 Condition cond, Register rt, Register rt2, SRegister rm, SRegister rm1); 1871 1872 void vmov( 1873 Condition cond, SRegister rm, SRegister rm1, Register rt, Register rt2); 1874 1875 void vmov(Condition cond, DataType dt, DRegisterLane rd, Register rt); 1876 1877 void vmov(Condition cond, DataType dt, DRegister rd, const DOperand& operand); 1878 1879 void vmov(Condition cond, DataType dt, QRegister rd, const QOperand& operand); 1880 1881 void vmov(Condition cond, DataType dt, SRegister rd, const SOperand& operand); 1882 1883 void vmov(Condition cond, DataType dt, Register rt, DRegisterLane rn); 1884 1885 void vmovl(Condition cond, DataType dt, QRegister rd, DRegister rm); 1886 1887 void vmovn(Condition cond, DataType dt, DRegister rd, QRegister rm); 1888 1889 void vmrs(Condition cond, RegisterOrAPSR_nzcv rt, SpecialFPRegister spec_reg); 1890 1891 void vmsr(Condition cond, SpecialFPRegister spec_reg, Register rt); 1892 1893 void vmul(Condition cond, 1894 DataType dt, 1895 DRegister rd, 1896 DRegister rn, 1897 DRegister dm, 1898 unsigned index); 1899 1900 void vmul(Condition cond, 1901 DataType dt, 1902 QRegister rd, 1903 QRegister rn, 1904 DRegister dm, 1905 unsigned index); 1906 1907 void vmul( 1908 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1909 1910 void vmul( 1911 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 1912 1913 void vmul( 1914 Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm); 1915 1916 void vmull(Condition cond, 1917 DataType dt, 1918 QRegister rd, 1919 DRegister rn, 1920 DRegister dm, 1921 unsigned index); 1922 1923 void vmull( 1924 Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm); 1925 1926 void vmvn(Condition cond, DataType dt, DRegister rd, const DOperand& operand); 1927 1928 void vmvn(Condition cond, DataType dt, QRegister rd, const QOperand& operand); 1929 1930 void vneg(Condition cond, DataType dt, DRegister rd, DRegister rm); 1931 1932 void vneg(Condition cond, DataType dt, QRegister rd, QRegister rm); 1933 1934 void vneg(Condition cond, DataType dt, SRegister rd, SRegister rm); 1935 1936 void vnmla( 1937 Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm); 1938 1939 void vnmla( 1940 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1941 1942 void vnmls( 1943 Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm); 1944 1945 void vnmls( 1946 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1947 1948 void vnmul( 1949 Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm); 1950 1951 void vnmul( 1952 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1953 1954 void vorn(Condition cond, 1955 DataType dt, 1956 DRegister rd, 1957 DRegister rn, 1958 const DOperand& operand); 1959 1960 void vorn(Condition cond, 1961 DataType dt, 1962 QRegister rd, 1963 QRegister rn, 1964 const QOperand& operand); 1965 1966 void vorr(Condition cond, 1967 DataType dt, 1968 DRegister rd, 1969 DRegister rn, 1970 const DOperand& operand); 1971 1972 void vorr(Condition cond, 1973 DataType dt, 1974 QRegister rd, 1975 QRegister rn, 1976 const QOperand& operand); 1977 1978 void vpadal(Condition cond, DataType dt, DRegister rd, DRegister rm); 1979 1980 void vpadal(Condition cond, DataType dt, QRegister rd, QRegister rm); 1981 1982 void vpadd( 1983 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1984 1985 void vpaddl(Condition cond, DataType dt, DRegister rd, DRegister rm); 1986 1987 void vpaddl(Condition cond, DataType dt, QRegister rd, QRegister rm); 1988 1989 void vpmax( 1990 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1991 1992 void vpmin( 1993 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 1994 1995 void vpop(Condition cond, DataType dt, DRegisterList dreglist); 1996 1997 void vpop(Condition cond, DataType dt, SRegisterList sreglist); 1998 1999 void vpush(Condition cond, DataType dt, DRegisterList dreglist); 2000 2001 void vpush(Condition cond, DataType dt, SRegisterList sreglist); 2002 2003 void vqabs(Condition cond, DataType dt, DRegister rd, DRegister rm); 2004 2005 void vqabs(Condition cond, DataType dt, QRegister rd, QRegister rm); 2006 2007 void vqadd( 2008 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 2009 2010 void vqadd( 2011 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 2012 2013 void vqdmlal( 2014 Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm); 2015 2016 void vqdmlal(Condition cond, 2017 DataType dt, 2018 QRegister rd, 2019 DRegister rn, 2020 DRegister dm, 2021 unsigned index); 2022 2023 void vqdmlsl( 2024 Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm); 2025 2026 void vqdmlsl(Condition cond, 2027 DataType dt, 2028 QRegister rd, 2029 DRegister rn, 2030 DRegister dm, 2031 unsigned index); 2032 2033 void vqdmulh( 2034 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 2035 2036 void vqdmulh( 2037 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 2038 2039 void vqdmulh(Condition cond, 2040 DataType dt, 2041 DRegister rd, 2042 DRegister rn, 2043 DRegisterLane rm); 2044 2045 void vqdmulh(Condition cond, 2046 DataType dt, 2047 QRegister rd, 2048 QRegister rn, 2049 DRegisterLane rm); 2050 2051 void vqdmull( 2052 Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm); 2053 2054 void vqdmull(Condition cond, 2055 DataType dt, 2056 QRegister rd, 2057 DRegister rn, 2058 DRegisterLane rm); 2059 2060 void vqmovn(Condition cond, DataType dt, DRegister rd, QRegister rm); 2061 2062 void vqmovun(Condition cond, DataType dt, DRegister rd, QRegister rm); 2063 2064 void vqneg(Condition cond, DataType dt, DRegister rd, DRegister rm); 2065 2066 void vqneg(Condition cond, DataType dt, QRegister rd, QRegister rm); 2067 2068 void vqrdmulh( 2069 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 2070 2071 void vqrdmulh( 2072 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 2073 2074 void vqrdmulh(Condition cond, 2075 DataType dt, 2076 DRegister rd, 2077 DRegister rn, 2078 DRegisterLane rm); 2079 2080 void vqrdmulh(Condition cond, 2081 DataType dt, 2082 QRegister rd, 2083 QRegister rn, 2084 DRegisterLane rm); 2085 2086 void vqrshl( 2087 Condition cond, DataType dt, DRegister rd, DRegister rm, DRegister rn); 2088 2089 void vqrshl( 2090 Condition cond, DataType dt, QRegister rd, QRegister rm, QRegister rn); 2091 2092 void vqrshrn(Condition cond, 2093 DataType dt, 2094 DRegister rd, 2095 QRegister rm, 2096 const QOperand& operand); 2097 2098 void vqrshrun(Condition cond, 2099 DataType dt, 2100 DRegister rd, 2101 QRegister rm, 2102 const QOperand& operand); 2103 2104 void vqshl(Condition cond, 2105 DataType dt, 2106 DRegister rd, 2107 DRegister rm, 2108 const DOperand& operand); 2109 2110 void vqshl(Condition cond, 2111 DataType dt, 2112 QRegister rd, 2113 QRegister rm, 2114 const QOperand& operand); 2115 2116 void vqshlu(Condition cond, 2117 DataType dt, 2118 DRegister rd, 2119 DRegister rm, 2120 const DOperand& operand); 2121 2122 void vqshlu(Condition cond, 2123 DataType dt, 2124 QRegister rd, 2125 QRegister rm, 2126 const QOperand& operand); 2127 2128 void vqshrn(Condition cond, 2129 DataType dt, 2130 DRegister rd, 2131 QRegister rm, 2132 const QOperand& operand); 2133 2134 void vqshrun(Condition cond, 2135 DataType dt, 2136 DRegister rd, 2137 QRegister rm, 2138 const QOperand& operand); 2139 2140 void vqsub( 2141 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 2142 2143 void vqsub( 2144 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 2145 2146 void vraddhn( 2147 Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm); 2148 2149 void vrecpe(Condition cond, DataType dt, DRegister rd, DRegister rm); 2150 2151 void vrecpe(Condition cond, DataType dt, QRegister rd, QRegister rm); 2152 2153 void vrecps( 2154 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 2155 2156 void vrecps( 2157 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 2158 2159 void vrev16(Condition cond, DataType dt, DRegister rd, DRegister rm); 2160 2161 void vrev16(Condition cond, DataType dt, QRegister rd, QRegister rm); 2162 2163 void vrev32(Condition cond, DataType dt, DRegister rd, DRegister rm); 2164 2165 void vrev32(Condition cond, DataType dt, QRegister rd, QRegister rm); 2166 2167 void vrev64(Condition cond, DataType dt, DRegister rd, DRegister rm); 2168 2169 void vrev64(Condition cond, DataType dt, QRegister rd, QRegister rm); 2170 2171 void vrhadd( 2172 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 2173 2174 void vrhadd( 2175 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 2176 2177 void vrinta(DataType dt1, DataType dt2, DRegister rd, DRegister rm); 2178 2179 void vrinta(DataType dt1, DataType dt2, QRegister rd, QRegister rm); 2180 2181 void vrinta(DataType dt1, DataType dt2, SRegister rd, SRegister rm); 2182 2183 void vrintm(DataType dt1, DataType dt2, DRegister rd, DRegister rm); 2184 2185 void vrintm(DataType dt1, DataType dt2, QRegister rd, QRegister rm); 2186 2187 void vrintm(DataType dt1, DataType dt2, SRegister rd, SRegister rm); 2188 2189 void vrintn(DataType dt1, DataType dt2, DRegister rd, DRegister rm); 2190 2191 void vrintn(DataType dt1, DataType dt2, QRegister rd, QRegister rm); 2192 2193 void vrintn(DataType dt1, DataType dt2, SRegister rd, SRegister rm); 2194 2195 void vrintp(DataType dt1, DataType dt2, DRegister rd, DRegister rm); 2196 2197 void vrintp(DataType dt1, DataType dt2, QRegister rd, QRegister rm); 2198 2199 void vrintp(DataType dt1, DataType dt2, SRegister rd, SRegister rm); 2200 2201 void vrintr( 2202 Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm); 2203 2204 void vrintr( 2205 Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm); 2206 2207 void vrintx( 2208 Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm); 2209 2210 void vrintx(DataType dt1, DataType dt2, QRegister rd, QRegister rm); 2211 2212 void vrintx( 2213 Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm); 2214 2215 void vrintz( 2216 Condition cond, DataType dt1, DataType dt2, DRegister rd, DRegister rm); 2217 2218 void vrintz(DataType dt1, DataType dt2, QRegister rd, QRegister rm); 2219 2220 void vrintz( 2221 Condition cond, DataType dt1, DataType dt2, SRegister rd, SRegister rm); 2222 2223 void vrshl( 2224 Condition cond, DataType dt, DRegister rd, DRegister rm, DRegister rn); 2225 2226 void vrshl( 2227 Condition cond, DataType dt, QRegister rd, QRegister rm, QRegister rn); 2228 2229 void vrshr(Condition cond, 2230 DataType dt, 2231 DRegister rd, 2232 DRegister rm, 2233 const DOperand& operand); 2234 2235 void vrshr(Condition cond, 2236 DataType dt, 2237 QRegister rd, 2238 QRegister rm, 2239 const QOperand& operand); 2240 2241 void vrshrn(Condition cond, 2242 DataType dt, 2243 DRegister rd, 2244 QRegister rm, 2245 const QOperand& operand); 2246 2247 void vrsqrte(Condition cond, DataType dt, DRegister rd, DRegister rm); 2248 2249 void vrsqrte(Condition cond, DataType dt, QRegister rd, QRegister rm); 2250 2251 void vrsqrts( 2252 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 2253 2254 void vrsqrts( 2255 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 2256 2257 void vrsra(Condition cond, 2258 DataType dt, 2259 DRegister rd, 2260 DRegister rm, 2261 const DOperand& operand); 2262 2263 void vrsra(Condition cond, 2264 DataType dt, 2265 QRegister rd, 2266 QRegister rm, 2267 const QOperand& operand); 2268 2269 void vrsubhn( 2270 Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm); 2271 2272 void vseleq(DataType dt, DRegister rd, DRegister rn, DRegister rm); 2273 2274 void vseleq(DataType dt, SRegister rd, SRegister rn, SRegister rm); 2275 2276 void vselge(DataType dt, DRegister rd, DRegister rn, DRegister rm); 2277 2278 void vselge(DataType dt, SRegister rd, SRegister rn, SRegister rm); 2279 2280 void vselgt(DataType dt, DRegister rd, DRegister rn, DRegister rm); 2281 2282 void vselgt(DataType dt, SRegister rd, SRegister rn, SRegister rm); 2283 2284 void vselvs(DataType dt, DRegister rd, DRegister rn, DRegister rm); 2285 2286 void vselvs(DataType dt, SRegister rd, SRegister rn, SRegister rm); 2287 2288 void vshl(Condition cond, 2289 DataType dt, 2290 DRegister rd, 2291 DRegister rm, 2292 const DOperand& operand); 2293 2294 void vshl(Condition cond, 2295 DataType dt, 2296 QRegister rd, 2297 QRegister rm, 2298 const QOperand& operand); 2299 2300 void vshll(Condition cond, 2301 DataType dt, 2302 QRegister rd, 2303 DRegister rm, 2304 const DOperand& operand); 2305 2306 void vshr(Condition cond, 2307 DataType dt, 2308 DRegister rd, 2309 DRegister rm, 2310 const DOperand& operand); 2311 2312 void vshr(Condition cond, 2313 DataType dt, 2314 QRegister rd, 2315 QRegister rm, 2316 const QOperand& operand); 2317 2318 void vshrn(Condition cond, 2319 DataType dt, 2320 DRegister rd, 2321 QRegister rm, 2322 const QOperand& operand); 2323 2324 void vsli(Condition cond, 2325 DataType dt, 2326 DRegister rd, 2327 DRegister rm, 2328 const DOperand& operand); 2329 2330 void vsli(Condition cond, 2331 DataType dt, 2332 QRegister rd, 2333 QRegister rm, 2334 const QOperand& operand); 2335 2336 void vsqrt(Condition cond, DataType dt, SRegister rd, SRegister rm); 2337 2338 void vsqrt(Condition cond, DataType dt, DRegister rd, DRegister rm); 2339 2340 void vsra(Condition cond, 2341 DataType dt, 2342 DRegister rd, 2343 DRegister rm, 2344 const DOperand& operand); 2345 2346 void vsra(Condition cond, 2347 DataType dt, 2348 QRegister rd, 2349 QRegister rm, 2350 const QOperand& operand); 2351 2352 void vsri(Condition cond, 2353 DataType dt, 2354 DRegister rd, 2355 DRegister rm, 2356 const DOperand& operand); 2357 2358 void vsri(Condition cond, 2359 DataType dt, 2360 QRegister rd, 2361 QRegister rm, 2362 const QOperand& operand); 2363 2364 void vst1(Condition cond, 2365 DataType dt, 2366 const NeonRegisterList& nreglist, 2367 const AlignedMemOperand& operand); 2368 2369 void vst2(Condition cond, 2370 DataType dt, 2371 const NeonRegisterList& nreglist, 2372 const AlignedMemOperand& operand); 2373 2374 void vst3(Condition cond, 2375 DataType dt, 2376 const NeonRegisterList& nreglist, 2377 const AlignedMemOperand& operand); 2378 2379 void vst3(Condition cond, 2380 DataType dt, 2381 const NeonRegisterList& nreglist, 2382 const MemOperand& operand); 2383 2384 void vst4(Condition cond, 2385 DataType dt, 2386 const NeonRegisterList& nreglist, 2387 const AlignedMemOperand& operand); 2388 2389 void vstm(Condition cond, 2390 DataType dt, 2391 Register rn, 2392 WriteBack write_back, 2393 DRegisterList dreglist); 2394 2395 void vstm(Condition cond, 2396 DataType dt, 2397 Register rn, 2398 WriteBack write_back, 2399 SRegisterList sreglist); 2400 2401 void vstmdb(Condition cond, 2402 DataType dt, 2403 Register rn, 2404 WriteBack write_back, 2405 DRegisterList dreglist); 2406 2407 void vstmdb(Condition cond, 2408 DataType dt, 2409 Register rn, 2410 WriteBack write_back, 2411 SRegisterList sreglist); 2412 2413 void vstmia(Condition cond, 2414 DataType dt, 2415 Register rn, 2416 WriteBack write_back, 2417 DRegisterList dreglist); 2418 2419 void vstmia(Condition cond, 2420 DataType dt, 2421 Register rn, 2422 WriteBack write_back, 2423 SRegisterList sreglist); 2424 2425 void vstr(Condition cond, 2426 DataType dt, 2427 DRegister rd, 2428 const MemOperand& operand); 2429 2430 void vstr(Condition cond, 2431 DataType dt, 2432 SRegister rd, 2433 const MemOperand& operand); 2434 2435 void vsub( 2436 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 2437 2438 void vsub( 2439 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 2440 2441 void vsub( 2442 Condition cond, DataType dt, SRegister rd, SRegister rn, SRegister rm); 2443 2444 void vsubhn( 2445 Condition cond, DataType dt, DRegister rd, QRegister rn, QRegister rm); 2446 2447 void vsubl( 2448 Condition cond, DataType dt, QRegister rd, DRegister rn, DRegister rm); 2449 2450 void vsubw( 2451 Condition cond, DataType dt, QRegister rd, QRegister rn, DRegister rm); 2452 2453 void vswp(Condition cond, DataType dt, DRegister rd, DRegister rm); 2454 2455 void vswp(Condition cond, DataType dt, QRegister rd, QRegister rm); 2456 2457 void vtbl(Condition cond, 2458 DataType dt, 2459 DRegister rd, 2460 const NeonRegisterList& nreglist, 2461 DRegister rm); 2462 2463 void vtbx(Condition cond, 2464 DataType dt, 2465 DRegister rd, 2466 const NeonRegisterList& nreglist, 2467 DRegister rm); 2468 2469 void vtrn(Condition cond, DataType dt, DRegister rd, DRegister rm); 2470 2471 void vtrn(Condition cond, DataType dt, QRegister rd, QRegister rm); 2472 2473 void vtst( 2474 Condition cond, DataType dt, DRegister rd, DRegister rn, DRegister rm); 2475 2476 void vtst( 2477 Condition cond, DataType dt, QRegister rd, QRegister rn, QRegister rm); 2478 2479 void vuzp(Condition cond, DataType dt, DRegister rd, DRegister rm); 2480 2481 void vuzp(Condition cond, DataType dt, QRegister rd, QRegister rm); 2482 2483 void vzip(Condition cond, DataType dt, DRegister rd, DRegister rm); 2484 2485 void vzip(Condition cond, DataType dt, QRegister rd, QRegister rm); 2486 2487 void yield(Condition cond, EncodingSize size); 2488 2489 int T32Size(uint32_t instr); 2490 void DecodeT32(uint32_t instr); 2491 void DecodeA32(uint32_t instr); 2492}; 2493 2494DataTypeValue Dt_L_imm6_1_Decode(uint32_t value, uint32_t type_value); 2495DataTypeValue Dt_L_imm6_2_Decode(uint32_t value, uint32_t type_value); 2496DataTypeValue Dt_L_imm6_3_Decode(uint32_t value); 2497DataTypeValue Dt_L_imm6_4_Decode(uint32_t value); 2498DataTypeValue Dt_imm6_1_Decode(uint32_t value, uint32_t type_value); 2499DataTypeValue Dt_imm6_2_Decode(uint32_t value, uint32_t type_value); 2500DataTypeValue Dt_imm6_3_Decode(uint32_t value); 2501DataTypeValue Dt_imm6_4_Decode(uint32_t value, uint32_t type_value); 2502DataTypeValue Dt_op_U_size_1_Decode(uint32_t value); 2503DataTypeValue Dt_op_size_1_Decode(uint32_t value); 2504DataTypeValue Dt_op_size_2_Decode(uint32_t value); 2505DataTypeValue Dt_op_size_3_Decode(uint32_t value); 2506DataTypeValue Dt_U_imm3H_1_Decode(uint32_t value); 2507DataTypeValue Dt_U_opc1_opc2_1_Decode(uint32_t value, unsigned* lane); 2508DataTypeValue Dt_opc1_opc2_1_Decode(uint32_t value, unsigned* lane); 2509DataTypeValue Dt_imm4_1_Decode(uint32_t value, unsigned* lane); 2510DataTypeValue Dt_B_E_1_Decode(uint32_t value); 2511DataTypeValue Dt_op_1_Decode1(uint32_t value); 2512DataTypeValue Dt_op_1_Decode2(uint32_t value); 2513DataTypeValue Dt_op_2_Decode(uint32_t value); 2514DataTypeValue Dt_op_3_Decode(uint32_t value); 2515DataTypeValue Dt_U_sx_1_Decode(uint32_t value); 2516DataTypeValue Dt_op_U_1_Decode1(uint32_t value); 2517DataTypeValue Dt_op_U_1_Decode2(uint32_t value); 2518DataTypeValue Dt_sz_1_Decode(uint32_t value); 2519DataTypeValue Dt_F_size_1_Decode(uint32_t value); 2520DataTypeValue Dt_F_size_2_Decode(uint32_t value); 2521DataTypeValue Dt_F_size_3_Decode(uint32_t value); 2522DataTypeValue Dt_F_size_4_Decode(uint32_t value); 2523DataTypeValue Dt_U_size_1_Decode(uint32_t value); 2524DataTypeValue Dt_U_size_2_Decode(uint32_t value); 2525DataTypeValue Dt_U_size_3_Decode(uint32_t value); 2526DataTypeValue Dt_size_1_Decode(uint32_t value); 2527DataTypeValue Dt_size_2_Decode(uint32_t value); 2528DataTypeValue Dt_size_3_Decode(uint32_t value); 2529DataTypeValue Dt_size_4_Decode(uint32_t value); 2530DataTypeValue Dt_size_5_Decode(uint32_t value); 2531DataTypeValue Dt_size_6_Decode(uint32_t value); 2532DataTypeValue Dt_size_7_Decode(uint32_t value); 2533DataTypeValue Dt_size_8_Decode(uint32_t value); 2534DataTypeValue Dt_size_9_Decode(uint32_t value, uint32_t type_value); 2535DataTypeValue Dt_size_10_Decode(uint32_t value); 2536DataTypeValue Dt_size_11_Decode(uint32_t value, uint32_t type_value); 2537DataTypeValue Dt_size_12_Decode(uint32_t value, uint32_t type_value); 2538DataTypeValue Dt_size_13_Decode(uint32_t value); 2539DataTypeValue Dt_size_14_Decode(uint32_t value); 2540DataTypeValue Dt_size_15_Decode(uint32_t value); 2541DataTypeValue Dt_size_16_Decode(uint32_t value); 2542// End of generated code. 2543 2544class PrintDisassembler : public Disassembler { 2545 public: 2546 explicit PrintDisassembler(std::ostream& os, uint32_t pc = 0) // NOLINT 2547 : Disassembler(os, pc) {} 2548 explicit PrintDisassembler(DisassemblerStream* os, uint32_t pc = 0) // NOLINT 2549 : Disassembler(os, pc) {} 2550 2551 virtual void PrintPc(uint32_t pc) { 2552 os() << "0x" << std::hex << std::setw(8) << std::setfill('0') << pc << "\t"; 2553 } 2554 2555 virtual void PrintOpcode16(uint32_t opcode) { 2556 os() << std::hex << std::setw(4) << std::setfill('0') << opcode << " " 2557 << std::dec << "\t"; 2558 } 2559 2560 virtual void PrintOpcode32(uint32_t opcode) { 2561 os() << std::hex << std::setw(8) << std::setfill('0') << opcode << std::dec 2562 << "\t"; 2563 } 2564 2565 const uint32_t* DecodeA32At(const uint32_t* instruction_address) { 2566 DecodeA32(*instruction_address); 2567 return instruction_address + 1; 2568 } 2569 2570 // Returns the address of the next instruction. 2571 const uint16_t* DecodeT32At(const uint16_t* instruction_address, 2572 const uint16_t* buffer_end); 2573 void DecodeT32(uint32_t instruction); 2574 void DecodeA32(uint32_t instruction); 2575 void DisassembleA32Buffer(const uint32_t* buffer, size_t size_in_bytes); 2576 void DisassembleT32Buffer(const uint16_t* buffer, size_t size_in_bytes); 2577}; 2578 2579} // namespace aarch32 2580} // namespace vixl 2581 2582#endif // VIXL_DISASM_AARCH32_H_ 2583