OLD | NEW |
1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 __ jmp(&index_int); | 407 __ jmp(&index_int); |
408 } | 408 } |
409 | 409 |
410 | 410 |
411 void KeyedLoadIC::GenerateString(MacroAssembler* masm) { | 411 void KeyedLoadIC::GenerateString(MacroAssembler* masm) { |
412 // ----------- S t a t e ------------- | 412 // ----------- S t a t e ------------- |
413 // -- rsp[0] : return address | 413 // -- rsp[0] : return address |
414 // -- rsp[8] : name | 414 // -- rsp[8] : name |
415 // -- rsp[16] : receiver | 415 // -- rsp[16] : receiver |
416 // ----------------------------------- | 416 // ----------------------------------- |
| 417 |
417 GenerateGeneric(masm); | 418 GenerateGeneric(masm); |
418 } | 419 } |
419 | 420 |
420 | 421 |
421 void KeyedLoadIC::GenerateExternalArray(MacroAssembler* masm, | 422 void KeyedLoadIC::GenerateExternalArray(MacroAssembler* masm, |
422 ExternalArrayType array_type) { | 423 ExternalArrayType array_type) { |
423 // ----------- S t a t e ------------- | 424 // ----------- S t a t e ------------- |
424 // -- rsp[0] : return address | 425 // -- rsp[0] : return address |
425 // -- rsp[8] : name | 426 // -- rsp[8] : name |
426 // -- rsp[16] : receiver | 427 // -- rsp[16] : receiver |
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1073 void CallIC::GenerateNormal(MacroAssembler* masm, int argc) { | 1074 void CallIC::GenerateNormal(MacroAssembler* masm, int argc) { |
1074 // ----------- S t a t e ------------- | 1075 // ----------- S t a t e ------------- |
1075 // rsp[0] return address | 1076 // rsp[0] return address |
1076 // rsp[8] argument argc | 1077 // rsp[8] argument argc |
1077 // rsp[16] argument argc - 1 | 1078 // rsp[16] argument argc - 1 |
1078 // ... | 1079 // ... |
1079 // rsp[argc * 8] argument 1 | 1080 // rsp[argc * 8] argument 1 |
1080 // rsp[(argc + 1) * 8] argument 0 = receiver | 1081 // rsp[(argc + 1) * 8] argument 0 = receiver |
1081 // rsp[(argc + 2) * 8] function name | 1082 // rsp[(argc + 2) * 8] function name |
1082 // ----------------------------------- | 1083 // ----------------------------------- |
1083 | |
1084 Label miss, global_object, non_global_object; | 1084 Label miss, global_object, non_global_object; |
1085 | 1085 |
1086 // Get the receiver of the function from the stack. | 1086 // Get the receiver of the function from the stack. |
1087 __ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize)); | 1087 __ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize)); |
1088 // Get the name of the function from the stack. | 1088 // Get the name of the function from the stack. |
1089 __ movq(rcx, Operand(rsp, (argc + 2) * kPointerSize)); | 1089 __ movq(rcx, Operand(rsp, (argc + 2) * kPointerSize)); |
1090 | 1090 |
1091 // Check that the receiver isn't a smi. | 1091 // Check that the receiver isn't a smi. |
1092 __ JumpIfSmi(rdx, &miss); | 1092 __ JumpIfSmi(rdx, &miss); |
1093 | 1093 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1171 __ TailCallRuntime(f, 2, 1); | 1171 __ TailCallRuntime(f, 2, 1); |
1172 } | 1172 } |
1173 | 1173 |
1174 | 1174 |
1175 void LoadIC::GenerateArrayLength(MacroAssembler* masm) { | 1175 void LoadIC::GenerateArrayLength(MacroAssembler* masm) { |
1176 // ----------- S t a t e ------------- | 1176 // ----------- S t a t e ------------- |
1177 // -- rcx : name | 1177 // -- rcx : name |
1178 // -- rsp[0] : return address | 1178 // -- rsp[0] : return address |
1179 // -- rsp[8] : receiver | 1179 // -- rsp[8] : receiver |
1180 // ----------------------------------- | 1180 // ----------------------------------- |
1181 | |
1182 Label miss; | 1181 Label miss; |
1183 | 1182 |
1184 __ movq(rax, Operand(rsp, kPointerSize)); | 1183 __ movq(rax, Operand(rsp, kPointerSize)); |
1185 | 1184 |
1186 StubCompiler::GenerateLoadArrayLength(masm, rax, rdx, &miss); | 1185 StubCompiler::GenerateLoadArrayLength(masm, rax, rdx, &miss); |
1187 __ bind(&miss); | 1186 __ bind(&miss); |
1188 StubCompiler::GenerateLoadMiss(masm, Code::LOAD_IC); | 1187 StubCompiler::GenerateLoadMiss(masm, Code::LOAD_IC); |
1189 } | 1188 } |
1190 | 1189 |
1191 | 1190 |
1192 void LoadIC::GenerateFunctionPrototype(MacroAssembler* masm) { | 1191 void LoadIC::GenerateFunctionPrototype(MacroAssembler* masm) { |
1193 // ----------- S t a t e ------------- | 1192 // ----------- S t a t e ------------- |
1194 // -- rcx : name | 1193 // -- rcx : name |
1195 // -- rsp[0] : return address | 1194 // -- rsp[0] : return address |
1196 // -- rsp[8] : receiver | 1195 // -- rsp[8] : receiver |
1197 // ----------------------------------- | 1196 // ----------------------------------- |
1198 | |
1199 Label miss; | 1197 Label miss; |
1200 | 1198 |
1201 __ movq(rax, Operand(rsp, kPointerSize)); | 1199 __ movq(rax, Operand(rsp, kPointerSize)); |
1202 | 1200 |
1203 StubCompiler::GenerateLoadFunctionPrototype(masm, rax, rdx, rbx, &miss); | 1201 StubCompiler::GenerateLoadFunctionPrototype(masm, rax, rdx, rbx, &miss); |
1204 __ bind(&miss); | 1202 __ bind(&miss); |
1205 StubCompiler::GenerateLoadMiss(masm, Code::LOAD_IC); | 1203 StubCompiler::GenerateLoadMiss(masm, Code::LOAD_IC); |
1206 } | 1204 } |
1207 | 1205 |
1208 | 1206 |
(...skipping 27 matching lines...) Expand all Loading... |
1236 Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss))); | 1234 Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss))); |
1237 } | 1235 } |
1238 | 1236 |
1239 | 1237 |
1240 void LoadIC::GenerateNormal(MacroAssembler* masm) { | 1238 void LoadIC::GenerateNormal(MacroAssembler* masm) { |
1241 // ----------- S t a t e ------------- | 1239 // ----------- S t a t e ------------- |
1242 // -- rcx : name | 1240 // -- rcx : name |
1243 // -- rsp[0] : return address | 1241 // -- rsp[0] : return address |
1244 // -- rsp[8] : receiver | 1242 // -- rsp[8] : receiver |
1245 // ----------------------------------- | 1243 // ----------------------------------- |
1246 | |
1247 Label miss, probe, global; | 1244 Label miss, probe, global; |
1248 | 1245 |
1249 __ movq(rax, Operand(rsp, kPointerSize)); | 1246 __ movq(rax, Operand(rsp, kPointerSize)); |
1250 | 1247 |
1251 // Check that the receiver isn't a smi. | 1248 // Check that the receiver isn't a smi. |
1252 __ JumpIfSmi(rax, &miss); | 1249 __ JumpIfSmi(rax, &miss); |
1253 | 1250 |
1254 // Check that the receiver is a valid JS object. | 1251 // Check that the receiver is a valid JS object. |
1255 __ CmpObjectType(rax, FIRST_JS_OBJECT_TYPE, rbx); | 1252 __ CmpObjectType(rax, FIRST_JS_OBJECT_TYPE, rbx); |
1256 __ j(below, &miss); | 1253 __ j(below, &miss); |
(...skipping 27 matching lines...) Expand all Loading... |
1284 Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss))); | 1281 Generate(masm, ExternalReference(IC_Utility(kLoadIC_Miss))); |
1285 } | 1282 } |
1286 | 1283 |
1287 | 1284 |
1288 void LoadIC::GenerateStringLength(MacroAssembler* masm) { | 1285 void LoadIC::GenerateStringLength(MacroAssembler* masm) { |
1289 // ----------- S t a t e ------------- | 1286 // ----------- S t a t e ------------- |
1290 // -- rcx : name | 1287 // -- rcx : name |
1291 // -- rsp[0] : return address | 1288 // -- rsp[0] : return address |
1292 // -- rsp[8] : receiver | 1289 // -- rsp[8] : receiver |
1293 // ----------------------------------- | 1290 // ----------------------------------- |
1294 | |
1295 Label miss; | 1291 Label miss; |
1296 | 1292 |
1297 __ movq(rax, Operand(rsp, kPointerSize)); | 1293 __ movq(rax, Operand(rsp, kPointerSize)); |
1298 | 1294 |
1299 StubCompiler::GenerateLoadStringLength(masm, rax, rdx, &miss); | 1295 StubCompiler::GenerateLoadStringLength(masm, rax, rdx, &miss); |
1300 __ bind(&miss); | 1296 __ bind(&miss); |
1301 StubCompiler::GenerateLoadMiss(masm, Code::LOAD_IC); | 1297 StubCompiler::GenerateLoadMiss(masm, Code::LOAD_IC); |
1302 } | 1298 } |
1303 | 1299 |
1304 | 1300 |
(...skipping 25 matching lines...) Expand all Loading... |
1330 return true; | 1326 return true; |
1331 } | 1327 } |
1332 | 1328 |
1333 void StoreIC::Generate(MacroAssembler* masm, ExternalReference const& f) { | 1329 void StoreIC::Generate(MacroAssembler* masm, ExternalReference const& f) { |
1334 // ----------- S t a t e ------------- | 1330 // ----------- S t a t e ------------- |
1335 // -- rax : value | 1331 // -- rax : value |
1336 // -- rcx : name | 1332 // -- rcx : name |
1337 // -- rsp[0] : return address | 1333 // -- rsp[0] : return address |
1338 // -- rsp[8] : receiver | 1334 // -- rsp[8] : receiver |
1339 // ----------------------------------- | 1335 // ----------------------------------- |
| 1336 |
1340 __ pop(rbx); | 1337 __ pop(rbx); |
1341 __ push(Operand(rsp, 0)); // receiver | 1338 __ push(Operand(rsp, 0)); // receiver |
1342 __ push(rcx); // name | 1339 __ push(rcx); // name |
1343 __ push(rax); // value | 1340 __ push(rax); // value |
1344 __ push(rbx); // return address | 1341 __ push(rbx); // return address |
1345 | 1342 |
1346 // Perform tail call to the entry. | 1343 // Perform tail call to the entry. |
1347 __ TailCallRuntime(f, 3, 1); | 1344 __ TailCallRuntime(f, 3, 1); |
1348 } | 1345 } |
1349 | 1346 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1383 | 1380 |
1384 // Cache miss: Jump to runtime. | 1381 // Cache miss: Jump to runtime. |
1385 Generate(masm, ExternalReference(IC_Utility(kStoreIC_Miss))); | 1382 Generate(masm, ExternalReference(IC_Utility(kStoreIC_Miss))); |
1386 } | 1383 } |
1387 | 1384 |
1388 | 1385 |
1389 #undef __ | 1386 #undef __ |
1390 | 1387 |
1391 | 1388 |
1392 } } // namespace v8::internal | 1389 } } // namespace v8::internal |
OLD | NEW |