OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 1719 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1730 Handle<String> name, | 1730 Handle<String> name, |
1731 Code::StubType type) { | 1731 Code::StubType type) { |
1732 // ----------- S t a t e ------------- | 1732 // ----------- S t a t e ------------- |
1733 // -- ecx : name | 1733 // -- ecx : name |
1734 // -- esp[0] : return address | 1734 // -- esp[0] : return address |
1735 // -- esp[(argc - n) * 4] : arg[n] (zero-based) | 1735 // -- esp[(argc - n) * 4] : arg[n] (zero-based) |
1736 // -- ... | 1736 // -- ... |
1737 // -- esp[(argc + 1) * 4] : receiver | 1737 // -- esp[(argc + 1) * 4] : receiver |
1738 // ----------------------------------- | 1738 // ----------------------------------- |
1739 | 1739 |
1740 // If object is not an array, bail out to regular call. | 1740 // If object is not an array or is observed, bail out to regular call. |
1741 if (!object->IsJSArray() || !cell.is_null()) { | 1741 if (!object->IsJSArray() || |
| 1742 !cell.is_null() || |
| 1743 Handle<JSArray>::cast(object)->map()->is_observed()) { |
1742 return Handle<Code>::null(); | 1744 return Handle<Code>::null(); |
1743 } | 1745 } |
1744 | 1746 |
1745 Label miss; | 1747 Label miss; |
1746 | 1748 |
1747 GenerateNameCheck(name, &miss); | 1749 GenerateNameCheck(name, &miss); |
1748 | 1750 |
1749 // Get the receiver from the stack. | 1751 // Get the receiver from the stack. |
1750 const int argc = arguments().immediate(); | 1752 const int argc = arguments().immediate(); |
1751 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); | 1753 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1989 Handle<String> name, | 1991 Handle<String> name, |
1990 Code::StubType type) { | 1992 Code::StubType type) { |
1991 // ----------- S t a t e ------------- | 1993 // ----------- S t a t e ------------- |
1992 // -- ecx : name | 1994 // -- ecx : name |
1993 // -- esp[0] : return address | 1995 // -- esp[0] : return address |
1994 // -- esp[(argc - n) * 4] : arg[n] (zero-based) | 1996 // -- esp[(argc - n) * 4] : arg[n] (zero-based) |
1995 // -- ... | 1997 // -- ... |
1996 // -- esp[(argc + 1) * 4] : receiver | 1998 // -- esp[(argc + 1) * 4] : receiver |
1997 // ----------------------------------- | 1999 // ----------------------------------- |
1998 | 2000 |
1999 // If object is not an array, bail out to regular call. | 2001 // If object is not an array or is observed, bail out to regular call. |
2000 if (!object->IsJSArray() || !cell.is_null()) { | 2002 if (!object->IsJSArray() || |
| 2003 !cell.is_null() || |
| 2004 Handle<JSArray>::cast(object)->map()->is_observed()) { |
2001 return Handle<Code>::null(); | 2005 return Handle<Code>::null(); |
2002 } | 2006 } |
2003 | 2007 |
2004 Label miss, return_undefined, call_builtin; | 2008 Label miss, return_undefined, call_builtin; |
2005 | 2009 |
2006 GenerateNameCheck(name, &miss); | 2010 GenerateNameCheck(name, &miss); |
2007 | 2011 |
2008 // Get the receiver from the stack. | 2012 // Get the receiver from the stack. |
2009 const int argc = arguments().immediate(); | 2013 const int argc = arguments().immediate(); |
2010 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); | 2014 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); |
(...skipping 1228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3239 // ----------------------------------- | 3243 // ----------------------------------- |
3240 TailCallBuiltin(masm, Builtins::kKeyedLoadIC_MissForceGeneric); | 3244 TailCallBuiltin(masm, Builtins::kKeyedLoadIC_MissForceGeneric); |
3241 } | 3245 } |
3242 | 3246 |
3243 | 3247 |
3244 #undef __ | 3248 #undef __ |
3245 | 3249 |
3246 } } // namespace v8::internal | 3250 } } // namespace v8::internal |
3247 | 3251 |
3248 #endif // V8_TARGET_ARCH_IA32 | 3252 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |