Changeset 97071 in webkit
- Timestamp:
- Oct 10, 2011 11:43:44 AM (13 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r97046 r97071 1 2011-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 1 15 2011-10-10 Sheriff Bot <webkit.review.bot@gmail.com> 2 16 -
trunk/Source/JavaScriptCore/dfg/DFGJITCodeGenerator.h
r97033 r97071 1055 1055 1056 1056 // These methods add calls to C++ helper functions. 1057 voidcallOperation(J_DFGOperation_EP operation, GPRReg result, void* pointer)1057 JITCompiler::Call callOperation(J_DFGOperation_EP operation, GPRReg result, void* pointer) 1058 1058 { 1059 1059 m_jit.move(JITCompiler::TrustedImmPtr(pointer), GPRInfo::argumentGPR1); 1060 1060 m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 1061 1061 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) 1074 1073 { 1075 1074 m_jit.move(JITCompiler::TrustedImmPtr(size), GPRInfo::argumentGPR2); … … 1077 1076 m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 1078 1077 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) 1083 1081 { 1084 1082 m_jit.move(JITCompiler::TrustedImm32(numConstants), GPRInfo::argumentGPR2); … … 1086 1084 m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 1087 1085 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) 1092 1089 { 1093 1090 m_jit.move(arg1, GPRInfo::argumentGPR1); … … 1095 1092 m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 1096 1093 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); 1107 1103 } 1108 1104 // This also handles J_DFGOperation_EP! 1109 voidcallOperation(J_DFGOperation_EJ operation, GPRReg result, GPRReg arg1)1105 JITCompiler::Call callOperation(J_DFGOperation_EJ operation, GPRReg result, GPRReg arg1) 1110 1106 { 1111 1107 m_jit.move(arg1, GPRInfo::argumentGPR1); 1112 1108 m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 1113 1109 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) 1118 1113 { 1119 1114 m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 1120 1115 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) 1125 1119 { 1126 1120 m_jit.move(arg1, GPRInfo::argumentGPR1); 1127 1121 m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 1128 1122 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) 1133 1126 { 1134 1127 m_jit.move(arg1, GPRInfo::argumentGPR1); 1135 1128 m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 1136 1129 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) 1141 1133 { 1142 1134 setupStubArguments(arg1, arg2); 1143 1135 m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 1144 1136 1145 appendCallWithExceptionCheck(operation); 1146 m_jit.move(GPRInfo::returnValueGPR, result); 1137 return appendCallWithExceptionCheckSetResult(operation, result); 1147 1138 } 1148 1139 // This also handles J_DFGOperation_EJP! 1149 voidcallOperation(J_DFGOperation_EJJ operation, GPRReg result, GPRReg arg1, GPRReg arg2)1140 JITCompiler::Call callOperation(J_DFGOperation_EJJ operation, GPRReg result, GPRReg arg1, GPRReg arg2) 1150 1141 { 1151 1142 setupStubArguments(arg1, arg2); 1152 1143 m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 1153 1144 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) 1158 1148 { 1159 1149 setupStubArguments(arg1, arg2); 1160 1150 m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 1161 1151 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) 1166 1155 { 1167 1156 setupStubArguments(arg1, arg2); … … 1169 1158 m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 1170 1159 1171 appendCallWithExceptionCheck(operation);1172 } 1173 voidcallOperation(V_DFGOperation_EJJI operation, GPRReg arg1, GPRReg arg2, Identifier* identifier)1174 { 1175 callOperation((V_DFGOperation_EJJP)operation, arg1, arg2, identifier);1176 } 1177 voidcallOperation(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) 1178 1167 { 1179 1168 setupStubArguments(arg1, arg2, arg3); 1180 1169 m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 1181 1170 1182 appendCallWithExceptionCheck(operation);1183 } 1184 voidcallOperation(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) 1185 1174 { 1186 1175 setupStubArguments(arg1, arg2, arg3); 1187 1176 m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 1188 1177 1189 appendCallWithExceptionCheck(operation);1190 } 1191 voidcallOperation(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) 1192 1181 { 1193 1182 setupTwoStubArgs<FPRInfo::argumentFPR0, FPRInfo::argumentFPR1>(arg1, arg2); 1194 1183 1195 m_jit.appendCall(operation);1184 JITCompiler::Call call = m_jit.appendCall(operation); 1196 1185 m_jit.moveDouble(FPRInfo::returnValueFPR, result); 1186 return call; 1197 1187 } 1198 1188 … … 1219 1209 1220 1210 // These methods add calls to C++ helper functions. 1221 voidcallOperation(J_DFGOperation_EP operation, GPRReg resultTag, GPRReg resultPayload, void* pointer)1211 JITCompiler::Call callOperation(J_DFGOperation_EP operation, GPRReg resultTag, GPRReg resultPayload, void* pointer) 1222 1212 { 1223 1213 m_jit.push(JITCompiler::TrustedImm32(reinterpret_cast<int>(pointer))); 1224 1214 m_jit.push(GPRInfo::callFrameRegister); 1225 1215 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) 1230 1219 { 1231 1220 m_jit.push(arg1); 1232 1221 m_jit.push(GPRInfo::callFrameRegister); 1233 1222 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) 1246 1234 { 1247 1235 m_jit.push(JITCompiler::TrustedImm32(size)); … … 1249 1237 m_jit.push(GPRInfo::callFrameRegister); 1250 1238 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) 1255 1242 { 1256 1243 m_jit.push(JITCompiler::TrustedImm32(numConstants)); … … 1258 1245 m_jit.push(GPRInfo::callFrameRegister); 1259 1246 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) 1264 1250 { 1265 1251 m_jit.push(JITCompiler::TrustedImm32(reinterpret_cast<int>(pointer))); … … 1268 1254 m_jit.push(GPRInfo::callFrameRegister); 1269 1255 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) 1274 1259 { 1275 1260 m_jit.push(arg2); … … 1278 1263 m_jit.push(GPRInfo::callFrameRegister); 1279 1264 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) 1292 1276 { 1293 1277 m_jit.push(arg1Tag); … … 1295 1279 m_jit.push(GPRInfo::callFrameRegister); 1296 1280 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) 1301 1284 { 1302 1285 m_jit.push(GPRInfo::callFrameRegister); 1303 1286 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) 1308 1290 { 1309 1291 m_jit.push(arg1); 1310 1292 m_jit.push(GPRInfo::callFrameRegister); 1311 1293 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) 1316 1297 { 1317 1298 m_jit.push(arg1Tag); … … 1319 1300 m_jit.push(GPRInfo::callFrameRegister); 1320 1301 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) 1325 1305 { 1326 1306 m_jit.push(arg2Tag); … … 1330 1310 m_jit.push(GPRInfo::callFrameRegister); 1331 1311 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) 1336 1315 { 1337 1316 m_jit.push(arg2Tag); … … 1341 1320 m_jit.push(GPRInfo::callFrameRegister); 1342 1321 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) 1347 1325 { 1348 1326 m_jit.push(arg2Tag); … … 1351 1329 m_jit.push(GPRInfo::callFrameRegister); 1352 1330 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) 1357 1334 { 1358 1335 m_jit.push(JITCompiler::TrustedImm32(reinterpret_cast<int>(pointer))); … … 1363 1340 m_jit.push(GPRInfo::callFrameRegister); 1364 1341 1365 appendCallWithExceptionCheck(operation);1366 } 1367 voidcallOperation(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 voidcallOperation(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) 1372 1349 { 1373 1350 m_jit.push(arg3Tag); … … 1378 1355 m_jit.push(GPRInfo::callFrameRegister); 1379 1356 1380 appendCallWithExceptionCheck(operation);1381 } 1382 1383 voidcallOperation(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) 1384 1361 { 1385 1362 m_jit.subPtr(TrustedImm32(2 * sizeof(double)), JITCompiler::stackPointerRegister); … … 1387 1364 m_jit.storeDouble(arg1, JITCompiler::stackPointerRegister); 1388 1365 1389 m_jit.appendCall(operation);1366 JITCompiler::Call call = m_jit.appendCall(operation); 1390 1367 #if !CALLING_CONVENTION_IS_CDECL 1391 1368 // For D_DFGOperation_DD calls we're currently using the system's default calling convention. … … 1397 1374 m_jit.loadDouble(JITCompiler::stackPointerRegister, result); 1398 1375 m_jit.addPtr(TrustedImm32(2 * sizeof(double)), JITCompiler::stackPointerRegister); 1376 1377 return call; 1399 1378 } 1400 1379 #endif … … 1404 1383 return m_jit.appendCallWithExceptionCheck(function, at(m_compileIndex).codeOrigin); 1405 1384 } 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 1406 1399 1407 1400 void addBranch(const MacroAssembler::Jump& jump, BlockIndex destination) -
trunk/Source/JavaScriptCore/dfg/DFGJITCompiler.h
r96854 r97071 217 217 218 218 // 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)); 222 223 // FIXME: should be able to JIT_ASSERT here that globalData->exception is null on return back to JIT code. 224 return functionCall; 223 225 } 224 226
Note: See TracChangeset
for help on using the changeset viewer.