10cc8b6ece4b3e757e11a906a81ece292437713abarmvixl// Copyright 2014, ARM Limited 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 270cc8b6ece4b3e757e11a906a81ece292437713abarmvixl#include "vixl/a64/instrument-a64.h" 28578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 29578645f14e122d2b87d907e298cda7e7d0babf1farmvixlnamespace vixl { 30578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 31578645f14e122d2b87d907e298cda7e7d0babf1farmvixlCounter::Counter(const char* name, CounterType type) 32578645f14e122d2b87d907e298cda7e7d0babf1farmvixl : count_(0), enabled_(false), type_(type) { 331123fee00a9cef7f1b448eab3c2ca333dbd426d7armvixl VIXL_ASSERT(name != NULL); 34578645f14e122d2b87d907e298cda7e7d0babf1farmvixl strncpy(name_, name, kCounterNameMaxLength); 35578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 36578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 37578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 38578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Counter::Enable() { 39578645f14e122d2b87d907e298cda7e7d0babf1farmvixl enabled_ = true; 40578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 41578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 42578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 43578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Counter::Disable() { 44578645f14e122d2b87d907e298cda7e7d0babf1farmvixl enabled_ = false; 45578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 46578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 47578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 48578645f14e122d2b87d907e298cda7e7d0babf1farmvixlbool Counter::IsEnabled() { 49578645f14e122d2b87d907e298cda7e7d0babf1farmvixl return enabled_; 50578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 51578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 52578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 53578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Counter::Increment() { 54578645f14e122d2b87d907e298cda7e7d0babf1farmvixl if (enabled_) { 55578645f14e122d2b87d907e298cda7e7d0babf1farmvixl count_++; 56578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 57578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 58578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 59578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 60578645f14e122d2b87d907e298cda7e7d0babf1farmvixluint64_t Counter::count() { 61578645f14e122d2b87d907e298cda7e7d0babf1farmvixl uint64_t result = count_; 62578645f14e122d2b87d907e298cda7e7d0babf1farmvixl if (type_ == Gauge) { 63578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // If the counter is a Gauge, reset the count after reading. 64578645f14e122d2b87d907e298cda7e7d0babf1farmvixl count_ = 0; 65578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 66578645f14e122d2b87d907e298cda7e7d0babf1farmvixl return result; 67578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 68578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 69578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 70578645f14e122d2b87d907e298cda7e7d0babf1farmvixlconst char* Counter::name() { 71578645f14e122d2b87d907e298cda7e7d0babf1farmvixl return name_; 72578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 73578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 74578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 75578645f14e122d2b87d907e298cda7e7d0babf1farmvixlCounterType Counter::type() { 76578645f14e122d2b87d907e298cda7e7d0babf1farmvixl return type_; 77578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 78578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 79578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 800cc8b6ece4b3e757e11a906a81ece292437713abarmvixlstruct CounterDescriptor { 81578645f14e122d2b87d907e298cda7e7d0babf1farmvixl const char* name; 82578645f14e122d2b87d907e298cda7e7d0babf1farmvixl CounterType type; 830cc8b6ece4b3e757e11a906a81ece292437713abarmvixl}; 84578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 85578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 86578645f14e122d2b87d907e298cda7e7d0babf1farmvixlstatic const CounterDescriptor kCounterList[] = { 87578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Instruction", Cumulative}, 88578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 89578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Move Immediate", Gauge}, 90578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Add/Sub DP", Gauge}, 91578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Logical DP", Gauge}, 92578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Other Int DP", Gauge}, 93578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"FP DP", Gauge}, 94578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 95578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Conditional Select", Gauge}, 96578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Conditional Compare", Gauge}, 97578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 98578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Unconditional Branch", Gauge}, 99578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Compare and Branch", Gauge}, 100578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Test and Branch", Gauge}, 101578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Conditional Branch", Gauge}, 102578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 103578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Load Integer", Gauge}, 104578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Load FP", Gauge}, 105578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Load Pair", Gauge}, 106578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Load Literal", Gauge}, 107578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 108578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Store Integer", Gauge}, 109578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Store FP", Gauge}, 110578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Store Pair", Gauge}, 111578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 112578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"PC Addressing", Gauge}, 113578645f14e122d2b87d907e298cda7e7d0babf1farmvixl {"Other", Gauge}, 1140cc8b6ece4b3e757e11a906a81ece292437713abarmvixl {"NEON", Gauge}, 1150cc8b6ece4b3e757e11a906a81ece292437713abarmvixl {"Crypto", Gauge} 116578645f14e122d2b87d907e298cda7e7d0babf1farmvixl}; 117578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 118578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 119578645f14e122d2b87d907e298cda7e7d0babf1farmvixlInstrument::Instrument(const char* datafile, uint64_t sample_period) 120578645f14e122d2b87d907e298cda7e7d0babf1farmvixl : output_stream_(stdout), sample_period_(sample_period) { 121578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 122578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Set up the output stream. If datafile is non-NULL, use that file. If it 123578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // can't be opened, or datafile is NULL, use stdout. 124578645f14e122d2b87d907e298cda7e7d0babf1farmvixl if (datafile != NULL) { 125578645f14e122d2b87d907e298cda7e7d0babf1farmvixl output_stream_ = fopen(datafile, "w"); 126578645f14e122d2b87d907e298cda7e7d0babf1farmvixl if (output_stream_ == NULL) { 127578645f14e122d2b87d907e298cda7e7d0babf1farmvixl printf("Can't open output file %s. Using stdout.\n", datafile); 128578645f14e122d2b87d907e298cda7e7d0babf1farmvixl output_stream_ = stdout; 129578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 130578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 131578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 132578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static const int num_counters = 133578645f14e122d2b87d907e298cda7e7d0babf1farmvixl sizeof(kCounterList) / sizeof(CounterDescriptor); 134578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 135578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Dump an instrumentation description comment at the top of the file. 136578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(output_stream_, "# counters=%d\n", num_counters); 137578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(output_stream_, "# sample_period=%" PRIu64 "\n", sample_period_); 138578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 139578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Construct Counter objects from counter description array. 140578645f14e122d2b87d907e298cda7e7d0babf1farmvixl for (int i = 0; i < num_counters; i++) { 141578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Counter* counter = new Counter(kCounterList[i].name, kCounterList[i].type); 142578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counters_.push_back(counter); 143578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 144578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 145578645f14e122d2b87d907e298cda7e7d0babf1farmvixl DumpCounterNames(); 146578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 147578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 148578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 149578645f14e122d2b87d907e298cda7e7d0babf1farmvixlInstrument::~Instrument() { 150578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Dump any remaining instruction data to the output file. 151578645f14e122d2b87d907e298cda7e7d0babf1farmvixl DumpCounters(); 152578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 153578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Free all the counter objects. 154578645f14e122d2b87d907e298cda7e7d0babf1farmvixl std::list<Counter*>::iterator it; 155578645f14e122d2b87d907e298cda7e7d0babf1farmvixl for (it = counters_.begin(); it != counters_.end(); it++) { 156f37fdc0b307fc66239b8b754b0465d36bc0f8aedarmvixl delete *it; 157578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 158578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 159578645f14e122d2b87d907e298cda7e7d0babf1farmvixl if (output_stream_ != stdout) { 160578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fclose(output_stream_); 161578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 162578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 163578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 164578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 165578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Instrument::Update() { 166578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Increment the instruction counter, and dump all counters if a sample period 167578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // has elapsed. 168578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Instruction"); 1691123fee00a9cef7f1b448eab3c2ca333dbd426d7armvixl VIXL_ASSERT(counter->type() == Cumulative); 170578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 171578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 1729795cffa6b242fddee25847d17136a8da5b5c2d7Phil Wang if ((sample_period_ != 0) && counter->IsEnabled() 1739795cffa6b242fddee25847d17136a8da5b5c2d7Phil Wang && (counter->count() % sample_period_) == 0) { 174578645f14e122d2b87d907e298cda7e7d0babf1farmvixl DumpCounters(); 175578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 176578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 177578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 178578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 179578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Instrument::DumpCounters() { 180578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Iterate through the counter objects, dumping their values to the output 181578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // stream. 182578645f14e122d2b87d907e298cda7e7d0babf1farmvixl std::list<Counter*>::const_iterator it; 183578645f14e122d2b87d907e298cda7e7d0babf1farmvixl for (it = counters_.begin(); it != counters_.end(); it++) { 184578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(output_stream_, "%" PRIu64 ",", (*it)->count()); 185578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 186578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(output_stream_, "\n"); 187578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fflush(output_stream_); 188578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 189578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 190578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 191578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Instrument::DumpCounterNames() { 192578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Iterate through the counter objects, dumping the counter names to the 193578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // output stream. 194578645f14e122d2b87d907e298cda7e7d0babf1farmvixl std::list<Counter*>::const_iterator it; 195578645f14e122d2b87d907e298cda7e7d0babf1farmvixl for (it = counters_.begin(); it != counters_.end(); it++) { 196578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(output_stream_, "%s,", (*it)->name()); 197578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 198578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(output_stream_, "\n"); 199578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fflush(output_stream_); 200578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 201578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 202578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 203578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Instrument::HandleInstrumentationEvent(unsigned event) { 204578645f14e122d2b87d907e298cda7e7d0babf1farmvixl switch (event) { 205578645f14e122d2b87d907e298cda7e7d0babf1farmvixl case InstrumentStateEnable: Enable(); break; 206578645f14e122d2b87d907e298cda7e7d0babf1farmvixl case InstrumentStateDisable: Disable(); break; 207578645f14e122d2b87d907e298cda7e7d0babf1farmvixl default: DumpEventMarker(event); 208578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 209578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 210578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 211578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 212578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Instrument::DumpEventMarker(unsigned marker) { 213578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Dumpan event marker to the output stream as a specially formatted comment 214578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // line. 215578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Instruction"); 216578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 217578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(output_stream_, "# %c%c @ %" PRId64 "\n", marker & 0xff, 218578645f14e122d2b87d907e298cda7e7d0babf1farmvixl (marker >> 8) & 0xff, counter->count()); 219578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 220578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 221578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 222578645f14e122d2b87d907e298cda7e7d0babf1farmvixlCounter* Instrument::GetCounter(const char* name) { 223578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // Get a Counter object by name from the counter list. 224578645f14e122d2b87d907e298cda7e7d0babf1farmvixl std::list<Counter*>::const_iterator it; 225578645f14e122d2b87d907e298cda7e7d0babf1farmvixl for (it = counters_.begin(); it != counters_.end(); it++) { 226578645f14e122d2b87d907e298cda7e7d0babf1farmvixl if (strcmp((*it)->name(), name) == 0) { 227578645f14e122d2b87d907e298cda7e7d0babf1farmvixl return *it; 228578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 229578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 230578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 231578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // A Counter by that name does not exist: print an error message to stderr 232578645f14e122d2b87d907e298cda7e7d0babf1farmvixl // and the output file, and exit. 233578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static const char* error_message = 234578645f14e122d2b87d907e298cda7e7d0babf1farmvixl "# Error: Unknown counter \"%s\". Exiting.\n"; 235578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(stderr, error_message, name); 236578645f14e122d2b87d907e298cda7e7d0babf1farmvixl fprintf(output_stream_, error_message, name); 237578645f14e122d2b87d907e298cda7e7d0babf1farmvixl exit(1); 238578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 239578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 240578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 241578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Instrument::Enable() { 242578645f14e122d2b87d907e298cda7e7d0babf1farmvixl std::list<Counter*>::iterator it; 243578645f14e122d2b87d907e298cda7e7d0babf1farmvixl for (it = counters_.begin(); it != counters_.end(); it++) { 244578645f14e122d2b87d907e298cda7e7d0babf1farmvixl (*it)->Enable(); 245578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 246578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 247578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 248578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 249578645f14e122d2b87d907e298cda7e7d0babf1farmvixlvoid Instrument::Disable() { 250578645f14e122d2b87d907e298cda7e7d0babf1farmvixl std::list<Counter*>::iterator it; 251578645f14e122d2b87d907e298cda7e7d0babf1farmvixl for (it = counters_.begin(); it != counters_.end(); it++) { 252578645f14e122d2b87d907e298cda7e7d0babf1farmvixl (*it)->Disable(); 253578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 254578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 255578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 256578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 25739ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitPCRelAddressing(const Instruction* instr) { 258578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 259578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 260578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("PC Addressing"); 261578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 262578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 263578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 264578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 26539ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitAddSubImmediate(const Instruction* instr) { 266578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 267578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 268578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Add/Sub DP"); 269578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 270578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 271578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 272578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 27339ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitLogicalImmediate(const Instruction* instr) { 274578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 275578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 276578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Logical DP"); 277578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 278578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 279578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 280578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 28139ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitMoveWideImmediate(const Instruction* instr) { 282578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 283578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Move Immediate"); 284578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 285578645f14e122d2b87d907e298cda7e7d0babf1farmvixl if (instr->IsMovn() && (instr->Rd() == kZeroRegCode)) { 286578645f14e122d2b87d907e298cda7e7d0babf1farmvixl unsigned imm = instr->ImmMoveWide(); 287578645f14e122d2b87d907e298cda7e7d0babf1farmvixl HandleInstrumentationEvent(imm); 288578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } else { 289578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 290578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 291578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 292578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 293578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 29439ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitBitfield(const Instruction* instr) { 295578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 296578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 297578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other Int DP"); 298578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 299578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 300578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 301578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 30239ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitExtract(const Instruction* instr) { 303578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 304578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 305578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other Int DP"); 306578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 307578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 308578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 309578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 31039ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitUnconditionalBranch(const Instruction* instr) { 311578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 312578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 313578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Unconditional Branch"); 314578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 315578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 316578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 317578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 31839ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitUnconditionalBranchToRegister(const Instruction* instr) { 319578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 320578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 321578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Unconditional Branch"); 322578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 323578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 324578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 325578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 32639ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitCompareBranch(const Instruction* instr) { 327578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 328578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 329578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Compare and Branch"); 330578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 331578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 332578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 333578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 33439ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitTestBranch(const Instruction* instr) { 335578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 336578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 337578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Test and Branch"); 338578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 339578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 340578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 341578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 34239ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitConditionalBranch(const Instruction* instr) { 343578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 344578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 345578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Conditional Branch"); 346578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 347578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 348578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 349578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 35039ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitSystem(const Instruction* instr) { 351578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 352578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 353578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other"); 354578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 355578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 356578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 357578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 35839ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitException(const Instruction* instr) { 359578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 360578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 361578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other"); 362578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 363578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 364578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 365578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 36639ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::InstrumentLoadStorePair(const Instruction* instr) { 367578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* load_pair_counter = GetCounter("Load Pair"); 368578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* store_pair_counter = GetCounter("Store Pair"); 369578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 370578645f14e122d2b87d907e298cda7e7d0babf1farmvixl if (instr->Mask(LoadStorePairLBit) != 0) { 371578645f14e122d2b87d907e298cda7e7d0babf1farmvixl load_pair_counter->Increment(); 372578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } else { 373578645f14e122d2b87d907e298cda7e7d0babf1farmvixl store_pair_counter->Increment(); 374578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 375578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 376578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 377578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 37839ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitLoadStorePairPostIndex(const Instruction* instr) { 379578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 380578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStorePair(instr); 381578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 382578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 383578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 38439ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitLoadStorePairOffset(const Instruction* instr) { 385578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 386578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStorePair(instr); 387578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 388578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 389578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 39039ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitLoadStorePairPreIndex(const Instruction* instr) { 391578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 392578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStorePair(instr); 393578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 394578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 395578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 39639ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitLoadStorePairNonTemporal(const Instruction* instr) { 397578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 398578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStorePair(instr); 399578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 400578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 401578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 40239ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitLoadStoreExclusive(const Instruction* instr) { 40390b0414b6c794be58f34813f84c2c06e6a15be91armvixl USE(instr); 40490b0414b6c794be58f34813f84c2c06e6a15be91armvixl Update(); 40590b0414b6c794be58f34813f84c2c06e6a15be91armvixl static Counter* counter = GetCounter("Other"); 40690b0414b6c794be58f34813f84c2c06e6a15be91armvixl counter->Increment(); 40790b0414b6c794be58f34813f84c2c06e6a15be91armvixl} 40890b0414b6c794be58f34813f84c2c06e6a15be91armvixl 40990b0414b6c794be58f34813f84c2c06e6a15be91armvixl 41039ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitLoadLiteral(const Instruction* instr) { 411578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 412578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 413578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Load Literal"); 414578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 415578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 416578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 417578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 41839ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::InstrumentLoadStore(const Instruction* instr) { 419578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* load_int_counter = GetCounter("Load Integer"); 420578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* store_int_counter = GetCounter("Store Integer"); 421578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* load_fp_counter = GetCounter("Load FP"); 422578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* store_fp_counter = GetCounter("Store FP"); 423578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 4240cc8b6ece4b3e757e11a906a81ece292437713abarmvixl switch (instr->Mask(LoadStoreMask)) { 4250cc8b6ece4b3e757e11a906a81ece292437713abarmvixl case STRB_w: 4260cc8b6ece4b3e757e11a906a81ece292437713abarmvixl case STRH_w: 4270cc8b6ece4b3e757e11a906a81ece292437713abarmvixl case STR_w: 4280cc8b6ece4b3e757e11a906a81ece292437713abarmvixl VIXL_FALLTHROUGH(); 429578645f14e122d2b87d907e298cda7e7d0babf1farmvixl case STR_x: store_int_counter->Increment(); break; 4300cc8b6ece4b3e757e11a906a81ece292437713abarmvixl case STR_s: 4310cc8b6ece4b3e757e11a906a81ece292437713abarmvixl VIXL_FALLTHROUGH(); 432578645f14e122d2b87d907e298cda7e7d0babf1farmvixl case STR_d: store_fp_counter->Increment(); break; 4330cc8b6ece4b3e757e11a906a81ece292437713abarmvixl case LDRB_w: 4340cc8b6ece4b3e757e11a906a81ece292437713abarmvixl case LDRH_w: 4350cc8b6ece4b3e757e11a906a81ece292437713abarmvixl case LDR_w: 4360cc8b6ece4b3e757e11a906a81ece292437713abarmvixl case LDR_x: 4370cc8b6ece4b3e757e11a906a81ece292437713abarmvixl case LDRSB_x: 4380cc8b6ece4b3e757e11a906a81ece292437713abarmvixl case LDRSH_x: 4390cc8b6ece4b3e757e11a906a81ece292437713abarmvixl case LDRSW_x: 4400cc8b6ece4b3e757e11a906a81ece292437713abarmvixl case LDRSB_w: 4410cc8b6ece4b3e757e11a906a81ece292437713abarmvixl VIXL_FALLTHROUGH(); 442578645f14e122d2b87d907e298cda7e7d0babf1farmvixl case LDRSH_w: load_int_counter->Increment(); break; 4430cc8b6ece4b3e757e11a906a81ece292437713abarmvixl case LDR_s: 4440cc8b6ece4b3e757e11a906a81ece292437713abarmvixl VIXL_FALLTHROUGH(); 445578645f14e122d2b87d907e298cda7e7d0babf1farmvixl case LDR_d: load_fp_counter->Increment(); break; 446578645f14e122d2b87d907e298cda7e7d0babf1farmvixl } 447578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 448578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 449578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 45039ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitLoadStoreUnscaledOffset(const Instruction* instr) { 451578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 452578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStore(instr); 453578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 454578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 455578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 45639ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitLoadStorePostIndex(const Instruction* instr) { 457578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 458578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 459578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStore(instr); 460578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 461578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 462578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 46339ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitLoadStorePreIndex(const Instruction* instr) { 464578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 465578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStore(instr); 466578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 467578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 468578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 46939ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitLoadStoreRegisterOffset(const Instruction* instr) { 470578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 471578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStore(instr); 472578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 473578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 474578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 47539ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitLoadStoreUnsignedOffset(const Instruction* instr) { 476578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 477578645f14e122d2b87d907e298cda7e7d0babf1farmvixl InstrumentLoadStore(instr); 478578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 479578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 480578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 48139ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitLogicalShifted(const Instruction* instr) { 482578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 483578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 484578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Logical DP"); 485578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 486578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 487578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 488578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 48939ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitAddSubShifted(const Instruction* instr) { 490578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 491578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 492578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Add/Sub DP"); 493578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 494578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 495578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 496578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 49739ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitAddSubExtended(const Instruction* instr) { 498578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 499578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 500578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Add/Sub DP"); 501578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 502578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 503578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 504578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 50539ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitAddSubWithCarry(const Instruction* instr) { 506578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 507578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 508578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Add/Sub DP"); 509578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 510578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 511578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 512578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 51339ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitConditionalCompareRegister(const Instruction* instr) { 514578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 515578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 516578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Conditional Compare"); 517578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 518578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 519578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 520578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 52139ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitConditionalCompareImmediate(const Instruction* instr) { 522578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 523578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 524578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Conditional Compare"); 525578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 526578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 527578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 528578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 52939ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitConditionalSelect(const Instruction* instr) { 530578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 531578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 532578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Conditional Select"); 533578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 534578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 535578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 536578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 53739ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitDataProcessing1Source(const Instruction* instr) { 538578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 539578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 540578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other Int DP"); 541578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 542578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 543578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 544578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 54539ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitDataProcessing2Source(const Instruction* instr) { 546578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 547578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 548578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other Int DP"); 549578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 550578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 551578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 552578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 55339ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitDataProcessing3Source(const Instruction* instr) { 554578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 555578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 556578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other Int DP"); 557578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 558578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 559578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 560578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 56139ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitFPCompare(const Instruction* instr) { 562578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 563578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 564578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("FP DP"); 565578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 566578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 567578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 568578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 56939ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitFPConditionalCompare(const Instruction* instr) { 570578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 571578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 572578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Conditional Compare"); 573578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 574578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 575578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 576578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 57739ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitFPConditionalSelect(const Instruction* instr) { 578578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 579578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 580578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Conditional Select"); 581578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 582578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 583578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 584578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 58539ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitFPImmediate(const Instruction* instr) { 586578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 587578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 588578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("FP DP"); 589578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 590578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 591578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 592578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 59339ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitFPDataProcessing1Source(const Instruction* instr) { 594578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 595578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 596578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("FP DP"); 597578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 598578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 599578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 600578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 60139ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitFPDataProcessing2Source(const Instruction* instr) { 602578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 603578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 604578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("FP DP"); 605578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 606578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 607578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 608578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 60939ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitFPDataProcessing3Source(const Instruction* instr) { 610578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 611578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 612578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("FP DP"); 613578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 614578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 615578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 616578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 61739ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitFPIntegerConvert(const Instruction* instr) { 618578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 619578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 620578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("FP DP"); 621578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 622578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 623578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 624578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 62539ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitFPFixedPointConvert(const Instruction* instr) { 626578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 627578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 628578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("FP DP"); 629578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 630578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 631578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 632578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 6330cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitCrypto2RegSHA(const Instruction* instr) { 6340cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 6350cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 6360cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("Crypto"); 6370cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 6380cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 6390cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6400cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6410cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitCrypto3RegSHA(const Instruction* instr) { 6420cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 6430cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 6440cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("Crypto"); 6450cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 6460cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 6470cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6480cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6490cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitCryptoAES(const Instruction* instr) { 6500cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 6510cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 6520cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("Crypto"); 6530cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 6540cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 6550cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6560cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6570cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEON2RegMisc(const Instruction* instr) { 6580cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 6590cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 6600cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 6610cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 6620cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 6630cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6640cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6650cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEON3Same(const Instruction* instr) { 6660cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 6670cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 6680cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 6690cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 6700cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 6710cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6720cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6730cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEON3Different(const Instruction* instr) { 6740cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 6750cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 6760cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 6770cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 6780cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 6790cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6800cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6810cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONAcrossLanes(const Instruction* instr) { 6820cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 6830cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 6840cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 6850cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 6860cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 6870cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6880cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6890cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONByIndexedElement(const Instruction* instr) { 6900cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 6910cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 6920cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 6930cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 6940cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 6950cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6960cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 6970cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONCopy(const Instruction* instr) { 6980cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 6990cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 7000cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 7010cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 7020cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 7030cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7040cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7050cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONExtract(const Instruction* instr) { 7060cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 7070cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 7080cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 7090cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 7100cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 7110cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7120cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7130cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONLoadStoreMultiStruct(const Instruction* instr) { 7140cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 7150cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 7160cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 7170cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 7180cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 7190cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7200cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7210cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONLoadStoreMultiStructPostIndex( 7220cc8b6ece4b3e757e11a906a81ece292437713abarmvixl const Instruction* instr) { 7230cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 7240cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 7250cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 7260cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 7270cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 7280cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7290cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7300cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONLoadStoreSingleStruct(const Instruction* instr) { 7310cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 7320cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 7330cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 7340cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 7350cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 7360cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7370cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7380cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONLoadStoreSingleStructPostIndex( 7390cc8b6ece4b3e757e11a906a81ece292437713abarmvixl const Instruction* instr) { 7400cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 7410cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 7420cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 7430cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 7440cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 7450cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7460cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7470cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONModifiedImmediate(const Instruction* instr) { 7480cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 7490cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 7500cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 7510cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 7520cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 7530cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7540cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7550cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONScalar2RegMisc(const Instruction* instr) { 7560cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 7570cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 7580cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 7590cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 7600cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 7610cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7620cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7630cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONScalar3Diff(const Instruction* instr) { 7640cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 7650cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 7660cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 7670cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 7680cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 7690cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7700cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7710cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONScalar3Same(const Instruction* instr) { 7720cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 7730cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 7740cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 7750cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 7760cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 7770cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7780cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7790cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONScalarByIndexedElement(const Instruction* instr) { 7800cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 7810cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 7820cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 7830cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 7840cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 7850cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7860cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7870cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONScalarCopy(const Instruction* instr) { 7880cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 7890cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 7900cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 7910cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 7920cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 7930cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7940cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 7950cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONScalarPairwise(const Instruction* instr) { 7960cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 7970cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 7980cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 7990cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 8000cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 8010cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 8020cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 8030cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONScalarShiftImmediate(const Instruction* instr) { 8040cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 8050cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 8060cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 8070cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 8080cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 8090cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 8100cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 8110cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONShiftImmediate(const Instruction* instr) { 8120cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 8130cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 8140cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 8150cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 8160cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 8170cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 8180cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 8190cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONTable(const Instruction* instr) { 8200cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 8210cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 8220cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 8230cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 8240cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 8250cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 8260cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 8270cc8b6ece4b3e757e11a906a81ece292437713abarmvixlvoid Instrument::VisitNEONPerm(const Instruction* instr) { 8280cc8b6ece4b3e757e11a906a81ece292437713abarmvixl USE(instr); 8290cc8b6ece4b3e757e11a906a81ece292437713abarmvixl Update(); 8300cc8b6ece4b3e757e11a906a81ece292437713abarmvixl static Counter* counter = GetCounter("NEON"); 8310cc8b6ece4b3e757e11a906a81ece292437713abarmvixl counter->Increment(); 8320cc8b6ece4b3e757e11a906a81ece292437713abarmvixl} 8330cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 8340cc8b6ece4b3e757e11a906a81ece292437713abarmvixl 83539ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitUnallocated(const Instruction* instr) { 836578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 837578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 838578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other"); 839578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 840578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 841578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 842578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 84339ee1f4b336c7e6b25be0df6375c18dcbd577c09armvixlvoid Instrument::VisitUnimplemented(const Instruction* instr) { 844578645f14e122d2b87d907e298cda7e7d0babf1farmvixl USE(instr); 845578645f14e122d2b87d907e298cda7e7d0babf1farmvixl Update(); 846578645f14e122d2b87d907e298cda7e7d0babf1farmvixl static Counter* counter = GetCounter("Other"); 847578645f14e122d2b87d907e298cda7e7d0babf1farmvixl counter->Increment(); 848578645f14e122d2b87d907e298cda7e7d0babf1farmvixl} 849578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 850578645f14e122d2b87d907e298cda7e7d0babf1farmvixl 8514a06316541258e3c058792321295ee36d409f419armvixl} // namespace vixl 852