| 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 blockExecuted 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 blockExecuted 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 blockExecuted 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 blockExecuted 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 blockExecuted 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 blockExecuted 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 blockExecuted 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 blockExecuted 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 blockExecuted 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 blockExecuted 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 blockExecuted 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 blockExecuted 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 blockExecuted 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 |