| OLD | NEW |
| 1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 920 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 931 | 931 |
| 932 // All extension objects were empty and it is safe to use a global | 932 // All extension objects were empty and it is safe to use a global |
| 933 // load IC call. | 933 // load IC call. |
| 934 __ movq(rax, CodeGenerator::GlobalObject()); | 934 __ movq(rax, CodeGenerator::GlobalObject()); |
| 935 __ Move(rcx, slot->var()->name()); | 935 __ Move(rcx, slot->var()->name()); |
| 936 Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize)); | 936 Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize)); |
| 937 RelocInfo::Mode mode = (typeof_state == INSIDE_TYPEOF) | 937 RelocInfo::Mode mode = (typeof_state == INSIDE_TYPEOF) |
| 938 ? RelocInfo::CODE_TARGET | 938 ? RelocInfo::CODE_TARGET |
| 939 : RelocInfo::CODE_TARGET_CONTEXT; | 939 : RelocInfo::CODE_TARGET_CONTEXT; |
| 940 __ call(ic, mode); | 940 __ call(ic, mode); |
| 941 __ nop(); |
| 941 } | 942 } |
| 942 | 943 |
| 943 | 944 |
| 944 MemOperand FullCodeGenerator::ContextSlotOperandCheckExtensions( | 945 MemOperand FullCodeGenerator::ContextSlotOperandCheckExtensions( |
| 945 Slot* slot, | 946 Slot* slot, |
| 946 Label* slow) { | 947 Label* slow) { |
| 947 ASSERT(slot->type() == Slot::CONTEXT); | 948 ASSERT(slot->type() == Slot::CONTEXT); |
| 948 Register context = rsi; | 949 Register context = rsi; |
| 949 Register temp = rbx; | 950 Register temp = rbx; |
| 950 | 951 |
| (...skipping 2216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3167 void FullCodeGenerator::VisitForTypeofValue(Expression* expr, Location where) { | 3168 void FullCodeGenerator::VisitForTypeofValue(Expression* expr, Location where) { |
| 3168 VariableProxy* proxy = expr->AsVariableProxy(); | 3169 VariableProxy* proxy = expr->AsVariableProxy(); |
| 3169 if (proxy != NULL && !proxy->var()->is_this() && proxy->var()->is_global()) { | 3170 if (proxy != NULL && !proxy->var()->is_this() && proxy->var()->is_global()) { |
| 3170 Comment cmnt(masm_, "Global variable"); | 3171 Comment cmnt(masm_, "Global variable"); |
| 3171 __ Move(rcx, proxy->name()); | 3172 __ Move(rcx, proxy->name()); |
| 3172 __ movq(rax, CodeGenerator::GlobalObject()); | 3173 __ movq(rax, CodeGenerator::GlobalObject()); |
| 3173 Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize)); | 3174 Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize)); |
| 3174 // Use a regular load, not a contextual load, to avoid a reference | 3175 // Use a regular load, not a contextual load, to avoid a reference |
| 3175 // error. | 3176 // error. |
| 3176 __ Call(ic, RelocInfo::CODE_TARGET); | 3177 __ Call(ic, RelocInfo::CODE_TARGET); |
| 3178 __ nop(); |
| 3177 if (where == kStack) __ push(rax); | 3179 if (where == kStack) __ push(rax); |
| 3178 } else if (proxy != NULL && | 3180 } else if (proxy != NULL && |
| 3179 proxy->var()->slot() != NULL && | 3181 proxy->var()->slot() != NULL && |
| 3180 proxy->var()->slot()->type() == Slot::LOOKUP) { | 3182 proxy->var()->slot()->type() == Slot::LOOKUP) { |
| 3181 Label done, slow; | 3183 Label done, slow; |
| 3182 | 3184 |
| 3183 // Generate code for loading from variables potentially shadowed | 3185 // Generate code for loading from variables potentially shadowed |
| 3184 // by eval-introduced variables. | 3186 // by eval-introduced variables. |
| 3185 Slot* slot = proxy->var()->slot(); | 3187 Slot* slot = proxy->var()->slot(); |
| 3186 EmitDynamicLoadFromSlotFastCase(slot, INSIDE_TYPEOF, &slow, &done); | 3188 EmitDynamicLoadFromSlotFastCase(slot, INSIDE_TYPEOF, &slow, &done); |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3467 __ ret(0); | 3469 __ ret(0); |
| 3468 } | 3470 } |
| 3469 | 3471 |
| 3470 | 3472 |
| 3471 #undef __ | 3473 #undef __ |
| 3472 | 3474 |
| 3473 | 3475 |
| 3474 } } // namespace v8::internal | 3476 } } // namespace v8::internal |
| 3475 | 3477 |
| 3476 #endif // V8_TARGET_ARCH_X64 | 3478 #endif // V8_TARGET_ARCH_X64 |
| OLD | NEW |