Changeset 38600 in webkit for trunk/JavaScriptCore/jit/JIT.cpp
- Timestamp:
- Nov 19, 2008, 11:16:30 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JIT.cpp
r38590 r38600 378 378 ALWAYS_INLINE JmpSrc JIT::emitNakedCall(unsigned bytecodeIndex, X86::RegisterID r) 379 379 { 380 JmpSrc call = __ emitCall(r);380 JmpSrc call = __ call(r); 381 381 m_calls.append(CallRecord(call, bytecodeIndex)); 382 382 … … 386 386 ALWAYS_INLINE JmpSrc JIT::emitNakedCall(unsigned bytecodeIndex, void* function) 387 387 { 388 JmpSrc call = __ emitCall();388 JmpSrc call = __ call(); 389 389 m_calls.append(CallRecord(call, reinterpret_cast<CTIHelper_v>(function), bytecodeIndex)); 390 390 return call; … … 393 393 ALWAYS_INLINE JmpSrc JIT::emitNakedFastCall(unsigned bytecodeIndex, void* function) 394 394 { 395 JmpSrc call = __ emitCall();395 JmpSrc call = __ call(); 396 396 m_calls.append(CallRecord(call, reinterpret_cast<CTIHelper_v>(function), bytecodeIndex)); 397 397 return call; … … 405 405 UNUSED_PARAM(vPC); 406 406 #endif 407 __ emitRestoreArgumentReference();407 __ restoreArgumentReference(); 408 408 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 409 JmpSrc call = __ emitCall();409 JmpSrc call = __ call(); 410 410 m_calls.append(CallRecord(call, helper, bytecodeIndex)); 411 411 #if ENABLE(OPCODE_SAMPLING) … … 424 424 UNUSED_PARAM(vPC); 425 425 #endif 426 __ emitRestoreArgumentReference();426 __ restoreArgumentReference(); 427 427 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 428 JmpSrc call = __ emitCall();428 JmpSrc call = __ call(); 429 429 m_calls.append(CallRecord(call, helper, bytecodeIndex)); 430 430 #if ENABLE(OPCODE_SAMPLING) … … 443 443 UNUSED_PARAM(vPC); 444 444 #endif 445 __ emitRestoreArgumentReference();445 __ restoreArgumentReference(); 446 446 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 447 JmpSrc call = __ emitCall();447 JmpSrc call = __ call(); 448 448 m_calls.append(CallRecord(call, helper, bytecodeIndex)); 449 449 #if ENABLE(OPCODE_SAMPLING) … … 462 462 UNUSED_PARAM(vPC); 463 463 #endif 464 __ emitRestoreArgumentReference();464 __ restoreArgumentReference(); 465 465 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 466 JmpSrc call = __ emitCall();466 JmpSrc call = __ call(); 467 467 m_calls.append(CallRecord(call, helper, bytecodeIndex)); 468 468 #if ENABLE(OPCODE_SAMPLING) … … 481 481 UNUSED_PARAM(vPC); 482 482 #endif 483 __ emitRestoreArgumentReference();483 __ restoreArgumentReference(); 484 484 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 485 JmpSrc call = __ emitCall();485 JmpSrc call = __ call(); 486 486 m_calls.append(CallRecord(call, helper, bytecodeIndex)); 487 487 #if ENABLE(OPCODE_SAMPLING) … … 500 500 UNUSED_PARAM(vPC); 501 501 #endif 502 __ emitRestoreArgumentReference();502 __ restoreArgumentReference(); 503 503 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 504 JmpSrc call = __ emitCall();504 JmpSrc call = __ call(); 505 505 m_calls.append(CallRecord(call, helper, bytecodeIndex)); 506 506 #if ENABLE(OPCODE_SAMPLING) … … 519 519 UNUSED_PARAM(vPC); 520 520 #endif 521 __ emitRestoreArgumentReference();521 __ restoreArgumentReference(); 522 522 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 523 JmpSrc call = __ emitCall();523 JmpSrc call = __ call(); 524 524 m_calls.append(CallRecord(call, helper, bytecodeIndex)); 525 525 #if ENABLE(OPCODE_SAMPLING) … … 534 534 { 535 535 __ testl_i32r(JSImmediate::TagMask, reg); 536 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), bytecodeIndex));536 m_slowCases.append(SlowCaseEntry(__ jne(), bytecodeIndex)); 537 537 } 538 538 … … 557 557 { 558 558 __ testl_i32r(JSImmediate::TagBitTypeInteger, reg); 559 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJe(), bytecodeIndex));559 m_slowCases.append(SlowCaseEntry(__ je(), bytecodeIndex)); 560 560 } 561 561 … … 581 581 { 582 582 __ subl_i8r(JSImmediate::TagBitTypeInteger, reg); 583 return __ emitUnlinkedJe();583 return __ je(); 584 584 } 585 585 … … 602 602 { 603 603 __ addl_rr(reg, reg); 604 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJo(), bytecodeIndex));604 m_slowCases.append(SlowCaseEntry(__ jo(), bytecodeIndex)); 605 605 emitFastArithReTagImmediate(reg); 606 606 } … … 615 615 { 616 616 __ addl_rr(reg, reg); 617 JmpSrc jmp = __ emitUnlinkedJo();617 JmpSrc jmp = __ jo(); 618 618 emitFastArithReTagImmediate(reg); 619 619 return jmp; … … 730 730 emitCTICall(instruction, i, Interpreter::cti_op_call_eval); 731 731 __ cmpl_i32r(asInteger(JSImmediate::impossibleValue()), X86::eax); 732 wasEval = __ emitUnlinkedJne();732 wasEval = __ jne(); 733 733 } 734 734 … … 738 738 __ cmpl_i32r(asInteger(JSImmediate::impossibleValue()), X86::ecx); 739 739 JmpDst addressOfLinkedFunctionCheck = __ label(); 740 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));740 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 741 741 ASSERT(X86Assembler::getDifferenceBetweenLabels(addressOfLinkedFunctionCheck, __ label()) == repatchOffsetOpCallCall); 742 742 m_callStructureStubCompilationInfo[callLinkInfoIndex].hotPathBegin = addressOfLinkedFunctionCheck; … … 791 791 792 792 __ testl_i32r(JSImmediate::TagMask, X86::eax); 793 JmpSrc firstNotImmediate = __ emitUnlinkedJe();793 JmpSrc firstNotImmediate = __ je(); 794 794 __ testl_i32r(JSImmediate::TagMask, X86::edx); 795 JmpSrc secondNotImmediate = __ emitUnlinkedJe();795 JmpSrc secondNotImmediate = __ je(); 796 796 797 797 __ cmpl_rr(X86::edx, X86::eax); … … 803 803 emitTagAsBoolImmediate(X86::eax); 804 804 805 JmpSrc bothWereImmediates = __ emitUnlinkedJmp();805 JmpSrc bothWereImmediates = __ jmp(); 806 806 807 807 __ link(firstNotImmediate, __ label()); … … 816 816 __ orl_rr(X86::ecx, X86::edx); 817 817 818 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJnz(), i));818 m_slowCases.append(SlowCaseEntry(__ jnz(), i)); 819 819 820 820 __ movl_i32r(asInteger(jsBoolean(negated)), X86::eax); 821 821 822 JmpSrc firstWasNotImmediate = __ emitUnlinkedJmp();822 JmpSrc firstWasNotImmediate = __ jmp(); 823 823 824 824 __ link(secondNotImmediate, __ label()); 825 825 // check that eax is not the zero immediate (we know it must be immediate) 826 826 __ cmpl_i32r(asInteger(JSImmediate::zeroImmediate()), X86::eax); 827 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJe(), i));827 m_slowCases.append(SlowCaseEntry(__ je(), i)); 828 828 829 829 __ movl_i32r(asInteger(jsBoolean(negated)), X86::eax); … … 838 838 { 839 839 __ subl_i8r(1, X86::esi); 840 JmpSrc skipTimeout = __ emitUnlinkedJne();840 JmpSrc skipTimeout = __ jne(); 841 841 emitCTICall(vPC, bytecodeIndex, Interpreter::cti_timeout_check); 842 842 … … 867 867 // Compare & branch if immediate. 868 868 __ ucomis_rr(tempXmm, xmmSource); 869 JmpSrc resultIsImm = __ emitUnlinkedJe();869 JmpSrc resultIsImm = __ je(); 870 870 JmpDst resultLookedLikeImmButActuallyIsnt = __ label(); 871 871 … … 875 875 __ movl_rr(jsNumberCell, X86::eax); 876 876 emitPutVirtualRegister(dst); 877 *wroteJSNumberCell = __ emitUnlinkedJmp();877 *wroteJSNumberCell = __ jmp(); 878 878 879 879 __ link(resultIsImm, __ label()); 880 880 // value == (double)(JSImmediate)value... or at least, it looks that way... 881 881 // ucomi will report that (0 == -0), and will report true if either input in NaN (result is unordered). 882 __ link(__ emitUnlinkedJp(), resultLookedLikeImmButActuallyIsnt); // Actually was a NaN882 __ link(__ jp(), resultLookedLikeImmButActuallyIsnt); // Actually was a NaN 883 883 __ pextrw_irr(3, xmmSource, tempReg2); 884 884 __ cmpl_i32r(0x8000, tempReg2); 885 __ link(__ emitUnlinkedJe(), resultLookedLikeImmButActuallyIsnt); // Actually was -0885 __ link(__ je(), resultLookedLikeImmButActuallyIsnt); // Actually was -0 886 886 // Yes it really really really is representable as a JSImmediate. 887 887 emitFastArithIntToImmNoCheck(tempReg1); … … 906 906 // Check op2 is a number 907 907 __ testl_i32r(JSImmediate::TagBitTypeInteger, X86::edx); 908 JmpSrc op2imm = __ emitUnlinkedJne();908 JmpSrc op2imm = __ jne(); 909 909 if (!types.second().definitelyIsNumber()) { 910 910 emitJumpSlowCaseIfNotJSCell(X86::edx, i, src2); 911 911 __ cmpl_i32m(reinterpret_cast<unsigned>(numberStructure), FIELD_OFFSET(JSCell, m_structure), X86::edx); 912 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));912 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 913 913 } 914 914 … … 916 916 // Slow case if src1 is not a number type. 917 917 __ testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax); 918 JmpSrc op1imm = __ emitUnlinkedJne();918 JmpSrc op1imm = __ jne(); 919 919 if (!types.first().definitelyIsNumber()) { 920 920 emitJumpSlowCaseIfNotJSCell(X86::eax, i, src1); 921 921 __ cmpl_i32m(reinterpret_cast<unsigned>(numberStructure), FIELD_OFFSET(JSCell, m_structure), X86::eax); 922 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));922 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 923 923 } 924 924 925 925 // (1a) if we get here, src1 is also a number cell 926 926 __ movsd_mr(FIELD_OFFSET(JSNumberCell, m_value), X86::eax, X86::xmm0); 927 JmpSrc loadedDouble = __ emitUnlinkedJmp();927 JmpSrc loadedDouble = __ jmp(); 928 928 // (1b) if we get here, src1 is an immediate 929 929 __ link(op1imm, __ label()); … … 942 942 943 943 putDoubleResultToJSNumberCellOrJSImmediate(X86::xmm0, X86::edx, dst, &wasJSNumberCell2, X86::xmm1, X86::ecx, X86::eax); 944 wasJSNumberCell2b = __ emitUnlinkedJmp();944 wasJSNumberCell2b = __ jmp(); 945 945 946 946 // (2) This handles cases where src2 is an immediate number. … … 953 953 // Check op1 is a number 954 954 __ testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax); 955 JmpSrc op1imm = __ emitUnlinkedJne();955 JmpSrc op1imm = __ jne(); 956 956 if (!types.first().definitelyIsNumber()) { 957 957 emitJumpSlowCaseIfNotJSCell(X86::eax, i, src1); 958 958 __ cmpl_i32m(reinterpret_cast<unsigned>(numberStructure), FIELD_OFFSET(JSCell, m_structure), X86::eax); 959 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));959 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 960 960 } 961 961 … … 963 963 // Slow case if src2 is not a number type. 964 964 __ testl_i32r(JSImmediate::TagBitTypeInteger, X86::edx); 965 JmpSrc op2imm = __ emitUnlinkedJne();965 JmpSrc op2imm = __ jne(); 966 966 if (!types.second().definitelyIsNumber()) { 967 967 emitJumpSlowCaseIfNotJSCell(X86::edx, i, src2); 968 968 __ cmpl_i32m(reinterpret_cast<unsigned>(numberStructure), FIELD_OFFSET(JSCell, m_structure), X86::edx); 969 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));969 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 970 970 } 971 971 972 972 // (1a) if we get here, src2 is also a number cell 973 973 __ movsd_mr(FIELD_OFFSET(JSNumberCell, m_value), X86::edx, X86::xmm1); 974 JmpSrc loadedDouble = __ emitUnlinkedJmp();974 JmpSrc loadedDouble = __ jmp(); 975 975 // (1b) if we get here, src2 is an immediate 976 976 __ link(op2imm, __ label()); … … 992 992 993 993 putDoubleResultToJSNumberCellOrJSImmediate(X86::xmm0, X86::eax, dst, &wasJSNumberCell1, X86::xmm1, X86::ecx, X86::edx); 994 wasJSNumberCell1b = __ emitUnlinkedJmp();994 wasJSNumberCell1b = __ jmp(); 995 995 996 996 // (2) This handles cases where src1 is an immediate number. … … 1004 1004 emitFastArithDeTagImmediate(X86::eax); 1005 1005 __ addl_rr(X86::edx, X86::eax); 1006 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJo(), i));1006 m_slowCases.append(SlowCaseEntry(__ jo(), i)); 1007 1007 } else if (opcodeID == op_sub) { 1008 1008 __ subl_rr(X86::edx, X86::eax); 1009 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJo(), i));1009 m_slowCases.append(SlowCaseEntry(__ jo(), i)); 1010 1010 emitFastArithReTagImmediate(X86::eax); 1011 1011 } else { … … 1015 1015 JmpSrc op1Zero = emitFastArithDeTagImmediateJumpIfZero(X86::eax); 1016 1016 __ testl_rr(X86::edx, X86::edx); 1017 JmpSrc op2NonZero = __ emitUnlinkedJne();1017 JmpSrc op2NonZero = __ jne(); 1018 1018 __ link(op1Zero, __ label()); 1019 1019 // if either input is zero, add the two together, and check if the result is < 0. … … 1021 1021 __ movl_rr(X86::eax, X86::ecx); 1022 1022 __ addl_rr(X86::edx, X86::ecx); 1023 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJs(), i));1023 m_slowCases.append(SlowCaseEntry(__ js(), i)); 1024 1024 // Skip the above check if neither input is zero 1025 1025 __ link(op2NonZero, __ label()); 1026 1026 __ imull_rr(X86::edx, X86::eax); 1027 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJo(), i));1027 m_slowCases.append(SlowCaseEntry(__ jo(), i)); 1028 1028 emitFastArithReTagImmediate(X86::eax); 1029 1029 } … … 1126 1126 emitJumpSlowCaseIfNotImmNum(X86::eax, i); 1127 1127 __ addl_i32r(getDeTaggedConstantImmediate(value), X86::eax); 1128 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJo(), i));1128 m_slowCases.append(SlowCaseEntry(__ jo(), i)); 1129 1129 emitPutVirtualRegister(dst); 1130 1130 } else if (JSValue* value = getConstantImmediateNumericArg(src2)) { … … 1132 1132 emitJumpSlowCaseIfNotImmNum(X86::eax, i); 1133 1133 __ addl_i32r(getDeTaggedConstantImmediate(value), X86::eax); 1134 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJo(), i));1134 m_slowCases.append(SlowCaseEntry(__ jo(), i)); 1135 1135 emitPutVirtualRegister(dst); 1136 1136 } else { … … 1160 1160 case op_jmp: { 1161 1161 unsigned target = instruction[i + 1].u.operand; 1162 m_jmpTable.append(JmpTable(__ emitUnlinkedJmp(), i + 1 + target));1162 m_jmpTable.append(JmpTable(__ jmp(), i + 1 + target)); 1163 1163 i += 2; 1164 1164 break; … … 1169 1169 emitJumpSlowCaseIfNotImmNum(X86::eax, i); 1170 1170 __ addl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), X86::eax); 1171 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJo(), i));1171 m_slowCases.append(SlowCaseEntry(__ jo(), i)); 1172 1172 emitPutVirtualRegister(srcDst); 1173 1173 i += 2; … … 1178 1178 1179 1179 unsigned target = instruction[i + 1].u.operand; 1180 m_jmpTable.append(JmpTable(__ emitUnlinkedJmp(), i + 1 + target));1180 m_jmpTable.append(JmpTable(__ jmp(), i + 1 + target)); 1181 1181 i += 2; 1182 1182 break; … … 1191 1191 emitJumpSlowCaseIfNotImmNum(X86::edx, i); 1192 1192 __ cmpl_i32r(asInteger(src2imm), X86::edx); 1193 m_jmpTable.append(JmpTable(__ emitUnlinkedJl(), i + 3 + target));1193 m_jmpTable.append(JmpTable(__ jl(), i + 3 + target)); 1194 1194 } else { 1195 1195 emitGetVirtualRegisters(instruction[i + 1].u.operand, X86::eax, instruction[i + 2].u.operand, X86::edx, i); … … 1197 1197 emitJumpSlowCaseIfNotImmNum(X86::edx, i); 1198 1198 __ cmpl_rr(X86::edx, X86::eax); 1199 m_jmpTable.append(JmpTable(__ emitUnlinkedJl(), i + 3 + target));1199 m_jmpTable.append(JmpTable(__ jl(), i + 3 + target)); 1200 1200 } 1201 1201 i += 4; … … 1211 1211 emitJumpSlowCaseIfNotImmNum(X86::edx, i); 1212 1212 __ cmpl_i32r(asInteger(src2imm), X86::edx); 1213 m_jmpTable.append(JmpTable(__ emitUnlinkedJle(), i + 3 + target));1213 m_jmpTable.append(JmpTable(__ jle(), i + 3 + target)); 1214 1214 } else { 1215 1215 emitGetVirtualRegisters(instruction[i + 1].u.operand, X86::eax, instruction[i + 2].u.operand, X86::edx, i); … … 1217 1217 emitJumpSlowCaseIfNotImmNum(X86::edx, i); 1218 1218 __ cmpl_rr(X86::edx, X86::eax); 1219 m_jmpTable.append(JmpTable(__ emitUnlinkedJle(), i + 3 + target));1219 m_jmpTable.append(JmpTable(__ jle(), i + 3 + target)); 1220 1220 } 1221 1221 i += 4; … … 1248 1248 __ cmpl_i32m(repatchGetByIdDefaultStructure, FIELD_OFFSET(JSCell, m_structure), X86::eax); 1249 1249 ASSERT(X86Assembler::getDifferenceBetweenLabels(hotPathBegin, __ label()) == repatchOffsetPutByIdStructure); 1250 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));1250 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 1251 1251 1252 1252 // Plant a load from a bogus ofset in the object's property map; we will patch this later, if it is to be used. … … 1277 1277 __ cmpl_i32m(repatchGetByIdDefaultStructure, FIELD_OFFSET(JSCell, m_structure), X86::eax); 1278 1278 ASSERT(X86Assembler::getDifferenceBetweenLabels(hotPathBegin, __ label()) == repatchOffsetGetByIdStructure); 1279 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));1279 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 1280 1280 ASSERT(X86Assembler::getDifferenceBetweenLabels(hotPathBegin, __ label()) == repatchOffsetGetByIdBranchToSlowCase); 1281 1281 … … 1298 1298 __ testl_i32r(JSImmediate::TagMask, X86::ecx); 1299 1299 1300 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJnz(), i));1300 m_slowCases.append(SlowCaseEntry(__ jnz(), i)); 1301 1301 1302 1302 // check that all are object type - this is a bit of a bithack to avoid excess branching; … … 1312 1312 __ cmpl_rm(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_type), X86::edx); 1313 1313 1314 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));1314 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 1315 1315 1316 1316 // check that baseVal's flags include ImplementsHasInstance but not OverridesHasInstance … … 1319 1319 __ cmpl_i32r(ImplementsHasInstance, X86::ecx); 1320 1320 1321 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));1321 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 1322 1322 1323 1323 emitGetVirtualRegister(instruction[i + 2].u.operand, X86::ecx, i); // reload value … … 1334 1334 1335 1335 __ cmpl_rr(X86::ecx, X86::edx); 1336 JmpSrc exit = __ emitUnlinkedJe();1336 JmpSrc exit = __ je(); 1337 1337 1338 1338 __ cmpl_i32r(asInteger(jsNull()), X86::ecx); 1339 JmpSrc goToLoop = __ emitUnlinkedJne();1339 JmpSrc goToLoop = __ jne(); 1340 1340 __ link(goToLoop, loop); 1341 1341 … … 1372 1372 emitFastArithDeTagImmediate(X86::eax); 1373 1373 __ imull_i32r(X86::eax, value, X86::eax); 1374 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJo(), i));1374 m_slowCases.append(SlowCaseEntry(__ jo(), i)); 1375 1375 emitFastArithReTagImmediate(X86::eax); 1376 1376 emitPutVirtualRegister(dst); … … 1380 1380 emitFastArithDeTagImmediate(X86::eax); 1381 1381 __ imull_i32r(X86::eax, value, X86::eax); 1382 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJo(), i));1382 m_slowCases.append(SlowCaseEntry(__ jo(), i)); 1383 1383 emitFastArithReTagImmediate(X86::eax); 1384 1384 emitPutVirtualRegister(dst); … … 1499 1499 1500 1500 __ testl_i32r(JSImmediate::TagMask, X86::eax); 1501 JmpSrc isImmediate = __ emitUnlinkedJne();1501 JmpSrc isImmediate = __ jne(); 1502 1502 __ movl_mr(FIELD_OFFSET(JSCell, m_structure), X86::eax, X86::ecx); 1503 1503 __ cmpl_i32m(ObjectType, FIELD_OFFSET(Structure, m_typeInfo) + FIELD_OFFSET(TypeInfo, m_type), X86::ecx); 1504 JmpSrc isObject = __ emitUnlinkedJe();1504 JmpSrc isObject = __ je(); 1505 1505 1506 1506 __ link(isImmediate, __ label()); … … 1517 1517 emitFastArithImmToInt(X86::edx); 1518 1518 __ testl_i32r(JSImmediate::TagMask, X86::eax); 1519 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));1519 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 1520 1520 __ cmpl_i32m(reinterpret_cast<unsigned>(m_interpreter->m_jsArrayVptr), X86::eax); 1521 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));1521 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 1522 1522 1523 1523 // This is an array; get the m_storage pointer into ecx, then check if the index is below the fast cutoff 1524 1524 __ movl_mr(FIELD_OFFSET(JSArray, m_storage), X86::eax, X86::ecx); 1525 1525 __ cmpl_rm(X86::edx, FIELD_OFFSET(JSArray, m_fastAccessCutoff), X86::eax); 1526 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJbe(), i));1526 m_slowCases.append(SlowCaseEntry(__ jbe(), i)); 1527 1527 1528 1528 // Get the value from the vector … … 1551 1551 emitFastArithImmToInt(X86::edx); 1552 1552 __ testl_i32r(JSImmediate::TagMask, X86::eax); 1553 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));1553 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 1554 1554 __ cmpl_i32m(reinterpret_cast<unsigned>(m_interpreter->m_jsArrayVptr), X86::eax); 1555 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));1555 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 1556 1556 1557 1557 // This is an array; get the m_storage pointer into ecx, then check if the index is below the fast cutoff 1558 1558 __ movl_mr(FIELD_OFFSET(JSArray, m_storage), X86::eax, X86::ecx); 1559 1559 __ cmpl_rm(X86::edx, FIELD_OFFSET(JSArray, m_fastAccessCutoff), X86::eax); 1560 JmpSrc inFastVector = __ emitUnlinkedJa();1560 JmpSrc inFastVector = __ ja(); 1561 1561 // No; oh well, check if the access if within the vector - if so, we may still be okay. 1562 1562 __ cmpl_rm(X86::edx, FIELD_OFFSET(ArrayStorage, m_vectorLength), X86::ecx); 1563 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJbe(), i));1563 m_slowCases.append(SlowCaseEntry(__ jbe(), i)); 1564 1564 1565 1565 // This is a write to the slow part of the vector; first, we have to check if this would be the first write to this location. 1566 1566 // FIXME: should be able to handle initial write to array; increment the the number of items in the array, and potentially update fast access cutoff. 1567 1567 __ cmpl_i8m(0, FIELD_OFFSET(ArrayStorage, m_vector[0]), X86::ecx, X86::edx, sizeof(JSValue*)); 1568 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJe(), i));1568 m_slowCases.append(SlowCaseEntry(__ je(), i)); 1569 1569 1570 1570 // All good - put the value into the array. … … 1583 1583 1584 1584 __ cmpl_i32r(asInteger(JSImmediate::zeroImmediate()), X86::eax); 1585 JmpSrc isZero = __ emitUnlinkedJe();1585 JmpSrc isZero = __ je(); 1586 1586 __ testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax); 1587 m_jmpTable.append(JmpTable(__ emitUnlinkedJne(), i + 2 + target));1587 m_jmpTable.append(JmpTable(__ jne(), i + 2 + target)); 1588 1588 1589 1589 __ cmpl_i32r(asInteger(JSImmediate::trueImmediate()), X86::eax); 1590 m_jmpTable.append(JmpTable(__ emitUnlinkedJe(), i + 2 + target));1590 m_jmpTable.append(JmpTable(__ je(), i + 2 + target)); 1591 1591 __ cmpl_i32r(asInteger(JSImmediate::falseImmediate()), X86::eax); 1592 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));1592 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 1593 1593 1594 1594 __ link(isZero, __ label()); … … 1609 1609 1610 1610 __ testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax); 1611 JmpSrc notImmediate = __ emitUnlinkedJe();1611 JmpSrc notImmediate = __ je(); 1612 1612 1613 1613 __ cmpl_i32r(JSImmediate::TagBitTypeInteger, X86::eax); 1614 JmpSrc zeroImmediate = __ emitUnlinkedJe();1614 JmpSrc zeroImmediate = __ je(); 1615 1615 emitFastArithImmToInt(X86::eax); 1616 1616 __ negl_r(X86::eax); // This can't overflow as we only have a 31bit int at this point 1617 1617 JmpSrc overflow = emitArithIntToImmWithJump(X86::eax); 1618 1618 emitPutVirtualRegister(instruction[i + 1].u.operand); 1619 JmpSrc immediateNegateSuccess = __ emitUnlinkedJmp();1619 JmpSrc immediateNegateSuccess = __ jmp(); 1620 1620 1621 1621 if (!isSSE2Present()) { … … 1636 1636 Structure* numberStructure = m_globalData->numberStructure.get(); 1637 1637 __ cmpl_i32m(reinterpret_cast<unsigned>(numberStructure), FIELD_OFFSET(JSCell, m_structure), X86::eax); 1638 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));1638 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 1639 1639 } 1640 1640 __ movsd_mr(FIELD_OFFSET(JSNumberCell, m_value), X86::eax, X86::xmm0); … … 1674 1674 __ movl_mr(structureAddress, X86::edx); 1675 1675 __ cmpl_rm(X86::edx, FIELD_OFFSET(JSCell, m_structure), X86::eax); 1676 JmpSrc noMatch = __ emitUnlinkedJne(); // Structures don't match1676 JmpSrc noMatch = __ jne(); // Structures don't match 1677 1677 1678 1678 // Load cached property … … 1681 1681 __ movl_mr(0, X86::eax, X86::edx, sizeof(JSValue*), X86::eax); 1682 1682 emitPutVirtualRegister(instruction[i + 1].u.operand); 1683 JmpSrc end = __ emitUnlinkedJmp();1683 JmpSrc end = __ jmp(); 1684 1684 1685 1685 // Slow case … … 1700 1700 emitJumpSlowCaseIfNotImmNum(X86::eax, i); 1701 1701 __ subl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), X86::eax); 1702 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJo(), i));1702 m_slowCases.append(SlowCaseEntry(__ jo(), i)); 1703 1703 emitPutVirtualRegister(srcDst); 1704 1704 i += 2; … … 1712 1712 emitJumpSlowCaseIfNotImmNum(X86::edx, i); 1713 1713 __ cmpl_i32r(asInteger(src2imm), X86::edx); 1714 m_jmpTable.append(JmpTable(__ emitUnlinkedJge(), i + 3 + target));1714 m_jmpTable.append(JmpTable(__ jge(), i + 3 + target)); 1715 1715 } else { 1716 1716 emitGetVirtualRegisters(instruction[i + 1].u.operand, X86::eax, instruction[i + 2].u.operand, X86::edx, i); … … 1718 1718 emitJumpSlowCaseIfNotImmNum(X86::edx, i); 1719 1719 __ cmpl_rr(X86::edx, X86::eax); 1720 m_jmpTable.append(JmpTable(__ emitUnlinkedJge(), i + 3 + target));1720 m_jmpTable.append(JmpTable(__ jge(), i + 3 + target)); 1721 1721 } 1722 1722 i += 4; … … 1727 1727 __ xorl_i8r(JSImmediate::FullTagTypeBool, X86::eax); 1728 1728 __ testl_i32r(JSImmediate::FullTagTypeMask, X86::eax); // i8? 1729 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));1729 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 1730 1730 __ xorl_i8r((JSImmediate::FullTagTypeBool | JSImmediate::ExtendedPayloadBitBoolValue), X86::eax); 1731 1731 emitPutVirtualRegister(instruction[i + 1].u.operand); … … 1738 1738 1739 1739 __ cmpl_i32r(asInteger(JSImmediate::zeroImmediate()), X86::eax); 1740 m_jmpTable.append(JmpTable(__ emitUnlinkedJe(), i + 2 + target));1740 m_jmpTable.append(JmpTable(__ je(), i + 2 + target)); 1741 1741 __ testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax); 1742 JmpSrc isNonZero = __ emitUnlinkedJne();1742 JmpSrc isNonZero = __ jne(); 1743 1743 1744 1744 __ cmpl_i32r(asInteger(JSImmediate::falseImmediate()), X86::eax); 1745 m_jmpTable.append(JmpTable(__ emitUnlinkedJe(), i + 2 + target));1745 m_jmpTable.append(JmpTable(__ je(), i + 2 + target)); 1746 1746 __ cmpl_i32r(asInteger(JSImmediate::trueImmediate()), X86::eax); 1747 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));1747 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 1748 1748 1749 1749 __ link(isNonZero, __ label()); … … 1757 1757 emitGetVirtualRegister(src, X86::eax, i); 1758 1758 __ testl_i32r(JSImmediate::TagMask, X86::eax); 1759 JmpSrc isImmediate = __ emitUnlinkedJnz();1759 JmpSrc isImmediate = __ jnz(); 1760 1760 1761 1761 __ movl_mr(FIELD_OFFSET(JSCell, m_structure), X86::eax, X86::ecx); … … 1763 1763 __ setnz_r(X86::eax); 1764 1764 1765 JmpSrc wasNotImmediate = __ emitUnlinkedJmp();1765 JmpSrc wasNotImmediate = __ jmp(); 1766 1766 1767 1767 __ link(isImmediate, __ label()); … … 1776 1776 __ movzbl_rr(X86::eax, X86::eax); 1777 1777 __ cmpl_i32r(0, X86::eax); 1778 m_jmpTable.append(JmpTable(__ emitUnlinkedJnz(), i + 2 + target));1778 m_jmpTable.append(JmpTable(__ jnz(), i + 2 + target)); 1779 1779 1780 1780 i += 3; … … 1787 1787 emitGetVirtualRegister(src, X86::eax, i); 1788 1788 __ testl_i32r(JSImmediate::TagMask, X86::eax); 1789 JmpSrc isImmediate = __ emitUnlinkedJnz();1789 JmpSrc isImmediate = __ jnz(); 1790 1790 1791 1791 __ movl_mr(FIELD_OFFSET(JSCell, m_structure), X86::eax, X86::ecx); … … 1793 1793 __ setz_r(X86::eax); 1794 1794 1795 JmpSrc wasNotImmediate = __ emitUnlinkedJmp();1795 JmpSrc wasNotImmediate = __ jmp(); 1796 1796 1797 1797 __ link(isImmediate, __ label()); … … 1806 1806 __ movzbl_rr(X86::eax, X86::eax); 1807 1807 __ cmpl_i32r(0, X86::eax); 1808 m_jmpTable.append(JmpTable(__ emitUnlinkedJnz(), i + 2 + target));1808 m_jmpTable.append(JmpTable(__ jnz(), i + 2 + target)); 1809 1809 1810 1810 i += 3; … … 1817 1817 emitJumpSlowCaseIfNotImmNum(X86::eax, i); 1818 1818 __ addl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), X86::edx); 1819 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJo(), i));1819 m_slowCases.append(SlowCaseEntry(__ jo(), i)); 1820 1820 emitPutVirtualRegister(srcDst, X86::edx); 1821 1821 emitPutVirtualRegister(instruction[i + 1].u.operand); … … 1835 1835 __ movl_i32m(0, sizeof(Register) * retAddrDst, X86::edi); 1836 1836 JmpDst addrPosition = __ label(); 1837 m_jmpTable.append(JmpTable(__ emitUnlinkedJmp(), i + 2 + target));1837 m_jmpTable.append(JmpTable(__ jmp(), i + 2 + target)); 1838 1838 JmpDst sretTarget = __ label(); 1839 1839 m_jsrSites.append(JSRInfo(addrPosition, sretTarget)); … … 1947 1947 1948 1948 __ cmpl_i32r(asInteger(JSImmediate::zeroImmediate()), X86::eax); 1949 JmpSrc isZero = __ emitUnlinkedJe();1949 JmpSrc isZero = __ je(); 1950 1950 __ testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax); 1951 m_jmpTable.append(JmpTable(__ emitUnlinkedJne(), i + 2 + target));1951 m_jmpTable.append(JmpTable(__ jne(), i + 2 + target)); 1952 1952 1953 1953 __ cmpl_i32r(asInteger(JSImmediate::trueImmediate()), X86::eax); 1954 m_jmpTable.append(JmpTable(__ emitUnlinkedJe(), i + 2 + target));1954 m_jmpTable.append(JmpTable(__ je(), i + 2 + target)); 1955 1955 __ cmpl_i32r(asInteger(JSImmediate::falseImmediate()), X86::eax); 1956 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));1956 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 1957 1957 1958 1958 __ link(isZero, __ label()); … … 1981 1981 emitJumpSlowCaseIfNotImmNum(X86::eax, i); 1982 1982 __ subl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), X86::edx); 1983 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJo(), i));1983 m_slowCases.append(SlowCaseEntry(__ jo(), i)); 1984 1984 emitPutVirtualRegister(srcDst, X86::edx); 1985 1985 emitPutVirtualRegister(instruction[i + 1].u.operand); … … 2036 2036 emitCTICall(instruction + i, i, Interpreter::cti_op_next_pname); 2037 2037 __ testl_rr(X86::eax, X86::eax); 2038 JmpSrc endOfIter = __ emitUnlinkedJe();2039 emitPutVirtualRegister(instruction[i + 1].u.operand); 2040 m_jmpTable.append(JmpTable(__ emitUnlinkedJmp(), i + 3 + target));2038 JmpSrc endOfIter = __ je(); 2039 emitPutVirtualRegister(instruction[i + 1].u.operand); 2040 m_jmpTable.append(JmpTable(__ jmp(), i + 3 + target)); 2041 2041 __ link(endOfIter, __ label()); 2042 2042 i += 4; … … 2076 2076 2077 2077 __ testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax); 2078 JmpSrc wasImmediate = __ emitUnlinkedJnz();2078 JmpSrc wasImmediate = __ jnz(); 2079 2079 2080 2080 emitJumpSlowCaseIfNotJSCell(X86::eax, i, srcVReg); … … 2083 2083 __ cmpl_i32m(NumberType, FIELD_OFFSET(Structure, m_typeInfo.m_type), X86::ecx); 2084 2084 2085 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJne(), i));2085 m_slowCases.append(SlowCaseEntry(__ jne(), i)); 2086 2086 2087 2087 __ link(wasImmediate, __ label()); … … 2119 2119 emitCTICall(instruction + i, i, Interpreter::cti_op_jmp_scopes); 2120 2120 unsigned target = instruction[i + 2].u.operand; 2121 m_jmpTable.append(JmpTable(__ emitUnlinkedJmp(), i + 2 + target));2121 m_jmpTable.append(JmpTable(__ jmp(), i + 2 + target)); 2122 2122 i += 3; 2123 2123 break; … … 2231 2231 emitGetVirtualRegister(src1, X86::eax, i); 2232 2232 __ testl_i32r(JSImmediate::TagMask, X86::eax); 2233 JmpSrc isImmediate = __ emitUnlinkedJnz();2233 JmpSrc isImmediate = __ jnz(); 2234 2234 2235 2235 __ movl_mr(FIELD_OFFSET(JSCell, m_structure), X86::eax, X86::ecx); … … 2237 2237 __ setnz_r(X86::eax); 2238 2238 2239 JmpSrc wasNotImmediate = __ emitUnlinkedJmp();2239 JmpSrc wasNotImmediate = __ jmp(); 2240 2240 2241 2241 __ link(isImmediate, __ label()); … … 2261 2261 emitGetVirtualRegister(src1, X86::eax, i); 2262 2262 __ testl_i32r(JSImmediate::TagMask, X86::eax); 2263 JmpSrc isImmediate = __ emitUnlinkedJnz();2263 JmpSrc isImmediate = __ jnz(); 2264 2264 2265 2265 __ movl_mr(FIELD_OFFSET(JSCell, m_structure), X86::eax, X86::ecx); … … 2267 2267 __ setz_r(X86::eax); 2268 2268 2269 JmpSrc wasNotImmediate = __ emitUnlinkedJmp();2269 JmpSrc wasNotImmediate = __ jmp(); 2270 2270 2271 2271 __ link(isImmediate, __ label()); … … 2321 2321 __ movl_mr(FIELD_OFFSET(JSCell, m_structure), X86::eax, X86::edx); 2322 2322 __ testl_i32m(NeedsThisConversion, FIELD_OFFSET(Structure, m_typeInfo.m_flags), X86::edx); 2323 m_slowCases.append(SlowCaseEntry(__ emitUnlinkedJnz(), i));2323 m_slowCases.append(SlowCaseEntry(__ jnz(), i)); 2324 2324 2325 2325 i += 2; … … 2329 2329 emitGetCTIParam(CTI_ARGS_profilerReference, X86::eax); 2330 2330 __ cmpl_i32m(0, X86::eax); 2331 JmpSrc noProfiler = __ emitUnlinkedJe();2331 JmpSrc noProfiler = __ je(); 2332 2332 emitPutCTIArgFromVirtualRegister(instruction[i + 1].u.operand, 0, X86::eax); 2333 2333 emitCTICall(instruction + i, i, Interpreter::cti_op_profile_will_call); … … 2340 2340 emitGetCTIParam(CTI_ARGS_profilerReference, X86::eax); 2341 2341 __ cmpl_i32m(0, X86::eax); 2342 JmpSrc noProfiler = __ emitUnlinkedJe();2342 JmpSrc noProfiler = __ je(); 2343 2343 emitPutCTIArgFromVirtualRegister(instruction[i + 1].u.operand, 0, X86::eax); 2344 2344 emitCTICall(instruction + i, i, Interpreter::cti_op_profile_did_call); … … 2468 2468 emitCTICall(instruction + i, i, Interpreter::cti_op_get_by_val); 2469 2469 emitPutVirtualRegister(instruction[i + 1].u.operand); 2470 __ link(__ emitUnlinkedJmp(), m_labels[i + 4]);2470 __ link(__ jmp(), m_labels[i + 4]); 2471 2471 2472 2472 // This is slow case that handles accesses to arrays above the fast cut-off. … … 2474 2474 __ link((++iter)->from, __ label()); 2475 2475 __ cmpl_rm(X86::edx, FIELD_OFFSET(ArrayStorage, m_vectorLength), X86::ecx); 2476 __ link(__ emitUnlinkedJbe(), beginGetByValSlow);2476 __ link(__ jbe(), beginGetByValSlow); 2477 2477 2478 2478 // okay, missed the fast region, but it is still in the vector. Get the value. … … 2480 2480 // Check whether the value loaded is zero; if so we need to return undefined. 2481 2481 __ testl_rr(X86::ecx, X86::ecx); 2482 __ link(__ emitUnlinkedJe(), beginGetByValSlow);2482 __ link(__ je(), beginGetByValSlow); 2483 2483 __ movl_rr(X86::ecx, X86::eax); 2484 2484 emitPutVirtualRegister(instruction[i + 1].u.operand, X86::eax); … … 2543 2543 emitCTICall(instruction + i, i, Interpreter::cti_op_loop_if_less); 2544 2544 __ testl_rr(X86::eax, X86::eax); 2545 __ link(__ emitUnlinkedJne(), m_labels[i + 3 + target]);2545 __ link(__ jne(), m_labels[i + 3 + target]); 2546 2546 } else { 2547 2547 __ link(iter->from, __ label()); … … 2551 2551 emitCTICall(instruction + i, i, Interpreter::cti_op_loop_if_less); 2552 2552 __ testl_rr(X86::eax, X86::eax); 2553 __ link(__ emitUnlinkedJne(), m_labels[i + 3 + target]);2553 __ link(__ jne(), m_labels[i + 3 + target]); 2554 2554 } 2555 2555 i += 4; … … 2615 2615 emitCTICall(instruction + i, i, Interpreter::cti_op_loop_if_lesseq); 2616 2616 __ testl_rr(X86::eax, X86::eax); 2617 __ link(__ emitUnlinkedJne(), m_labels[i + 3 + target]);2617 __ link(__ jne(), m_labels[i + 3 + target]); 2618 2618 } else { 2619 2619 __ link(iter->from, __ label()); … … 2623 2623 emitCTICall(instruction + i, i, Interpreter::cti_op_loop_if_lesseq); 2624 2624 __ testl_rr(X86::eax, X86::eax); 2625 __ link(__ emitUnlinkedJne(), m_labels[i + 3 + target]);2625 __ link(__ jne(), m_labels[i + 3 + target]); 2626 2626 } 2627 2627 i += 4; … … 2652 2652 emitPutCTIArg(X86::ecx, 8); 2653 2653 emitCTICall(instruction + i, i, Interpreter::cti_op_put_by_val); 2654 __ link(__ emitUnlinkedJmp(), m_labels[i + 4]);2654 __ link(__ jmp(), m_labels[i + 4]); 2655 2655 2656 2656 // slow cases for immediate int accesses to arrays … … 2674 2674 __ testl_rr(X86::eax, X86::eax); 2675 2675 unsigned target = instruction[i + 2].u.operand; 2676 __ link(__ emitUnlinkedJne(), m_labels[i + 2 + target]);2676 __ link(__ jne(), m_labels[i + 2 + target]); 2677 2677 i += 3; 2678 2678 break; … … 2699 2699 emitCTICall(instruction + i, i, Interpreter::cti_op_jless); 2700 2700 __ testl_rr(X86::eax, X86::eax); 2701 __ link(__ emitUnlinkedJe(), m_labels[i + 3 + target]);2701 __ link(__ je(), m_labels[i + 3 + target]); 2702 2702 } else { 2703 2703 __ link(iter->from, __ label()); … … 2707 2707 emitCTICall(instruction + i, i, Interpreter::cti_op_jless); 2708 2708 __ testl_rr(X86::eax, X86::eax); 2709 __ link(__ emitUnlinkedJe(), m_labels[i + 3 + target]);2709 __ link(__ je(), m_labels[i + 3 + target]); 2710 2710 } 2711 2711 i += 4; … … 2727 2727 __ testl_rr(X86::eax, X86::eax); 2728 2728 unsigned target = instruction[i + 2].u.operand; 2729 __ link(__ emitUnlinkedJe(), m_labels[i + 2 + target]); // inverted!2729 __ link(__ je(), m_labels[i + 2 + target]); // inverted! 2730 2730 i += 3; 2731 2731 break; … … 2782 2782 __ testl_rr(X86::eax, X86::eax); 2783 2783 unsigned target = instruction[i + 2].u.operand; 2784 __ link(__ emitUnlinkedJne(), m_labels[i + 2 + target]);2784 __ link(__ jne(), m_labels[i + 2 + target]); 2785 2785 i += 3; 2786 2786 break; … … 2909 2909 // Fast check for JS function. 2910 2910 __ testl_i32r(JSImmediate::TagMask, X86::ecx); 2911 JmpSrc callLinkFailNotObject = __ emitUnlinkedJne();2911 JmpSrc callLinkFailNotObject = __ jne(); 2912 2912 __ cmpl_i32m(reinterpret_cast<unsigned>(m_interpreter->m_jsFunctionVptr), X86::ecx); 2913 JmpSrc callLinkFailNotJSFunction = __ emitUnlinkedJne();2913 JmpSrc callLinkFailNotJSFunction = __ jne(); 2914 2914 2915 2915 // First, in the case of a construct, allocate the new object. … … 2929 2929 emitNakedCall(i, m_interpreter->m_ctiVirtualCallPreLink); 2930 2930 2931 JmpSrc storeResultForFirstRun = __ emitUnlinkedJmp();2931 JmpSrc storeResultForFirstRun = __ jmp(); 2932 2932 2933 2933 // This is the address for the cold path *after* the first run (which tries to link the call). … … 2942 2942 // Check for JSFunctions. 2943 2943 __ testl_i32r(JSImmediate::TagMask, X86::ecx); 2944 JmpSrc isNotObject = __ emitUnlinkedJne();2944 JmpSrc isNotObject = __ jne(); 2945 2945 __ cmpl_i32m(reinterpret_cast<unsigned>(m_interpreter->m_jsFunctionVptr), X86::ecx); 2946 JmpSrc isJSFunction = __ emitUnlinkedJe();2946 JmpSrc isJSFunction = __ je(); 2947 2947 2948 2948 // This handles host functions … … 2952 2952 __ link(callLinkFailNotJSFunction, notJSFunctionlabel); 2953 2953 emitCTICall(instruction + i, i, ((opcodeID == op_construct) ? Interpreter::cti_op_construct_NotJSConstruct : Interpreter::cti_op_call_NotJSFunction)); 2954 JmpSrc wasNotJSFunction = __ emitUnlinkedJmp();2954 JmpSrc wasNotJSFunction = __ jmp(); 2955 2955 2956 2956 // Next, handle JSFunctions... … … 3006 3006 ASSERT_WITH_MESSAGE(firstTo == iter->to, "Too many jumps linked in slow case codegen."); 3007 3007 3008 __ link(__ emitUnlinkedJmp(), m_labels[i]);3008 __ link(__ jmp(), m_labels[i]); 3009 3009 } 3010 3010 … … 3035 3035 __ leal_mr(m_codeBlock->numCalleeRegisters * sizeof(Register), X86::edi, X86::edx); 3036 3036 __ cmpl_mr(FIELD_OFFSET(RegisterFile, m_end), X86::eax, X86::edx); 3037 slowRegisterFileCheck = __ emitUnlinkedJg();3037 slowRegisterFileCheck = __ jg(); 3038 3038 afterRegisterFileCheck = __ label(); 3039 3039 } … … 3046 3046 __ link(slowRegisterFileCheck, __ label()); 3047 3047 emitCTICall(m_codeBlock->instructions.begin(), 0, Interpreter::cti_register_file_check); 3048 JmpSrc backToBody = __ emitUnlinkedJmp();3048 JmpSrc backToBody = __ jmp(); 3049 3049 __ link(backToBody, afterRegisterFileCheck); 3050 3050 } … … 3116 3116 // Check eax is an object of the right Structure. 3117 3117 __ testl_i32r(JSImmediate::TagMask, X86::eax); 3118 JmpSrc failureCases1 = __ emitUnlinkedJne();3118 JmpSrc failureCases1 = __ jne(); 3119 3119 __ cmpl_i32m(reinterpret_cast<uint32_t>(structure), FIELD_OFFSET(JSCell, m_structure), X86::eax); 3120 JmpSrc failureCases2 = __ emitUnlinkedJne();3120 JmpSrc failureCases2 = __ jne(); 3121 3121 3122 3122 // Checks out okay! - getDirectOffset … … 3152 3152 // check eax is an object of the right Structure. 3153 3153 __ testl_i32r(JSImmediate::TagMask, X86::eax); 3154 JmpSrc failureCases1 = __ emitUnlinkedJne();3154 JmpSrc failureCases1 = __ jne(); 3155 3155 __ cmpl_i32m(reinterpret_cast<uint32_t>(structure), FIELD_OFFSET(JSCell, m_structure), X86::eax); 3156 JmpSrc failureCases2 = __ emitUnlinkedJne();3156 JmpSrc failureCases2 = __ jne(); 3157 3157 3158 3158 // Check the prototype object's Structure had not changed. 3159 3159 Structure** prototypeStructureAddress = &(protoObject->m_structure); 3160 3160 __ cmpl_i32m(reinterpret_cast<uint32_t>(prototypeStructure), static_cast<void*>(prototypeStructureAddress)); 3161 JmpSrc failureCases3 = __ emitUnlinkedJne();3161 JmpSrc failureCases3 = __ jne(); 3162 3162 3163 3163 // Checks out okay! - getDirectOffset 3164 3164 __ movl_mr(cachedOffset * sizeof(JSValue*), X86::edx, X86::eax); 3165 3165 3166 JmpSrc success = __ emitUnlinkedJmp();3166 JmpSrc success = __ jmp(); 3167 3167 3168 3168 void* code = __ executableCopy(); … … 3195 3195 // check eax is an object of the right Structure. 3196 3196 __ testl_i32r(JSImmediate::TagMask, X86::eax); 3197 JmpSrc failureCases1 = __ emitUnlinkedJne();3197 JmpSrc failureCases1 = __ jne(); 3198 3198 __ cmpl_i32m(reinterpret_cast<uint32_t>(structure), FIELD_OFFSET(JSCell, m_structure), X86::eax); 3199 JmpSrc failureCases2 = __ emitUnlinkedJne();3199 JmpSrc failureCases2 = __ jne(); 3200 3200 3201 3201 // Check the prototype object's Structure had not changed. 3202 3202 Structure** prototypeStructureAddress = &(protoObject->m_structure); 3203 3203 __ cmpl_i32m(reinterpret_cast<uint32_t>(prototypeStructure), static_cast<void*>(prototypeStructureAddress)); 3204 JmpSrc failureCases3 = __ emitUnlinkedJne();3204 JmpSrc failureCases3 = __ jne(); 3205 3205 3206 3206 // Checks out okay! - getDirectOffset … … 3230 3230 // Check eax is an object of the right Structure. 3231 3231 __ testl_i32r(JSImmediate::TagMask, X86::eax); 3232 bucketsOfFail.append(__ emitUnlinkedJne());3232 bucketsOfFail.append(__ jne()); 3233 3233 __ cmpl_i32m(reinterpret_cast<uint32_t>(structure), FIELD_OFFSET(JSCell, m_structure), X86::eax); 3234 bucketsOfFail.append(__ emitUnlinkedJne());3234 bucketsOfFail.append(__ jne()); 3235 3235 3236 3236 Structure* currStructure = structure; … … 3244 3244 Structure** prototypeStructureAddress = &(protoObject->m_structure); 3245 3245 __ cmpl_i32m(reinterpret_cast<uint32_t>(currStructure), static_cast<void*>(prototypeStructureAddress)); 3246 bucketsOfFail.append(__ emitUnlinkedJne());3246 bucketsOfFail.append(__ jne()); 3247 3247 } 3248 3248 ASSERT(protoObject); … … 3253 3253 __ ret(); 3254 3254 3255 bucketsOfFail.append(__ emitUnlinkedJmp());3255 bucketsOfFail.append(__ jmp()); 3256 3256 3257 3257 void* code = __ executableCopy(); … … 3270 3270 // check eax is an object of the right Structure. 3271 3271 __ testl_i32r(JSImmediate::TagMask, X86::eax); 3272 JmpSrc failureCases1 = __ emitUnlinkedJne();3272 JmpSrc failureCases1 = __ jne(); 3273 3273 __ cmpl_i32m(reinterpret_cast<uint32_t>(structure), FIELD_OFFSET(JSCell, m_structure), X86::eax); 3274 JmpSrc failureCases2 = __ emitUnlinkedJne();3274 JmpSrc failureCases2 = __ jne(); 3275 3275 3276 3276 // checks out okay! - putDirectOffset … … 3310 3310 // check eax is an object of the right Structure. 3311 3311 __ testl_i32r(JSImmediate::TagMask, X86::eax); 3312 failureCases.append(__ emitUnlinkedJne());3312 failureCases.append(__ jne()); 3313 3313 __ cmpl_i32m(reinterpret_cast<uint32_t>(oldStructure), FIELD_OFFSET(JSCell, m_structure), X86::eax); 3314 failureCases.append(__ emitUnlinkedJne());3314 failureCases.append(__ jne()); 3315 3315 Vector<JmpSrc> successCases; 3316 3316 … … 3319 3319 // proto(ecx) = baseObject->structure()->prototype() 3320 3320 __ cmpl_i32m(ObjectType, FIELD_OFFSET(Structure, m_typeInfo) + FIELD_OFFSET(TypeInfo, m_type), X86::ecx); 3321 failureCases.append(__ emitUnlinkedJne());3321 failureCases.append(__ jne()); 3322 3322 __ movl_mr(FIELD_OFFSET(Structure, m_prototype), X86::ecx, X86::ecx); 3323 3323 … … 3326 3326 // null check the prototype 3327 3327 __ cmpl_i32r(asInteger(jsNull()), X86::ecx); 3328 successCases.append(__ emitUnlinkedJe());3328 successCases.append(__ je()); 3329 3329 3330 3330 // Check the structure id 3331 3331 __ cmpl_i32m(reinterpret_cast<uint32_t>(it->get()), FIELD_OFFSET(JSCell, m_structure), X86::ecx); 3332 failureCases.append(__ emitUnlinkedJne());3332 failureCases.append(__ jne()); 3333 3333 3334 3334 __ movl_mr(FIELD_OFFSET(JSCell, m_structure), X86::ecx, X86::ecx); 3335 3335 __ cmpl_i32m(ObjectType, FIELD_OFFSET(Structure, m_typeInfo) + FIELD_OFFSET(TypeInfo, m_type), X86::ecx); 3336 failureCases.append(__ emitUnlinkedJne());3336 failureCases.append(__ jne()); 3337 3337 __ movl_mr(FIELD_OFFSET(Structure, m_prototype), X86::ecx, X86::ecx); 3338 3338 } 3339 3339 3340 failureCases.append(__ emitUnlinkedJne());3340 failureCases.append(__ jne()); 3341 3341 for (unsigned i = 0; i < successCases.size(); ++i) 3342 3342 __ link(successCases[i], __ label()); … … 3350 3350 __ pushl_i32(oldStructure->propertyStorageCapacity()); 3351 3351 __ pushl_r(X86::eax); 3352 callTarget = __ emitCall();3352 callTarget = __ call(); 3353 3353 __ addl_i32r(3 * sizeof(void*), X86::esp); 3354 3354 __ popl_r(X86::edx); … … 3371 3371 for (unsigned i = 0; i < failureCases.size(); ++i) 3372 3372 __ link(failureCases[i], __ label()); 3373 __ emitRestoreArgumentReferenceForTrampoline();3374 failureJump = __ emitUnlinkedJmp();3373 __ restoreArgumentReferenceForTrampoline(); 3374 failureJump = __ jmp(); 3375 3375 } 3376 3376 … … 3420 3420 // Check eax is an array 3421 3421 __ testl_i32r(JSImmediate::TagMask, X86::eax); 3422 JmpSrc array_failureCases1 = __ emitUnlinkedJne();3422 JmpSrc array_failureCases1 = __ jne(); 3423 3423 __ cmpl_i32m(reinterpret_cast<unsigned>(m_interpreter->m_jsArrayVptr), X86::eax); 3424 JmpSrc array_failureCases2 = __ emitUnlinkedJne();3424 JmpSrc array_failureCases2 = __ jne(); 3425 3425 3426 3426 // Checks out okay! - get the length from the storage … … 3429 3429 3430 3430 __ addl_rr(X86::eax, X86::eax); 3431 JmpSrc array_failureCases3 = __ emitUnlinkedJo();3431 JmpSrc array_failureCases3 = __ jo(); 3432 3432 __ addl_i8r(1, X86::eax); 3433 3433 … … 3440 3440 // Check eax is a string 3441 3441 __ testl_i32r(JSImmediate::TagMask, X86::eax); 3442 JmpSrc string_failureCases1 = __ emitUnlinkedJne();3442 JmpSrc string_failureCases1 = __ jne(); 3443 3443 __ cmpl_i32m(reinterpret_cast<unsigned>(m_interpreter->m_jsStringVptr), X86::eax); 3444 JmpSrc string_failureCases2 = __ emitUnlinkedJne();3444 JmpSrc string_failureCases2 = __ jne(); 3445 3445 3446 3446 // Checks out okay! - get the length from the Ustring. … … 3449 3449 3450 3450 __ addl_rr(X86::eax, X86::eax); 3451 JmpSrc string_failureCases3 = __ emitUnlinkedJo();3451 JmpSrc string_failureCases3 = __ jo(); 3452 3452 __ addl_i8r(1, X86::eax); 3453 3453 … … 3462 3462 __ movl_mr(FIELD_OFFSET(FunctionBodyNode, m_code), X86::eax, X86::eax); 3463 3463 __ testl_rr(X86::eax, X86::eax); 3464 JmpSrc hasCodeBlock1 = __ emitUnlinkedJne();3464 JmpSrc hasCodeBlock1 = __ jne(); 3465 3465 __ popl_r(X86::ebx); 3466 __ emitRestoreArgumentReference();3466 __ restoreArgumentReference(); 3467 3467 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 3468 JmpSrc callJSFunction1 = __ emitCall();3468 JmpSrc callJSFunction1 = __ call(); 3469 3469 emitGetCTIArg(0, X86::ecx); 3470 3470 emitGetCTIArg(8, X86::edx); … … 3474 3474 // Check argCount matches callee arity. 3475 3475 __ cmpl_rm(X86::edx, FIELD_OFFSET(CodeBlock, numParameters), X86::eax); 3476 JmpSrc arityCheckOkay1 = __ emitUnlinkedJe();3476 JmpSrc arityCheckOkay1 = __ je(); 3477 3477 __ popl_r(X86::ebx); 3478 3478 emitPutCTIArg(X86::ebx, 4); 3479 3479 emitPutCTIArg(X86::eax, 12); 3480 __ emitRestoreArgumentReference();3480 __ restoreArgumentReference(); 3481 3481 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 3482 JmpSrc callArityCheck1 = __ emitCall();3482 JmpSrc callArityCheck1 = __ call(); 3483 3483 __ movl_rr(X86::edx, X86::edi); 3484 3484 emitGetCTIArg(0, X86::ecx); … … 3491 3491 __ popl_r(X86::ebx); 3492 3492 emitPutCTIArg(X86::ebx, 4); 3493 __ emitRestoreArgumentReference();3493 __ restoreArgumentReference(); 3494 3494 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 3495 JmpSrc callDontLazyLinkCall = __ emitCall();3495 JmpSrc callDontLazyLinkCall = __ call(); 3496 3496 __ pushl_r(X86::ebx); 3497 3497 … … 3504 3504 __ movl_mr(FIELD_OFFSET(FunctionBodyNode, m_code), X86::eax, X86::eax); 3505 3505 __ testl_rr(X86::eax, X86::eax); 3506 JmpSrc hasCodeBlock2 = __ emitUnlinkedJne();3506 JmpSrc hasCodeBlock2 = __ jne(); 3507 3507 __ popl_r(X86::ebx); 3508 __ emitRestoreArgumentReference();3508 __ restoreArgumentReference(); 3509 3509 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 3510 JmpSrc callJSFunction2 = __ emitCall();3510 JmpSrc callJSFunction2 = __ call(); 3511 3511 emitGetCTIArg(0, X86::ecx); 3512 3512 emitGetCTIArg(8, X86::edx); … … 3516 3516 // Check argCount matches callee arity. 3517 3517 __ cmpl_rm(X86::edx, FIELD_OFFSET(CodeBlock, numParameters), X86::eax); 3518 JmpSrc arityCheckOkay2 = __ emitUnlinkedJe();3518 JmpSrc arityCheckOkay2 = __ je(); 3519 3519 __ popl_r(X86::ebx); 3520 3520 emitPutCTIArg(X86::ebx, 4); 3521 3521 emitPutCTIArg(X86::eax, 12); 3522 __ emitRestoreArgumentReference();3522 __ restoreArgumentReference(); 3523 3523 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 3524 JmpSrc callArityCheck2 = __ emitCall();3524 JmpSrc callArityCheck2 = __ call(); 3525 3525 __ movl_rr(X86::edx, X86::edi); 3526 3526 emitGetCTIArg(0, X86::ecx); … … 3533 3533 __ popl_r(X86::ebx); 3534 3534 emitPutCTIArg(X86::ebx, 4); 3535 __ emitRestoreArgumentReference();3535 __ restoreArgumentReference(); 3536 3536 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 3537 JmpSrc callLazyLinkCall = __ emitCall();3537 JmpSrc callLazyLinkCall = __ call(); 3538 3538 __ pushl_r(X86::ebx); 3539 3539 … … 3546 3546 __ movl_mr(FIELD_OFFSET(FunctionBodyNode, m_code), X86::eax, X86::eax); 3547 3547 __ testl_rr(X86::eax, X86::eax); 3548 JmpSrc hasCodeBlock3 = __ emitUnlinkedJne();3548 JmpSrc hasCodeBlock3 = __ jne(); 3549 3549 __ popl_r(X86::ebx); 3550 __ emitRestoreArgumentReference();3550 __ restoreArgumentReference(); 3551 3551 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 3552 JmpSrc callJSFunction3 = __ emitCall();3552 JmpSrc callJSFunction3 = __ call(); 3553 3553 emitGetCTIArg(0, X86::ecx); 3554 3554 emitGetCTIArg(8, X86::edx); … … 3558 3558 // Check argCount matches callee arity. 3559 3559 __ cmpl_rm(X86::edx, FIELD_OFFSET(CodeBlock, numParameters), X86::eax); 3560 JmpSrc arityCheckOkay3 = __ emitUnlinkedJe();3560 JmpSrc arityCheckOkay3 = __ je(); 3561 3561 __ popl_r(X86::ebx); 3562 3562 emitPutCTIArg(X86::ebx, 4); 3563 3563 emitPutCTIArg(X86::eax, 12); 3564 __ emitRestoreArgumentReference();3564 __ restoreArgumentReference(); 3565 3565 emitPutCTIParam(X86::edi, CTI_ARGS_callFrame); 3566 JmpSrc callArityCheck3 = __ emitCall();3566 JmpSrc callArityCheck3 = __ call(); 3567 3567 __ movl_rr(X86::edx, X86::edi); 3568 3568 emitGetCTIArg(0, X86::ecx); … … 3645 3645 // Check eax is an array 3646 3646 __ testl_i32r(JSImmediate::TagMask, X86::eax); 3647 JmpSrc failureCases1 = __ emitUnlinkedJne();3647 JmpSrc failureCases1 = __ jne(); 3648 3648 __ cmpl_i32m(reinterpret_cast<unsigned>(m_interpreter->m_jsArrayVptr), X86::eax); 3649 JmpSrc failureCases2 = __ emitUnlinkedJne();3649 JmpSrc failureCases2 = __ jne(); 3650 3650 3651 3651 // Checks out okay! - get the length from the storage … … 3654 3654 3655 3655 __ cmpl_i32r(JSImmediate::maxImmediateInt, X86::ecx); 3656 JmpSrc failureCases3 = __ emitUnlinkedJa();3656 JmpSrc failureCases3 = __ ja(); 3657 3657 3658 3658 __ addl_rr(X86::ecx, X86::ecx); 3659 3659 __ addl_i8r(1, X86::ecx); 3660 3660 __ movl_rr(X86::ecx, X86::eax); 3661 JmpSrc success = __ emitUnlinkedJmp();3661 JmpSrc success = __ jmp(); 3662 3662 3663 3663 void* code = __ executableCopy();
Note:
See TracChangeset
for help on using the changeset viewer.