1b78f13911bfe6eda303e91ef215c87a165aae8aeAlexandre Rames// Copyright 2014, VIXL authors 2578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// All rights reserved. 3578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// 4578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// Redistribution and use in source and binary forms, with or without 5578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// modification, are permitted provided that the following conditions are met: 6578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// 7578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// * Redistributions of source code must retain the above copyright notice, 8578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// this list of conditions and the following disclaimer. 9578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// * Redistributions in binary form must reproduce the above copyright notice, 10578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// this list of conditions and the following disclaimer in the documentation 11578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// and/or other materials provided with the distribution. 12578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// * Neither the name of ARM Limited nor the names of its contributors may be 13578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// used to endorse or promote products derived from this software without 14578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// specific prior written permission. 15578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// 16578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND 17578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 20578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25578645f14e122d2b87d907e298cda7e7d0babf1farmvixl// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 27b49bdb7996e603555eba4c8b56c7325e3e737ab6Alexandre Rames#include "instrument-aarch64.h" 28578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 29578645f14e122d2b87d907e298cda7e7d0babf1farmvixlnamespace vixl { 3088c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisnamespace aarch64 { 31578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 32578645f14e122d2b87d907e298cda7e7d0babf1farmvixlCounter::Counter(const char* name, CounterType type) 33578645f14e122d2b87d907e298cda7e7d0babf1farmvixl : count_(0), enabled_(false), type_(type) { 34b0c8ae2a5f0abc58f67322052d39bfd47edb2892armvixl VIXL_ASSERT(name != NULL); 35578645f14e122d2b87d907e298cda7e7d0babf1farmvixl strncpy(name_, name, kCounterNameMaxLength); 36578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 37578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 38578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 390f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixlvoid Counter::Enable() { enabled_ = true; } 40578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 41578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 420f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixlvoid Counter::Disable() { enabled_ = false; } 43578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 44578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 450f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixlbool Counter::IsEnabled() { return enabled_; } 46578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 47578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 48578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Counter::Increment() { 49578645f14e122d2b87d907e298cda7e7d0babf1farmvixl if (enabled_) { 50578645f14e122d2b87d907e298cda7e7d0babf1farmvixl count_++; 51578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 52578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 53578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 54578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 5588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisuint64_t Counter::GetCount() { 56578645f14e122d2b87d907e298cda7e7d0babf1farmvixl uint64_t result = count_; 57578645f14e122d2b87d907e298cda7e7d0babf1farmvixl if (type_ == Gauge) { 58578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // If the counter is a Gauge, reset the count after reading. 59578645f14e122d2b87d907e298cda7e7d0babf1farmvixl count_ = 0; 60578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 61578645f14e122d2b87d907e298cda7e7d0babf1farmvixl return result; 62578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 63578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 64578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 6588c46b84df005638546de5e4e965bdcc31352f48Pierre Langloisconst char* Counter::GetName() { return name_; } 66578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 67578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 6888c46b84df005638546de5e4e965bdcc31352f48Pierre LangloisCounterType Counter::GetType() { return type_; } 69578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 70578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 715289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlstruct CounterDescriptor { 72578645f14e122d2b87d907e298cda7e7d0babf1farmvixl const char* name; 73578645f14e122d2b87d907e298cda7e7d0babf1farmvixl CounterType type; 745289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl}; 75578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 76578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 770f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixlstatic const CounterDescriptor kCounterList[] = {{"Instruction", Cumulative}, 78578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 790f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Move Immediate", Gauge}, 800f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Add/Sub DP", Gauge}, 810f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Logical DP", Gauge}, 820f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Other Int DP", Gauge}, 830f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"FP DP", Gauge}, 84578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 850f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Conditional Select", Gauge}, 860f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Conditional Compare", Gauge}, 87578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 880f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Unconditional Branch", 890f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl Gauge}, 900f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Compare and Branch", Gauge}, 910f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Test and Branch", Gauge}, 920f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Conditional Branch", Gauge}, 93578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 940f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Load Integer", Gauge}, 950f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Load FP", Gauge}, 960f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Load Pair", Gauge}, 970f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Load Literal", Gauge}, 98578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 990f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Store Integer", Gauge}, 1000f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Store FP", Gauge}, 1010f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Store Pair", Gauge}, 102578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 1030f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"PC Addressing", Gauge}, 1040f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Other", Gauge}, 1050f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"NEON", Gauge}, 1060f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl {"Crypto", Gauge}}; 107578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 108578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 109578645f14e122d2b87d907e298cda7e7d0babf1farmvixlInstrument::Instrument(const char* datafile, uint64_t sample_period) 110578645f14e122d2b87d907e298cda7e7d0babf1farmvixl : output_stream_(stdout), sample_period_(sample_period) { 111578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Set up the output stream. If datafile is non-NULL, use that file. If it 112578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // can't be opened, or datafile is NULL, use stdout. 113578645f14e122d2b87d907e298cda7e7d0babf1farmvixl if (datafile != NULL) { 114578645f14e122d2b87d907e298cda7e7d0babf1farmvixl output_stream_ = fopen(datafile, "w"); 115578645f14e122d2b87d907e298cda7e7d0babf1farmvixl if (output_stream_ == NULL) { 116578645f14e122d2b87d907e298cda7e7d0babf1farmvixl printf("Can't open output file %s. Using stdout.\n", datafile); 117578645f14e122d2b87d907e298cda7e7d0babf1farmvixl output_stream_ = stdout; 118578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 119578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 120578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 121578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static const int num_counters = 1220f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl sizeof(kCounterList) / sizeof(CounterDescriptor); 123578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 124578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Dump an instrumentation description comment at the top of the file. 125578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(output_stream_, "# counters=%d\n", num_counters); 126578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(output_stream_, "# sample_period=%" PRIu64 "\n", sample_period_); 127578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 128578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Construct Counter objects from counter description array. 129578645f14e122d2b87d907e298cda7e7d0babf1farmvixl for (int i = 0; i < num_counters; i++) { 130578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Counter* counter = new Counter(kCounterList[i].name, kCounterList[i].type); 131578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counters_.push_back(counter); 132578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 133578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 134578645f14e122d2b87d907e298cda7e7d0babf1farmvixl DumpCounterNames(); 135578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 136578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 137578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 138578645f14e122d2b87d907e298cda7e7d0babf1farmvixlInstrument::~Instrument() { 139578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Dump any remaining instruction data to the output file. 140578645f14e122d2b87d907e298cda7e7d0babf1farmvixl DumpCounters(); 141578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 142578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Free all the counter objects. 143578645f14e122d2b87d907e298cda7e7d0babf1farmvixl std::list<Counter*>::iterator it; 144578645f14e122d2b87d907e298cda7e7d0babf1farmvixl for (it = counters_.begin(); it != counters_.end(); it++) { 145f37fdc0b307fc66239b8b754b0465d36bc0f8aedarmvixl delete *it; 146578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 147578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 148578645f14e122d2b87d907e298cda7e7d0babf1farmvixl if (output_stream_ != stdout) { 149578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fclose(output_stream_); 150578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 151578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 152578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 153578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 154578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Instrument::Update() { 155578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Increment the instruction counter, and dump all counters if a sample period 156578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // has elapsed. 157578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Instruction"); 15888c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois VIXL_ASSERT(counter->GetType() == Cumulative); 159578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 160578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 1610f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl if ((sample_period_ != 0) && counter->IsEnabled() && 16288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois (counter->GetCount() % sample_period_) == 0) { 163578645f14e122d2b87d907e298cda7e7d0babf1farmvixl DumpCounters(); 164578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 165578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 166578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 167578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 168578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Instrument::DumpCounters() { 169578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Iterate through the counter objects, dumping their values to the output 170578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // stream. 171578645f14e122d2b87d907e298cda7e7d0babf1farmvixl std::list<Counter*>::const_iterator it; 172578645f14e122d2b87d907e298cda7e7d0babf1farmvixl for (it = counters_.begin(); it != counters_.end(); it++) { 17388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois fprintf(output_stream_, "%" PRIu64 ",", (*it)->GetCount()); 174578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 175578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(output_stream_, "\n"); 176578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fflush(output_stream_); 177578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 178578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 179578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 180578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Instrument::DumpCounterNames() { 181578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Iterate through the counter objects, dumping the counter names to the 182578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // output stream. 183578645f14e122d2b87d907e298cda7e7d0babf1farmvixl std::list<Counter*>::const_iterator it; 184578645f14e122d2b87d907e298cda7e7d0babf1farmvixl for (it = counters_.begin(); it != counters_.end(); it++) { 18588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois fprintf(output_stream_, "%s,", (*it)->GetName()); 186578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 187578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(output_stream_, "\n"); 188578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fflush(output_stream_); 189578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 190578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 191578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 192578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Instrument::HandleInstrumentationEvent(unsigned event) { 193578645f14e122d2b87d907e298cda7e7d0babf1farmvixl switch (event) { 1940f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl case InstrumentStateEnable: 1950f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl Enable(); 1960f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl break; 1970f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl case InstrumentStateDisable: 1980f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl Disable(); 1990f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl break; 2000f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl default: 2010f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl DumpEventMarker(event); 202578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 203578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 204578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 205578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 206578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Instrument::DumpEventMarker(unsigned marker) { 207578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Dumpan event marker to the output stream as a specially formatted comment 208578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // line. 209578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Instruction"); 210578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 2110f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl fprintf(output_stream_, 2120f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl "# %c%c @ %" PRId64 "\n", 2130f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl marker & 0xff, 2140f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl (marker >> 8) & 0xff, 21588c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois counter->GetCount()); 216578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 217578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 218578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 219578645f14e122d2b87d907e298cda7e7d0babf1farmvixlCounter* Instrument::GetCounter(const char* name) { 220578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Get a Counter object by name from the counter list. 221578645f14e122d2b87d907e298cda7e7d0babf1farmvixl std::list<Counter*>::const_iterator it; 222578645f14e122d2b87d907e298cda7e7d0babf1farmvixl for (it = counters_.begin(); it != counters_.end(); it++) { 22388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois if (strcmp((*it)->GetName(), name) == 0) { 224578645f14e122d2b87d907e298cda7e7d0babf1farmvixl return *it; 225578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 226578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 227578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 228578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // A Counter by that name does not exist: print an error message to stderr 229578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // and the output file, and exit. 230578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static const char* error_message = 2310f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl "# Error: Unknown counter \"%s\". Exiting.\n"; 232578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(stderr, error_message, name); 233578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(output_stream_, error_message, name); 234578645f14e122d2b87d907e298cda7e7d0babf1farmvixl exit(1); 235578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 236578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 237578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 238578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Instrument::Enable() { 239578645f14e122d2b87d907e298cda7e7d0babf1farmvixl std::list<Counter*>::iterator it; 240578645f14e122d2b87d907e298cda7e7d0babf1farmvixl for (it = counters_.begin(); it != counters_.end(); it++) { 241578645f14e122d2b87d907e298cda7e7d0babf1farmvixl (*it)->Enable(); 242578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 243578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 244578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 245578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 246578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Instrument::Disable() { 247578645f14e122d2b87d907e298cda7e7d0babf1farmvixl std::list<Counter*>::iterator it; 248578645f14e122d2b87d907e298cda7e7d0babf1farmvixl for (it = counters_.begin(); it != counters_.end(); it++) { 249578645f14e122d2b87d907e298cda7e7d0babf1farmvixl (*it)->Disable(); 250578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 251578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 252578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 253578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 254c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitPCRelAddressing(const Instruction* instr) { 255578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 256578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 257578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("PC Addressing"); 258578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 259578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 260578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 261578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 262c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitAddSubImmediate(const Instruction* instr) { 263578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 264578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 265578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Add/Sub DP"); 266578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 267578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 268578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 269578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 270c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitLogicalImmediate(const Instruction* instr) { 271578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 272578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 273578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Logical DP"); 274578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 275578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 276578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 277578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 278c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitMoveWideImmediate(const Instruction* instr) { 279578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 280578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Move Immediate"); 281578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 28288c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois if (instr->IsMovn() && (instr->GetRd() == kZeroRegCode)) { 28388c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois unsigned imm = instr->GetImmMoveWide(); 284578645f14e122d2b87d907e298cda7e7d0babf1farmvixl HandleInstrumentationEvent(imm); 285578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } else { 286578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 287578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 288578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 289578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 290578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 291c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitBitfield(const Instruction* instr) { 292578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 293578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 294578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other Int DP"); 295578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 296578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 297578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 298578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 299c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitExtract(const Instruction* instr) { 300578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 301578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 302578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other Int DP"); 303578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 304578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 305578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 306578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 307c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitUnconditionalBranch(const Instruction* instr) { 308578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 309578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 310578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Unconditional Branch"); 311578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 312578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 313578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 314578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 315c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitUnconditionalBranchToRegister(const Instruction* instr) { 316578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 317578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 318578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Unconditional Branch"); 319578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 320578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 321578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 322578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 323c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitCompareBranch(const Instruction* instr) { 324578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 325578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 326578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Compare and Branch"); 327578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 328578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 329578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 330578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 331c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitTestBranch(const Instruction* instr) { 332578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 333578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 334578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Test and Branch"); 335578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 336578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 337578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 338578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 339c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitConditionalBranch(const Instruction* instr) { 340578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 341578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 342578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Conditional Branch"); 343578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 344578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 345578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 346578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 347c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitSystem(const Instruction* instr) { 348578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 349578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 350578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other"); 351578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 352578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 353578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 354578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 355c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitException(const Instruction* instr) { 356578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 357578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 358578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other"); 359578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 360578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 361578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 362578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 363c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::InstrumentLoadStorePair(const Instruction* instr) { 364578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* load_pair_counter = GetCounter("Load Pair"); 365578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* store_pair_counter = GetCounter("Store Pair"); 366578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 367578645f14e122d2b87d907e298cda7e7d0babf1farmvixl if (instr->Mask(LoadStorePairLBit) != 0) { 368578645f14e122d2b87d907e298cda7e7d0babf1farmvixl load_pair_counter->Increment(); 369578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } else { 370578645f14e122d2b87d907e298cda7e7d0babf1farmvixl store_pair_counter->Increment(); 371578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 372578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 373578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 374578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 375c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitLoadStorePairPostIndex(const Instruction* instr) { 376578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 377578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStorePair(instr); 378578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 379578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 380578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 381c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitLoadStorePairOffset(const Instruction* instr) { 382578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 383578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStorePair(instr); 384578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 385578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 386578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 387c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitLoadStorePairPreIndex(const Instruction* instr) { 388578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 389578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStorePair(instr); 390578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 391578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 392578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 393c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitLoadStorePairNonTemporal(const Instruction* instr) { 394578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 395578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStorePair(instr); 396578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 397578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 398578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 399c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitLoadStoreExclusive(const Instruction* instr) { 4004a102baf640077d6794c0b33bb976f94b86c532barmvixl USE(instr); 4014a102baf640077d6794c0b33bb976f94b86c532barmvixl Update(); 4024a102baf640077d6794c0b33bb976f94b86c532barmvixl static Counter* counter = GetCounter("Other"); 4034a102baf640077d6794c0b33bb976f94b86c532barmvixl counter->Increment(); 4044a102baf640077d6794c0b33bb976f94b86c532barmvixl} 4054a102baf640077d6794c0b33bb976f94b86c532barmvixl 4064a102baf640077d6794c0b33bb976f94b86c532barmvixl 407c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitLoadLiteral(const Instruction* instr) { 408578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 409578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 410578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Load Literal"); 411578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 412578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 413578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 414578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 415c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::InstrumentLoadStore(const Instruction* instr) { 416578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* load_int_counter = GetCounter("Load Integer"); 417578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* store_int_counter = GetCounter("Store Integer"); 418578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* load_fp_counter = GetCounter("Load FP"); 419578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* store_fp_counter = GetCounter("Store FP"); 420578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 4215289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl switch (instr->Mask(LoadStoreMask)) { 4226e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl case STRB_w: 4236e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl case STRH_w: 4246e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl case STR_w: 4256e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl VIXL_FALLTHROUGH(); 4260f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl case STR_x: 4270f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl store_int_counter->Increment(); 4280f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl break; 4296e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl case STR_s: 4306e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl VIXL_FALLTHROUGH(); 4310f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl case STR_d: 4320f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl store_fp_counter->Increment(); 4330f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl break; 4346e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl case LDRB_w: 4356e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl case LDRH_w: 4366e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl case LDR_w: 4376e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl case LDR_x: 4386e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl case LDRSB_x: 4396e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl case LDRSH_x: 4406e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl case LDRSW_x: 4416e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl case LDRSB_w: 4426e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl VIXL_FALLTHROUGH(); 4430f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl case LDRSH_w: 4440f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl load_int_counter->Increment(); 4450f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl break; 4466e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl case LDR_s: 4476e2c8275d5f34a531fe1eef7a7aa877601be8558armvixl VIXL_FALLTHROUGH(); 4480f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl case LDR_d: 4490f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl load_fp_counter->Increment(); 4500f35e36b7f5d1d2f4d95989b418447e1a4bcc8cdarmvixl break; 451578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 452578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 453578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 454578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 455c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitLoadStoreUnscaledOffset(const Instruction* instr) { 456578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 457578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStore(instr); 458578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 459578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 460578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 461c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitLoadStorePostIndex(const Instruction* instr) { 462578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 463578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 464578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStore(instr); 465578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 466578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 467578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 468c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitLoadStorePreIndex(const Instruction* instr) { 469578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 470578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStore(instr); 471578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 472578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 473578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 474c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitLoadStoreRegisterOffset(const Instruction* instr) { 475578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 476578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStore(instr); 477578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 478578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 479578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 480c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitLoadStoreUnsignedOffset(const Instruction* instr) { 481578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 482578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStore(instr); 483578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 484578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 485578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 486c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitLogicalShifted(const Instruction* instr) { 487578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 488578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 489578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Logical DP"); 490578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 491578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 492578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 493578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 494c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitAddSubShifted(const Instruction* instr) { 495578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 496578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 497578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Add/Sub DP"); 498578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 499578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 500578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 501578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 502c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitAddSubExtended(const Instruction* instr) { 503578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 504578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 505578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Add/Sub DP"); 506578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 507578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 508578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 509578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 510c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitAddSubWithCarry(const Instruction* instr) { 511578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 512578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 513578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Add/Sub DP"); 514578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 515578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 516578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 517578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 518c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitConditionalCompareRegister(const Instruction* instr) { 519578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 520578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 521578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Conditional Compare"); 522578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 523578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 524578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 525578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 526c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitConditionalCompareImmediate(const Instruction* instr) { 527578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 528578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 529578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Conditional Compare"); 530578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 531578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 532578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 533578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 534c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitConditionalSelect(const Instruction* instr) { 535578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 536578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 537578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Conditional Select"); 538578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 539578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 540578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 541578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 542c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitDataProcessing1Source(const Instruction* instr) { 543578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 544578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 545578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other Int DP"); 546578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 547578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 548578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 549578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 550c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitDataProcessing2Source(const Instruction* instr) { 551578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 552578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 553578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other Int DP"); 554578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 555578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 556578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 557578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 558c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitDataProcessing3Source(const Instruction* instr) { 559578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 560578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 561578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other Int DP"); 562578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 563578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 564578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 565578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 566c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitFPCompare(const Instruction* instr) { 567578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 568578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 569578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("FP DP"); 570578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 571578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 572578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 573578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 574c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitFPConditionalCompare(const Instruction* instr) { 575578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 576578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 577578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Conditional Compare"); 578578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 579578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 580578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 581578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 582c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitFPConditionalSelect(const Instruction* instr) { 583578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 584578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 585578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Conditional Select"); 586578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 587578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 588578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 589578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 590c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitFPImmediate(const Instruction* instr) { 591578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 592578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 593578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("FP DP"); 594578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 595578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 596578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 597578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 598c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitFPDataProcessing1Source(const Instruction* instr) { 599578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 600578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 601578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("FP DP"); 602578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 603578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 604578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 605578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 606c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitFPDataProcessing2Source(const Instruction* instr) { 607578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 608578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 609578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("FP DP"); 610578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 611578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 612578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 613578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 614c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitFPDataProcessing3Source(const Instruction* instr) { 615578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 616578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 617578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("FP DP"); 618578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 619578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 620578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 621578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 622c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitFPIntegerConvert(const Instruction* instr) { 623578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 624578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 625578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("FP DP"); 626578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 627578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 628578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 629578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 630c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitFPFixedPointConvert(const Instruction* instr) { 631578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 632578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 633578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("FP DP"); 634578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 635578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 636578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 637578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 6385289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitCrypto2RegSHA(const Instruction* instr) { 6395289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 6405289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 6415289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("Crypto"); 6425289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 6435289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 6445289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 6455289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 6465289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitCrypto3RegSHA(const Instruction* instr) { 6475289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 6485289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 6495289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("Crypto"); 6505289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 6515289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 6525289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 6535289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 6545289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitCryptoAES(const Instruction* instr) { 6555289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 6565289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 6575289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("Crypto"); 6585289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 6595289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 6605289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 6615289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 6625289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEON2RegMisc(const Instruction* instr) { 6635289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 6645289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 6655289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 6665289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 6675289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 6685289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 6695289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 6705289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEON3Same(const Instruction* instr) { 6715289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 6725289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 6735289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 6745289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 6755289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 6765289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 6775289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 6785289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEON3Different(const Instruction* instr) { 6795289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 6805289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 6815289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 6825289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 6835289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 6845289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 6855289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 6865289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONAcrossLanes(const Instruction* instr) { 6875289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 6885289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 6895289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 6905289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 6915289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 6925289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 6935289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 6945289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONByIndexedElement(const Instruction* instr) { 6955289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 6965289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 6975289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 6985289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 6995289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 7005289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7015289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7025289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONCopy(const Instruction* instr) { 7035289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 7045289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 7055289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 7065289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 7075289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 7085289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7095289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7105289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONExtract(const Instruction* instr) { 7115289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 7125289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 7135289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 7145289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 7155289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 7165289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7175289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7185289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONLoadStoreMultiStruct(const Instruction* instr) { 7195289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 7205289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 7215289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 7225289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 7235289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 7245289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7255289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7265289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONLoadStoreMultiStructPostIndex( 7275289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl const Instruction* instr) { 7285289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 7295289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 7305289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 7315289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 7325289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 7335289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7345289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7355289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONLoadStoreSingleStruct(const Instruction* instr) { 7365289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 7375289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 7385289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 7395289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 7405289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 7415289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7425289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7435289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONLoadStoreSingleStructPostIndex( 7445289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl const Instruction* instr) { 7455289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 7465289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 7475289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 7485289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 7495289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 7505289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7515289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7525289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONModifiedImmediate(const Instruction* instr) { 7535289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 7545289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 7555289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 7565289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 7575289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 7585289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7595289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7605289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONScalar2RegMisc(const Instruction* instr) { 7615289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 7625289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 7635289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 7645289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 7655289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 7665289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7675289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7685289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONScalar3Diff(const Instruction* instr) { 7695289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 7705289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 7715289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 7725289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 7735289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 7745289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7755289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7765289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONScalar3Same(const Instruction* instr) { 7775289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 7785289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 7795289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 7805289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 7815289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 7825289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7835289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7845289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONScalarByIndexedElement(const Instruction* instr) { 7855289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 7865289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 7875289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 7885289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 7895289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 7905289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7915289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7925289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONScalarCopy(const Instruction* instr) { 7935289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 7945289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 7955289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 7965289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 7975289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 7985289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 7995289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 8005289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONScalarPairwise(const Instruction* instr) { 8015289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 8025289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 8035289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 8045289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 8055289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 8065289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 8075289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 8085289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONScalarShiftImmediate(const Instruction* instr) { 8095289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 8105289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 8115289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 8125289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 8135289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 8145289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 8155289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 8165289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONShiftImmediate(const Instruction* instr) { 8175289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 8185289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 8195289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 8205289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 8215289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 8225289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 8235289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 8245289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONTable(const Instruction* instr) { 8255289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 8265289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 8275289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 8285289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 8295289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 8305289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 8315289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 8325289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixlvoid Instrument::VisitNEONPerm(const Instruction* instr) { 8335289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl USE(instr); 8345289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl Update(); 8355289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl static Counter* counter = GetCounter("NEON"); 8365289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl counter->Increment(); 8375289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl} 8385289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 8395289c5900fb214f2f6aa61e2a9263730dcf4cc17armvixl 840c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitUnallocated(const Instruction* instr) { 841578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 842578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 843578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other"); 844578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 845578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 846578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 847578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 848c68cb64496485710cdb5b8480f8fee287058c93farmvixlvoid Instrument::VisitUnimplemented(const Instruction* instr) { 849578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 850578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 851578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other"); 852578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 853578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 854578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 855578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 85688c46b84df005638546de5e4e965bdcc31352f48Pierre Langlois} // namespace aarch64 857330dc7153e671968beb67f09ed2cb7b5bda334dbarmvixl} // namespace vixl 858