1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2013 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#ifndef V8_ARM64_CONSTANTS_ARM64_H_ 6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define V8_ARM64_CONSTANTS_ARM64_H_ 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/base/macros.h" 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/globals.h" 10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Assert that this is an LP64 system. 12014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochSTATIC_ASSERT(sizeof(int) == sizeof(int32_t)); 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochSTATIC_ASSERT(sizeof(long) == sizeof(int64_t)); // NOLINT(runtime/int) 14014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochSTATIC_ASSERT(sizeof(void *) == sizeof(int64_t)); 15014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochSTATIC_ASSERT(sizeof(1) == sizeof(int32_t)); 16014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochSTATIC_ASSERT(sizeof(1L) == sizeof(int64_t)); 17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Get the standard printf format macros for C99 stdint types. 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#ifndef __STDC_FORMAT_MACROS 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define __STDC_FORMAT_MACROS 22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#endif 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include <inttypes.h> 24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 25b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 26b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace v8 { 27b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace internal { 28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kInstructionSize = 4; 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kInstructionSizeLog2 = 2; 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kLoadLiteralScaleLog2 = 2; 33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kMaxLoadLiteralRange = 1 * MB; 34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 35014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kNumberOfRegisters = 32; 36014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kNumberOfFPRegisters = 32; 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Callee saved registers are x19-x30(lr). 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int kNumberOfCalleeSavedRegisters = 11; 39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int kFirstCalleeSavedRegisterIndex = 19; 40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Callee saved FP registers are d8-d15. 41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int kNumberOfCalleeSavedFPRegisters = 8; 42b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int kFirstCalleeSavedFPRegisterIndex = 8; 43b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Callee saved registers with no specific purpose in JS are x19-x25. 44b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kJSCalleeSavedRegList = 0x03f80000; 45014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kWRegSizeInBits = 32; 46014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kWRegSizeInBitsLog2 = 5; 47014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kWRegSize = kWRegSizeInBits >> 3; 48014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kWRegSizeLog2 = kWRegSizeInBitsLog2 - 3; 49014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kXRegSizeInBits = 64; 50014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kXRegSizeInBitsLog2 = 6; 51014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kXRegSize = kXRegSizeInBits >> 3; 52014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kXRegSizeLog2 = kXRegSizeInBitsLog2 - 3; 53014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kSRegSizeInBits = 32; 54014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kSRegSizeInBitsLog2 = 5; 55014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kSRegSize = kSRegSizeInBits >> 3; 56014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kSRegSizeLog2 = kSRegSizeInBitsLog2 - 3; 57014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kDRegSizeInBits = 64; 58014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kDRegSizeInBitsLog2 = 6; 59014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kDRegSize = kDRegSizeInBits >> 3; 60014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kDRegSizeLog2 = kDRegSizeInBitsLog2 - 3; 61b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kWRegMask = 0x00000000ffffffffL; 62b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kXRegMask = 0xffffffffffffffffL; 63b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kSRegMask = 0x00000000ffffffffL; 64b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kDRegMask = 0xffffffffffffffffL; 65b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// TODO(all) check if the expression below works on all compilers or if it 66b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// triggers an overflow error. 67b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kDSignBit = 63; 68b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kDSignMask = 0x1L << kDSignBit; 69b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kSSignBit = 31; 70b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kSSignMask = 0x1L << kSSignBit; 71b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kXSignBit = 63; 72b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kXSignMask = 0x1L << kXSignBit; 73b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kWSignBit = 31; 74b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kWSignMask = 0x1L << kWSignBit; 75b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kDQuietNanBit = 51; 76b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kDQuietNanMask = 0x1L << kDQuietNanBit; 77b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kSQuietNanBit = 22; 78b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kSQuietNanMask = 0x1L << kSQuietNanBit; 79b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kByteMask = 0xffL; 80b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kHalfWordMask = 0xffffL; 81b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kWordMask = 0xffffffffL; 82b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst uint64_t kXMaxUInt = 0xffffffffffffffffUL; 83b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst uint64_t kWMaxUInt = 0xffffffffUL; 84b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kXMaxInt = 0x7fffffffffffffffL; 85b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int64_t kXMinInt = 0x8000000000000000L; 86b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int32_t kWMaxInt = 0x7fffffff; 87b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int32_t kWMinInt = 0x80000000; 88014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kIp0Code = 16; 89014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kIp1Code = 17; 90014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kFramePointerRegCode = 29; 91014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kLinkRegCode = 30; 92014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kZeroRegCode = 31; 93014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kJSSPCode = 28; 94014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochconst int kSPRegInternalCode = 63; 95b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kRegCodeMask = 0x1f; 96b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kShiftAmountWRegMask = 0x1f; 97b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kShiftAmountXRegMask = 0x3f; 98b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Standard machine types defined by AAPCS64. 99b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kByteSize = 8; 100b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kByteSizeInBytes = kByteSize >> 3; 101b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kHalfWordSize = 16; 102b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kHalfWordSizeLog2 = 4; 103b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kHalfWordSizeInBytes = kHalfWordSize >> 3; 104b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kHalfWordSizeInBytesLog2 = kHalfWordSizeLog2 - 3; 105b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kWordSize = 32; 106b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kWordSizeLog2 = 5; 107b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kWordSizeInBytes = kWordSize >> 3; 108b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kWordSizeInBytesLog2 = kWordSizeLog2 - 3; 109b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kDoubleWordSize = 64; 110b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kDoubleWordSizeInBytes = kDoubleWordSize >> 3; 111b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kQuadWordSize = 128; 112b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kQuadWordSizeInBytes = kQuadWordSize >> 3; 113b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// AArch64 floating-point specifics. These match IEEE-754. 114b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kDoubleMantissaBits = 52; 115b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kDoubleExponentBits = 11; 116b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kDoubleExponentBias = 1023; 117b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kFloatMantissaBits = 23; 118b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst unsigned kFloatExponentBits = 8; 119b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 12013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch#define INSTRUCTION_FIELDS_LIST(V_) \ 12113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* Register fields */ \ 12213e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(Rd, 4, 0, Bits) /* Destination register. */ \ 12313e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(Rn, 9, 5, Bits) /* First source register. */ \ 12413e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(Rm, 20, 16, Bits) /* Second source register. */ \ 12513e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(Ra, 14, 10, Bits) /* Third source register. */ \ 12613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(Rt, 4, 0, Bits) /* Load dest / store source. */ \ 12713e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(Rt2, 14, 10, Bits) /* Load second dest / */ \ 12813e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* store second source. */ \ 12913e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(Rs, 20, 16, Bits) /* Store-exclusive status */ \ 13013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(PrefetchMode, 4, 0, Bits) \ 13113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch \ 13213e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* Common bits */ \ 13313e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(SixtyFourBits, 31, 31, Bits) \ 13413e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(FlagsUpdate, 29, 29, Bits) \ 13513e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch \ 13613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* PC relative addressing */ \ 13713e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmPCRelHi, 23, 5, SignedBits) \ 13813e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmPCRelLo, 30, 29, Bits) \ 13913e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch \ 14013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* Add/subtract/logical shift register */ \ 14113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ShiftDP, 23, 22, Bits) \ 14213e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmDPShift, 15, 10, Bits) \ 14313e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch \ 14413e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* Add/subtract immediate */ \ 14513e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmAddSub, 21, 10, Bits) \ 14613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ShiftAddSub, 23, 22, Bits) \ 14713e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch \ 14813e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* Add/substract extend */ \ 14913e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmExtendShift, 12, 10, Bits) \ 15013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ExtendMode, 15, 13, Bits) \ 15113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch \ 15213e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* Move wide */ \ 15313e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmMoveWide, 20, 5, Bits) \ 15413e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ShiftMoveWide, 22, 21, Bits) \ 15513e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch \ 15613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* Logical immediate, bitfield and extract */ \ 15713e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(BitN, 22, 22, Bits) \ 15813e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmRotate, 21, 16, Bits) \ 15913e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmSetBits, 15, 10, Bits) \ 16013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmR, 21, 16, Bits) \ 16113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmS, 15, 10, Bits) \ 16213e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch \ 16313e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* Test and branch immediate */ \ 16413e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmTestBranch, 18, 5, SignedBits) \ 16513e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmTestBranchBit40, 23, 19, Bits) \ 16613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmTestBranchBit5, 31, 31, Bits) \ 16713e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch \ 16813e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* Conditionals */ \ 16913e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(Condition, 15, 12, Bits) \ 17013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ConditionBranch, 3, 0, Bits) \ 17113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(Nzcv, 3, 0, Bits) \ 17213e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmCondCmp, 20, 16, Bits) \ 17313e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmCondBranch, 23, 5, SignedBits) \ 17413e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch \ 17513e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* Floating point */ \ 17613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(FPType, 23, 22, Bits) \ 17713e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmFP, 20, 13, Bits) \ 17813e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(FPScale, 15, 10, Bits) \ 17913e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch \ 18013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* Load Store */ \ 18113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmLS, 20, 12, SignedBits) \ 18213e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmLSUnsigned, 21, 10, Bits) \ 18313e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmLSPair, 21, 15, SignedBits) \ 18413e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(SizeLS, 31, 30, Bits) \ 18513e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmShiftLS, 12, 12, Bits) \ 18613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch \ 18713e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* Other immediates */ \ 18813e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmUncondBranch, 25, 0, SignedBits) \ 18913e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmCmpBranch, 23, 5, SignedBits) \ 19013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmLLiteral, 23, 5, SignedBits) \ 19113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmException, 20, 5, Bits) \ 19213e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmHint, 11, 5, Bits) \ 19313e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmBarrierDomain, 11, 10, Bits) \ 19413e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmBarrierType, 9, 8, Bits) \ 19513e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch \ 19613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch /* System (MRS, MSR) */ \ 19713e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(ImmSystemRegister, 19, 5, Bits) \ 19813e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(SysO0, 19, 19, Bits) \ 19913e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(SysOp1, 18, 16, Bits) \ 20013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(SysOp2, 7, 5, Bits) \ 20113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(CRn, 15, 12, Bits) \ 20213e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch V_(CRm, 11, 8, Bits) 203b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 204b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define SYSTEM_REGISTER_FIELDS_LIST(V_, M_) \ 205b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch/* NZCV */ \ 206b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochV_(Flags, 31, 28, Bits, uint32_t) \ 207b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochV_(N, 31, 31, Bits, bool) \ 208b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochV_(Z, 30, 30, Bits, bool) \ 209b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochV_(C, 29, 29, Bits, bool) \ 210b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochV_(V, 28, 28, Bits, uint32_t) \ 211b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochM_(NZCV, Flags_mask) \ 212b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch \ 213b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch/* FPCR */ \ 214b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochV_(AHP, 26, 26, Bits, bool) \ 215b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochV_(DN, 25, 25, Bits, bool) \ 216b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochV_(FZ, 24, 24, Bits, bool) \ 217b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochV_(RMode, 23, 22, Bits, FPRounding) \ 218b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochM_(FPCR, AHP_mask | DN_mask | FZ_mask | RMode_mask) 219b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 220b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 221b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Fields offsets. 222b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define DECLARE_FIELDS_OFFSETS(Name, HighBit, LowBit, unused_1, unused_2) \ 223b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch const int Name##_offset = LowBit; \ 224b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch const int Name##_width = HighBit - LowBit + 1; \ 225b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch const uint32_t Name##_mask = ((1 << Name##_width) - 1) << LowBit; 226b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define DECLARE_INSTRUCTION_FIELDS_OFFSETS(Name, HighBit, LowBit, unused_1) \ 227b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DECLARE_FIELDS_OFFSETS(Name, HighBit, LowBit, unused_1, unused_2) 228b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define NOTHING(A, B) 229b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochINSTRUCTION_FIELDS_LIST(DECLARE_INSTRUCTION_FIELDS_OFFSETS) 230b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochSYSTEM_REGISTER_FIELDS_LIST(DECLARE_FIELDS_OFFSETS, NOTHING) 231b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#undef NOTHING 232b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#undef DECLARE_FIELDS_OFFSETS 233b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#undef DECLARE_INSTRUCTION_FIELDS_OFFSETS 234b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 235b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// ImmPCRel is a compound field (not present in INSTRUCTION_FIELDS_LIST), formed 236b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// from ImmPCRelLo and ImmPCRelHi. 237b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int ImmPCRel_mask = ImmPCRelLo_mask | ImmPCRelHi_mask; 238b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 239b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Condition codes. 240b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum Condition { 241b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch eq = 0, 242b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ne = 1, 243b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch hs = 2, cs = hs, 244b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch lo = 3, cc = lo, 245b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch mi = 4, 246b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch pl = 5, 247b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch vs = 6, 248b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch vc = 7, 249b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch hi = 8, 250b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ls = 9, 251b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ge = 10, 252b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch lt = 11, 253b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch gt = 12, 254b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch le = 13, 255b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch al = 14, 256b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch nv = 15 // Behaves as always/al. 257b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 258b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 259b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochinline Condition NegateCondition(Condition cond) { 260b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Conditions al and nv behave identically, as "always true". They can't be 261b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // inverted, because there is no never condition. 262b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DCHECK((cond != al) && (cond != nv)); 263b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return static_cast<Condition>(cond ^ 1); 264b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 265b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 266b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Commute a condition such that {a cond b == b cond' a}. 267b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochinline Condition CommuteCondition(Condition cond) { 268b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch switch (cond) { 269b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case lo: 270b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return hi; 271b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case hi: 272b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return lo; 273b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case hs: 274b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return ls; 275b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case ls: 276b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return hs; 277b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case lt: 278b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return gt; 279b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case gt: 280b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return lt; 281b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case ge: 282b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return le; 283b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case le: 284b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return ge; 285b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch case eq: 286b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return eq; 287b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch default: 288b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // In practice this function is only used with a condition coming from 289b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // TokenToCondition in lithium-codegen-arm64.cc. Any other condition is 290b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // invalid as it doesn't necessary make sense to reverse it (consider 291b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // 'mi' for instance). 292b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UNREACHABLE(); 293b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return nv; 294b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 295b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 296b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 297b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum FlagsUpdate { 298b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SetFlags = 1, 299b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LeaveFlags = 0 300b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 301b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 302b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum StatusFlags { 303b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NoFlag = 0, 304b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 305b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Derive the flag combinations from the system register bit descriptions. 306b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NFlag = N_mask, 307b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ZFlag = Z_mask, 308b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CFlag = C_mask, 309b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch VFlag = V_mask, 310b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NZFlag = NFlag | ZFlag, 311b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NCFlag = NFlag | CFlag, 312b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NVFlag = NFlag | VFlag, 313b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ZCFlag = ZFlag | CFlag, 314b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ZVFlag = ZFlag | VFlag, 315b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CVFlag = CFlag | VFlag, 316b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NZCFlag = NFlag | ZFlag | CFlag, 317b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NZVFlag = NFlag | ZFlag | VFlag, 318b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NCVFlag = NFlag | CFlag | VFlag, 319b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ZCVFlag = ZFlag | CFlag | VFlag, 320b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NZCVFlag = NFlag | ZFlag | CFlag | VFlag, 321b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 322b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Floating-point comparison results. 323b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPEqualFlag = ZCFlag, 324b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPLessThanFlag = NFlag, 325b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPGreaterThanFlag = CFlag, 326b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPUnorderedFlag = CVFlag 327b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 328b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 329b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum Shift { 330b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NO_SHIFT = -1, 331b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LSL = 0x0, 332b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LSR = 0x1, 333b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ASR = 0x2, 334b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ROR = 0x3 335b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 336b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 337b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum Extend { 338b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NO_EXTEND = -1, 339b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UXTB = 0, 340b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UXTH = 1, 341b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UXTW = 2, 342b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UXTX = 3, 343b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SXTB = 4, 344b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SXTH = 5, 345b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SXTW = 6, 346b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SXTX = 7 347b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 348b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 349b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum SystemHint { 350b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NOP = 0, 351b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch YIELD = 1, 352b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch WFE = 2, 353b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch WFI = 3, 354b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SEV = 4, 355b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SEVL = 5 356b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 357b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 358b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum BarrierDomain { 359b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch OuterShareable = 0, 360b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NonShareable = 1, 361b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch InnerShareable = 2, 362b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FullSystem = 3 363b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 364b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 365b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum BarrierType { 366b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BarrierOther = 0, 367b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BarrierReads = 1, 368b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BarrierWrites = 2, 369b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BarrierAll = 3 370b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 371b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 372b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// System/special register names. 373b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// This information is not encoded as one field but as the concatenation of 374b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// multiple fields (Op0<0>, Op1, Crn, Crm, Op2). 375b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum SystemRegister { 376b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NZCV = ((0x1 << SysO0_offset) | 377b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch (0x3 << SysOp1_offset) | 378b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch (0x4 << CRn_offset) | 379b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch (0x2 << CRm_offset) | 380b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch (0x0 << SysOp2_offset)) >> ImmSystemRegister_offset, 381b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPCR = ((0x1 << SysO0_offset) | 382b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch (0x3 << SysOp1_offset) | 383b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch (0x4 << CRn_offset) | 384b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch (0x4 << CRm_offset) | 385b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch (0x0 << SysOp2_offset)) >> ImmSystemRegister_offset 386b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 387b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 388b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Instruction enumerations. 389b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// 390b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// These are the masks that define a class of instructions, and the list of 391b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// instructions within each class. Each enumeration has a Fixed, FMask and 392b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Mask value. 393b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// 394b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Fixed: The fixed bits in this instruction class. 395b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// FMask: The mask used to extract the fixed bits in the class. 396b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Mask: The mask used to identify the instructions within a class. 397b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// 398b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// The enumerations can be used like this: 399b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// 400b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// DCHECK(instr->Mask(PCRelAddressingFMask) == PCRelAddressingFixed); 401b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// switch(instr->Mask(PCRelAddressingMask)) { 402b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// case ADR: Format("adr 'Xd, 'AddrPCRelByte"); break; 403b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// case ADRP: Format("adrp 'Xd, 'AddrPCRelPage"); break; 404b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// default: printf("Unknown instruction\n"); 405b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// } 406b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 407b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 408b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Generic fields. 409b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum GenericInstrField { 410b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SixtyFourBits = 0x80000000, 411b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ThirtyTwoBits = 0x00000000, 412b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FP32 = 0x00000000, 413b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FP64 = 0x00400000 414b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 415b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 416b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// PC relative addressing. 417b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum PCRelAddressingOp { 418b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch PCRelAddressingFixed = 0x10000000, 419b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch PCRelAddressingFMask = 0x1F000000, 420b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch PCRelAddressingMask = 0x9F000000, 421b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ADR = PCRelAddressingFixed | 0x00000000, 422b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ADRP = PCRelAddressingFixed | 0x80000000 423b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 424b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 425b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Add/sub (immediate, shifted and extended.) 426b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int kSFOffset = 31; 427b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum AddSubOp { 428b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AddSubOpMask = 0x60000000, 429b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AddSubSetFlagsBit = 0x20000000, 430b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ADD = 0x00000000, 431b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ADDS = ADD | AddSubSetFlagsBit, 432b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SUB = 0x40000000, 433b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SUBS = SUB | AddSubSetFlagsBit 434b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 435b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 436b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define ADD_SUB_OP_LIST(V) \ 437b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ADD), \ 438b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ADDS), \ 439b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(SUB), \ 440b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(SUBS) 441b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 442b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum AddSubImmediateOp { 443b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AddSubImmediateFixed = 0x11000000, 444b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AddSubImmediateFMask = 0x1F000000, 445b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AddSubImmediateMask = 0xFF000000, 446b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #define ADD_SUB_IMMEDIATE(A) \ 447b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##_w_imm = AddSubImmediateFixed | A, \ 448b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##_x_imm = AddSubImmediateFixed | A | SixtyFourBits 449b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ADD_SUB_OP_LIST(ADD_SUB_IMMEDIATE) 450b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #undef ADD_SUB_IMMEDIATE 451b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 452b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 453b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum AddSubShiftedOp { 454b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AddSubShiftedFixed = 0x0B000000, 455b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AddSubShiftedFMask = 0x1F200000, 456b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AddSubShiftedMask = 0xFF200000, 457b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #define ADD_SUB_SHIFTED(A) \ 458b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##_w_shift = AddSubShiftedFixed | A, \ 459b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##_x_shift = AddSubShiftedFixed | A | SixtyFourBits 460b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ADD_SUB_OP_LIST(ADD_SUB_SHIFTED) 461b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #undef ADD_SUB_SHIFTED 462b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 463b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 464b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum AddSubExtendedOp { 465b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AddSubExtendedFixed = 0x0B200000, 466b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AddSubExtendedFMask = 0x1F200000, 467b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AddSubExtendedMask = 0xFFE00000, 468b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #define ADD_SUB_EXTENDED(A) \ 469b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##_w_ext = AddSubExtendedFixed | A, \ 470b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##_x_ext = AddSubExtendedFixed | A | SixtyFourBits 471b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ADD_SUB_OP_LIST(ADD_SUB_EXTENDED) 472b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #undef ADD_SUB_EXTENDED 473b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 474b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 475b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Add/sub with carry. 476b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum AddSubWithCarryOp { 477b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AddSubWithCarryFixed = 0x1A000000, 478b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AddSubWithCarryFMask = 0x1FE00000, 479b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AddSubWithCarryMask = 0xFFE0FC00, 480b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ADC_w = AddSubWithCarryFixed | ADD, 481b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ADC_x = AddSubWithCarryFixed | ADD | SixtyFourBits, 482b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ADC = ADC_w, 483b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ADCS_w = AddSubWithCarryFixed | ADDS, 484b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ADCS_x = AddSubWithCarryFixed | ADDS | SixtyFourBits, 485b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SBC_w = AddSubWithCarryFixed | SUB, 486b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SBC_x = AddSubWithCarryFixed | SUB | SixtyFourBits, 487b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SBC = SBC_w, 488b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SBCS_w = AddSubWithCarryFixed | SUBS, 489b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SBCS_x = AddSubWithCarryFixed | SUBS | SixtyFourBits 490b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 491b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 492b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 493b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Logical (immediate and shifted register). 494b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LogicalOp { 495b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LogicalOpMask = 0x60200000, 496b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch NOT = 0x00200000, 497b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AND = 0x00000000, 498b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BIC = AND | NOT, 499b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ORR = 0x20000000, 500b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ORN = ORR | NOT, 501b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch EOR = 0x40000000, 502b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch EON = EOR | NOT, 503b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ANDS = 0x60000000, 504b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BICS = ANDS | NOT 505b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 506b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 507b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Logical immediate. 508b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LogicalImmediateOp { 509b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LogicalImmediateFixed = 0x12000000, 510b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LogicalImmediateFMask = 0x1F800000, 511b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LogicalImmediateMask = 0xFF800000, 512b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AND_w_imm = LogicalImmediateFixed | AND, 513b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AND_x_imm = LogicalImmediateFixed | AND | SixtyFourBits, 514b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ORR_w_imm = LogicalImmediateFixed | ORR, 515b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ORR_x_imm = LogicalImmediateFixed | ORR | SixtyFourBits, 516b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch EOR_w_imm = LogicalImmediateFixed | EOR, 517b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch EOR_x_imm = LogicalImmediateFixed | EOR | SixtyFourBits, 518b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ANDS_w_imm = LogicalImmediateFixed | ANDS, 519b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ANDS_x_imm = LogicalImmediateFixed | ANDS | SixtyFourBits 520b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 521b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 522b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Logical shifted register. 523b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LogicalShiftedOp { 524b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LogicalShiftedFixed = 0x0A000000, 525b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LogicalShiftedFMask = 0x1F000000, 526b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LogicalShiftedMask = 0xFF200000, 527b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AND_w = LogicalShiftedFixed | AND, 528b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AND_x = LogicalShiftedFixed | AND | SixtyFourBits, 529b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch AND_shift = AND_w, 530b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BIC_w = LogicalShiftedFixed | BIC, 531b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BIC_x = LogicalShiftedFixed | BIC | SixtyFourBits, 532b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BIC_shift = BIC_w, 533b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ORR_w = LogicalShiftedFixed | ORR, 534b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ORR_x = LogicalShiftedFixed | ORR | SixtyFourBits, 535b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ORR_shift = ORR_w, 536b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ORN_w = LogicalShiftedFixed | ORN, 537b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ORN_x = LogicalShiftedFixed | ORN | SixtyFourBits, 538b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ORN_shift = ORN_w, 539b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch EOR_w = LogicalShiftedFixed | EOR, 540b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch EOR_x = LogicalShiftedFixed | EOR | SixtyFourBits, 541b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch EOR_shift = EOR_w, 542b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch EON_w = LogicalShiftedFixed | EON, 543b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch EON_x = LogicalShiftedFixed | EON | SixtyFourBits, 544b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch EON_shift = EON_w, 545b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ANDS_w = LogicalShiftedFixed | ANDS, 546b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ANDS_x = LogicalShiftedFixed | ANDS | SixtyFourBits, 547b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ANDS_shift = ANDS_w, 548b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BICS_w = LogicalShiftedFixed | BICS, 549b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BICS_x = LogicalShiftedFixed | BICS | SixtyFourBits, 550b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BICS_shift = BICS_w 551b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 552b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 553b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Move wide immediate. 554b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum MoveWideImmediateOp { 555b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MoveWideImmediateFixed = 0x12800000, 556b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MoveWideImmediateFMask = 0x1F800000, 557b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MoveWideImmediateMask = 0xFF800000, 558b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MOVN = 0x00000000, 559b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MOVZ = 0x40000000, 560b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MOVK = 0x60000000, 561b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MOVN_w = MoveWideImmediateFixed | MOVN, 562b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MOVN_x = MoveWideImmediateFixed | MOVN | SixtyFourBits, 563b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MOVZ_w = MoveWideImmediateFixed | MOVZ, 564b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MOVZ_x = MoveWideImmediateFixed | MOVZ | SixtyFourBits, 565b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MOVK_w = MoveWideImmediateFixed | MOVK, 566b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MOVK_x = MoveWideImmediateFixed | MOVK | SixtyFourBits 567b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 568b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 569b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Bitfield. 570b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int kBitfieldNOffset = 22; 571b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum BitfieldOp { 572b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BitfieldFixed = 0x13000000, 573b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BitfieldFMask = 0x1F800000, 574b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BitfieldMask = 0xFF800000, 575b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SBFM_w = BitfieldFixed | 0x00000000, 576b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SBFM_x = BitfieldFixed | 0x80000000, 577b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SBFM = SBFM_w, 578b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BFM_w = BitfieldFixed | 0x20000000, 579b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BFM_x = BitfieldFixed | 0xA0000000, 580b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BFM = BFM_w, 581b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UBFM_w = BitfieldFixed | 0x40000000, 582b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UBFM_x = BitfieldFixed | 0xC0000000, 583b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UBFM = UBFM_w 584b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Bitfield N field. 585b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 586b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 587b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Extract. 588b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum ExtractOp { 589b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ExtractFixed = 0x13800000, 590b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ExtractFMask = 0x1F800000, 591b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ExtractMask = 0xFFA00000, 592b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch EXTR_w = ExtractFixed | 0x00000000, 593b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch EXTR_x = ExtractFixed | 0x80000000, 594b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch EXTR = EXTR_w 595b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 596b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 597b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Unconditional branch. 598b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum UnconditionalBranchOp { 599b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UnconditionalBranchFixed = 0x14000000, 600b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UnconditionalBranchFMask = 0x7C000000, 601b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UnconditionalBranchMask = 0xFC000000, 602b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch B = UnconditionalBranchFixed | 0x00000000, 603b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BL = UnconditionalBranchFixed | 0x80000000 604b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 605b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 606b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Unconditional branch to register. 607b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum UnconditionalBranchToRegisterOp { 608b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UnconditionalBranchToRegisterFixed = 0xD6000000, 609b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UnconditionalBranchToRegisterFMask = 0xFE000000, 610b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UnconditionalBranchToRegisterMask = 0xFFFFFC1F, 611b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BR = UnconditionalBranchToRegisterFixed | 0x001F0000, 612b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BLR = UnconditionalBranchToRegisterFixed | 0x003F0000, 613b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch RET = UnconditionalBranchToRegisterFixed | 0x005F0000 614b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 615b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 616b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Compare and branch. 617b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum CompareBranchOp { 618b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CompareBranchFixed = 0x34000000, 619b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CompareBranchFMask = 0x7E000000, 620b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CompareBranchMask = 0xFF000000, 621b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CBZ_w = CompareBranchFixed | 0x00000000, 622b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CBZ_x = CompareBranchFixed | 0x80000000, 623b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CBZ = CBZ_w, 624b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CBNZ_w = CompareBranchFixed | 0x01000000, 625b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CBNZ_x = CompareBranchFixed | 0x81000000, 626b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CBNZ = CBNZ_w 627b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 628b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 629b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Test and branch. 630b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum TestBranchOp { 631b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch TestBranchFixed = 0x36000000, 632b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch TestBranchFMask = 0x7E000000, 633b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch TestBranchMask = 0x7F000000, 634b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch TBZ = TestBranchFixed | 0x00000000, 635b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch TBNZ = TestBranchFixed | 0x01000000 636b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 637b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 638b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Conditional branch. 639b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum ConditionalBranchOp { 640b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConditionalBranchFixed = 0x54000000, 641b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConditionalBranchFMask = 0xFE000000, 642b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConditionalBranchMask = 0xFF000010, 643b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch B_cond = ConditionalBranchFixed | 0x00000000 644b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 645b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 646b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// System. 647b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// System instruction encoding is complicated because some instructions use op 648b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// and CR fields to encode parameters. To handle this cleanly, the system 649b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// instructions are split into more than one enum. 650b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 651b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum SystemOp { 652b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SystemFixed = 0xD5000000, 653b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SystemFMask = 0xFFC00000 654b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 655b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 656b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum SystemSysRegOp { 657b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SystemSysRegFixed = 0xD5100000, 658b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SystemSysRegFMask = 0xFFD00000, 659b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SystemSysRegMask = 0xFFF00000, 660b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MRS = SystemSysRegFixed | 0x00200000, 661b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MSR = SystemSysRegFixed | 0x00000000 662b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 663b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 664b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum SystemHintOp { 665b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SystemHintFixed = 0xD503201F, 666b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SystemHintFMask = 0xFFFFF01F, 667b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SystemHintMask = 0xFFFFF01F, 668b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch HINT = SystemHintFixed | 0x00000000 669b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 670b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 671b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Exception. 672b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum ExceptionOp { 673b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ExceptionFixed = 0xD4000000, 674b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ExceptionFMask = 0xFF000000, 675b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ExceptionMask = 0xFFE0001F, 676b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch HLT = ExceptionFixed | 0x00400000, 677b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BRK = ExceptionFixed | 0x00200000, 678b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SVC = ExceptionFixed | 0x00000001, 679b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch HVC = ExceptionFixed | 0x00000002, 680b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SMC = ExceptionFixed | 0x00000003, 681b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DCPS1 = ExceptionFixed | 0x00A00001, 682b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DCPS2 = ExceptionFixed | 0x00A00002, 683b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DCPS3 = ExceptionFixed | 0x00A00003 684b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 685b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Code used to spot hlt instructions that should not be hit. 686b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochconst int kHltBadCode = 0xbad; 687b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 688b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum MemBarrierOp { 689b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MemBarrierFixed = 0xD503309F, 690b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MemBarrierFMask = 0xFFFFF09F, 691b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MemBarrierMask = 0xFFFFF0FF, 692b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DSB = MemBarrierFixed | 0x00000000, 693b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DMB = MemBarrierFixed | 0x00000020, 694b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ISB = MemBarrierFixed | 0x00000040 695b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 696b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 697b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Any load or store (including pair). 698b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LoadStoreAnyOp { 699b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStoreAnyFMask = 0x0a000000, 700b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStoreAnyFixed = 0x08000000 701b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 702b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 703b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Any load pair or store pair. 704b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LoadStorePairAnyOp { 705b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePairAnyFMask = 0x3a000000, 706b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePairAnyFixed = 0x28000000 707b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 708b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 709b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define LOAD_STORE_PAIR_OP_LIST(V) \ 710b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(STP, w, 0x00000000), \ 711b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LDP, w, 0x00400000), \ 712b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LDPSW, x, 0x40400000), \ 713b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(STP, x, 0x80000000), \ 714b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LDP, x, 0x80400000), \ 715b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(STP, s, 0x04000000), \ 716b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LDP, s, 0x04400000), \ 717b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(STP, d, 0x44000000), \ 718b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LDP, d, 0x44400000) 719b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 720b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Load/store pair (post, pre and offset.) 721b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LoadStorePairOp { 722b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePairMask = 0xC4400000, 723b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePairLBit = 1 << 22, 724b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #define LOAD_STORE_PAIR(A, B, C) \ 725b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##_##B = C 726b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOAD_STORE_PAIR_OP_LIST(LOAD_STORE_PAIR) 727b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #undef LOAD_STORE_PAIR 728b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 729b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 730b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LoadStorePairPostIndexOp { 731b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePairPostIndexFixed = 0x28800000, 732b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePairPostIndexFMask = 0x3B800000, 733b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePairPostIndexMask = 0xFFC00000, 734b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #define LOAD_STORE_PAIR_POST_INDEX(A, B, C) \ 735b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##_##B##_post = LoadStorePairPostIndexFixed | A##_##B 736b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOAD_STORE_PAIR_OP_LIST(LOAD_STORE_PAIR_POST_INDEX) 737b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #undef LOAD_STORE_PAIR_POST_INDEX 738b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 739b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 740b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LoadStorePairPreIndexOp { 741b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePairPreIndexFixed = 0x29800000, 742b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePairPreIndexFMask = 0x3B800000, 743b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePairPreIndexMask = 0xFFC00000, 744b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #define LOAD_STORE_PAIR_PRE_INDEX(A, B, C) \ 745b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##_##B##_pre = LoadStorePairPreIndexFixed | A##_##B 746b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOAD_STORE_PAIR_OP_LIST(LOAD_STORE_PAIR_PRE_INDEX) 747b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #undef LOAD_STORE_PAIR_PRE_INDEX 748b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 749b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 750b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LoadStorePairOffsetOp { 751b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePairOffsetFixed = 0x29000000, 752b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePairOffsetFMask = 0x3B800000, 753b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePairOffsetMask = 0xFFC00000, 754b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #define LOAD_STORE_PAIR_OFFSET(A, B, C) \ 755b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##_##B##_off = LoadStorePairOffsetFixed | A##_##B 756b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOAD_STORE_PAIR_OP_LIST(LOAD_STORE_PAIR_OFFSET) 757b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #undef LOAD_STORE_PAIR_OFFSET 758b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 759b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 760b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Load literal. 761b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LoadLiteralOp { 762b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadLiteralFixed = 0x18000000, 763b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadLiteralFMask = 0x3B000000, 764b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadLiteralMask = 0xFF000000, 765b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LDR_w_lit = LoadLiteralFixed | 0x00000000, 766b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LDR_x_lit = LoadLiteralFixed | 0x40000000, 767b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LDRSW_x_lit = LoadLiteralFixed | 0x80000000, 768b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch PRFM_lit = LoadLiteralFixed | 0xC0000000, 769b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LDR_s_lit = LoadLiteralFixed | 0x04000000, 770b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LDR_d_lit = LoadLiteralFixed | 0x44000000 771b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 772b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 773b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define LOAD_STORE_OP_LIST(V) \ 774b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ST, RB, w, 0x00000000), \ 775b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ST, RH, w, 0x40000000), \ 776b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ST, R, w, 0x80000000), \ 777b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ST, R, x, 0xC0000000), \ 778b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LD, RB, w, 0x00400000), \ 779b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LD, RH, w, 0x40400000), \ 780b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LD, R, w, 0x80400000), \ 781b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LD, R, x, 0xC0400000), \ 782b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LD, RSB, x, 0x00800000), \ 783b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LD, RSH, x, 0x40800000), \ 784b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LD, RSW, x, 0x80800000), \ 785b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LD, RSB, w, 0x00C00000), \ 786b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LD, RSH, w, 0x40C00000), \ 787b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ST, R, s, 0x84000000), \ 788b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(ST, R, d, 0xC4000000), \ 789b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LD, R, s, 0x84400000), \ 790b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch V(LD, R, d, 0xC4400000) 791b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 792b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 793b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Load/store unscaled offset. 794b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LoadStoreUnscaledOffsetOp { 795b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStoreUnscaledOffsetFixed = 0x38000000, 796b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStoreUnscaledOffsetFMask = 0x3B200C00, 797b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStoreUnscaledOffsetMask = 0xFFE00C00, 798b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #define LOAD_STORE_UNSCALED(A, B, C, D) \ 799b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##U##B##_##C = LoadStoreUnscaledOffsetFixed | D 800b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOAD_STORE_OP_LIST(LOAD_STORE_UNSCALED) 801b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #undef LOAD_STORE_UNSCALED 802b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 803b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 804b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Load/store (post, pre, offset and unsigned.) 805b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LoadStoreOp { 806b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStoreOpMask = 0xC4C00000, 807b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #define LOAD_STORE(A, B, C, D) \ 808b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##B##_##C = D 809b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOAD_STORE_OP_LIST(LOAD_STORE), 810b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #undef LOAD_STORE 811b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch PRFM = 0xC0800000 812b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 813b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 814b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Load/store post index. 815b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LoadStorePostIndex { 816b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePostIndexFixed = 0x38000400, 817b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePostIndexFMask = 0x3B200C00, 818b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePostIndexMask = 0xFFE00C00, 819b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #define LOAD_STORE_POST_INDEX(A, B, C, D) \ 820b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##B##_##C##_post = LoadStorePostIndexFixed | D 821b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOAD_STORE_OP_LIST(LOAD_STORE_POST_INDEX) 822b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #undef LOAD_STORE_POST_INDEX 823b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 824b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 825b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Load/store pre index. 826b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LoadStorePreIndex { 827b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePreIndexFixed = 0x38000C00, 828b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePreIndexFMask = 0x3B200C00, 829b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStorePreIndexMask = 0xFFE00C00, 830b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #define LOAD_STORE_PRE_INDEX(A, B, C, D) \ 831b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##B##_##C##_pre = LoadStorePreIndexFixed | D 832b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOAD_STORE_OP_LIST(LOAD_STORE_PRE_INDEX) 833b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #undef LOAD_STORE_PRE_INDEX 834b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 835b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 836b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Load/store unsigned offset. 837b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LoadStoreUnsignedOffset { 838b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStoreUnsignedOffsetFixed = 0x39000000, 839b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStoreUnsignedOffsetFMask = 0x3B000000, 840b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStoreUnsignedOffsetMask = 0xFFC00000, 841b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch PRFM_unsigned = LoadStoreUnsignedOffsetFixed | PRFM, 842b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #define LOAD_STORE_UNSIGNED_OFFSET(A, B, C, D) \ 843b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##B##_##C##_unsigned = LoadStoreUnsignedOffsetFixed | D 844b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOAD_STORE_OP_LIST(LOAD_STORE_UNSIGNED_OFFSET) 845b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #undef LOAD_STORE_UNSIGNED_OFFSET 846b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 847b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 848b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Load/store register offset. 849b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum LoadStoreRegisterOffset { 850b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStoreRegisterOffsetFixed = 0x38200800, 851b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStoreRegisterOffsetFMask = 0x3B200C00, 852b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LoadStoreRegisterOffsetMask = 0xFFE00C00, 853b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch PRFM_reg = LoadStoreRegisterOffsetFixed | PRFM, 854b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #define LOAD_STORE_REGISTER_OFFSET(A, B, C, D) \ 855b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch A##B##_##C##_reg = LoadStoreRegisterOffsetFixed | D 856b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LOAD_STORE_OP_LIST(LOAD_STORE_REGISTER_OFFSET) 857b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch #undef LOAD_STORE_REGISTER_OFFSET 858b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 859b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 86013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch// Load/store acquire/release 86113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdochenum LoadStoreAcquireReleaseOp { 86213e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch LoadStoreAcquireReleaseFixed = 0x08000000, 86313e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch LoadStoreAcquireReleaseFMask = 0x3F000000, 86413e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch LoadStoreAcquireReleaseMask = 0xCFC08000, 86513e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch STLXR_b = LoadStoreAcquireReleaseFixed | 0x00008000, 86613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch LDAXR_b = LoadStoreAcquireReleaseFixed | 0x00408000, 86713e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch STLR_b = LoadStoreAcquireReleaseFixed | 0x00808000, 86813e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch LDAR_b = LoadStoreAcquireReleaseFixed | 0x00C08000, 86913e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch STLXR_h = LoadStoreAcquireReleaseFixed | 0x40008000, 87013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch LDAXR_h = LoadStoreAcquireReleaseFixed | 0x40408000, 87113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch STLR_h = LoadStoreAcquireReleaseFixed | 0x40808000, 87213e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch LDAR_h = LoadStoreAcquireReleaseFixed | 0x40C08000, 87313e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch STLXR_w = LoadStoreAcquireReleaseFixed | 0x80008000, 87413e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch LDAXR_w = LoadStoreAcquireReleaseFixed | 0x80408000, 87513e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch STLR_w = LoadStoreAcquireReleaseFixed | 0x80808000, 87613e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch LDAR_w = LoadStoreAcquireReleaseFixed | 0x80C08000, 87713e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch STLXR_x = LoadStoreAcquireReleaseFixed | 0xC0008000, 87813e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch LDAXR_x = LoadStoreAcquireReleaseFixed | 0xC0408000, 87913e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch STLR_x = LoadStoreAcquireReleaseFixed | 0xC0808000, 88013e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch LDAR_x = LoadStoreAcquireReleaseFixed | 0xC0C08000, 88113e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch}; 88213e2dadd00298019ed862f2b2fc5068bba730bcfBen Murdoch 883b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Conditional compare. 884b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum ConditionalCompareOp { 885b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConditionalCompareMask = 0x60000000, 886b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CCMN = 0x20000000, 887b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CCMP = 0x60000000 888b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 889b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 890b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Conditional compare register. 891b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum ConditionalCompareRegisterOp { 892b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConditionalCompareRegisterFixed = 0x1A400000, 893b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConditionalCompareRegisterFMask = 0x1FE00800, 894b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConditionalCompareRegisterMask = 0xFFE00C10, 895b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CCMN_w = ConditionalCompareRegisterFixed | CCMN, 896b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CCMN_x = ConditionalCompareRegisterFixed | SixtyFourBits | CCMN, 897b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CCMP_w = ConditionalCompareRegisterFixed | CCMP, 898b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CCMP_x = ConditionalCompareRegisterFixed | SixtyFourBits | CCMP 899b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 900b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 901b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Conditional compare immediate. 902b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum ConditionalCompareImmediateOp { 903b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConditionalCompareImmediateFixed = 0x1A400800, 904b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConditionalCompareImmediateFMask = 0x1FE00800, 905b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConditionalCompareImmediateMask = 0xFFE00C10, 906b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CCMN_w_imm = ConditionalCompareImmediateFixed | CCMN, 907b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CCMN_x_imm = ConditionalCompareImmediateFixed | SixtyFourBits | CCMN, 908b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CCMP_w_imm = ConditionalCompareImmediateFixed | CCMP, 909b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CCMP_x_imm = ConditionalCompareImmediateFixed | SixtyFourBits | CCMP 910b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 911b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 912b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Conditional select. 913b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum ConditionalSelectOp { 914b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConditionalSelectFixed = 0x1A800000, 915b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConditionalSelectFMask = 0x1FE00000, 916b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ConditionalSelectMask = 0xFFE00C00, 917b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CSEL_w = ConditionalSelectFixed | 0x00000000, 918b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CSEL_x = ConditionalSelectFixed | 0x80000000, 919b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CSEL = CSEL_w, 920b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CSINC_w = ConditionalSelectFixed | 0x00000400, 921b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CSINC_x = ConditionalSelectFixed | 0x80000400, 922b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CSINC = CSINC_w, 923b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CSINV_w = ConditionalSelectFixed | 0x40000000, 924b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CSINV_x = ConditionalSelectFixed | 0xC0000000, 925b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CSINV = CSINV_w, 926b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CSNEG_w = ConditionalSelectFixed | 0x40000400, 927b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CSNEG_x = ConditionalSelectFixed | 0xC0000400, 928b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CSNEG = CSNEG_w 929b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 930b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 931b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Data processing 1 source. 932b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum DataProcessing1SourceOp { 933b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DataProcessing1SourceFixed = 0x5AC00000, 934b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DataProcessing1SourceFMask = 0x5FE00000, 935b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DataProcessing1SourceMask = 0xFFFFFC00, 936b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch RBIT = DataProcessing1SourceFixed | 0x00000000, 937b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch RBIT_w = RBIT, 938b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch RBIT_x = RBIT | SixtyFourBits, 939b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch REV16 = DataProcessing1SourceFixed | 0x00000400, 940b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch REV16_w = REV16, 941b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch REV16_x = REV16 | SixtyFourBits, 942b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch REV = DataProcessing1SourceFixed | 0x00000800, 943b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch REV_w = REV, 944b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch REV32_x = REV | SixtyFourBits, 945b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch REV_x = DataProcessing1SourceFixed | SixtyFourBits | 0x00000C00, 946b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CLZ = DataProcessing1SourceFixed | 0x00001000, 947b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CLZ_w = CLZ, 948b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CLZ_x = CLZ | SixtyFourBits, 949b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CLS = DataProcessing1SourceFixed | 0x00001400, 950b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CLS_w = CLS, 951b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CLS_x = CLS | SixtyFourBits 952b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 953b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 954b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Data processing 2 source. 955b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum DataProcessing2SourceOp { 956b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DataProcessing2SourceFixed = 0x1AC00000, 957b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DataProcessing2SourceFMask = 0x5FE00000, 958b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DataProcessing2SourceMask = 0xFFE0FC00, 959b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UDIV_w = DataProcessing2SourceFixed | 0x00000800, 960b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UDIV_x = DataProcessing2SourceFixed | 0x80000800, 961b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UDIV = UDIV_w, 962b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SDIV_w = DataProcessing2SourceFixed | 0x00000C00, 963b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SDIV_x = DataProcessing2SourceFixed | 0x80000C00, 964b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SDIV = SDIV_w, 965b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LSLV_w = DataProcessing2SourceFixed | 0x00002000, 966b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LSLV_x = DataProcessing2SourceFixed | 0x80002000, 967b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LSLV = LSLV_w, 968b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LSRV_w = DataProcessing2SourceFixed | 0x00002400, 969b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LSRV_x = DataProcessing2SourceFixed | 0x80002400, 970b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch LSRV = LSRV_w, 971b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ASRV_w = DataProcessing2SourceFixed | 0x00002800, 972b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ASRV_x = DataProcessing2SourceFixed | 0x80002800, 973b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ASRV = ASRV_w, 974b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch RORV_w = DataProcessing2SourceFixed | 0x00002C00, 975b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch RORV_x = DataProcessing2SourceFixed | 0x80002C00, 976b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch RORV = RORV_w, 977b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CRC32B = DataProcessing2SourceFixed | 0x00004000, 978b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CRC32H = DataProcessing2SourceFixed | 0x00004400, 979b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CRC32W = DataProcessing2SourceFixed | 0x00004800, 980b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CRC32X = DataProcessing2SourceFixed | SixtyFourBits | 0x00004C00, 981b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CRC32CB = DataProcessing2SourceFixed | 0x00005000, 982b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CRC32CH = DataProcessing2SourceFixed | 0x00005400, 983b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CRC32CW = DataProcessing2SourceFixed | 0x00005800, 984b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch CRC32CX = DataProcessing2SourceFixed | SixtyFourBits | 0x00005C00 985b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 986b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 987b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Data processing 3 source. 988b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum DataProcessing3SourceOp { 989b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DataProcessing3SourceFixed = 0x1B000000, 990b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DataProcessing3SourceFMask = 0x1F000000, 991b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DataProcessing3SourceMask = 0xFFE08000, 992b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MADD_w = DataProcessing3SourceFixed | 0x00000000, 993b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MADD_x = DataProcessing3SourceFixed | 0x80000000, 994b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MADD = MADD_w, 995b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MSUB_w = DataProcessing3SourceFixed | 0x00008000, 996b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MSUB_x = DataProcessing3SourceFixed | 0x80008000, 997b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch MSUB = MSUB_w, 998b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SMADDL_x = DataProcessing3SourceFixed | 0x80200000, 999b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SMSUBL_x = DataProcessing3SourceFixed | 0x80208000, 1000b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SMULH_x = DataProcessing3SourceFixed | 0x80400000, 1001b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UMADDL_x = DataProcessing3SourceFixed | 0x80A00000, 1002b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UMSUBL_x = DataProcessing3SourceFixed | 0x80A08000, 1003b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UMULH_x = DataProcessing3SourceFixed | 0x80C00000 1004b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1005b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1006b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Floating point compare. 1007b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum FPCompareOp { 1008b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPCompareFixed = 0x1E202000, 1009b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPCompareFMask = 0x5F203C00, 1010b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPCompareMask = 0xFFE0FC1F, 1011b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCMP_s = FPCompareFixed | 0x00000000, 1012b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCMP_d = FPCompareFixed | FP64 | 0x00000000, 1013b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCMP = FCMP_s, 1014b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCMP_s_zero = FPCompareFixed | 0x00000008, 1015b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCMP_d_zero = FPCompareFixed | FP64 | 0x00000008, 1016b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCMP_zero = FCMP_s_zero, 1017b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCMPE_s = FPCompareFixed | 0x00000010, 1018b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCMPE_d = FPCompareFixed | FP64 | 0x00000010, 1019b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCMPE_s_zero = FPCompareFixed | 0x00000018, 1020b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCMPE_d_zero = FPCompareFixed | FP64 | 0x00000018 1021b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1022b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1023b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Floating point conditional compare. 1024b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum FPConditionalCompareOp { 1025b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPConditionalCompareFixed = 0x1E200400, 1026b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPConditionalCompareFMask = 0x5F200C00, 1027b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPConditionalCompareMask = 0xFFE00C10, 1028b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCCMP_s = FPConditionalCompareFixed | 0x00000000, 1029b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCCMP_d = FPConditionalCompareFixed | FP64 | 0x00000000, 1030b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCCMP = FCCMP_s, 1031b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCCMPE_s = FPConditionalCompareFixed | 0x00000010, 1032b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCCMPE_d = FPConditionalCompareFixed | FP64 | 0x00000010, 1033b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCCMPE = FCCMPE_s 1034b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1035b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1036b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Floating point conditional select. 1037b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum FPConditionalSelectOp { 1038b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPConditionalSelectFixed = 0x1E200C00, 1039b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPConditionalSelectFMask = 0x5F200C00, 1040b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPConditionalSelectMask = 0xFFE00C00, 1041b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCSEL_s = FPConditionalSelectFixed | 0x00000000, 1042b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCSEL_d = FPConditionalSelectFixed | FP64 | 0x00000000, 1043b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCSEL = FCSEL_s 1044b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1045b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1046b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Floating point immediate. 1047b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum FPImmediateOp { 1048b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPImmediateFixed = 0x1E201000, 1049b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPImmediateFMask = 0x5F201C00, 1050b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPImmediateMask = 0xFFE01C00, 1051b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMOV_s_imm = FPImmediateFixed | 0x00000000, 1052b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMOV_d_imm = FPImmediateFixed | FP64 | 0x00000000 1053b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1054b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1055b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Floating point data processing 1 source. 1056b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum FPDataProcessing1SourceOp { 1057b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPDataProcessing1SourceFixed = 0x1E204000, 1058b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPDataProcessing1SourceFMask = 0x5F207C00, 1059b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPDataProcessing1SourceMask = 0xFFFFFC00, 1060b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMOV_s = FPDataProcessing1SourceFixed | 0x00000000, 1061b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMOV_d = FPDataProcessing1SourceFixed | FP64 | 0x00000000, 1062b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMOV = FMOV_s, 1063b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FABS_s = FPDataProcessing1SourceFixed | 0x00008000, 1064b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FABS_d = FPDataProcessing1SourceFixed | FP64 | 0x00008000, 1065b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FABS = FABS_s, 1066b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FNEG_s = FPDataProcessing1SourceFixed | 0x00010000, 1067b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FNEG_d = FPDataProcessing1SourceFixed | FP64 | 0x00010000, 1068b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FNEG = FNEG_s, 1069b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FSQRT_s = FPDataProcessing1SourceFixed | 0x00018000, 1070b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FSQRT_d = FPDataProcessing1SourceFixed | FP64 | 0x00018000, 1071b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FSQRT = FSQRT_s, 1072b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVT_ds = FPDataProcessing1SourceFixed | 0x00028000, 1073b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVT_sd = FPDataProcessing1SourceFixed | FP64 | 0x00020000, 1074b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTN_s = FPDataProcessing1SourceFixed | 0x00040000, 1075b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTN_d = FPDataProcessing1SourceFixed | FP64 | 0x00040000, 1076b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTN = FRINTN_s, 1077b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTP_s = FPDataProcessing1SourceFixed | 0x00048000, 1078b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTP_d = FPDataProcessing1SourceFixed | FP64 | 0x00048000, 1079b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTP = FRINTP_s, 1080b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTM_s = FPDataProcessing1SourceFixed | 0x00050000, 1081b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTM_d = FPDataProcessing1SourceFixed | FP64 | 0x00050000, 1082b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTM = FRINTM_s, 1083b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTZ_s = FPDataProcessing1SourceFixed | 0x00058000, 1084b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTZ_d = FPDataProcessing1SourceFixed | FP64 | 0x00058000, 1085b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTZ = FRINTZ_s, 1086b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTA_s = FPDataProcessing1SourceFixed | 0x00060000, 1087b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTA_d = FPDataProcessing1SourceFixed | FP64 | 0x00060000, 1088b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTA = FRINTA_s, 1089b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTX_s = FPDataProcessing1SourceFixed | 0x00070000, 1090b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTX_d = FPDataProcessing1SourceFixed | FP64 | 0x00070000, 1091b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTX = FRINTX_s, 1092b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTI_s = FPDataProcessing1SourceFixed | 0x00078000, 1093b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTI_d = FPDataProcessing1SourceFixed | FP64 | 0x00078000, 1094b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FRINTI = FRINTI_s 1095b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1096b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1097b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Floating point data processing 2 source. 1098b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum FPDataProcessing2SourceOp { 1099b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPDataProcessing2SourceFixed = 0x1E200800, 1100b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPDataProcessing2SourceFMask = 0x5F200C00, 1101b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPDataProcessing2SourceMask = 0xFFE0FC00, 1102b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMUL = FPDataProcessing2SourceFixed | 0x00000000, 1103b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMUL_s = FMUL, 1104b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMUL_d = FMUL | FP64, 1105b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FDIV = FPDataProcessing2SourceFixed | 0x00001000, 1106b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FDIV_s = FDIV, 1107b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FDIV_d = FDIV | FP64, 1108b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FADD = FPDataProcessing2SourceFixed | 0x00002000, 1109b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FADD_s = FADD, 1110b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FADD_d = FADD | FP64, 1111b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FSUB = FPDataProcessing2SourceFixed | 0x00003000, 1112b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FSUB_s = FSUB, 1113b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FSUB_d = FSUB | FP64, 1114b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMAX = FPDataProcessing2SourceFixed | 0x00004000, 1115b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMAX_s = FMAX, 1116b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMAX_d = FMAX | FP64, 1117b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMIN = FPDataProcessing2SourceFixed | 0x00005000, 1118b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMIN_s = FMIN, 1119b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMIN_d = FMIN | FP64, 1120b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMAXNM = FPDataProcessing2SourceFixed | 0x00006000, 1121b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMAXNM_s = FMAXNM, 1122b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMAXNM_d = FMAXNM | FP64, 1123b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMINNM = FPDataProcessing2SourceFixed | 0x00007000, 1124b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMINNM_s = FMINNM, 1125b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMINNM_d = FMINNM | FP64, 1126b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FNMUL = FPDataProcessing2SourceFixed | 0x00008000, 1127b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FNMUL_s = FNMUL, 1128b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FNMUL_d = FNMUL | FP64 1129b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1130b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1131b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Floating point data processing 3 source. 1132b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum FPDataProcessing3SourceOp { 1133b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPDataProcessing3SourceFixed = 0x1F000000, 1134b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPDataProcessing3SourceFMask = 0x5F000000, 1135b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPDataProcessing3SourceMask = 0xFFE08000, 1136b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMADD_s = FPDataProcessing3SourceFixed | 0x00000000, 1137b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMSUB_s = FPDataProcessing3SourceFixed | 0x00008000, 1138b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FNMADD_s = FPDataProcessing3SourceFixed | 0x00200000, 1139b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FNMSUB_s = FPDataProcessing3SourceFixed | 0x00208000, 1140b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMADD_d = FPDataProcessing3SourceFixed | 0x00400000, 1141b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMSUB_d = FPDataProcessing3SourceFixed | 0x00408000, 1142b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FNMADD_d = FPDataProcessing3SourceFixed | 0x00600000, 1143b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FNMSUB_d = FPDataProcessing3SourceFixed | 0x00608000 1144b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1145b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1146b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Conversion between floating point and integer. 1147b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum FPIntegerConvertOp { 1148b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPIntegerConvertFixed = 0x1E200000, 1149b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPIntegerConvertFMask = 0x5F20FC00, 1150b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPIntegerConvertMask = 0xFFFFFC00, 1151b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTNS = FPIntegerConvertFixed | 0x00000000, 1152b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTNS_ws = FCVTNS, 1153b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTNS_xs = FCVTNS | SixtyFourBits, 1154b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTNS_wd = FCVTNS | FP64, 1155b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTNS_xd = FCVTNS | SixtyFourBits | FP64, 1156b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTNU = FPIntegerConvertFixed | 0x00010000, 1157b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTNU_ws = FCVTNU, 1158b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTNU_xs = FCVTNU | SixtyFourBits, 1159b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTNU_wd = FCVTNU | FP64, 1160b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTNU_xd = FCVTNU | SixtyFourBits | FP64, 1161b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTPS = FPIntegerConvertFixed | 0x00080000, 1162b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTPS_ws = FCVTPS, 1163b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTPS_xs = FCVTPS | SixtyFourBits, 1164b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTPS_wd = FCVTPS | FP64, 1165b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTPS_xd = FCVTPS | SixtyFourBits | FP64, 1166b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTPU = FPIntegerConvertFixed | 0x00090000, 1167b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTPU_ws = FCVTPU, 1168b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTPU_xs = FCVTPU | SixtyFourBits, 1169b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTPU_wd = FCVTPU | FP64, 1170b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTPU_xd = FCVTPU | SixtyFourBits | FP64, 1171b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTMS = FPIntegerConvertFixed | 0x00100000, 1172b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTMS_ws = FCVTMS, 1173b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTMS_xs = FCVTMS | SixtyFourBits, 1174b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTMS_wd = FCVTMS | FP64, 1175b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTMS_xd = FCVTMS | SixtyFourBits | FP64, 1176b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTMU = FPIntegerConvertFixed | 0x00110000, 1177b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTMU_ws = FCVTMU, 1178b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTMU_xs = FCVTMU | SixtyFourBits, 1179b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTMU_wd = FCVTMU | FP64, 1180b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTMU_xd = FCVTMU | SixtyFourBits | FP64, 1181b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZS = FPIntegerConvertFixed | 0x00180000, 1182b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZS_ws = FCVTZS, 1183b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZS_xs = FCVTZS | SixtyFourBits, 1184b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZS_wd = FCVTZS | FP64, 1185b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZS_xd = FCVTZS | SixtyFourBits | FP64, 1186b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZU = FPIntegerConvertFixed | 0x00190000, 1187b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZU_ws = FCVTZU, 1188b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZU_xs = FCVTZU | SixtyFourBits, 1189b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZU_wd = FCVTZU | FP64, 1190b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZU_xd = FCVTZU | SixtyFourBits | FP64, 1191b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SCVTF = FPIntegerConvertFixed | 0x00020000, 1192b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SCVTF_sw = SCVTF, 1193b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SCVTF_sx = SCVTF | SixtyFourBits, 1194b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SCVTF_dw = SCVTF | FP64, 1195b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SCVTF_dx = SCVTF | SixtyFourBits | FP64, 1196b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UCVTF = FPIntegerConvertFixed | 0x00030000, 1197b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UCVTF_sw = UCVTF, 1198b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UCVTF_sx = UCVTF | SixtyFourBits, 1199b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UCVTF_dw = UCVTF | FP64, 1200b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UCVTF_dx = UCVTF | SixtyFourBits | FP64, 1201b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTAS = FPIntegerConvertFixed | 0x00040000, 1202b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTAS_ws = FCVTAS, 1203b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTAS_xs = FCVTAS | SixtyFourBits, 1204b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTAS_wd = FCVTAS | FP64, 1205b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTAS_xd = FCVTAS | SixtyFourBits | FP64, 1206b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTAU = FPIntegerConvertFixed | 0x00050000, 1207b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTAU_ws = FCVTAU, 1208b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTAU_xs = FCVTAU | SixtyFourBits, 1209b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTAU_wd = FCVTAU | FP64, 1210b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTAU_xd = FCVTAU | SixtyFourBits | FP64, 1211b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMOV_ws = FPIntegerConvertFixed | 0x00060000, 1212b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMOV_sw = FPIntegerConvertFixed | 0x00070000, 1213b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMOV_xd = FMOV_ws | SixtyFourBits | FP64, 1214b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FMOV_dx = FMOV_sw | SixtyFourBits | FP64 1215b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1216b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1217b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Conversion between fixed point and floating point. 1218b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum FPFixedPointConvertOp { 1219b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPFixedPointConvertFixed = 0x1E000000, 1220b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPFixedPointConvertFMask = 0x5F200000, 1221b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FPFixedPointConvertMask = 0xFFFF0000, 1222b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZS_fixed = FPFixedPointConvertFixed | 0x00180000, 1223b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZS_ws_fixed = FCVTZS_fixed, 1224b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZS_xs_fixed = FCVTZS_fixed | SixtyFourBits, 1225b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZS_wd_fixed = FCVTZS_fixed | FP64, 1226b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZS_xd_fixed = FCVTZS_fixed | SixtyFourBits | FP64, 1227b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZU_fixed = FPFixedPointConvertFixed | 0x00190000, 1228b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZU_ws_fixed = FCVTZU_fixed, 1229b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZU_xs_fixed = FCVTZU_fixed | SixtyFourBits, 1230b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZU_wd_fixed = FCVTZU_fixed | FP64, 1231b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch FCVTZU_xd_fixed = FCVTZU_fixed | SixtyFourBits | FP64, 1232b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SCVTF_fixed = FPFixedPointConvertFixed | 0x00020000, 1233b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SCVTF_sw_fixed = SCVTF_fixed, 1234b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SCVTF_sx_fixed = SCVTF_fixed | SixtyFourBits, 1235b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SCVTF_dw_fixed = SCVTF_fixed | FP64, 1236b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch SCVTF_dx_fixed = SCVTF_fixed | SixtyFourBits | FP64, 1237b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UCVTF_fixed = FPFixedPointConvertFixed | 0x00030000, 1238b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UCVTF_sw_fixed = UCVTF_fixed, 1239b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UCVTF_sx_fixed = UCVTF_fixed | SixtyFourBits, 1240b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UCVTF_dw_fixed = UCVTF_fixed | FP64, 1241b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UCVTF_dx_fixed = UCVTF_fixed | SixtyFourBits | FP64 1242b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1243b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1244b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Unimplemented and unallocated instructions. These are defined to make fixed 1245b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// bit assertion easier. 1246b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum UnimplementedOp { 1247b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UnimplementedFixed = 0x00000000, 1248b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UnimplementedFMask = 0x00000000 1249b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1250b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1251b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochenum UnallocatedOp { 1252b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UnallocatedFixed = 0x00000000, 1253b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch UnallocatedFMask = 0x00000000 1254b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 1255b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1256014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace internal 1257014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace v8 1258b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 1259b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#endif // V8_ARM64_CONSTANTS_ARM64_H_ 1260