Ignore:
Timestamp:
Aug 12, 2011, 4:27:45 PM (14 years ago)
Author:
[email protected]
Message:

DFG JIT has inconsistent use of boxDouble and unboxDouble,
inconsistent use of assertions regarding doubles, and those
assertions are not turned on in debug builds
https://bugs.webkit.org/show_bug.cgi?id=66160

Reviewed by Gavin Barraclough.

JIT assertions are now turned on in debug builds. JIT
assertions are now used for boxing and unboxing doubles, and boxing
and unboxing no longer involves code duplication.

  • dfg/DFGJITCodeGenerator.cpp:

(JSC::DFG::JITCodeGenerator::fillDouble):

  • dfg/DFGJITCodeGenerator.h:

(JSC::DFG::JITCodeGenerator::boxDouble):
(JSC::DFG::JITCodeGenerator::unboxDouble):

  • dfg/DFGJITCompiler.cpp:

(JSC::DFG::JITCompiler::fillNumericToDouble):
(JSC::DFG::GeneralizedRegister::moveTo):
(JSC::DFG::GeneralizedRegister::swapWith):

  • dfg/DFGJITCompiler.h:

(JSC::DFG::JITCompiler::boxDouble):
(JSC::DFG::JITCompiler::unboxDouble):

  • dfg/DFGNode.h:
  • dfg/DFGNonSpeculativeJIT.cpp:

(JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
(JSC::DFG::NonSpeculativeJIT::compile):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
(JSC::DFG::SpeculativeJIT::convertToDouble):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/dfg/DFGJITCompiler.cpp

    r92909 r93010  
    5252        loadPtr(addressFor(node.virtualRegister()), temporary);
    5353        Jump isInteger = branchPtr(MacroAssembler::AboveOrEqual, temporary, GPRInfo::tagTypeNumberRegister);
    54         jitAssertIsJSDouble(temporary);
    55         addPtr(GPRInfo::tagTypeNumberRegister, temporary);
    56         movePtrToDouble(temporary, fpr);
     54        unboxDouble(temporary, fpr);
    5755        Jump hasUnboxedDouble = jump();
    5856        isInteger.link(this);
     
    198196            }
    199197           
    200             jit.moveDoubleToPtr(fpr(), other.gpr());
    201             jit.subPtr(GPRInfo::tagTypeNumberRegister, other.gpr());
     198            jit.boxDouble(fpr(), other.gpr());
    202199           
    203200            if (done.isSet())
     
    207204       
    208205        if (UNLIKELY(other.isFPR())) {
    209             jit.addPtr(GPRInfo::tagTypeNumberRegister, gpr());
    210             jit.movePtrToDouble(gpr(), other.fpr());
     206            jit.unboxDouble(gpr(), other.fpr());
    211207            return;
    212208        }
     
    254250            }
    255251           
    256             jit.moveDoubleToPtr(fpr(), other.gpr());
    257             jit.subPtr(GPRInfo::tagTypeNumberRegister, other.gpr());
     252            jit.boxDouble(fpr(), other.gpr());
    258253           
    259254            if (done.isSet())
    260255                done.link(&jit);
    261256           
    262             jit.addPtr(GPRInfo::tagTypeNumberRegister, scratchGPR);
    263             jit.movePtrToDouble(scratchGPR, fpr());
     257            jit.unboxDouble(scratchGPR, fpr());
    264258            return;
    265259        }
Note: See TracChangeset for help on using the changeset viewer.