Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/qtdeclarative/src/qtdeclarative/src/3rdparty/masm/assembler/MacroAssemblerX86_64.h |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||||||||||||||
2 | - | |||||||||||||||||||||||||||||||
3 | - | |||||||||||||||||||||||||||||||
4 | namespace JSC { | - | ||||||||||||||||||||||||||||||
5 | - | |||||||||||||||||||||||||||||||
6 | class MacroAssemblerX86_64 : public MacroAssemblerX86Common { | - | ||||||||||||||||||||||||||||||
7 | public: | - | ||||||||||||||||||||||||||||||
8 | static const Scale ScalePtr = TimesEight; | - | ||||||||||||||||||||||||||||||
9 | static const int PointerSize = 8; | - | ||||||||||||||||||||||||||||||
10 | - | |||||||||||||||||||||||||||||||
11 | using MacroAssemblerX86Common::add32; | - | ||||||||||||||||||||||||||||||
12 | using MacroAssemblerX86Common::and32; | - | ||||||||||||||||||||||||||||||
13 | using MacroAssemblerX86Common::branchAdd32; | - | ||||||||||||||||||||||||||||||
14 | using MacroAssemblerX86Common::or32; | - | ||||||||||||||||||||||||||||||
15 | using MacroAssemblerX86Common::sub32; | - | ||||||||||||||||||||||||||||||
16 | using MacroAssemblerX86Common::load32; | - | ||||||||||||||||||||||||||||||
17 | using MacroAssemblerX86Common::store32; | - | ||||||||||||||||||||||||||||||
18 | using MacroAssemblerX86Common::store8; | - | ||||||||||||||||||||||||||||||
19 | using MacroAssemblerX86Common::call; | - | ||||||||||||||||||||||||||||||
20 | using MacroAssemblerX86Common::jump; | - | ||||||||||||||||||||||||||||||
21 | using MacroAssemblerX86Common::addDouble; | - | ||||||||||||||||||||||||||||||
22 | using MacroAssemblerX86Common::loadDouble; | - | ||||||||||||||||||||||||||||||
23 | using MacroAssemblerX86Common::convertInt32ToDouble; | - | ||||||||||||||||||||||||||||||
24 | void add32(TrustedImm32 imm, AbsoluteAddress address) | - | ||||||||||||||||||||||||||||||
25 | { | - | ||||||||||||||||||||||||||||||
26 | move(TrustedImmPtr(address.m_ptr), scratchRegister); | - | ||||||||||||||||||||||||||||||
27 | add32(imm, Address(scratchRegister)); | - | ||||||||||||||||||||||||||||||
28 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
29 | - | |||||||||||||||||||||||||||||||
30 | void and32(TrustedImm32 imm, AbsoluteAddress address) | - | ||||||||||||||||||||||||||||||
31 | { | - | ||||||||||||||||||||||||||||||
32 | move(TrustedImmPtr(address.m_ptr), scratchRegister); | - | ||||||||||||||||||||||||||||||
33 | and32(imm, Address(scratchRegister)); | - | ||||||||||||||||||||||||||||||
34 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
35 | - | |||||||||||||||||||||||||||||||
36 | void add32(AbsoluteAddress address, RegisterID dest) | - | ||||||||||||||||||||||||||||||
37 | { | - | ||||||||||||||||||||||||||||||
38 | move(TrustedImmPtr(address.m_ptr), scratchRegister); | - | ||||||||||||||||||||||||||||||
39 | add32(Address(scratchRegister), dest); | - | ||||||||||||||||||||||||||||||
40 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
41 | - | |||||||||||||||||||||||||||||||
42 | void or32(TrustedImm32 imm, AbsoluteAddress address) | - | ||||||||||||||||||||||||||||||
43 | { | - | ||||||||||||||||||||||||||||||
44 | move(TrustedImmPtr(address.m_ptr), scratchRegister); | - | ||||||||||||||||||||||||||||||
45 | or32(imm, Address(scratchRegister)); | - | ||||||||||||||||||||||||||||||
46 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
47 | - | |||||||||||||||||||||||||||||||
48 | void or32(RegisterID reg, AbsoluteAddress address) | - | ||||||||||||||||||||||||||||||
49 | { | - | ||||||||||||||||||||||||||||||
50 | move(TrustedImmPtr(address.m_ptr), scratchRegister); | - | ||||||||||||||||||||||||||||||
51 | or32(reg, Address(scratchRegister)); | - | ||||||||||||||||||||||||||||||
52 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
53 | - | |||||||||||||||||||||||||||||||
54 | void sub32(TrustedImm32 imm, AbsoluteAddress address) | - | ||||||||||||||||||||||||||||||
55 | { | - | ||||||||||||||||||||||||||||||
56 | move(TrustedImmPtr(address.m_ptr), scratchRegister); | - | ||||||||||||||||||||||||||||||
57 | sub32(imm, Address(scratchRegister)); | - | ||||||||||||||||||||||||||||||
58 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
59 | - | |||||||||||||||||||||||||||||||
60 | void load32(const void* address, RegisterID dest) | - | ||||||||||||||||||||||||||||||
61 | { | - | ||||||||||||||||||||||||||||||
62 | if (dest == X86Registers::eax
| 0 | ||||||||||||||||||||||||||||||
63 | m_assembler.movl_mEAX(address); never executed: m_assembler.movl_mEAX(address); | 0 | ||||||||||||||||||||||||||||||
64 | else { | - | ||||||||||||||||||||||||||||||
65 | move(TrustedImmPtr(address), dest); | - | ||||||||||||||||||||||||||||||
66 | load32(dest, dest); | - | ||||||||||||||||||||||||||||||
67 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
68 | } | - | ||||||||||||||||||||||||||||||
69 | - | |||||||||||||||||||||||||||||||
70 | void addDouble(AbsoluteAddress address, FPRegisterID dest) | - | ||||||||||||||||||||||||||||||
71 | { | - | ||||||||||||||||||||||||||||||
72 | move(TrustedImmPtr(address.m_ptr), scratchRegister); | - | ||||||||||||||||||||||||||||||
73 | m_assembler.addsd_mr(0, scratchRegister, dest); | - | ||||||||||||||||||||||||||||||
74 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
75 | - | |||||||||||||||||||||||||||||||
76 | void convertInt32ToDouble(TrustedImm32 imm, FPRegisterID dest) | - | ||||||||||||||||||||||||||||||
77 | { | - | ||||||||||||||||||||||||||||||
78 | move(imm, scratchRegister); | - | ||||||||||||||||||||||||||||||
79 | m_assembler.cvtsi2sd_rr(scratchRegister, dest); | - | ||||||||||||||||||||||||||||||
80 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
81 | - | |||||||||||||||||||||||||||||||
82 | void convertUInt32ToDouble(RegisterID src, FPRegisterID dest, RegisterID ) | - | ||||||||||||||||||||||||||||||
83 | { | - | ||||||||||||||||||||||||||||||
84 | zeroExtend32ToPtr(src, src); | - | ||||||||||||||||||||||||||||||
85 | m_assembler.cvtsiq2sd_rr(src, dest); | - | ||||||||||||||||||||||||||||||
86 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
87 | - | |||||||||||||||||||||||||||||||
88 | void store32(TrustedImm32 imm, void* address) | - | ||||||||||||||||||||||||||||||
89 | { | - | ||||||||||||||||||||||||||||||
90 | move(TrustedImmPtr(address), scratchRegister); | - | ||||||||||||||||||||||||||||||
91 | store32(imm, scratchRegister); | - | ||||||||||||||||||||||||||||||
92 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
93 | - | |||||||||||||||||||||||||||||||
94 | void store8(TrustedImm32 imm, void* address) | - | ||||||||||||||||||||||||||||||
95 | { | - | ||||||||||||||||||||||||||||||
96 | move(TrustedImmPtr(address), scratchRegister); | - | ||||||||||||||||||||||||||||||
97 | store8(imm, Address(scratchRegister)); | - | ||||||||||||||||||||||||||||||
98 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
99 | - | |||||||||||||||||||||||||||||||
100 | Call call() | - | ||||||||||||||||||||||||||||||
101 | { | - | ||||||||||||||||||||||||||||||
102 | DataLabelPtr label = moveWithPatch(TrustedImmPtr(0), scratchRegister); | - | ||||||||||||||||||||||||||||||
103 | Call result = Call(m_assembler.call(scratchRegister), Call::Linkable); | - | ||||||||||||||||||||||||||||||
104 | (!(differenceBetween(label, result) == 3) ? (qmlWTFReportAssertionFailure(__FILE__, 163, __PRETTY_FUNCTION__, "differenceBetween(label, result) == 3"), (qmlWTFReportBacktrace(), qmlWTFInvokeCrashHook(), (*(int *)(uintptr_t)0xbbadbeef = 0), __builtin_trap())) : (void)0); | - | ||||||||||||||||||||||||||||||
105 | return never executed: result;return result; never executed: return result; | 0 | ||||||||||||||||||||||||||||||
106 | } | - | ||||||||||||||||||||||||||||||
107 | - | |||||||||||||||||||||||||||||||
108 | void callToRetrieveIP() | - | ||||||||||||||||||||||||||||||
109 | { | - | ||||||||||||||||||||||||||||||
110 | m_assembler.call(); | - | ||||||||||||||||||||||||||||||
111 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
112 | - | |||||||||||||||||||||||||||||||
113 | - | |||||||||||||||||||||||||||||||
114 | void jump(AbsoluteAddress address) | - | ||||||||||||||||||||||||||||||
115 | { | - | ||||||||||||||||||||||||||||||
116 | move(TrustedImmPtr(address.m_ptr), scratchRegister); | - | ||||||||||||||||||||||||||||||
117 | jump(Address(scratchRegister)); | - | ||||||||||||||||||||||||||||||
118 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
119 | - | |||||||||||||||||||||||||||||||
120 | Call tailRecursiveCall() | - | ||||||||||||||||||||||||||||||
121 | { | - | ||||||||||||||||||||||||||||||
122 | DataLabelPtr label = moveWithPatch(TrustedImmPtr(0), scratchRegister); | - | ||||||||||||||||||||||||||||||
123 | Jump newJump = Jump(m_assembler.jmp_r(scratchRegister)); | - | ||||||||||||||||||||||||||||||
124 | (!(differenceBetween(label, newJump) == 3) ? (qmlWTFReportAssertionFailure(__FILE__, 183, __PRETTY_FUNCTION__, "differenceBetween(label, newJump) == 3"), (qmlWTFReportBacktrace(), qmlWTFInvokeCrashHook(), (*(int *)(uintptr_t)0xbbadbeef = 0), __builtin_trap())) : (void)0); | - | ||||||||||||||||||||||||||||||
125 | return never executed: Call::fromTailJump(newJump);return Call::fromTailJump(newJump); never executed: return Call::fromTailJump(newJump); | 0 | ||||||||||||||||||||||||||||||
126 | } | - | ||||||||||||||||||||||||||||||
127 | - | |||||||||||||||||||||||||||||||
128 | Call makeTailRecursiveCall(Jump oldJump) | - | ||||||||||||||||||||||||||||||
129 | { | - | ||||||||||||||||||||||||||||||
130 | oldJump.link(this); | - | ||||||||||||||||||||||||||||||
131 | DataLabelPtr label = moveWithPatch(TrustedImmPtr(0), scratchRegister); | - | ||||||||||||||||||||||||||||||
132 | Jump newJump = Jump(m_assembler.jmp_r(scratchRegister)); | - | ||||||||||||||||||||||||||||||
133 | (!(differenceBetween(label, newJump) == 3) ? (qmlWTFReportAssertionFailure(__FILE__, 192, __PRETTY_FUNCTION__, "differenceBetween(label, newJump) == 3"), (qmlWTFReportBacktrace(), qmlWTFInvokeCrashHook(), (*(int *)(uintptr_t)0xbbadbeef = 0), __builtin_trap())) : (void)0); | - | ||||||||||||||||||||||||||||||
134 | return never executed: Call::fromTailJump(newJump);return Call::fromTailJump(newJump); never executed: return Call::fromTailJump(newJump); | 0 | ||||||||||||||||||||||||||||||
135 | } | - | ||||||||||||||||||||||||||||||
136 | - | |||||||||||||||||||||||||||||||
137 | Jump branchAdd32(ResultCondition cond, TrustedImm32 src, AbsoluteAddress dest) | - | ||||||||||||||||||||||||||||||
138 | { | - | ||||||||||||||||||||||||||||||
139 | move(TrustedImmPtr(dest.m_ptr), scratchRegister); | - | ||||||||||||||||||||||||||||||
140 | add32(src, Address(scratchRegister)); | - | ||||||||||||||||||||||||||||||
141 | return never executed: Jump(m_assembler.jCC(x86Condition(cond)));return Jump(m_assembler.jCC(x86Condition(cond))); never executed: return Jump(m_assembler.jCC(x86Condition(cond))); | 0 | ||||||||||||||||||||||||||||||
142 | } | - | ||||||||||||||||||||||||||||||
143 | - | |||||||||||||||||||||||||||||||
144 | void add64(RegisterID src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
145 | { | - | ||||||||||||||||||||||||||||||
146 | m_assembler.addq_rr(src, dest); | - | ||||||||||||||||||||||||||||||
147 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
148 | - | |||||||||||||||||||||||||||||||
149 | void add64(Address src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
150 | { | - | ||||||||||||||||||||||||||||||
151 | m_assembler.addq_mr(src.offset, src.base, dest); | - | ||||||||||||||||||||||||||||||
152 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
153 | - | |||||||||||||||||||||||||||||||
154 | void add64(AbsoluteAddress src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
155 | { | - | ||||||||||||||||||||||||||||||
156 | move(TrustedImmPtr(src.m_ptr), scratchRegister); | - | ||||||||||||||||||||||||||||||
157 | add64(Address(scratchRegister), dest); | - | ||||||||||||||||||||||||||||||
158 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
159 | - | |||||||||||||||||||||||||||||||
160 | void add64(TrustedImm32 imm, RegisterID srcDest) | - | ||||||||||||||||||||||||||||||
161 | { | - | ||||||||||||||||||||||||||||||
162 | m_assembler.addq_ir(imm.m_value, srcDest); | - | ||||||||||||||||||||||||||||||
163 | } executed 15352 times by 65 tests: end of block Executed by:
| 15352 | ||||||||||||||||||||||||||||||
164 | - | |||||||||||||||||||||||||||||||
165 | void add64(TrustedImm64 imm, RegisterID dest) | - | ||||||||||||||||||||||||||||||
166 | { | - | ||||||||||||||||||||||||||||||
167 | move(imm, scratchRegister); | - | ||||||||||||||||||||||||||||||
168 | add64(scratchRegister, dest); | - | ||||||||||||||||||||||||||||||
169 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
170 | - | |||||||||||||||||||||||||||||||
171 | void add64(TrustedImm32 imm, RegisterID src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
172 | { | - | ||||||||||||||||||||||||||||||
173 | m_assembler.leaq_mr(imm.m_value, src, dest); | - | ||||||||||||||||||||||||||||||
174 | } executed 51526 times by 62 tests: end of block Executed by:
| 51526 | ||||||||||||||||||||||||||||||
175 | - | |||||||||||||||||||||||||||||||
176 | void add64(TrustedImm32 imm, Address address) | - | ||||||||||||||||||||||||||||||
177 | { | - | ||||||||||||||||||||||||||||||
178 | m_assembler.addq_im(imm.m_value, address.offset, address.base); | - | ||||||||||||||||||||||||||||||
179 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
180 | - | |||||||||||||||||||||||||||||||
181 | void add64(TrustedImm32 imm, AbsoluteAddress address) | - | ||||||||||||||||||||||||||||||
182 | { | - | ||||||||||||||||||||||||||||||
183 | move(TrustedImmPtr(address.m_ptr), scratchRegister); | - | ||||||||||||||||||||||||||||||
184 | add64(imm, Address(scratchRegister)); | - | ||||||||||||||||||||||||||||||
185 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
186 | - | |||||||||||||||||||||||||||||||
187 | void and64(RegisterID src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
188 | { | - | ||||||||||||||||||||||||||||||
189 | m_assembler.andq_rr(src, dest); | - | ||||||||||||||||||||||||||||||
190 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
191 | - | |||||||||||||||||||||||||||||||
192 | void and64(TrustedImm32 imm, RegisterID srcDest) | - | ||||||||||||||||||||||||||||||
193 | { | - | ||||||||||||||||||||||||||||||
194 | m_assembler.andq_ir(imm.m_value, srcDest); | - | ||||||||||||||||||||||||||||||
195 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
196 | - | |||||||||||||||||||||||||||||||
197 | void neg64(RegisterID dest) | - | ||||||||||||||||||||||||||||||
198 | { | - | ||||||||||||||||||||||||||||||
199 | m_assembler.negq_r(dest); | - | ||||||||||||||||||||||||||||||
200 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
201 | - | |||||||||||||||||||||||||||||||
202 | void or64(RegisterID src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
203 | { | - | ||||||||||||||||||||||||||||||
204 | m_assembler.orq_rr(src, dest); | - | ||||||||||||||||||||||||||||||
205 | } executed 9250 times by 48 tests: end of block Executed by:
| 9250 | ||||||||||||||||||||||||||||||
206 | - | |||||||||||||||||||||||||||||||
207 | void or64(TrustedImm64 imm, RegisterID dest) | - | ||||||||||||||||||||||||||||||
208 | { | - | ||||||||||||||||||||||||||||||
209 | move(imm, scratchRegister); | - | ||||||||||||||||||||||||||||||
210 | or64(scratchRegister, dest); | - | ||||||||||||||||||||||||||||||
211 | } executed 9250 times by 48 tests: end of block Executed by:
| 9250 | ||||||||||||||||||||||||||||||
212 | - | |||||||||||||||||||||||||||||||
213 | void or64(TrustedImm32 imm, RegisterID dest) | - | ||||||||||||||||||||||||||||||
214 | { | - | ||||||||||||||||||||||||||||||
215 | m_assembler.orq_ir(imm.m_value, dest); | - | ||||||||||||||||||||||||||||||
216 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
217 | - | |||||||||||||||||||||||||||||||
218 | void or64(RegisterID op1, RegisterID op2, RegisterID dest) | - | ||||||||||||||||||||||||||||||
219 | { | - | ||||||||||||||||||||||||||||||
220 | if (op1 == op2
| 0 | ||||||||||||||||||||||||||||||
221 | move(op1, dest); never executed: move(op1, dest); | 0 | ||||||||||||||||||||||||||||||
222 | else if (op1 == dest
| 0 | ||||||||||||||||||||||||||||||
223 | or64(op2, dest); never executed: or64(op2, dest); | 0 | ||||||||||||||||||||||||||||||
224 | else { | - | ||||||||||||||||||||||||||||||
225 | move(op2, dest); | - | ||||||||||||||||||||||||||||||
226 | or64(op1, dest); | - | ||||||||||||||||||||||||||||||
227 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
228 | } | - | ||||||||||||||||||||||||||||||
229 | - | |||||||||||||||||||||||||||||||
230 | void or64(TrustedImm32 imm, RegisterID src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
231 | { | - | ||||||||||||||||||||||||||||||
232 | move(src, dest); | - | ||||||||||||||||||||||||||||||
233 | or64(imm, dest); | - | ||||||||||||||||||||||||||||||
234 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
235 | - | |||||||||||||||||||||||||||||||
236 | void or64(TrustedImm64 imm, RegisterID src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
237 | { | - | ||||||||||||||||||||||||||||||
238 | move(src, dest); | - | ||||||||||||||||||||||||||||||
239 | or64(imm, dest); | - | ||||||||||||||||||||||||||||||
240 | } executed 4326 times by 39 tests: end of block Executed by:
| 4326 | ||||||||||||||||||||||||||||||
241 | - | |||||||||||||||||||||||||||||||
242 | void rotateRight64(TrustedImm32 imm, RegisterID srcDst) | - | ||||||||||||||||||||||||||||||
243 | { | - | ||||||||||||||||||||||||||||||
244 | m_assembler.rorq_i8r(imm.m_value, srcDst); | - | ||||||||||||||||||||||||||||||
245 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
246 | - | |||||||||||||||||||||||||||||||
247 | void sub64(RegisterID src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
248 | { | - | ||||||||||||||||||||||||||||||
249 | m_assembler.subq_rr(src, dest); | - | ||||||||||||||||||||||||||||||
250 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
251 | - | |||||||||||||||||||||||||||||||
252 | void sub64(TrustedImm32 imm, RegisterID dest) | - | ||||||||||||||||||||||||||||||
253 | { | - | ||||||||||||||||||||||||||||||
254 | m_assembler.subq_ir(imm.m_value, dest); | - | ||||||||||||||||||||||||||||||
255 | } executed 1229 times by 16 tests: end of block Executed by:
| 1229 | ||||||||||||||||||||||||||||||
256 | - | |||||||||||||||||||||||||||||||
257 | void sub64(TrustedImm64 imm, RegisterID dest) | - | ||||||||||||||||||||||||||||||
258 | { | - | ||||||||||||||||||||||||||||||
259 | move(imm, scratchRegister); | - | ||||||||||||||||||||||||||||||
260 | sub64(scratchRegister, dest); | - | ||||||||||||||||||||||||||||||
261 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
262 | - | |||||||||||||||||||||||||||||||
263 | void xor64(RegisterID src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
264 | { | - | ||||||||||||||||||||||||||||||
265 | m_assembler.xorq_rr(src, dest); | - | ||||||||||||||||||||||||||||||
266 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
267 | - | |||||||||||||||||||||||||||||||
268 | void xor64(RegisterID src, Address dest) | - | ||||||||||||||||||||||||||||||
269 | { | - | ||||||||||||||||||||||||||||||
270 | m_assembler.xorq_rm(src, dest.offset, dest.base); | - | ||||||||||||||||||||||||||||||
271 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
272 | - | |||||||||||||||||||||||||||||||
273 | void xor64(TrustedImm32 imm, RegisterID srcDest) | - | ||||||||||||||||||||||||||||||
274 | { | - | ||||||||||||||||||||||||||||||
275 | m_assembler.xorq_ir(imm.m_value, srcDest); | - | ||||||||||||||||||||||||||||||
276 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
277 | - | |||||||||||||||||||||||||||||||
278 | void lshift64(TrustedImm32 imm, RegisterID dest) | - | ||||||||||||||||||||||||||||||
279 | { | - | ||||||||||||||||||||||||||||||
280 | m_assembler.shlq_i8r(imm.m_value, dest); | - | ||||||||||||||||||||||||||||||
281 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
282 | - | |||||||||||||||||||||||||||||||
283 | void lshift64(RegisterID src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
284 | { | - | ||||||||||||||||||||||||||||||
285 | if (src == X86Registers::ecx
| 0 | ||||||||||||||||||||||||||||||
286 | m_assembler.shlq_CLr(dest); never executed: m_assembler.shlq_CLr(dest); | 0 | ||||||||||||||||||||||||||||||
287 | else { | - | ||||||||||||||||||||||||||||||
288 | (!(src != dest) ? (qmlWTFReportAssertionFailure(__FILE__, 347, __PRETTY_FUNCTION__, "src != dest"), (qmlWTFReportBacktrace(), qmlWTFInvokeCrashHook(), (*(int *)(uintptr_t)0xbbadbeef = 0), __builtin_trap())) : (void)0); | - | ||||||||||||||||||||||||||||||
289 | - | |||||||||||||||||||||||||||||||
290 | - | |||||||||||||||||||||||||||||||
291 | swap(src, X86Registers::ecx); | - | ||||||||||||||||||||||||||||||
292 | m_assembler.shlq_CLr(dest == X86Registers::ecx ? src : dest); | - | ||||||||||||||||||||||||||||||
293 | swap(src, X86Registers::ecx); | - | ||||||||||||||||||||||||||||||
294 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
295 | } | - | ||||||||||||||||||||||||||||||
296 | - | |||||||||||||||||||||||||||||||
297 | void rshift64(TrustedImm32 imm, RegisterID dest) | - | ||||||||||||||||||||||||||||||
298 | { | - | ||||||||||||||||||||||||||||||
299 | m_assembler.sarq_i8r(imm.m_value, dest); | - | ||||||||||||||||||||||||||||||
300 | } executed 8 times by 1 test: end of block Executed by:
| 8 | ||||||||||||||||||||||||||||||
301 | - | |||||||||||||||||||||||||||||||
302 | void rshift64(RegisterID src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
303 | { | - | ||||||||||||||||||||||||||||||
304 | if (src == X86Registers::ecx
| 0 | ||||||||||||||||||||||||||||||
305 | m_assembler.sarq_CLr(dest); never executed: m_assembler.sarq_CLr(dest); | 0 | ||||||||||||||||||||||||||||||
306 | else { | - | ||||||||||||||||||||||||||||||
307 | (!(src != dest) ? (qmlWTFReportAssertionFailure(__FILE__, 366, __PRETTY_FUNCTION__, "src != dest"), (qmlWTFReportBacktrace(), qmlWTFInvokeCrashHook(), (*(int *)(uintptr_t)0xbbadbeef = 0), __builtin_trap())) : (void)0); | - | ||||||||||||||||||||||||||||||
308 | - | |||||||||||||||||||||||||||||||
309 | - | |||||||||||||||||||||||||||||||
310 | swap(src, X86Registers::ecx); | - | ||||||||||||||||||||||||||||||
311 | m_assembler.sarq_CLr(dest == X86Registers::ecx ? src : dest); | - | ||||||||||||||||||||||||||||||
312 | swap(src, X86Registers::ecx); | - | ||||||||||||||||||||||||||||||
313 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
314 | } | - | ||||||||||||||||||||||||||||||
315 | - | |||||||||||||||||||||||||||||||
316 | void urshift64(RegisterID src, TrustedImm32 imm, RegisterID dest) | - | ||||||||||||||||||||||||||||||
317 | { | - | ||||||||||||||||||||||||||||||
318 | if (src != dest
| 0-16462 | ||||||||||||||||||||||||||||||
319 | move(src, dest); executed 16462 times by 50 tests: move(src, dest); Executed by:
| 16462 | ||||||||||||||||||||||||||||||
320 | urshift64(imm, dest); | - | ||||||||||||||||||||||||||||||
321 | } executed 16462 times by 50 tests: end of block Executed by:
| 16462 | ||||||||||||||||||||||||||||||
322 | - | |||||||||||||||||||||||||||||||
323 | void urshift64(TrustedImm32 imm, RegisterID dest) | - | ||||||||||||||||||||||||||||||
324 | { | - | ||||||||||||||||||||||||||||||
325 | m_assembler.shrq_i8r(imm.m_value, dest); | - | ||||||||||||||||||||||||||||||
326 | } executed 16462 times by 50 tests: end of block Executed by:
| 16462 | ||||||||||||||||||||||||||||||
327 | - | |||||||||||||||||||||||||||||||
328 | void urshift64(RegisterID src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
329 | { | - | ||||||||||||||||||||||||||||||
330 | if (src == X86Registers::ecx
| 0 | ||||||||||||||||||||||||||||||
331 | m_assembler.shrq_CLr(dest); never executed: m_assembler.shrq_CLr(dest); | 0 | ||||||||||||||||||||||||||||||
332 | else { | - | ||||||||||||||||||||||||||||||
333 | (!(src != dest) ? (qmlWTFReportAssertionFailure(__FILE__, 392, __PRETTY_FUNCTION__, "src != dest"), (qmlWTFReportBacktrace(), qmlWTFInvokeCrashHook(), (*(int *)(uintptr_t)0xbbadbeef = 0), __builtin_trap())) : (void)0); | - | ||||||||||||||||||||||||||||||
334 | - | |||||||||||||||||||||||||||||||
335 | - | |||||||||||||||||||||||||||||||
336 | swap(src, X86Registers::ecx); | - | ||||||||||||||||||||||||||||||
337 | m_assembler.shrq_CLr(dest == X86Registers::ecx ? src : dest); | - | ||||||||||||||||||||||||||||||
338 | swap(src, X86Registers::ecx); | - | ||||||||||||||||||||||||||||||
339 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
340 | } | - | ||||||||||||||||||||||||||||||
341 | - | |||||||||||||||||||||||||||||||
342 | void load64(ImplicitAddress address, RegisterID dest) | - | ||||||||||||||||||||||||||||||
343 | { | - | ||||||||||||||||||||||||||||||
344 | m_assembler.movq_mr(address.offset, address.base, dest); | - | ||||||||||||||||||||||||||||||
345 | } executed 59260 times by 65 tests: end of block Executed by:
| 59260 | ||||||||||||||||||||||||||||||
346 | - | |||||||||||||||||||||||||||||||
347 | void load64(BaseIndex address, RegisterID dest) | - | ||||||||||||||||||||||||||||||
348 | { | - | ||||||||||||||||||||||||||||||
349 | m_assembler.movq_mr(address.offset, address.base, address.index, address.scale, dest); | - | ||||||||||||||||||||||||||||||
350 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
351 | - | |||||||||||||||||||||||||||||||
352 | void load64(const void* address, RegisterID dest) | - | ||||||||||||||||||||||||||||||
353 | { | - | ||||||||||||||||||||||||||||||
354 | if (dest == X86Registers::eax
| 0 | ||||||||||||||||||||||||||||||
355 | m_assembler.movq_mEAX(address); never executed: m_assembler.movq_mEAX(address); | 0 | ||||||||||||||||||||||||||||||
356 | else { | - | ||||||||||||||||||||||||||||||
357 | move(TrustedImmPtr(address), dest); | - | ||||||||||||||||||||||||||||||
358 | load64(dest, dest); | - | ||||||||||||||||||||||||||||||
359 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
360 | } | - | ||||||||||||||||||||||||||||||
361 | - | |||||||||||||||||||||||||||||||
362 | DataLabel32 load64WithAddressOffsetPatch(Address address, RegisterID dest) | - | ||||||||||||||||||||||||||||||
363 | { | - | ||||||||||||||||||||||||||||||
364 | padBeforePatch(); | - | ||||||||||||||||||||||||||||||
365 | m_assembler.movq_mr_disp32(address.offset, address.base, dest); | - | ||||||||||||||||||||||||||||||
366 | return never executed: DataLabel32(this);return DataLabel32(this); never executed: return DataLabel32(this); | 0 | ||||||||||||||||||||||||||||||
367 | } | - | ||||||||||||||||||||||||||||||
368 | - | |||||||||||||||||||||||||||||||
369 | DataLabelCompact load64WithCompactAddressOffsetPatch(Address address, RegisterID dest) | - | ||||||||||||||||||||||||||||||
370 | { | - | ||||||||||||||||||||||||||||||
371 | padBeforePatch(); | - | ||||||||||||||||||||||||||||||
372 | m_assembler.movq_mr_disp8(address.offset, address.base, dest); | - | ||||||||||||||||||||||||||||||
373 | return never executed: DataLabelCompact(this);return DataLabelCompact(this); never executed: return DataLabelCompact(this); | 0 | ||||||||||||||||||||||||||||||
374 | } | - | ||||||||||||||||||||||||||||||
375 | - | |||||||||||||||||||||||||||||||
376 | void store64(RegisterID src, ImplicitAddress address) | - | ||||||||||||||||||||||||||||||
377 | { | - | ||||||||||||||||||||||||||||||
378 | m_assembler.movq_rm(src, address.offset, address.base); | - | ||||||||||||||||||||||||||||||
379 | } executed 86957 times by 65 tests: end of block Executed by:
| 86957 | ||||||||||||||||||||||||||||||
380 | - | |||||||||||||||||||||||||||||||
381 | void store64(RegisterID src, BaseIndex address) | - | ||||||||||||||||||||||||||||||
382 | { | - | ||||||||||||||||||||||||||||||
383 | m_assembler.movq_rm(src, address.offset, address.base, address.index, address.scale); | - | ||||||||||||||||||||||||||||||
384 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
385 | - | |||||||||||||||||||||||||||||||
386 | void store64(RegisterID src, void* address) | - | ||||||||||||||||||||||||||||||
387 | { | - | ||||||||||||||||||||||||||||||
388 | if (src == X86Registers::eax
| 0 | ||||||||||||||||||||||||||||||
389 | m_assembler.movq_EAXm(address); never executed: m_assembler.movq_EAXm(address); | 0 | ||||||||||||||||||||||||||||||
390 | else { | - | ||||||||||||||||||||||||||||||
391 | move(TrustedImmPtr(address), scratchRegister); | - | ||||||||||||||||||||||||||||||
392 | store64(src, scratchRegister); | - | ||||||||||||||||||||||||||||||
393 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
394 | } | - | ||||||||||||||||||||||||||||||
395 | - | |||||||||||||||||||||||||||||||
396 | void store64(TrustedImm64 imm, ImplicitAddress address) | - | ||||||||||||||||||||||||||||||
397 | { | - | ||||||||||||||||||||||||||||||
398 | move(imm, scratchRegister); | - | ||||||||||||||||||||||||||||||
399 | store64(scratchRegister, address); | - | ||||||||||||||||||||||||||||||
400 | } executed 58 times by 7 tests: end of block Executed by:
| 58 | ||||||||||||||||||||||||||||||
401 | - | |||||||||||||||||||||||||||||||
402 | void store64(TrustedImm64 imm, BaseIndex address) | - | ||||||||||||||||||||||||||||||
403 | { | - | ||||||||||||||||||||||||||||||
404 | move(imm, scratchRegister); | - | ||||||||||||||||||||||||||||||
405 | m_assembler.movq_rm(scratchRegister, address.offset, address.base, address.index, address.scale); | - | ||||||||||||||||||||||||||||||
406 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
407 | - | |||||||||||||||||||||||||||||||
408 | DataLabel32 store64WithAddressOffsetPatch(RegisterID src, Address address) | - | ||||||||||||||||||||||||||||||
409 | { | - | ||||||||||||||||||||||||||||||
410 | padBeforePatch(); | - | ||||||||||||||||||||||||||||||
411 | m_assembler.movq_rm_disp32(src, address.offset, address.base); | - | ||||||||||||||||||||||||||||||
412 | return never executed: DataLabel32(this);return DataLabel32(this); never executed: return DataLabel32(this); | 0 | ||||||||||||||||||||||||||||||
413 | } | - | ||||||||||||||||||||||||||||||
414 | - | |||||||||||||||||||||||||||||||
415 | void move64ToDouble(RegisterID src, FPRegisterID dest) | - | ||||||||||||||||||||||||||||||
416 | { | - | ||||||||||||||||||||||||||||||
417 | m_assembler.movq_rr(src, dest); | - | ||||||||||||||||||||||||||||||
418 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
419 | - | |||||||||||||||||||||||||||||||
420 | void moveDoubleTo64(FPRegisterID src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
421 | { | - | ||||||||||||||||||||||||||||||
422 | m_assembler.movq_rr(src, dest); | - | ||||||||||||||||||||||||||||||
423 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
424 | - | |||||||||||||||||||||||||||||||
425 | void compare64(RelationalCondition cond, RegisterID left, TrustedImm32 right, RegisterID dest) | - | ||||||||||||||||||||||||||||||
426 | { | - | ||||||||||||||||||||||||||||||
427 | if (((
| 0-8 | ||||||||||||||||||||||||||||||
428 | m_assembler.testq_rr(left, left); executed 8 times by 1 test: m_assembler.testq_rr(left, left); Executed by:
| 8 | ||||||||||||||||||||||||||||||
429 | else | - | ||||||||||||||||||||||||||||||
430 | m_assembler.cmpq_ir(right.m_value, left); never executed: m_assembler.cmpq_ir(right.m_value, left); | 0 | ||||||||||||||||||||||||||||||
431 | m_assembler.setCC_r(x86Condition(cond), dest); | - | ||||||||||||||||||||||||||||||
432 | m_assembler.movzbl_rr(dest, dest); | - | ||||||||||||||||||||||||||||||
433 | } executed 8 times by 1 test: end of block Executed by:
| 8 | ||||||||||||||||||||||||||||||
434 | - | |||||||||||||||||||||||||||||||
435 | void compare64(RelationalCondition cond, RegisterID left, RegisterID right, RegisterID dest) | - | ||||||||||||||||||||||||||||||
436 | { | - | ||||||||||||||||||||||||||||||
437 | m_assembler.cmpq_rr(right, left); | - | ||||||||||||||||||||||||||||||
438 | m_assembler.setCC_r(x86Condition(cond), dest); | - | ||||||||||||||||||||||||||||||
439 | m_assembler.movzbl_rr(dest, dest); | - | ||||||||||||||||||||||||||||||
440 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
441 | - | |||||||||||||||||||||||||||||||
442 | Jump branch64(RelationalCondition cond, RegisterID left, RegisterID right) | - | ||||||||||||||||||||||||||||||
443 | { | - | ||||||||||||||||||||||||||||||
444 | m_assembler.cmpq_rr(right, left); | - | ||||||||||||||||||||||||||||||
445 | return never executed: Jump(m_assembler.jCC(x86Condition(cond)));return Jump(m_assembler.jCC(x86Condition(cond))); never executed: return Jump(m_assembler.jCC(x86Condition(cond))); | 0 | ||||||||||||||||||||||||||||||
446 | } | - | ||||||||||||||||||||||||||||||
447 | - | |||||||||||||||||||||||||||||||
448 | Jump branch64(RelationalCondition cond, RegisterID left, TrustedImm64 right) | - | ||||||||||||||||||||||||||||||
449 | { | - | ||||||||||||||||||||||||||||||
450 | if (((
| 0-13188 | ||||||||||||||||||||||||||||||
451 | m_assembler.testq_rr(left, left); | - | ||||||||||||||||||||||||||||||
452 | return executed 13188 times by 64 tests: Jump(m_assembler.jCC(x86Condition(cond)));return Jump(m_assembler.jCC(x86Condition(cond))); Executed by:
executed 13188 times by 64 tests: return Jump(m_assembler.jCC(x86Condition(cond))); Executed by:
| 13188 | ||||||||||||||||||||||||||||||
453 | } | - | ||||||||||||||||||||||||||||||
454 | move(right, scratchRegister); | - | ||||||||||||||||||||||||||||||
455 | return never executed: branch64(cond, left, scratchRegister);return branch64(cond, left, scratchRegister); never executed: return branch64(cond, left, scratchRegister); | 0 | ||||||||||||||||||||||||||||||
456 | } | - | ||||||||||||||||||||||||||||||
457 | - | |||||||||||||||||||||||||||||||
458 | Jump branch64(RelationalCondition cond, RegisterID left, Address right) | - | ||||||||||||||||||||||||||||||
459 | { | - | ||||||||||||||||||||||||||||||
460 | m_assembler.cmpq_mr(right.offset, right.base, left); | - | ||||||||||||||||||||||||||||||
461 | return never executed: Jump(m_assembler.jCC(x86Condition(cond)));return Jump(m_assembler.jCC(x86Condition(cond))); never executed: return Jump(m_assembler.jCC(x86Condition(cond))); | 0 | ||||||||||||||||||||||||||||||
462 | } | - | ||||||||||||||||||||||||||||||
463 | - | |||||||||||||||||||||||||||||||
464 | Jump branch64(RelationalCondition cond, AbsoluteAddress left, RegisterID right) | - | ||||||||||||||||||||||||||||||
465 | { | - | ||||||||||||||||||||||||||||||
466 | move(TrustedImmPtr(left.m_ptr), scratchRegister); | - | ||||||||||||||||||||||||||||||
467 | return never executed: branch64(cond, Address(scratchRegister), right);return branch64(cond, Address(scratchRegister), right); never executed: return branch64(cond, Address(scratchRegister), right); | 0 | ||||||||||||||||||||||||||||||
468 | } | - | ||||||||||||||||||||||||||||||
469 | - | |||||||||||||||||||||||||||||||
470 | Jump branch64(RelationalCondition cond, Address left, RegisterID right) | - | ||||||||||||||||||||||||||||||
471 | { | - | ||||||||||||||||||||||||||||||
472 | m_assembler.cmpq_rm(right, left.offset, left.base); | - | ||||||||||||||||||||||||||||||
473 | return never executed: Jump(m_assembler.jCC(x86Condition(cond)));return Jump(m_assembler.jCC(x86Condition(cond))); never executed: return Jump(m_assembler.jCC(x86Condition(cond))); | 0 | ||||||||||||||||||||||||||||||
474 | } | - | ||||||||||||||||||||||||||||||
475 | - | |||||||||||||||||||||||||||||||
476 | Jump branch64(RelationalCondition cond, Address left, TrustedImm64 right) | - | ||||||||||||||||||||||||||||||
477 | { | - | ||||||||||||||||||||||||||||||
478 | move(right, scratchRegister); | - | ||||||||||||||||||||||||||||||
479 | return never executed: branch64(cond, left, scratchRegister);return branch64(cond, left, scratchRegister); never executed: return branch64(cond, left, scratchRegister); | 0 | ||||||||||||||||||||||||||||||
480 | } | - | ||||||||||||||||||||||||||||||
481 | - | |||||||||||||||||||||||||||||||
482 | Jump branchTest64(ResultCondition cond, RegisterID reg, RegisterID mask) | - | ||||||||||||||||||||||||||||||
483 | { | - | ||||||||||||||||||||||||||||||
484 | m_assembler.testq_rr(reg, mask); | - | ||||||||||||||||||||||||||||||
485 | return never executed: Jump(m_assembler.jCC(x86Condition(cond)));return Jump(m_assembler.jCC(x86Condition(cond))); never executed: return Jump(m_assembler.jCC(x86Condition(cond))); | 0 | ||||||||||||||||||||||||||||||
486 | } | - | ||||||||||||||||||||||||||||||
487 | - | |||||||||||||||||||||||||||||||
488 | Jump branchTest64(ResultCondition cond, RegisterID reg, TrustedImm32 mask = TrustedImm32(-1)) | - | ||||||||||||||||||||||||||||||
489 | { | - | ||||||||||||||||||||||||||||||
490 | - | |||||||||||||||||||||||||||||||
491 | if (mask.m_value == -1
| 0 | ||||||||||||||||||||||||||||||
492 | m_assembler.testq_rr(reg, reg); never executed: m_assembler.testq_rr(reg, reg); | 0 | ||||||||||||||||||||||||||||||
493 | else if ((
| 0 | ||||||||||||||||||||||||||||||
494 | m_assembler.testb_i8r(mask.m_value, reg); never executed: m_assembler.testb_i8r(mask.m_value, reg); | 0 | ||||||||||||||||||||||||||||||
495 | else | - | ||||||||||||||||||||||||||||||
496 | m_assembler.testq_i32r(mask.m_value, reg); never executed: m_assembler.testq_i32r(mask.m_value, reg); | 0 | ||||||||||||||||||||||||||||||
497 | return never executed: Jump(m_assembler.jCC(x86Condition(cond)));return Jump(m_assembler.jCC(x86Condition(cond))); never executed: return Jump(m_assembler.jCC(x86Condition(cond))); | 0 | ||||||||||||||||||||||||||||||
498 | } | - | ||||||||||||||||||||||||||||||
499 | - | |||||||||||||||||||||||||||||||
500 | void test64(ResultCondition cond, RegisterID reg, TrustedImm32 mask, RegisterID dest) | - | ||||||||||||||||||||||||||||||
501 | { | - | ||||||||||||||||||||||||||||||
502 | if (mask.m_value == -1
| 0 | ||||||||||||||||||||||||||||||
503 | m_assembler.testq_rr(reg, reg); never executed: m_assembler.testq_rr(reg, reg); | 0 | ||||||||||||||||||||||||||||||
504 | else if ((
| 0 | ||||||||||||||||||||||||||||||
505 | m_assembler.testb_i8r(mask.m_value, reg); never executed: m_assembler.testb_i8r(mask.m_value, reg); | 0 | ||||||||||||||||||||||||||||||
506 | else | - | ||||||||||||||||||||||||||||||
507 | m_assembler.testq_i32r(mask.m_value, reg); never executed: m_assembler.testq_i32r(mask.m_value, reg); | 0 | ||||||||||||||||||||||||||||||
508 | set32(x86Condition(cond), dest); | - | ||||||||||||||||||||||||||||||
509 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
510 | - | |||||||||||||||||||||||||||||||
511 | void test64(ResultCondition cond, RegisterID reg, RegisterID mask, RegisterID dest) | - | ||||||||||||||||||||||||||||||
512 | { | - | ||||||||||||||||||||||||||||||
513 | m_assembler.testq_rr(reg, mask); | - | ||||||||||||||||||||||||||||||
514 | set32(x86Condition(cond), dest); | - | ||||||||||||||||||||||||||||||
515 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
516 | - | |||||||||||||||||||||||||||||||
517 | Jump branchTest64(ResultCondition cond, AbsoluteAddress address, TrustedImm32 mask = TrustedImm32(-1)) | - | ||||||||||||||||||||||||||||||
518 | { | - | ||||||||||||||||||||||||||||||
519 | load64(address.m_ptr, scratchRegister); | - | ||||||||||||||||||||||||||||||
520 | return never executed: branchTest64(cond, scratchRegister, mask);return branchTest64(cond, scratchRegister, mask); never executed: return branchTest64(cond, scratchRegister, mask); | 0 | ||||||||||||||||||||||||||||||
521 | } | - | ||||||||||||||||||||||||||||||
522 | - | |||||||||||||||||||||||||||||||
523 | Jump branchTest64(ResultCondition cond, Address address, TrustedImm32 mask = TrustedImm32(-1)) | - | ||||||||||||||||||||||||||||||
524 | { | - | ||||||||||||||||||||||||||||||
525 | if (mask.m_value == -1
| 0 | ||||||||||||||||||||||||||||||
526 | m_assembler.cmpq_im(0, address.offset, address.base); never executed: m_assembler.cmpq_im(0, address.offset, address.base); | 0 | ||||||||||||||||||||||||||||||
527 | else | - | ||||||||||||||||||||||||||||||
528 | m_assembler.testq_i32m(mask.m_value, address.offset, address.base); never executed: m_assembler.testq_i32m(mask.m_value, address.offset, address.base); | 0 | ||||||||||||||||||||||||||||||
529 | return never executed: Jump(m_assembler.jCC(x86Condition(cond)));return Jump(m_assembler.jCC(x86Condition(cond))); never executed: return Jump(m_assembler.jCC(x86Condition(cond))); | 0 | ||||||||||||||||||||||||||||||
530 | } | - | ||||||||||||||||||||||||||||||
531 | - | |||||||||||||||||||||||||||||||
532 | Jump branchTest64(ResultCondition cond, Address address, RegisterID reg) | - | ||||||||||||||||||||||||||||||
533 | { | - | ||||||||||||||||||||||||||||||
534 | m_assembler.testq_rm(reg, address.offset, address.base); | - | ||||||||||||||||||||||||||||||
535 | return never executed: Jump(m_assembler.jCC(x86Condition(cond)));return Jump(m_assembler.jCC(x86Condition(cond))); never executed: return Jump(m_assembler.jCC(x86Condition(cond))); | 0 | ||||||||||||||||||||||||||||||
536 | } | - | ||||||||||||||||||||||||||||||
537 | - | |||||||||||||||||||||||||||||||
538 | Jump branchTest64(ResultCondition cond, BaseIndex address, TrustedImm32 mask = TrustedImm32(-1)) | - | ||||||||||||||||||||||||||||||
539 | { | - | ||||||||||||||||||||||||||||||
540 | if (mask.m_value == -1
| 0 | ||||||||||||||||||||||||||||||
541 | m_assembler.cmpq_im(0, address.offset, address.base, address.index, address.scale); never executed: m_assembler.cmpq_im(0, address.offset, address.base, address.index, address.scale); | 0 | ||||||||||||||||||||||||||||||
542 | else | - | ||||||||||||||||||||||||||||||
543 | m_assembler.testq_i32m(mask.m_value, address.offset, address.base, address.index, address.scale); never executed: m_assembler.testq_i32m(mask.m_value, address.offset, address.base, address.index, address.scale); | 0 | ||||||||||||||||||||||||||||||
544 | return never executed: Jump(m_assembler.jCC(x86Condition(cond)));return Jump(m_assembler.jCC(x86Condition(cond))); never executed: return Jump(m_assembler.jCC(x86Condition(cond))); | 0 | ||||||||||||||||||||||||||||||
545 | } | - | ||||||||||||||||||||||||||||||
546 | - | |||||||||||||||||||||||||||||||
547 | - | |||||||||||||||||||||||||||||||
548 | Jump branchAdd64(ResultCondition cond, TrustedImm32 imm, RegisterID dest) | - | ||||||||||||||||||||||||||||||
549 | { | - | ||||||||||||||||||||||||||||||
550 | add64(imm, dest); | - | ||||||||||||||||||||||||||||||
551 | return never executed: Jump(m_assembler.jCC(x86Condition(cond)));return Jump(m_assembler.jCC(x86Condition(cond))); never executed: return Jump(m_assembler.jCC(x86Condition(cond))); | 0 | ||||||||||||||||||||||||||||||
552 | } | - | ||||||||||||||||||||||||||||||
553 | - | |||||||||||||||||||||||||||||||
554 | Jump branchAdd64(ResultCondition cond, RegisterID src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
555 | { | - | ||||||||||||||||||||||||||||||
556 | add64(src, dest); | - | ||||||||||||||||||||||||||||||
557 | return never executed: Jump(m_assembler.jCC(x86Condition(cond)));return Jump(m_assembler.jCC(x86Condition(cond))); never executed: return Jump(m_assembler.jCC(x86Condition(cond))); | 0 | ||||||||||||||||||||||||||||||
558 | } | - | ||||||||||||||||||||||||||||||
559 | - | |||||||||||||||||||||||||||||||
560 | Jump branchSub64(ResultCondition cond, TrustedImm32 imm, RegisterID dest) | - | ||||||||||||||||||||||||||||||
561 | { | - | ||||||||||||||||||||||||||||||
562 | sub64(imm, dest); | - | ||||||||||||||||||||||||||||||
563 | return never executed: Jump(m_assembler.jCC(x86Condition(cond)));return Jump(m_assembler.jCC(x86Condition(cond))); never executed: return Jump(m_assembler.jCC(x86Condition(cond))); | 0 | ||||||||||||||||||||||||||||||
564 | } | - | ||||||||||||||||||||||||||||||
565 | - | |||||||||||||||||||||||||||||||
566 | Jump branchSub64(ResultCondition cond, RegisterID src, RegisterID dest) | - | ||||||||||||||||||||||||||||||
567 | { | - | ||||||||||||||||||||||||||||||
568 | sub64(src, dest); | - | ||||||||||||||||||||||||||||||
569 | return never executed: Jump(m_assembler.jCC(x86Condition(cond)));return Jump(m_assembler.jCC(x86Condition(cond))); never executed: return Jump(m_assembler.jCC(x86Condition(cond))); | 0 | ||||||||||||||||||||||||||||||
570 | } | - | ||||||||||||||||||||||||||||||
571 | - | |||||||||||||||||||||||||||||||
572 | Jump branchSub64(ResultCondition cond, RegisterID src1, TrustedImm32 src2, RegisterID dest) | - | ||||||||||||||||||||||||||||||
573 | { | - | ||||||||||||||||||||||||||||||
574 | move(src1, dest); | - | ||||||||||||||||||||||||||||||
575 | return never executed: branchSub64(cond, src2, dest);return branchSub64(cond, src2, dest); never executed: return branchSub64(cond, src2, dest); | 0 | ||||||||||||||||||||||||||||||
576 | } | - | ||||||||||||||||||||||||||||||
577 | - | |||||||||||||||||||||||||||||||
578 | ConvertibleLoadLabel convertibleLoadPtr(Address address, RegisterID dest) | - | ||||||||||||||||||||||||||||||
579 | { | - | ||||||||||||||||||||||||||||||
580 | ConvertibleLoadLabel result = ConvertibleLoadLabel(this); | - | ||||||||||||||||||||||||||||||
581 | m_assembler.movq_mr(address.offset, address.base, dest); | - | ||||||||||||||||||||||||||||||
582 | return never executed: result;return result; never executed: return result; | 0 | ||||||||||||||||||||||||||||||
583 | } | - | ||||||||||||||||||||||||||||||
584 | - | |||||||||||||||||||||||||||||||
585 | DataLabelPtr moveWithPatch(TrustedImmPtr initialValue, RegisterID dest) | - | ||||||||||||||||||||||||||||||
586 | { | - | ||||||||||||||||||||||||||||||
587 | padBeforePatch(); | - | ||||||||||||||||||||||||||||||
588 | m_assembler.movq_i64r(initialValue.asIntptr(), dest); | - | ||||||||||||||||||||||||||||||
589 | return executed 609 times by 10 tests: DataLabelPtr(this);return DataLabelPtr(this); Executed by:
executed 609 times by 10 tests: return DataLabelPtr(this); Executed by:
| 609 | ||||||||||||||||||||||||||||||
590 | } | - | ||||||||||||||||||||||||||||||
591 | - | |||||||||||||||||||||||||||||||
592 | Jump branchPtrWithPatch(RelationalCondition cond, RegisterID left, DataLabelPtr& dataLabel, TrustedImmPtr initialRightValue = TrustedImmPtr(0)) | - | ||||||||||||||||||||||||||||||
593 | { | - | ||||||||||||||||||||||||||||||
594 | dataLabel = moveWithPatch(initialRightValue, scratchRegister); | - | ||||||||||||||||||||||||||||||
595 | return never executed: branch64(cond, left, scratchRegister);return branch64(cond, left, scratchRegister); never executed: return branch64(cond, left, scratchRegister); | 0 | ||||||||||||||||||||||||||||||
596 | } | - | ||||||||||||||||||||||||||||||
597 | - | |||||||||||||||||||||||||||||||
598 | Jump branchPtrWithPatch(RelationalCondition cond, Address left, DataLabelPtr& dataLabel, TrustedImmPtr initialRightValue = TrustedImmPtr(0)) | - | ||||||||||||||||||||||||||||||
599 | { | - | ||||||||||||||||||||||||||||||
600 | dataLabel = moveWithPatch(initialRightValue, scratchRegister); | - | ||||||||||||||||||||||||||||||
601 | return never executed: branch64(cond, left, scratchRegister);return branch64(cond, left, scratchRegister); never executed: return branch64(cond, left, scratchRegister); | 0 | ||||||||||||||||||||||||||||||
602 | } | - | ||||||||||||||||||||||||||||||
603 | - | |||||||||||||||||||||||||||||||
604 | DataLabelPtr storePtrWithPatch(TrustedImmPtr initialValue, ImplicitAddress address) | - | ||||||||||||||||||||||||||||||
605 | { | - | ||||||||||||||||||||||||||||||
606 | DataLabelPtr label = moveWithPatch(initialValue, scratchRegister); | - | ||||||||||||||||||||||||||||||
607 | store64(scratchRegister, address); | - | ||||||||||||||||||||||||||||||
608 | return executed 610 times by 10 tests: label;return label; Executed by:
executed 610 times by 10 tests: return label; Executed by:
| 610 | ||||||||||||||||||||||||||||||
609 | } | - | ||||||||||||||||||||||||||||||
610 | - | |||||||||||||||||||||||||||||||
611 | using MacroAssemblerX86Common::branchTest8; | - | ||||||||||||||||||||||||||||||
612 | Jump branchTest8(ResultCondition cond, ExtendedAddress address, TrustedImm32 mask = TrustedImm32(-1)) | - | ||||||||||||||||||||||||||||||
613 | { | - | ||||||||||||||||||||||||||||||
614 | TrustedImmPtr addr(reinterpret_cast<void*>(address.offset)); | - | ||||||||||||||||||||||||||||||
615 | MacroAssemblerX86Common::move(addr, scratchRegister); | - | ||||||||||||||||||||||||||||||
616 | return executed 3752 times by 3 tests: MacroAssemblerX86Common::branchTest8(cond, BaseIndex(scratchRegister, address.base, TimesOne), mask);return MacroAssemblerX86Common::branchTest8(cond, BaseIndex(scratchRegister, address.base, TimesOne), mask); Executed by:
executed 3752 times by 3 tests: return MacroAssemblerX86Common::branchTest8(cond, BaseIndex(scratchRegister, address.base, TimesOne), mask); Executed by:
| 3752 | ||||||||||||||||||||||||||||||
617 | } | - | ||||||||||||||||||||||||||||||
618 | - | |||||||||||||||||||||||||||||||
619 | Jump branchTest8(ResultCondition cond, AbsoluteAddress address, TrustedImm32 mask = TrustedImm32(-1)) | - | ||||||||||||||||||||||||||||||
620 | { | - | ||||||||||||||||||||||||||||||
621 | MacroAssemblerX86Common::move(TrustedImmPtr(address.m_ptr), scratchRegister); | - | ||||||||||||||||||||||||||||||
622 | return never executed: MacroAssemblerX86Common::branchTest8(cond, Address(scratchRegister), mask);return MacroAssemblerX86Common::branchTest8(cond, Address(scratchRegister), mask); never executed: return MacroAssemblerX86Common::branchTest8(cond, Address(scratchRegister), mask); | 0 | ||||||||||||||||||||||||||||||
623 | } | - | ||||||||||||||||||||||||||||||
624 | - | |||||||||||||||||||||||||||||||
625 | static bool supportsFloatingPoint() { return never executed: true;return true; never executed: }return true; | 0 | ||||||||||||||||||||||||||||||
626 | - | |||||||||||||||||||||||||||||||
627 | static bool supportsFloatingPointTruncate() { return never executed: true;return true; never executed: }return true; | 0 | ||||||||||||||||||||||||||||||
628 | static bool supportsFloatingPointSqrt() { return never executed: true;return true; never executed: }return true; | 0 | ||||||||||||||||||||||||||||||
629 | static bool supportsFloatingPointAbs() { return never executed: true;return true; never executed: }return true; | 0 | ||||||||||||||||||||||||||||||
630 | - | |||||||||||||||||||||||||||||||
631 | static FunctionPtr readCallTarget(CodeLocationCall call) | - | ||||||||||||||||||||||||||||||
632 | { | - | ||||||||||||||||||||||||||||||
633 | return never executed: FunctionPtr(X86Assembler::readPointer(call.dataLabelPtrAtOffset(-3).dataLocation()));return FunctionPtr(X86Assembler::readPointer(call.dataLabelPtrAtOffset(-3).dataLocation())); never executed: return FunctionPtr(X86Assembler::readPointer(call.dataLabelPtrAtOffset(-3).dataLocation())); | 0 | ||||||||||||||||||||||||||||||
634 | } | - | ||||||||||||||||||||||||||||||
635 | - | |||||||||||||||||||||||||||||||
636 | static RegisterID scratchRegisterForBlinding() { return never executed: scratchRegister;return scratchRegister; never executed: }return scratchRegister; | 0 | ||||||||||||||||||||||||||||||
637 | - | |||||||||||||||||||||||||||||||
638 | static bool canJumpReplacePatchableBranchPtrWithPatch() { return never executed: true;return true; never executed: }return true; | 0 | ||||||||||||||||||||||||||||||
639 | - | |||||||||||||||||||||||||||||||
640 | static CodeLocationLabel startOfBranchPtrWithPatchOnRegister(CodeLocationDataLabelPtr label) | - | ||||||||||||||||||||||||||||||
641 | { | - | ||||||||||||||||||||||||||||||
642 | const int rexBytes = 1; | - | ||||||||||||||||||||||||||||||
643 | const int opcodeBytes = 1; | - | ||||||||||||||||||||||||||||||
644 | const int immediateBytes = 8; | - | ||||||||||||||||||||||||||||||
645 | const int totalBytes = rexBytes + opcodeBytes + immediateBytes; | - | ||||||||||||||||||||||||||||||
646 | (!(totalBytes >= maxJumpReplacementSize()) ? (qmlWTFReportAssertionFailure(__FILE__, 705, __PRETTY_FUNCTION__, "totalBytes >= maxJumpReplacementSize()"), (qmlWTFReportBacktrace(), qmlWTFInvokeCrashHook(), (*(int *)(uintptr_t)0xbbadbeef = 0), __builtin_trap())) : (void)0); | - | ||||||||||||||||||||||||||||||
647 | return never executed: label.labelAtOffset(-totalBytes);return label.labelAtOffset(-totalBytes); never executed: return label.labelAtOffset(-totalBytes); | 0 | ||||||||||||||||||||||||||||||
648 | } | - | ||||||||||||||||||||||||||||||
649 | - | |||||||||||||||||||||||||||||||
650 | static CodeLocationLabel startOfPatchableBranchPtrWithPatchOnAddress(CodeLocationDataLabelPtr label) | - | ||||||||||||||||||||||||||||||
651 | { | - | ||||||||||||||||||||||||||||||
652 | return never executed: startOfBranchPtrWithPatchOnRegister(label);return startOfBranchPtrWithPatchOnRegister(label); never executed: return startOfBranchPtrWithPatchOnRegister(label); | 0 | ||||||||||||||||||||||||||||||
653 | } | - | ||||||||||||||||||||||||||||||
654 | - | |||||||||||||||||||||||||||||||
655 | static void revertJumpReplacementToPatchableBranchPtrWithPatch(CodeLocationLabel instructionStart, Address, void* initialValue) | - | ||||||||||||||||||||||||||||||
656 | { | - | ||||||||||||||||||||||||||||||
657 | X86Assembler::revertJumpTo_movq_i64r(instructionStart.executableAddress(), reinterpret_cast<intptr_t>(initialValue), scratchRegister); | - | ||||||||||||||||||||||||||||||
658 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
659 | - | |||||||||||||||||||||||||||||||
660 | static void revertJumpReplacementToBranchPtrWithPatch(CodeLocationLabel instructionStart, RegisterID, void* initialValue) | - | ||||||||||||||||||||||||||||||
661 | { | - | ||||||||||||||||||||||||||||||
662 | X86Assembler::revertJumpTo_movq_i64r(instructionStart.executableAddress(), reinterpret_cast<intptr_t>(initialValue), scratchRegister); | - | ||||||||||||||||||||||||||||||
663 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
664 | - | |||||||||||||||||||||||||||||||
665 | private: | - | ||||||||||||||||||||||||||||||
666 | template <typename, template <typename> class> friend class LinkBufferBase; | - | ||||||||||||||||||||||||||||||
667 | friend class RepatchBuffer; | - | ||||||||||||||||||||||||||||||
668 | - | |||||||||||||||||||||||||||||||
669 | static void linkCall(void* code, Call call, FunctionPtr function) | - | ||||||||||||||||||||||||||||||
670 | { | - | ||||||||||||||||||||||||||||||
671 | if (!call.isFlagSet(Call::Near)
| 0 | ||||||||||||||||||||||||||||||
672 | X86Assembler::linkPointer(code, call.m_label.labelAtOffset(-3), function.value()); never executed: X86Assembler::linkPointer(code, call.m_label.labelAtOffset(-3), function.value()); | 0 | ||||||||||||||||||||||||||||||
673 | else | - | ||||||||||||||||||||||||||||||
674 | X86Assembler::linkCall(code, call.m_label, function.value()); never executed: X86Assembler::linkCall(code, call.m_label, function.value()); | 0 | ||||||||||||||||||||||||||||||
675 | } | - | ||||||||||||||||||||||||||||||
676 | - | |||||||||||||||||||||||||||||||
677 | static void repatchCall(CodeLocationCall call, CodeLocationLabel destination) | - | ||||||||||||||||||||||||||||||
678 | { | - | ||||||||||||||||||||||||||||||
679 | X86Assembler::repatchPointer(call.dataLabelPtrAtOffset(-3).dataLocation(), destination.executableAddress()); | - | ||||||||||||||||||||||||||||||
680 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
681 | - | |||||||||||||||||||||||||||||||
682 | static void repatchCall(CodeLocationCall call, FunctionPtr destination) | - | ||||||||||||||||||||||||||||||
683 | { | - | ||||||||||||||||||||||||||||||
684 | X86Assembler::repatchPointer(call.dataLabelPtrAtOffset(-3).dataLocation(), destination.executableAddress()); | - | ||||||||||||||||||||||||||||||
685 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||
686 | - | |||||||||||||||||||||||||||||||
687 | }; | - | ||||||||||||||||||||||||||||||
688 | - | |||||||||||||||||||||||||||||||
689 | } | - | ||||||||||||||||||||||||||||||
Switch to Source code | Preprocessed file |