Changeset 39122 in webkit for trunk/JavaScriptCore/jit/JIT.cpp
- Timestamp:
- Dec 8, 2008, 8:54:16 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JIT.cpp
r39121 r39122 821 821 822 822 emitGetVirtualRegister(src, X86::eax, i); 823 JmpSrc isImmediate = emitJumpIfNotJSCell(X86::eax); 824 825 __ movl_mr(FIELD_OFFSET(JSCell, m_structure), X86::eax, X86::ecx); 826 __ testl_i32m(MasqueradesAsUndefined, FIELD_OFFSET(Structure, m_typeInfo.m_flags), X86::ecx); 827 __ setnz_r(X86::eax); 828 829 JmpSrc wasNotImmediate = __ jmp(); 830 831 __ link(isImmediate, __ label()); 832 833 __ movl_i32r(~JSImmediate::ExtendedTagBitUndefined, X86::ecx); 834 __ andl_rr(X86::eax, X86::ecx); 835 __ cmpl_i32r(JSImmediate::FullTagTypeNull, X86::ecx); 836 __ sete_r(X86::eax); 837 838 __ link(wasNotImmediate, __ label()); 839 840 __ movzbl_rr(X86::eax, X86::eax); 841 __ cmpl_i32r(0, X86::eax); 842 m_jmpTable.append(JmpTable(__ jnz(), i + 2 + target)); 843 823 Jump isImmediate = emitJumpIfNotJSCell(X86::eax); 824 825 // First, handle JSCell cases - check MasqueradesAsUndefined bit on the structure. 826 loadPtr(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), X86::ecx); 827 m_jmpTable.append(JmpTable(jnz32(Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined)), i + 2 + target)); 828 Jump wasNotImmediate = jump(); 829 830 // Now handle the immediate cases - undefined & null 831 isImmediate.link(this); 832 and32(Imm32(~JSImmediate::ExtendedTagBitUndefined), X86::eax); 833 m_jmpTable.append(JmpTable(je32(X86::eax, Imm32(asInteger(jsNull()))), i + 2 + target)); 834 835 wasNotImmediate.link(this); 844 836 i += 3; 845 837 break; … … 850 842 851 843 emitGetVirtualRegister(src, X86::eax, i); 852 JmpSrc isImmediate = emitJumpIfNotJSCell(X86::eax); 853 854 __ movl_mr(FIELD_OFFSET(JSCell, m_structure), X86::eax, X86::ecx); 855 __ testl_i32m(MasqueradesAsUndefined, FIELD_OFFSET(Structure, m_typeInfo.m_flags), X86::ecx); 856 __ setz_r(X86::eax); 857 858 JmpSrc wasNotImmediate = __ jmp(); 859 860 __ link(isImmediate, __ label()); 861 862 __ movl_i32r(~JSImmediate::ExtendedTagBitUndefined, X86::ecx); 863 __ andl_rr(X86::eax, X86::ecx); 864 __ cmpl_i32r(JSImmediate::FullTagTypeNull, X86::ecx); 865 __ setne_r(X86::eax); 866 867 __ link(wasNotImmediate, __ label()); 868 869 __ movzbl_rr(X86::eax, X86::eax); 870 __ cmpl_i32r(0, X86::eax); 871 m_jmpTable.append(JmpTable(__ jnz(), i + 2 + target)); 844 Jump isImmediate = emitJumpIfNotJSCell(X86::eax); 845 846 // First, handle JSCell cases - check MasqueradesAsUndefined bit on the structure. 847 loadPtr(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), X86::ecx); 848 m_jmpTable.append(JmpTable(jz32(Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined)), i + 2 + target)); 849 Jump wasNotImmediate = jump(); 850 851 // Now handle the immediate cases - undefined & null 852 isImmediate.link(this); 853 and32(Imm32(~JSImmediate::ExtendedTagBitUndefined), X86::eax); 854 m_jmpTable.append(JmpTable(jne32(X86::eax, Imm32(asInteger(jsNull()))), i + 2 + target)); 855 856 wasNotImmediate.link(this); 872 857 873 858 i += 3; … … 1302 1287 1303 1288 emitGetVirtualRegister(src1, X86::eax, i); 1304 JmpSrc isImmediate = emitJumpIfNotJSCell(X86::eax); 1305 1306 __ movl_mr(FIELD_OFFSET(JSCell, m_structure), X86::eax, X86::ecx); 1307 __ testl_i32m(MasqueradesAsUndefined, FIELD_OFFSET(Structure, m_typeInfo.m_flags), X86::ecx); 1308 __ setnz_r(X86::eax); 1309 1310 JmpSrc wasNotImmediate = __ jmp(); 1311 1312 __ link(isImmediate, __ label()); 1313 1314 __ movl_i32r(~JSImmediate::ExtendedTagBitUndefined, X86::ecx); 1315 __ andl_rr(X86::eax, X86::ecx); 1316 __ cmpl_i32r(JSImmediate::FullTagTypeNull, X86::ecx); 1317 __ sete_r(X86::eax); 1318 1319 __ link(wasNotImmediate, __ label()); 1320 1321 __ movzbl_rr(X86::eax, X86::eax); 1289 Jump isImmediate = emitJumpIfNotJSCell(X86::eax); 1290 1291 loadPtr(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), X86::ecx); 1292 setnz32(Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), X86::eax); 1293 1294 Jump wasNotImmediate = jump(); 1295 1296 isImmediate.link(this); 1297 1298 and32(Imm32(~JSImmediate::ExtendedTagBitUndefined), X86::eax); 1299 sete32(Imm32(JSImmediate::FullTagTypeNull), X86::eax); 1300 1301 wasNotImmediate.link(this); 1302 1322 1303 emitTagAsBoolImmediate(X86::eax); 1323 1304 emitPutVirtualRegister(dst); … … 1331 1312 1332 1313 emitGetVirtualRegister(src1, X86::eax, i); 1333 JmpSrc isImmediate = emitJumpIfNotJSCell(X86::eax); 1334 1335 __ movl_mr(FIELD_OFFSET(JSCell, m_structure), X86::eax, X86::ecx); 1336 __ testl_i32m(MasqueradesAsUndefined, FIELD_OFFSET(Structure, m_typeInfo.m_flags), X86::ecx); 1337 __ setz_r(X86::eax); 1338 1339 JmpSrc wasNotImmediate = __ jmp(); 1340 1341 __ link(isImmediate, __ label()); 1342 1343 __ movl_i32r(~JSImmediate::ExtendedTagBitUndefined, X86::ecx); 1344 __ andl_rr(X86::eax, X86::ecx); 1345 __ cmpl_i32r(JSImmediate::FullTagTypeNull, X86::ecx); 1346 __ setne_r(X86::eax); 1347 1348 __ link(wasNotImmediate, __ label()); 1349 1350 __ movzbl_rr(X86::eax, X86::eax); 1314 Jump isImmediate = emitJumpIfNotJSCell(X86::eax); 1315 1316 loadPtr(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), X86::ecx); 1317 setz32(Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), X86::eax); 1318 1319 Jump wasNotImmediate = jump(); 1320 1321 isImmediate.link(this); 1322 1323 and32(Imm32(~JSImmediate::ExtendedTagBitUndefined), X86::eax); 1324 setne32(Imm32(JSImmediate::FullTagTypeNull), X86::eax); 1325 1326 wasNotImmediate.link(this); 1327 1351 1328 emitTagAsBoolImmediate(X86::eax); 1352 1329 emitPutVirtualRegister(dst);
Note:
See TracChangeset
for help on using the changeset viewer.