summaryrefslogtreecommitdiff
path: root/src/3rdparty/javascriptcore/JavaScriptCore/bytecode/Opcode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/javascriptcore/JavaScriptCore/bytecode/Opcode.cpp')
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/bytecode/Opcode.cpp186
1 files changed, 0 insertions, 186 deletions
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/bytecode/Opcode.cpp b/src/3rdparty/javascriptcore/JavaScriptCore/bytecode/Opcode.cpp
deleted file mode 100644
index bb7696d..0000000
--- a/src/3rdparty/javascriptcore/JavaScriptCore/bytecode/Opcode.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- * Copyright (C) 2008 Cameron Zwarich <cwzwarich@uwaterloo.ca>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "Opcode.h"
-
-using namespace std;
-
-namespace JSC {
-
-#if ENABLE(OPCODE_SAMPLING) || ENABLE(CODEBLOCK_SAMPLING) || ENABLE(OPCODE_STATS)
-
-const char* const opcodeNames[] = {
-#define OPCODE_NAME_ENTRY(opcode, size) #opcode,
- FOR_EACH_OPCODE_ID(OPCODE_NAME_ENTRY)
-#undef OPCODE_NAME_ENTRY
-};
-
-#endif
-
-#if ENABLE(OPCODE_STATS)
-
-long long OpcodeStats::opcodeCounts[numOpcodeIDs];
-long long OpcodeStats::opcodePairCounts[numOpcodeIDs][numOpcodeIDs];
-int OpcodeStats::lastOpcode = -1;
-
-static OpcodeStats logger;
-
-OpcodeStats::OpcodeStats()
-{
- for (int i = 0; i < numOpcodeIDs; ++i)
- opcodeCounts[i] = 0;
-
- for (int i = 0; i < numOpcodeIDs; ++i)
- for (int j = 0; j < numOpcodeIDs; ++j)
- opcodePairCounts[i][j] = 0;
-}
-
-static int compareOpcodeIndices(const void* left, const void* right)
-{
- long long leftValue = OpcodeStats::opcodeCounts[*(int*) left];
- long long rightValue = OpcodeStats::opcodeCounts[*(int*) right];
-
- if (leftValue < rightValue)
- return 1;
- else if (leftValue > rightValue)
- return -1;
- else
- return 0;
-}
-
-static int compareOpcodePairIndices(const void* left, const void* right)
-{
- pair<int, int> leftPair = *(pair<int, int>*) left;
- long long leftValue = OpcodeStats::opcodePairCounts[leftPair.first][leftPair.second];
- pair<int, int> rightPair = *(pair<int, int>*) right;
- long long rightValue = OpcodeStats::opcodePairCounts[rightPair.first][rightPair.second];
-
- if (leftValue < rightValue)
- return 1;
- else if (leftValue > rightValue)
- return -1;
- else
- return 0;
-}
-
-OpcodeStats::~OpcodeStats()
-{
- long long totalInstructions = 0;
- for (int i = 0; i < numOpcodeIDs; ++i)
- totalInstructions += opcodeCounts[i];
-
- long long totalInstructionPairs = 0;
- for (int i = 0; i < numOpcodeIDs; ++i)
- for (int j = 0; j < numOpcodeIDs; ++j)
- totalInstructionPairs += opcodePairCounts[i][j];
-
- int sortedIndices[numOpcodeIDs];
- for (int i = 0; i < numOpcodeIDs; ++i)
- sortedIndices[i] = i;
- qsort(sortedIndices, numOpcodeIDs, sizeof(int), compareOpcodeIndices);
-
- pair<int, int> sortedPairIndices[numOpcodeIDs * numOpcodeIDs];
- pair<int, int>* currentPairIndex = sortedPairIndices;
- for (int i = 0; i < numOpcodeIDs; ++i)
- for (int j = 0; j < numOpcodeIDs; ++j)
- *(currentPairIndex++) = make_pair(i, j);
- qsort(sortedPairIndices, numOpcodeIDs * numOpcodeIDs, sizeof(pair<int, int>), compareOpcodePairIndices);
-
- printf("\nExecuted opcode statistics\n");
-
- printf("Total instructions executed: %lld\n\n", totalInstructions);
-
- printf("All opcodes by frequency:\n\n");
-
- for (int i = 0; i < numOpcodeIDs; ++i) {
- int index = sortedIndices[i];
- printf("%s:%s %lld - %.2f%%\n", opcodeNames[index], padOpcodeName((OpcodeID)index, 28), opcodeCounts[index], ((double) opcodeCounts[index]) / ((double) totalInstructions) * 100.0);
- }
-
- printf("\n");
- printf("2-opcode sequences by frequency: %lld\n\n", totalInstructions);
-
- for (int i = 0; i < numOpcodeIDs * numOpcodeIDs; ++i) {
- pair<int, int> indexPair = sortedPairIndices[i];
- long long count = opcodePairCounts[indexPair.first][indexPair.second];
-
- if (!count)
- break;
-
- printf("%s%s %s:%s %lld %.2f%%\n", opcodeNames[indexPair.first], padOpcodeName((OpcodeID)indexPair.first, 28), opcodeNames[indexPair.second], padOpcodeName((OpcodeID)indexPair.second, 28), count, ((double) count) / ((double) totalInstructionPairs) * 100.0);
- }
-
- printf("\n");
- printf("Most common opcodes and sequences:\n");
-
- for (int i = 0; i < numOpcodeIDs; ++i) {
- int index = sortedIndices[i];
- long long opcodeCount = opcodeCounts[index];
- double opcodeProportion = ((double) opcodeCount) / ((double) totalInstructions);
- if (opcodeProportion < 0.0001)
- break;
- printf("\n%s:%s %lld - %.2f%%\n", opcodeNames[index], padOpcodeName((OpcodeID)index, 28), opcodeCount, opcodeProportion * 100.0);
-
- for (int j = 0; j < numOpcodeIDs * numOpcodeIDs; ++j) {
- pair<int, int> indexPair = sortedPairIndices[j];
- long long pairCount = opcodePairCounts[indexPair.first][indexPair.second];
- double pairProportion = ((double) pairCount) / ((double) totalInstructionPairs);
-
- if (!pairCount || pairProportion < 0.0001 || pairProportion < opcodeProportion / 100)
- break;
-
- if (indexPair.first != index && indexPair.second != index)
- continue;
-
- printf(" %s%s %s:%s %lld - %.2f%%\n", opcodeNames[indexPair.first], padOpcodeName((OpcodeID)indexPair.first, 28), opcodeNames[indexPair.second], padOpcodeName((OpcodeID)indexPair.second, 28), pairCount, pairProportion * 100.0);
- }
-
- }
- printf("\n");
-}
-
-void OpcodeStats::recordInstruction(int opcode)
-{
- opcodeCounts[opcode]++;
-
- if (lastOpcode != -1)
- opcodePairCounts[lastOpcode][opcode]++;
-
- lastOpcode = opcode;
-}
-
-void OpcodeStats::resetLastInstruction()
-{
- lastOpcode = -1;
-}
-
-#endif
-
-} // namespace JSC