OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 1274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1285 __ addu(a3, sp, at); | 1285 __ addu(a3, sp, at); |
1286 __ sw(a2, MemOperand(a3, -kPointerSize)); | 1286 __ sw(a2, MemOperand(a3, -kPointerSize)); |
1287 | 1287 |
1288 __ Branch(&shift_arguments); | 1288 __ Branch(&shift_arguments); |
1289 } | 1289 } |
1290 | 1290 |
1291 // 3b. Check for function proxy. | 1291 // 3b. Check for function proxy. |
1292 __ bind(&slow); | 1292 __ bind(&slow); |
1293 __ li(t0, Operand(1, RelocInfo::NONE)); // Indicate function proxy. | 1293 __ li(t0, Operand(1, RelocInfo::NONE)); // Indicate function proxy. |
1294 __ Branch(&shift_arguments, eq, a2, Operand(JS_FUNCTION_PROXY_TYPE)); | 1294 __ Branch(&shift_arguments, eq, a2, Operand(JS_FUNCTION_PROXY_TYPE)); |
1295 | 1295 |
1296 __ bind(&non_function); | 1296 __ bind(&non_function); |
1297 __ li(t0, Operand(2, RelocInfo::NONE)); // Indicate non-function. | 1297 __ li(t0, Operand(2, RelocInfo::NONE)); // Indicate non-function. |
1298 | 1298 |
1299 // 3c. Patch the first argument when calling a non-function. The | 1299 // 3c. Patch the first argument when calling a non-function. The |
1300 // CALL_NON_FUNCTION builtin expects the non-function callee as | 1300 // CALL_NON_FUNCTION builtin expects the non-function callee as |
1301 // receiver, so overwrite the first argument which will ultimately | 1301 // receiver, so overwrite the first argument which will ultimately |
1302 // become the receiver. | 1302 // become the receiver. |
1303 // a0: actual number of arguments | 1303 // a0: actual number of arguments |
1304 // a1: function | 1304 // a1: function |
1305 // t0: call type (0: JS function, 1: function proxy, 2: non-function) | 1305 // t0: call type (0: JS function, 1: function proxy, 2: non-function) |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1507 __ lw(a1, MemOperand(fp, kLimitOffset)); | 1507 __ lw(a1, MemOperand(fp, kLimitOffset)); |
1508 __ Branch(&loop, ne, a0, Operand(a1)); | 1508 __ Branch(&loop, ne, a0, Operand(a1)); |
1509 | 1509 |
1510 // Invoke the function. | 1510 // Invoke the function. |
1511 Label call_proxy; | 1511 Label call_proxy; |
1512 ParameterCount actual(a0); | 1512 ParameterCount actual(a0); |
1513 __ sra(a0, a0, kSmiTagSize); | 1513 __ sra(a0, a0, kSmiTagSize); |
1514 __ lw(a1, MemOperand(fp, kFunctionOffset)); | 1514 __ lw(a1, MemOperand(fp, kFunctionOffset)); |
1515 __ GetObjectType(a1, a2, a2); | 1515 __ GetObjectType(a1, a2, a2); |
1516 __ Branch(&call_proxy, ne, a2, Operand(JS_FUNCTION_TYPE)); | 1516 __ Branch(&call_proxy, ne, a2, Operand(JS_FUNCTION_TYPE)); |
1517 | 1517 |
1518 __ InvokeFunction(a1, actual, CALL_FUNCTION, | 1518 __ InvokeFunction(a1, actual, CALL_FUNCTION, |
1519 NullCallWrapper(), CALL_AS_METHOD); | 1519 NullCallWrapper(), CALL_AS_METHOD); |
1520 | 1520 |
1521 frame_scope.GenerateLeaveFrame(); | 1521 frame_scope.GenerateLeaveFrame(); |
1522 __ Ret(USE_DELAY_SLOT); | 1522 __ Ret(USE_DELAY_SLOT); |
1523 __ Addu(sp, sp, Operand(3 * kPointerSize)); // In delay slot. | 1523 __ Addu(sp, sp, Operand(3 * kPointerSize)); // In delay slot. |
1524 | 1524 |
1525 // Invoke the function proxy. | 1525 // Invoke the function proxy. |
1526 __ bind(&call_proxy); | 1526 __ bind(&call_proxy); |
1527 __ push(a1); // Add function proxy as last argument. | 1527 __ push(a1); // Add function proxy as last argument. |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1677 __ bind(&dont_adapt_arguments); | 1677 __ bind(&dont_adapt_arguments); |
1678 __ Jump(a3); | 1678 __ Jump(a3); |
1679 } | 1679 } |
1680 | 1680 |
1681 | 1681 |
1682 #undef __ | 1682 #undef __ |
1683 | 1683 |
1684 } } // namespace v8::internal | 1684 } } // namespace v8::internal |
1685 | 1685 |
1686 #endif // V8_TARGET_ARCH_MIPS | 1686 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |