Ignore:
Timestamp:
Sep 12, 2013, 1:07:02 PM (12 years ago)
Author:
[email protected]
Message:

GPRTemporary's reuse constructor should be templatized to reduce code duplication, and the bool to denote tag or payload should be replaced with an enum
https://bugs.webkit.org/show_bug.cgi?id=121250

Reviewed by Oliver Hunt.

  • dfg/DFGGPRInfo.h:

(JSC::DFG::JSValueRegs::gpr):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::GPRTemporary::GPRTemporary):
(JSC::DFG::SpeculativeJIT::compileValueToInt32):
(JSC::DFG::SpeculativeJIT::compileAdd):
(JSC::DFG::SpeculativeJIT::compileStringEquality):
(JSC::DFG::SpeculativeJIT::compileGetArgumentsLength):
(JSC::DFG::SpeculativeJIT::compileGetArrayLength):

  • dfg/DFGSpeculativeJIT.h:

(JSC::DFG::JSValueOperand::gpr):
(JSC::DFG::GPRTemporary::GPRTemporary):

  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
(JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
(JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
(JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
(JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
(JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
(JSC::DFG::SpeculativeJIT::compileObjectEquality):
(JSC::DFG::SpeculativeJIT::compileLogicalNot):
(JSC::DFG::SpeculativeJIT::compile):

  • dfg/DFGSpeculativeJIT64.cpp:

(JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
(JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
(JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
(JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
(JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
(JSC::DFG::SpeculativeJIT::compileObjectEquality):
(JSC::DFG::SpeculativeJIT::compileIntegerCompare):
(JSC::DFG::SpeculativeJIT::compileLogicalNot):
(JSC::DFG::SpeculativeJIT::compile):

  • runtime/JSCJSValue.h:
File:
1 edited

Legend:

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

    r155594 r155643  
    11851185}
    11861186
    1187 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, SpeculateInt32Operand& op1)
     1187#if USE(JSVALUE32_64)
     1188GPRTemporary::GPRTemporary(
     1189    SpeculativeJIT* jit, ReuseTag, JSValueOperand& op1, WhichValueWord which)
    11881190    : m_jit(jit)
    11891191    , m_gpr(InvalidGPRReg)
    11901192{
    1191     if (m_jit->canReuse(op1.node()))
    1192         m_gpr = m_jit->reuse(op1.gpr());
     1193    if (!op1.isDouble() && m_jit->canReuse(op1.node()))
     1194        m_gpr = m_jit->reuse(op1.gpr(which));
    11931195    else
    11941196        m_gpr = m_jit->allocate();
    11951197}
    1196 
    1197 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, SpeculateInt32Operand& op1, SpeculateInt32Operand& op2)
    1198     : m_jit(jit)
    1199     , m_gpr(InvalidGPRReg)
    1200 {
    1201     if (m_jit->canReuse(op1.node()))
    1202         m_gpr = m_jit->reuse(op1.gpr());
    1203     else if (m_jit->canReuse(op2.node()))
    1204         m_gpr = m_jit->reuse(op2.gpr());
    1205     else
    1206         m_gpr = m_jit->allocate();
    1207 }
    1208 
    1209 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, SpeculateStrictInt32Operand& op1)
    1210     : m_jit(jit)
    1211     , m_gpr(InvalidGPRReg)
    1212 {
    1213     if (m_jit->canReuse(op1.node()))
    1214         m_gpr = m_jit->reuse(op1.gpr());
    1215     else
    1216         m_gpr = m_jit->allocate();
    1217 }
    1218 
    1219 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, Int32Operand& op1)
    1220     : m_jit(jit)
    1221     , m_gpr(InvalidGPRReg)
    1222 {
    1223     if (m_jit->canReuse(op1.node()))
    1224         m_gpr = m_jit->reuse(op1.gpr());
    1225     else
    1226         m_gpr = m_jit->allocate();
    1227 }
    1228 
    1229 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, Int32Operand& op1, Int32Operand& op2)
    1230     : m_jit(jit)
    1231     , m_gpr(InvalidGPRReg)
    1232 {
    1233     if (m_jit->canReuse(op1.node()))
    1234         m_gpr = m_jit->reuse(op1.gpr());
    1235     else if (m_jit->canReuse(op2.node()))
    1236         m_gpr = m_jit->reuse(op2.gpr());
    1237     else
    1238         m_gpr = m_jit->allocate();
    1239 }
    1240 
    1241 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, SpeculateCellOperand& op1)
    1242     : m_jit(jit)
    1243     , m_gpr(InvalidGPRReg)
    1244 {
    1245     if (m_jit->canReuse(op1.node()))
    1246         m_gpr = m_jit->reuse(op1.gpr());
    1247     else
    1248         m_gpr = m_jit->allocate();
    1249 }
    1250 
    1251 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, SpeculateBooleanOperand& op1)
    1252     : m_jit(jit)
    1253     , m_gpr(InvalidGPRReg)
    1254 {
    1255     if (m_jit->canReuse(op1.node()))
    1256         m_gpr = m_jit->reuse(op1.gpr());
    1257     else
    1258         m_gpr = m_jit->allocate();
    1259 }
    1260 
    1261 #if USE(JSVALUE64)
    1262 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, JSValueOperand& op1)
    1263     : m_jit(jit)
    1264     , m_gpr(InvalidGPRReg)
    1265 {
    1266     if (m_jit->canReuse(op1.node()))
    1267         m_gpr = m_jit->reuse(op1.gpr());
    1268     else
    1269         m_gpr = m_jit->allocate();
    1270 }
    1271 #else
    1272 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, JSValueOperand& op1, bool tag)
    1273     : m_jit(jit)
    1274     , m_gpr(InvalidGPRReg)
    1275 {
    1276     if (!op1.isDouble() && m_jit->canReuse(op1.node()))
    1277         m_gpr = m_jit->reuse(tag ? op1.tagGPR() : op1.payloadGPR());
    1278     else
    1279         m_gpr = m_jit->allocate();
    1280 }
    1281 #endif
    1282 
    1283 GPRTemporary::GPRTemporary(SpeculativeJIT* jit, StorageOperand& op1)
    1284     : m_jit(jit)
    1285     , m_gpr(InvalidGPRReg)
    1286 {
    1287     if (m_jit->canReuse(op1.node()))
    1288         m_gpr = m_jit->reuse(op1.gpr());
    1289     else
    1290         m_gpr = m_jit->allocate();
    1291 }
     1198#endif // USE(JSVALUE32_64)
    12921199
    12931200void GPRTemporary::adopt(GPRTemporary& other)
     
    22382145    case Int32Use: {
    22392146        SpeculateInt32Operand op1(this, node->child1());
    2240         GPRTemporary result(this, op1);
     2147        GPRTemporary result(this, Reuse, op1);
    22412148        m_jit.move(op1.gpr(), result.gpr());
    22422149        integerResult(result.gpr(), node, op1.format());
     
    22492156        case GeneratedOperandInteger: {
    22502157            SpeculateInt32Operand op1(this, node->child1(), ManualOperandSpeculation);
    2251             GPRTemporary result(this, op1);
     2158            GPRTemporary result(this, Reuse, op1);
    22522159            m_jit.move(op1.gpr(), result.gpr());
    22532160            integerResult(result.gpr(), node, op1.format());
     
    23882295    case BooleanUse: {
    23892296        SpeculateBooleanOperand op1(this, node->child1());
    2390         GPRTemporary result(this, op1);
     2297        GPRTemporary result(this, Reuse, op1);
    23912298       
    23922299        m_jit.move(op1.gpr(), result.gpr());
     
    29822889        SpeculateInt32Operand op1(this, node->child1());
    29832890        SpeculateInt32Operand op2(this, node->child2());
    2984         GPRTemporary result(this, op1, op2);
     2891        GPRTemporary result(this, Reuse, op1, op2);
    29852892
    29862893        GPRReg gpr1 = op1.gpr();
     
    39063813    GPRTemporary leftTemp(this);
    39073814    GPRTemporary rightTemp(this);
    3908     GPRTemporary leftTemp2(this, left);
    3909     GPRTemporary rightTemp2(this, right);
     3815    GPRTemporary leftTemp2(this, Reuse, left);
     3816    GPRTemporary rightTemp2(this, Reuse, right);
    39103817   
    39113818    GPRReg leftGPR = left.gpr();
     
    41594066{
    41604067    SpeculateCellOperand base(this, node->child1());
    4161     GPRTemporary result(this, base);
     4068    GPRTemporary result(this, Reuse, base);
    41624069   
    41634070    GPRReg baseReg = base.gpr();
     
    41884095    case Array::Contiguous: {
    41894096        StorageOperand storage(this, node->child2());
    4190         GPRTemporary result(this, storage);
     4097        GPRTemporary result(this, Reuse, storage);
    41914098        GPRReg storageReg = storage.gpr();
    41924099        GPRReg resultReg = result.gpr();
     
    41994106    case Array::SlowPutArrayStorage: {
    42004107        StorageOperand storage(this, node->child2());
    4201         GPRTemporary result(this, storage);
     4108        GPRTemporary result(this, Reuse, storage);
    42024109        GPRReg storageReg = storage.gpr();
    42034110        GPRReg resultReg = result.gpr();
     
    42114118    case Array::String: {
    42124119        SpeculateCellOperand base(this, node->child1());
    4213         GPRTemporary result(this, base);
     4120        GPRTemporary result(this, Reuse, base);
    42144121        GPRReg baseGPR = base.gpr();
    42154122        GPRReg resultGPR = result.gpr();
     
    42254132        ASSERT(isTypedView(node->arrayMode().typedArrayType()));
    42264133        SpeculateCellOperand base(this, node->child1());
    4227         GPRTemporary result(this, base);
     4134        GPRTemporary result(this, Reuse, base);
    42284135        GPRReg baseGPR = base.gpr();
    42294136        GPRReg resultGPR = result.gpr();
Note: See TracChangeset for help on using the changeset viewer.