• Home
  • Raw
  • Download

Lines Matching +full:clang +full:- +full:format +full:- +full:3

30 #include "../globals-vixl.h"
31 #include "../utils-vixl.h"
33 #include "constants-aarch64.h"
37 // ISA constants. --------------------------------------------------------------
52 const unsigned kBRegSizeLog2 = 3;
54 const unsigned kBRegSizeInBytesLog2 = kBRegSizeLog2 - 3;
58 const unsigned kHRegSizeInBytesLog2 = kHRegSizeLog2 - 3;
62 const unsigned kWRegSizeInBytesLog2 = kWRegSizeLog2 - 3;
66 const unsigned kXRegSizeInBytesLog2 = kXRegSizeLog2 - 3;
70 const unsigned kSRegSizeInBytesLog2 = kSRegSizeLog2 - 3;
74 const unsigned kDRegSizeInBytesLog2 = kDRegSizeLog2 - 3;
78 const unsigned kQRegSizeInBytesLog2 = kQRegSizeLog2 - 3;
105 const uint64_t kAddressTagMask = ((UINT64_C(1) << kAddressTagWidth) - 1)
109 // AArch64 floating-point specifics. These match IEEE-754.
117 // Floating-point infinity values.
137 CompareBranchType = 3,
158 // Instructions. ---------------------------------------------------------------
197 int32_t Get##Name() const { return this->Func(HighBit, LowBit); } \
209 return ExtractSignedBitfield32(width - 1, 0, offset); in INSTRUCTION_FIELDS_LIST()
256 int64_t index = (q << 3) | (s << 2) | size; in GetNEONLSIndex()
349 // immediate-operand instructions, so we have to combine two masks here. in GetRdMode()
393 // PC-relative addressing instruction.
400 // Patch a PC-relative offset to refer to 'target'. 'this' may be a branch or
401 // a PC-relative addressing instruction.
406 // The range of a load literal instruction, expressed as 'instr +- range'.
408 // target [instr - range - kInstructionSize, instr + range].
411 (1 << kLoadLiteralImmBitwidth) / 2 - kInstructionSize;
413 // Calculate the address of a literal referred to by a load-literal
424 // Cast the address using a C-style cast. A reinterpret_cast would be in GetLiteralAddress()
505 // Functions for handling NEON vector format information.
552 // clang-format off
557 NF_4H = 3,
568 // clang-format on
576 // Mapping from concatenated bits to format.
584 // Construct a format decoder with increasingly specific format maps for each
585 // subsitution. If no format map is specified, the default is the integer
586 // format map.
588 instrbits_ = instr->GetInstructionBits(); in NEONFormatDecoder()
591 NEONFormatDecoder(const Instruction* instr, const NEONFormatMap* format) { in NEONFormatDecoder() argument
592 instrbits_ = instr->GetInstructionBits(); in NEONFormatDecoder()
593 SetFormatMaps(format); in NEONFormatDecoder()
598 instrbits_ = instr->GetInstructionBits(); in NEONFormatDecoder()
605 instrbits_ = instr->GetInstructionBits(); in NEONFormatDecoder()
609 // Set the format mapping for all or individual substitutions.
618 void SetFormatMap(unsigned index, const NEONFormatMap* format) { in SetFormatMap() argument
620 VIXL_ASSERT(format != NULL); in SetFormatMap()
621 formats_[index] = format; in SetFormatMap()
678 // The integer format map uses three bits (Q, size<1:0>) to encode the
687 // The long integer format map uses two bits (size<1:0>) to encode the
695 // The FP format map uses two bits (Q, size<0>) to encode the NEON FP vector
698 // The FP format map assumes two bits (Q, size<0>) are used to encode the in FPFormatMap()
705 // The load/store format map uses three bits (Q, 11, 10) to encode the
714 // The logical format map uses one bit (Q) to encode the NEON vector format:
721 // The triangular format map uses between two and five bits to encode the NEON
722 // vector format:
723 // xxx10->8B, xxx11->16B, xx100->4H, xx101->8H
724 // x1000->2S, x1001->4S, 10001->2D, all others undefined.
762 // The scalar format map uses two bits (size<1:0>) to encode the NEON scalar
769 // The long scalar format map uses two bits (size<1:0>) to encode the longer
776 // The FP scalar format map assumes one bit (size<0>) is used to encode the
783 // The triangular scalar format map uses between one and four bits to encode
785 // xxx1->B, xx10->H, x100->S, 1000->D, all others undefined.
808 // Get a pointer to a string that represents the format or placeholder for
809 // the specified substitution index, based on the format map and instruction.
819 // instruction based on the specified format mapping.
821 return format_map->map[PickBits(format_map->bits)]; in GetNEONFormat()
825 static const char* NEONFormatAsString(NEONFormat format) { in NEONFormatAsString() argument
826 // clang-format off in NEONFormatAsString()
832 // clang-format on in NEONFormatAsString()
833 VIXL_ASSERT(format < (sizeof(formats) / sizeof(formats[0]))); in NEONFormatAsString()
834 return formats[format]; in NEONFormatAsString()
838 static const char* NEONFormatAsPlaceholder(NEONFormat format) { in NEONFormatAsPlaceholder() argument
839 VIXL_ASSERT((format == NF_B) || (format == NF_H) || (format == NF_S) || in NEONFormatAsPlaceholder()
840 (format == NF_D) || (format == NF_UNDEF)); in NEONFormatAsPlaceholder()
841 // clang-format off in NEONFormatAsPlaceholder()
848 // clang-format on in NEONFormatAsPlaceholder()
849 return formats[format]; in NEONFormatAsPlaceholder()
865 const NEONFormatMap* formats_[3];