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 |