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