OpenCoverage

CodeLocation.h

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/qtdeclarative/src/qtdeclarative/src/3rdparty/masm/assembler/CodeLocation.h
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright (C) 2009 Apple Inc. All rights reserved.-
3 *-
4 * Redistribution and use in source and binary forms, with or without-
5 * modification, are permitted provided that the following conditions-
6 * are met:-
7 * 1. Redistributions of source code must retain the above copyright-
8 * notice, this list of conditions and the following disclaimer.-
9 * 2. Redistributions in binary form must reproduce the above copyright-
10 * notice, this list of conditions and the following disclaimer in the-
11 * documentation and/or other materials provided with the distribution.-
12 *-
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY-
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR-
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,-
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,-
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR-
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY-
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT-
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -
24 */-
25-
26#ifndef CodeLocation_h-
27#define CodeLocation_h-
28-
29#include "MacroAssemblerCodeRef.h"-
30-
31#if ENABLE(ASSEMBLER)-
32-
33namespace JSC {-
34-
35class CodeLocationInstruction;-
36class CodeLocationLabel;-
37class CodeLocationJump;-
38class CodeLocationCall;-
39class CodeLocationNearCall;-
40class CodeLocationDataLabelCompact;-
41class CodeLocationDataLabel32;-
42class CodeLocationDataLabelPtr;-
43class CodeLocationConvertibleLoad;-
44-
45// The CodeLocation* types are all pretty much do-nothing wrappers around-
46// CodePtr (or MacroAssemblerCodePtr, to give it its full name). These-
47// classes only exist to provide type-safety when linking and patching code.-
48//-
49// The one new piece of functionallity introduced by these classes is the-
50// ability to create (or put another way, to re-discover) another CodeLocation-
51// at an offset from one you already know. When patching code to optimize it-
52// we often want to patch a number of instructions that are short, fixed-
53// offsets apart. To reduce memory overhead we will only retain a pointer to-
54// one of the instructions, and we will use the *AtOffset methods provided by-
55// CodeLocationCommon to find the other points in the code to modify.-
56class CodeLocationCommon : public MacroAssemblerCodePtr {-
57public:-
58 CodeLocationInstruction instructionAtOffset(int offset);-
59 CodeLocationLabel labelAtOffset(int offset);-
60 CodeLocationJump jumpAtOffset(int offset);-
61 CodeLocationCall callAtOffset(int offset);-
62 CodeLocationNearCall nearCallAtOffset(int offset);-
63 CodeLocationDataLabelPtr dataLabelPtrAtOffset(int offset);-
64 CodeLocationDataLabel32 dataLabel32AtOffset(int offset);-
65 CodeLocationDataLabelCompact dataLabelCompactAtOffset(int offset);-
66 CodeLocationConvertibleLoad convertibleLoadAtOffset(int offset);-
67-
68protected:-
69 CodeLocationCommon()-
70 {-
71 }-
72-
73 CodeLocationCommon(MacroAssemblerCodePtr location)-
74 : MacroAssemblerCodePtr(location)-
75 {-
76 }
executed 612 times by 10 tests: end of block
Executed by:
  • tst_ecmascripttests
  • tst_qjsengine
  • tst_qqmlecmascript
  • tst_qqmllistmodelworkerscript
  • tst_qqmlxmlhttprequest
  • tst_qquickanimationcontroller
  • tst_qquicklayouts
  • tst_qquicktextinput
  • tst_qquickworkerscript
  • tst_testfiltering
612
77};-
78-
79class CodeLocationInstruction : public CodeLocationCommon {-
80public:-
81 CodeLocationInstruction() {}-
82 explicit CodeLocationInstruction(MacroAssemblerCodePtr location)-
83 : CodeLocationCommon(location) {}
never executed: end of block
0
84 explicit CodeLocationInstruction(void* location)-
85 : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
never executed: end of block
0
86};-
87-
88class CodeLocationLabel : public CodeLocationCommon {-
89public:-
90 CodeLocationLabel() {}-
91 explicit CodeLocationLabel(MacroAssemblerCodePtr location)-
92 : CodeLocationCommon(location) {}
never executed: end of block
0
93 explicit CodeLocationLabel(void* location)-
94 : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
executed 612 times by 10 tests: end of block
Executed by:
  • tst_ecmascripttests
  • tst_qjsengine
  • tst_qqmlecmascript
  • tst_qqmllistmodelworkerscript
  • tst_qqmlxmlhttprequest
  • tst_qquickanimationcontroller
  • tst_qquicklayouts
  • tst_qquicktextinput
  • tst_qquickworkerscript
  • tst_testfiltering
612
95};-
96-
97class CodeLocationJump : public CodeLocationCommon {-
98public:-
99 CodeLocationJump() {}-
100 explicit CodeLocationJump(MacroAssemblerCodePtr location)-
101 : CodeLocationCommon(location) {}
never executed: end of block
0
102 explicit CodeLocationJump(void* location)-
103 : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
never executed: end of block
0
104};-
105-
106class CodeLocationCall : public CodeLocationCommon {-
107public:-
108 CodeLocationCall() {}-
109 explicit CodeLocationCall(MacroAssemblerCodePtr location)-
110 : CodeLocationCommon(location) {}
never executed: end of block
0
111 explicit CodeLocationCall(void* location)-
112 : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
never executed: end of block
0
113};-
114-
115class CodeLocationNearCall : public CodeLocationCommon {-
116public:-
117 CodeLocationNearCall() {}-
118 explicit CodeLocationNearCall(MacroAssemblerCodePtr location)-
119 : CodeLocationCommon(location) {}
never executed: end of block
0
120 explicit CodeLocationNearCall(void* location)-
121 : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
never executed: end of block
0
122};-
123-
124class CodeLocationDataLabel32 : public CodeLocationCommon {-
125public:-
126 CodeLocationDataLabel32() {}-
127 explicit CodeLocationDataLabel32(MacroAssemblerCodePtr location)-
128 : CodeLocationCommon(location) {}
never executed: end of block
0
129 explicit CodeLocationDataLabel32(void* location)-
130 : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
never executed: end of block
0
131};-
132-
133class CodeLocationDataLabelCompact : public CodeLocationCommon {-
134public:-
135 CodeLocationDataLabelCompact() { }-
136 explicit CodeLocationDataLabelCompact(MacroAssemblerCodePtr location)-
137 : CodeLocationCommon(location) { }
never executed: end of block
0
138 explicit CodeLocationDataLabelCompact(void* location)-
139 : CodeLocationCommon(MacroAssemblerCodePtr(location)) { }
never executed: end of block
0
140};-
141-
142class CodeLocationDataLabelPtr : public CodeLocationCommon {-
143public:-
144 CodeLocationDataLabelPtr() {}-
145 explicit CodeLocationDataLabelPtr(MacroAssemblerCodePtr location)-
146 : CodeLocationCommon(location) {}
never executed: end of block
0
147 explicit CodeLocationDataLabelPtr(void* location)-
148 : CodeLocationCommon(MacroAssemblerCodePtr(location)) {}
never executed: end of block
0
149};-
150-
151class CodeLocationConvertibleLoad : public CodeLocationCommon {-
152public:-
153 CodeLocationConvertibleLoad() { }-
154 explicit CodeLocationConvertibleLoad(MacroAssemblerCodePtr location)-
155 : CodeLocationCommon(location) { }
never executed: end of block
0
156 explicit CodeLocationConvertibleLoad(void* location)-
157 : CodeLocationCommon(MacroAssemblerCodePtr(location)) { }
never executed: end of block
0
158};-
159-
160inline CodeLocationInstruction CodeLocationCommon::instructionAtOffset(int offset)-
161{-
162 ASSERT_VALID_CODE_OFFSET(offset);-
163 return CodeLocationInstruction(reinterpret_cast<char*>(dataLocation()) + offset);
never executed: return CodeLocationInstruction(reinterpret_cast<char*>(dataLocation()) + offset);
0
164}-
165-
166inline CodeLocationLabel CodeLocationCommon::labelAtOffset(int offset)-
167{-
168 ASSERT_VALID_CODE_OFFSET(offset);-
169 return CodeLocationLabel(reinterpret_cast<char*>(dataLocation()) + offset);
never executed: return CodeLocationLabel(reinterpret_cast<char*>(dataLocation()) + offset);
0
170}-
171-
172inline CodeLocationJump CodeLocationCommon::jumpAtOffset(int offset)-
173{-
174 ASSERT_VALID_CODE_OFFSET(offset);-
175 return CodeLocationJump(reinterpret_cast<char*>(dataLocation()) + offset);
never executed: return CodeLocationJump(reinterpret_cast<char*>(dataLocation()) + offset);
0
176}-
177-
178inline CodeLocationCall CodeLocationCommon::callAtOffset(int offset)-
179{-
180 ASSERT_VALID_CODE_OFFSET(offset);-
181 return CodeLocationCall(reinterpret_cast<char*>(dataLocation()) + offset);
never executed: return CodeLocationCall(reinterpret_cast<char*>(dataLocation()) + offset);
0
182}-
183-
184inline CodeLocationNearCall CodeLocationCommon::nearCallAtOffset(int offset)-
185{-
186 ASSERT_VALID_CODE_OFFSET(offset);-
187 return CodeLocationNearCall(reinterpret_cast<char*>(dataLocation()) + offset);
never executed: return CodeLocationNearCall(reinterpret_cast<char*>(dataLocation()) + offset);
0
188}-
189-
190inline CodeLocationDataLabelPtr CodeLocationCommon::dataLabelPtrAtOffset(int offset)-
191{-
192 ASSERT_VALID_CODE_OFFSET(offset);-
193 return CodeLocationDataLabelPtr(reinterpret_cast<char*>(dataLocation()) + offset);
never executed: return CodeLocationDataLabelPtr(reinterpret_cast<char*>(dataLocation()) + offset);
0
194}-
195-
196inline CodeLocationDataLabel32 CodeLocationCommon::dataLabel32AtOffset(int offset)-
197{-
198 ASSERT_VALID_CODE_OFFSET(offset);-
199 return CodeLocationDataLabel32(reinterpret_cast<char*>(dataLocation()) + offset);
never executed: return CodeLocationDataLabel32(reinterpret_cast<char*>(dataLocation()) + offset);
0
200}-
201-
202inline CodeLocationDataLabelCompact CodeLocationCommon::dataLabelCompactAtOffset(int offset)-
203{-
204 ASSERT_VALID_CODE_OFFSET(offset);-
205 return CodeLocationDataLabelCompact(reinterpret_cast<char*>(dataLocation()) + offset);
never executed: return CodeLocationDataLabelCompact(reinterpret_cast<char*>(dataLocation()) + offset);
0
206}-
207-
208inline CodeLocationConvertibleLoad CodeLocationCommon::convertibleLoadAtOffset(int offset)-
209{-
210 ASSERT_VALID_CODE_OFFSET(offset);-
211 return CodeLocationConvertibleLoad(reinterpret_cast<char*>(dataLocation()) + offset);
never executed: return CodeLocationConvertibleLoad(reinterpret_cast<char*>(dataLocation()) + offset);
0
212}-
213-
214} // namespace JSC-
215-
216#endif // ENABLE(ASSEMBLER)-
217-
218#endif // CodeLocation_h-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.0