Changeset 97071 in webkit


Ignore:
Timestamp:
Oct 10, 2011 11:43:44 AM (13 years ago)
Author:
barraclough@apple.com
Message:

DFG JIT: callOperation should return the Call.
https://bugs.webkit.org/show_bug.cgi?id=69682

Reviewed by Oliver Hunt.

  • dfg/DFGJITCodeGenerator.h:

(JSC::DFG::callOperation):
(JSC::DFG::appendCallWithExceptionCheckSetResult):

  • dfg/DFGJITCompiler.h:

(JSC::DFG::JITCompiler::appendCall):

  • wtf/Platform.h:
Location:
trunk/Source/JavaScriptCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r97046 r97071  
     12011-10-07  Gavin Barraclough  <barraclough@apple.com>
     2
     3        DFG JIT: callOperation should return the Call.
     4        https://bugs.webkit.org/show_bug.cgi?id=69682
     5
     6        Reviewed by Oliver Hunt.
     7
     8        * dfg/DFGJITCodeGenerator.h:
     9        (JSC::DFG::callOperation):
     10        (JSC::DFG::appendCallWithExceptionCheckSetResult):
     11        * dfg/DFGJITCompiler.h:
     12        (JSC::DFG::JITCompiler::appendCall):
     13        * wtf/Platform.h:
     14
    1152011-10-10  Sheriff Bot  <webkit.review.bot@gmail.com>
    216
  • trunk/Source/JavaScriptCore/dfg/DFGJITCodeGenerator.h

    r97033 r97071  
    10551055
    10561056    // These methods add calls to C++ helper functions.
    1057     void callOperation(J_DFGOperation_EP operation, GPRReg result, void* pointer)
     1057    JITCompiler::Call callOperation(J_DFGOperation_EP operation, GPRReg result, void* pointer)
    10581058    {
    10591059        m_jit.move(JITCompiler::TrustedImmPtr(pointer), GPRInfo::argumentGPR1);
    10601060        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
    10611061
    1062         appendCallWithExceptionCheck(operation);
    1063         m_jit.move(GPRInfo::returnValueGPR, result);
    1064     }
    1065     void callOperation(J_DFGOperation_EI operation, GPRReg result, Identifier* identifier)
    1066     {
    1067         callOperation((J_DFGOperation_EP)operation, result, identifier);
    1068     }
    1069     void callOperation(J_DFGOperation_EA operation, GPRReg result, GPRReg arg1)
    1070     {
    1071         callOperation((J_DFGOperation_EP)operation, result, arg1);
    1072     }
    1073     void callOperation(J_DFGOperation_EPS operation, GPRReg result, void* pointer, size_t size)
     1062        return appendCallWithExceptionCheckSetResult(operation, result);
     1063    }
     1064    JITCompiler::Call callOperation(J_DFGOperation_EI operation, GPRReg result, Identifier* identifier)
     1065    {
     1066        return callOperation((J_DFGOperation_EP)operation, result, identifier);
     1067    }
     1068    JITCompiler::Call callOperation(J_DFGOperation_EA operation, GPRReg result, GPRReg arg1)
     1069    {
     1070        return callOperation((J_DFGOperation_EP)operation, result, arg1);
     1071    }
     1072    JITCompiler::Call callOperation(J_DFGOperation_EPS operation, GPRReg result, void* pointer, size_t size)
    10741073    {
    10751074        m_jit.move(JITCompiler::TrustedImmPtr(size), GPRInfo::argumentGPR2);
     
    10771076        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
    10781077
    1079         appendCallWithExceptionCheck(operation);
    1080         m_jit.move(GPRInfo::returnValueGPR, result);
    1081     }
    1082     void callOperation(J_DFGOperation_ESS operation, GPRReg result, int startConstant, int numConstants)
     1078        return appendCallWithExceptionCheckSetResult(operation, result);
     1079    }
     1080    JITCompiler::Call callOperation(J_DFGOperation_ESS operation, GPRReg result, int startConstant, int numConstants)
    10831081    {
    10841082        m_jit.move(JITCompiler::TrustedImm32(numConstants), GPRInfo::argumentGPR2);
     
    10861084        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
    10871085
    1088         appendCallWithExceptionCheck(operation);
    1089         m_jit.move(GPRInfo::returnValueGPR, result);
    1090     }
    1091     void callOperation(J_DFGOperation_EJP operation, GPRReg result, GPRReg arg1, void* pointer)
     1086        return appendCallWithExceptionCheckSetResult(operation, result);
     1087    }
     1088    JITCompiler::Call callOperation(J_DFGOperation_EJP operation, GPRReg result, GPRReg arg1, void* pointer)
    10921089    {
    10931090        m_jit.move(arg1, GPRInfo::argumentGPR1);
     
    10951092        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
    10961093
    1097         appendCallWithExceptionCheck(operation);
    1098         m_jit.move(GPRInfo::returnValueGPR, result);
    1099     }
    1100     void callOperation(J_DFGOperation_EJI operation, GPRReg result, GPRReg arg1, Identifier* identifier)
    1101     {
    1102         callOperation((J_DFGOperation_EJP)operation, result, arg1, identifier);
    1103     }
    1104     void callOperation(J_DFGOperation_EJA operation, GPRReg result, GPRReg arg1, GPRReg arg2)
    1105     {
    1106         callOperation((J_DFGOperation_EJP)operation, result, arg1, arg2);
     1094        return appendCallWithExceptionCheckSetResult(operation, result);
     1095    }
     1096    JITCompiler::Call callOperation(J_DFGOperation_EJI operation, GPRReg result, GPRReg arg1, Identifier* identifier)
     1097    {
     1098        return callOperation((J_DFGOperation_EJP)operation, result, arg1, identifier);
     1099    }
     1100    JITCompiler::Call callOperation(J_DFGOperation_EJA operation, GPRReg result, GPRReg arg1, GPRReg arg2)
     1101    {
     1102        return callOperation((J_DFGOperation_EJP)operation, result, arg1, arg2);
    11071103    }
    11081104    // This also handles J_DFGOperation_EP!
    1109     void callOperation(J_DFGOperation_EJ operation, GPRReg result, GPRReg arg1)
     1105    JITCompiler::Call callOperation(J_DFGOperation_EJ operation, GPRReg result, GPRReg arg1)
    11101106    {
    11111107        m_jit.move(arg1, GPRInfo::argumentGPR1);
    11121108        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
    11131109
    1114         appendCallWithExceptionCheck(operation);
    1115         m_jit.move(GPRInfo::returnValueGPR, result);
    1116     }
    1117     void callOperation(C_DFGOperation_E operation, GPRReg result)
     1110        return appendCallWithExceptionCheckSetResult(operation, result);
     1111    }
     1112    JITCompiler::Call callOperation(C_DFGOperation_E operation, GPRReg result)
    11181113    {
    11191114        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
    11201115
    1121         appendCallWithExceptionCheck(operation);
    1122         m_jit.move(GPRInfo::returnValueGPR, result);
    1123     }
    1124     void callOperation(C_DFGOperation_EC operation, GPRReg result, GPRReg arg1)
     1116        return appendCallWithExceptionCheckSetResult(operation, result);
     1117    }
     1118    JITCompiler::Call callOperation(C_DFGOperation_EC operation, GPRReg result, GPRReg arg1)
    11251119    {
    11261120        m_jit.move(arg1, GPRInfo::argumentGPR1);
    11271121        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
    11281122
    1129         appendCallWithExceptionCheck(operation);
    1130         m_jit.move(GPRInfo::returnValueGPR, result);
    1131     }
    1132     void callOperation(Z_DFGOperation_EJ operation, GPRReg result, GPRReg arg1)
     1123        return appendCallWithExceptionCheckSetResult(operation, result);
     1124    }
     1125    JITCompiler::Call callOperation(Z_DFGOperation_EJ operation, GPRReg result, GPRReg arg1)
    11331126    {
    11341127        m_jit.move(arg1, GPRInfo::argumentGPR1);
    11351128        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
    11361129
    1137         appendCallWithExceptionCheck(operation);
    1138         m_jit.move(GPRInfo::returnValueGPR, result);
    1139     }
    1140     void callOperation(Z_DFGOperation_EJJ operation, GPRReg result, GPRReg arg1, GPRReg arg2)
     1130        return appendCallWithExceptionCheckSetResult(operation, result);
     1131    }
     1132    JITCompiler::Call callOperation(Z_DFGOperation_EJJ operation, GPRReg result, GPRReg arg1, GPRReg arg2)
    11411133    {
    11421134        setupStubArguments(arg1, arg2);
    11431135        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
    11441136
    1145         appendCallWithExceptionCheck(operation);
    1146         m_jit.move(GPRInfo::returnValueGPR, result);
     1137        return appendCallWithExceptionCheckSetResult(operation, result);
    11471138    }
    11481139    // This also handles J_DFGOperation_EJP!
    1149     void callOperation(J_DFGOperation_EJJ operation, GPRReg result, GPRReg arg1, GPRReg arg2)
     1140    JITCompiler::Call callOperation(J_DFGOperation_EJJ operation, GPRReg result, GPRReg arg1, GPRReg arg2)
    11501141    {
    11511142        setupStubArguments(arg1, arg2);
    11521143        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
    11531144
    1154         appendCallWithExceptionCheck(operation);
    1155         m_jit.move(GPRInfo::returnValueGPR, result);
    1156     }
    1157     void callOperation(J_DFGOperation_ECJ operation, GPRReg result, GPRReg arg1, GPRReg arg2)
     1145        return appendCallWithExceptionCheckSetResult(operation, result);
     1146    }
     1147    JITCompiler::Call callOperation(J_DFGOperation_ECJ operation, GPRReg result, GPRReg arg1, GPRReg arg2)
    11581148    {
    11591149        setupStubArguments(arg1, arg2);
    11601150        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
    11611151
    1162         appendCallWithExceptionCheck(operation);
    1163         m_jit.move(GPRInfo::returnValueGPR, result);
    1164     }
    1165     void callOperation(V_DFGOperation_EJJP operation, GPRReg arg1, GPRReg arg2, void* pointer)
     1152        return appendCallWithExceptionCheckSetResult(operation, result);
     1153    }
     1154    JITCompiler::Call callOperation(V_DFGOperation_EJJP operation, GPRReg arg1, GPRReg arg2, void* pointer)
    11661155    {
    11671156        setupStubArguments(arg1, arg2);
     
    11691158        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
    11701159
    1171         appendCallWithExceptionCheck(operation);
    1172     }
    1173     void callOperation(V_DFGOperation_EJJI operation, GPRReg arg1, GPRReg arg2, Identifier* identifier)
    1174     {
    1175         callOperation((V_DFGOperation_EJJP)operation, arg1, arg2, identifier);
    1176     }
    1177     void callOperation(V_DFGOperation_EJJJ operation, GPRReg arg1, GPRReg arg2, GPRReg arg3)
     1160        return appendCallWithExceptionCheck(operation);
     1161    }
     1162    JITCompiler::Call callOperation(V_DFGOperation_EJJI operation, GPRReg arg1, GPRReg arg2, Identifier* identifier)
     1163    {
     1164        return callOperation((V_DFGOperation_EJJP)operation, arg1, arg2, identifier);
     1165    }
     1166    JITCompiler::Call callOperation(V_DFGOperation_EJJJ operation, GPRReg arg1, GPRReg arg2, GPRReg arg3)
    11781167    {
    11791168        setupStubArguments(arg1, arg2, arg3);
    11801169        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
    11811170
    1182         appendCallWithExceptionCheck(operation);
    1183     }
    1184     void callOperation(V_DFGOperation_ECJJ operation, GPRReg arg1, GPRReg arg2, GPRReg arg3)
     1171        return appendCallWithExceptionCheck(operation);
     1172    }
     1173    JITCompiler::Call callOperation(V_DFGOperation_ECJJ operation, GPRReg arg1, GPRReg arg2, GPRReg arg3)
    11851174    {
    11861175        setupStubArguments(arg1, arg2, arg3);
    11871176        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
    11881177
    1189         appendCallWithExceptionCheck(operation);
    1190     }
    1191     void callOperation(D_DFGOperation_DD operation, FPRReg result, FPRReg arg1, FPRReg arg2)
     1178        return appendCallWithExceptionCheck(operation);
     1179    }
     1180    JITCompiler::Call callOperation(D_DFGOperation_DD operation, FPRReg result, FPRReg arg1, FPRReg arg2)
    11921181    {
    11931182        setupTwoStubArgs<FPRInfo::argumentFPR0, FPRInfo::argumentFPR1>(arg1, arg2);
    11941183
    1195         m_jit.appendCall(operation);
     1184        JITCompiler::Call call = m_jit.appendCall(operation);
    11961185        m_jit.moveDouble(FPRInfo::returnValueFPR, result);
     1186        return call;
    11971187    }
    11981188
     
    12191209
    12201210    // These methods add calls to C++ helper functions.
    1221     void callOperation(J_DFGOperation_EP operation, GPRReg resultTag, GPRReg resultPayload, void* pointer)
     1211    JITCompiler::Call callOperation(J_DFGOperation_EP operation, GPRReg resultTag, GPRReg resultPayload, void* pointer)
    12221212    {
    12231213        m_jit.push(JITCompiler::TrustedImm32(reinterpret_cast<int>(pointer)));
    12241214        m_jit.push(GPRInfo::callFrameRegister);
    12251215
    1226         appendCallWithExceptionCheck(operation);
    1227         setupResults(resultTag, resultPayload);
    1228     }
    1229     void callOperation(J_DFGOperation_EP operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1)
     1216        return appendCallWithExceptionCheckSetResult(operation, resultTag, resultPayload);
     1217    }
     1218    JITCompiler::Call callOperation(J_DFGOperation_EP operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1)
    12301219    {
    12311220        m_jit.push(arg1);
    12321221        m_jit.push(GPRInfo::callFrameRegister);
    12331222
    1234         appendCallWithExceptionCheck(operation);
    1235         setupResults(resultTag, resultPayload);
    1236     }
    1237     void callOperation(J_DFGOperation_EI operation, GPRReg resultTag, GPRReg resultPayload, Identifier* identifier)
    1238     {
    1239         callOperation((J_DFGOperation_EP)operation, resultTag, resultPayload, identifier);
    1240     }
    1241     void callOperation(J_DFGOperation_EA operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1)
    1242     {
    1243         callOperation((J_DFGOperation_EP)operation, resultTag, resultPayload, arg1);
    1244     }
    1245     void callOperation(J_DFGOperation_EPS operation, GPRReg resultTag, GPRReg resultPayload, void* pointer, size_t size)
     1223        return appendCallWithExceptionCheckSetResult(operation, resultTag, resultPayload);
     1224    }
     1225    JITCompiler::Call callOperation(J_DFGOperation_EI operation, GPRReg resultTag, GPRReg resultPayload, Identifier* identifier)
     1226    {
     1227        return callOperation((J_DFGOperation_EP)operation, resultTag, resultPayload, identifier);
     1228    }
     1229    JITCompiler::Call callOperation(J_DFGOperation_EA operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1)
     1230    {
     1231        return callOperation((J_DFGOperation_EP)operation, resultTag, resultPayload, arg1);
     1232    }
     1233    JITCompiler::Call callOperation(J_DFGOperation_EPS operation, GPRReg resultTag, GPRReg resultPayload, void* pointer, size_t size)
    12461234    {
    12471235        m_jit.push(JITCompiler::TrustedImm32(size));
     
    12491237        m_jit.push(GPRInfo::callFrameRegister);
    12501238
    1251         appendCallWithExceptionCheck(operation);
    1252         setupResults(resultTag, resultPayload);
    1253     }
    1254     void callOperation(J_DFGOperation_ESS operation, GPRReg resultTag, GPRReg resultPayload, int startConstant, int numConstants)
     1239        return appendCallWithExceptionCheckSetResult(operation, resultTag, resultPayload);
     1240    }
     1241    JITCompiler::Call callOperation(J_DFGOperation_ESS operation, GPRReg resultTag, GPRReg resultPayload, int startConstant, int numConstants)
    12551242    {
    12561243        m_jit.push(JITCompiler::TrustedImm32(numConstants));
     
    12581245        m_jit.push(GPRInfo::callFrameRegister);
    12591246
    1260         appendCallWithExceptionCheck(operation);
    1261         setupResults(resultTag, resultPayload);
    1262     }
    1263     void callOperation(J_DFGOperation_EJP operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, void* pointer)
     1247        return appendCallWithExceptionCheckSetResult(operation, resultTag, resultPayload);
     1248    }
     1249    JITCompiler::Call callOperation(J_DFGOperation_EJP operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, void* pointer)
    12641250    {
    12651251        m_jit.push(JITCompiler::TrustedImm32(reinterpret_cast<int>(pointer)));
     
    12681254        m_jit.push(GPRInfo::callFrameRegister);
    12691255
    1270         appendCallWithExceptionCheck(operation);
    1271         setupResults(resultTag, resultPayload);
    1272     }
    1273     void callOperation(J_DFGOperation_EJP operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2)
     1256        return appendCallWithExceptionCheckSetResult(operation, resultTag, resultPayload);
     1257    }
     1258    JITCompiler::Call callOperation(J_DFGOperation_EJP operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2)
    12741259    {
    12751260        m_jit.push(arg2);
     
    12781263        m_jit.push(GPRInfo::callFrameRegister);
    12791264
    1280         appendCallWithExceptionCheck(operation);
    1281         setupResults(resultTag, resultPayload);
    1282     }
    1283     void callOperation(J_DFGOperation_EJI operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, Identifier* identifier)
    1284     {
    1285         callOperation((J_DFGOperation_EJP)operation, resultTag, resultPayload, arg1Tag, arg1Payload, identifier);
    1286     }
    1287     void callOperation(J_DFGOperation_EJA operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2)
    1288     {
    1289         callOperation((J_DFGOperation_EJP)operation, resultTag, resultPayload, arg1Tag, arg1Payload, arg2);
    1290     }
    1291     void callOperation(J_DFGOperation_EJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload)
     1265        return appendCallWithExceptionCheckSetResult(operation, resultTag, resultPayload);
     1266    }
     1267    JITCompiler::Call callOperation(J_DFGOperation_EJI operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, Identifier* identifier)
     1268    {
     1269        return callOperation((J_DFGOperation_EJP)operation, resultTag, resultPayload, arg1Tag, arg1Payload, identifier);
     1270    }
     1271    JITCompiler::Call callOperation(J_DFGOperation_EJA operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2)
     1272    {
     1273        return callOperation((J_DFGOperation_EJP)operation, resultTag, resultPayload, arg1Tag, arg1Payload, arg2);
     1274    }
     1275    JITCompiler::Call callOperation(J_DFGOperation_EJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload)
    12921276    {
    12931277        m_jit.push(arg1Tag);
     
    12951279        m_jit.push(GPRInfo::callFrameRegister);
    12961280
    1297         appendCallWithExceptionCheck(operation);
    1298         setupResults(resultTag, resultPayload);
    1299     }
    1300     void callOperation(C_DFGOperation_E operation, GPRReg result)
     1281        return appendCallWithExceptionCheckSetResult(operation, resultTag, resultPayload);
     1282    }
     1283    JITCompiler::Call callOperation(C_DFGOperation_E operation, GPRReg result)
    13011284    {
    13021285        m_jit.push(GPRInfo::callFrameRegister);
    13031286
    1304         appendCallWithExceptionCheck(operation);
    1305         m_jit.move(GPRInfo::returnValueGPR, result);
    1306     }
    1307     void callOperation(C_DFGOperation_EC operation, GPRReg result, GPRReg arg1)
     1287        return appendCallWithExceptionCheckSetResult(operation, result);
     1288    }
     1289    JITCompiler::Call callOperation(C_DFGOperation_EC operation, GPRReg result, GPRReg arg1)
    13081290    {
    13091291        m_jit.push(arg1);
    13101292        m_jit.push(GPRInfo::callFrameRegister);
    13111293
    1312         appendCallWithExceptionCheck(operation);
    1313         m_jit.move(GPRInfo::returnValueGPR, result);
    1314     }
    1315     void callOperation(Z_DFGOperation_EJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload)
     1294        return appendCallWithExceptionCheckSetResult(operation, result);
     1295    }
     1296    JITCompiler::Call callOperation(Z_DFGOperation_EJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload)
    13161297    {
    13171298        m_jit.push(arg1Tag);
     
    13191300        m_jit.push(GPRInfo::callFrameRegister);
    13201301
    1321         appendCallWithExceptionCheck(operation);
    1322         m_jit.move(GPRInfo::returnValueGPR, result);
    1323     }
    1324     void callOperation(Z_DFGOperation_EJJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload)
     1302        return appendCallWithExceptionCheckSetResult(operation, result);
     1303    }
     1304    JITCompiler::Call callOperation(Z_DFGOperation_EJJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload)
    13251305    {
    13261306        m_jit.push(arg2Tag);
     
    13301310        m_jit.push(GPRInfo::callFrameRegister);
    13311311
    1332         appendCallWithExceptionCheck(operation);
    1333         m_jit.move(GPRInfo::returnValueGPR, result);
    1334     }
    1335     void callOperation(J_DFGOperation_EJJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload)
     1312        return appendCallWithExceptionCheckSetResult(operation, result);
     1313    }
     1314    JITCompiler::Call callOperation(J_DFGOperation_EJJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload)
    13361315    {
    13371316        m_jit.push(arg2Tag);
     
    13411320        m_jit.push(GPRInfo::callFrameRegister);
    13421321
    1343         appendCallWithExceptionCheck(operation);
    1344         setupResults(resultTag, resultPayload);
    1345     }
    1346     void callOperation(J_DFGOperation_ECJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2Tag, GPRReg arg2Payload)
     1322        return appendCallWithExceptionCheckSetResult(operation, resultTag, resultPayload);
     1323    }
     1324    JITCompiler::Call callOperation(J_DFGOperation_ECJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2Tag, GPRReg arg2Payload)
    13471325    {
    13481326        m_jit.push(arg2Tag);
     
    13511329        m_jit.push(GPRInfo::callFrameRegister);
    13521330
    1353         appendCallWithExceptionCheck(operation);
    1354         setupResults(resultTag, resultPayload);
    1355     }
    1356     void callOperation(V_DFGOperation_EJJP operation, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload, void* pointer)
     1331        return appendCallWithExceptionCheckSetResult(operation, resultTag, resultPayload);
     1332    }
     1333    JITCompiler::Call callOperation(V_DFGOperation_EJJP operation, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload, void* pointer)
    13571334    {
    13581335        m_jit.push(JITCompiler::TrustedImm32(reinterpret_cast<int>(pointer)));
     
    13631340        m_jit.push(GPRInfo::callFrameRegister);
    13641341
    1365         appendCallWithExceptionCheck(operation);
    1366     }
    1367     void callOperation(V_DFGOperation_EJJI operation, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload, Identifier* identifier)
    1368     {
    1369         callOperation((V_DFGOperation_EJJP)operation, arg1Tag, arg1Payload, arg2Tag, arg2Payload, identifier);
    1370     }
    1371     void callOperation(V_DFGOperation_ECJJ operation, GPRReg arg1, GPRReg arg2Tag, GPRReg arg2Payload, GPRReg arg3Tag, GPRReg arg3Payload)
     1342        return appendCallWithExceptionCheck(operation);
     1343    }
     1344    JITCompiler::Call callOperation(V_DFGOperation_EJJI operation, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload, Identifier* identifier)
     1345    {
     1346        return callOperation((V_DFGOperation_EJJP)operation, arg1Tag, arg1Payload, arg2Tag, arg2Payload, identifier);
     1347    }
     1348    JITCompiler::Call callOperation(V_DFGOperation_ECJJ operation, GPRReg arg1, GPRReg arg2Tag, GPRReg arg2Payload, GPRReg arg3Tag, GPRReg arg3Payload)
    13721349    {
    13731350        m_jit.push(arg3Tag);
     
    13781355        m_jit.push(GPRInfo::callFrameRegister);
    13791356
    1380         appendCallWithExceptionCheck(operation);
    1381     }
    1382 
    1383     void callOperation(D_DFGOperation_DD operation, FPRReg result, FPRReg arg1, FPRReg arg2)
     1357        return appendCallWithExceptionCheck(operation);
     1358    }
     1359
     1360    JITCompiler::Call callOperation(D_DFGOperation_DD operation, FPRReg result, FPRReg arg1, FPRReg arg2)
    13841361    {
    13851362        m_jit.subPtr(TrustedImm32(2 * sizeof(double)), JITCompiler::stackPointerRegister);
     
    13871364        m_jit.storeDouble(arg1, JITCompiler::stackPointerRegister);
    13881365
    1389         m_jit.appendCall(operation);
     1366        JITCompiler::Call call = m_jit.appendCall(operation);
    13901367#if !CALLING_CONVENTION_IS_CDECL
    13911368        // For D_DFGOperation_DD calls we're currently using the system's default calling convention.
     
    13971374        m_jit.loadDouble(JITCompiler::stackPointerRegister, result);
    13981375        m_jit.addPtr(TrustedImm32(2 * sizeof(double)), JITCompiler::stackPointerRegister);
     1376
     1377        return call;
    13991378    }
    14001379#endif
     
    14041383        return m_jit.appendCallWithExceptionCheck(function, at(m_compileIndex).codeOrigin);
    14051384    }
     1385    JITCompiler::Call appendCallWithExceptionCheckSetResult(const FunctionPtr& function, GPRReg result)
     1386    {
     1387        JITCompiler::Call call = appendCallWithExceptionCheck(function);
     1388        m_jit.move(GPRInfo::returnValueGPR, result);
     1389        return call;
     1390    }
     1391#if USE(JSVALUE32_64)
     1392    JITCompiler::Call appendCallWithExceptionCheckSetResult(const FunctionPtr& function, GPRReg resultTag, GPRReg resultPayload)
     1393    {
     1394        JITCompiler::Call call = appendCallWithExceptionCheck(function);
     1395        setupResults(resultTag, resultPayload);
     1396        return call;
     1397    }
     1398#endif
    14061399
    14071400    void addBranch(const MacroAssembler::Jump& jump, BlockIndex destination)
  • trunk/Source/JavaScriptCore/dfg/DFGJITCompiler.h

    r96854 r97071  
    217217
    218218    // Add a call out from JIT code, without an exception check.
    219     void appendCall(const FunctionPtr& function)
    220     {
    221         m_calls.append(CallRecord(call(), function));
     219    Call appendCall(const FunctionPtr& function)
     220    {
     221        Call functionCall = call();
     222        m_calls.append(CallRecord(functionCall, function));
    222223        // FIXME: should be able to JIT_ASSERT here that globalData->exception is null on return back to JIT code.
     224        return functionCall;
    223225    }
    224226
Note: See TracChangeset for help on using the changeset viewer.