Changeset 223318 in webkit for trunk/Source/JavaScriptCore/jit/JITArithmetic.cpp
- Timestamp:
- Oct 14, 2017, 8:35:48 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/jit/JITArithmetic.cpp
r222689 r223318 196 196 197 197 emit_compareAndJumpSlow(op1, op2, target, DoubleLessThanOrUnordered, operationCompareGreaterEq, true, iter); 198 } 199 200 void JIT::emit_op_below(Instruction* currentInstruction) 201 { 202 int dst = currentInstruction[1].u.operand; 203 int op1 = currentInstruction[2].u.operand; 204 int op2 = currentInstruction[3].u.operand; 205 emit_compareUnsigned(dst, op1, op2, Below); 206 } 207 208 void JIT::emit_op_beloweq(Instruction* currentInstruction) 209 { 210 int dst = currentInstruction[1].u.operand; 211 int op1 = currentInstruction[2].u.operand; 212 int op2 = currentInstruction[3].u.operand; 213 emit_compareUnsigned(dst, op1, op2, BelowOrEqual); 214 } 215 216 void JIT::emit_op_jbelow(Instruction* currentInstruction) 217 { 218 int op1 = currentInstruction[1].u.operand; 219 int op2 = currentInstruction[2].u.operand; 220 unsigned target = currentInstruction[3].u.operand; 221 222 emit_compareUnsignedAndJump(op1, op2, target, Below); 223 } 224 225 void JIT::emit_op_jbeloweq(Instruction* currentInstruction) 226 { 227 int op1 = currentInstruction[1].u.operand; 228 int op2 = currentInstruction[2].u.operand; 229 unsigned target = currentInstruction[3].u.operand; 230 231 emit_compareUnsignedAndJump(op1, op2, target, BelowOrEqual); 198 232 } 199 233 … … 265 299 } 266 300 301 void JIT::emit_compareUnsignedAndJump(int op1, int op2, unsigned target, RelationalCondition condition) 302 { 303 if (isOperandConstantInt(op2)) { 304 emitGetVirtualRegister(op1, regT0); 305 int32_t op2imm = getOperandConstantInt(op2); 306 addJump(branch32(condition, regT0, Imm32(op2imm)), target); 307 } else if (isOperandConstantInt(op1)) { 308 emitGetVirtualRegister(op2, regT1); 309 int32_t op1imm = getOperandConstantInt(op1); 310 addJump(branch32(commute(condition), regT1, Imm32(op1imm)), target); 311 } else { 312 emitGetVirtualRegisters(op1, regT0, op2, regT1); 313 addJump(branch32(condition, regT0, regT1), target); 314 } 315 } 316 317 void JIT::emit_compareUnsigned(int dst, int op1, int op2, RelationalCondition condition) 318 { 319 if (isOperandConstantInt(op2)) { 320 emitGetVirtualRegister(op1, regT0); 321 int32_t op2imm = getOperandConstantInt(op2); 322 compare32(condition, regT0, Imm32(op2imm), regT0); 323 } else if (isOperandConstantInt(op1)) { 324 emitGetVirtualRegister(op2, regT0); 325 int32_t op1imm = getOperandConstantInt(op1); 326 compare32(commute(condition), regT0, Imm32(op1imm), regT0); 327 } else { 328 emitGetVirtualRegisters(op1, regT0, op2, regT1); 329 compare32(condition, regT0, regT1, regT0); 330 } 331 emitTagBool(regT0); 332 emitPutVirtualRegister(dst); 333 } 334 267 335 void JIT::emit_compareAndJumpSlow(int op1, int op2, unsigned target, DoubleCondition condition, size_t (JIT_OPERATION *operation)(ExecState*, EncodedJSValue, EncodedJSValue), bool invert, Vector<SlowCaseEntry>::iterator& iter) 268 336 {
Note:
See TracChangeset
for help on using the changeset viewer.