Index: src/x64/macro-assembler-x64.cc |
=================================================================== |
--- src/x64/macro-assembler-x64.cc (revision 5974) |
+++ src/x64/macro-assembler-x64.cc (working copy) |
@@ -2250,6 +2250,31 @@ |
} |
+void MacroAssembler::LoadGlobalFunction(int index, Register function) { |
+ // Load the global or builtins object from the current context. |
+ movq(function, Operand(rsi, Context::SlotOffset(Context::GLOBAL_INDEX))); |
+ // Load the global context from the global or builtins object. |
+ movq(function, FieldOperand(function, GlobalObject::kGlobalContextOffset)); |
+ // Load the function from the global context. |
+ movq(function, Operand(function, Context::SlotOffset(index))); |
+} |
+ |
+ |
+void MacroAssembler::LoadGlobalFunctionInitialMap(Register function, |
+ Register map) { |
+ // Load the initial map. The global functions all have initial maps. |
+ movq(map, FieldOperand(function, JSFunction::kPrototypeOrInitialMapOffset)); |
+ if (FLAG_debug_code) { |
+ Label ok, fail; |
+ CheckMap(map, Factory::meta_map(), &fail, false); |
+ jmp(&ok); |
+ bind(&fail); |
+ Abort("Global functions must have initial map"); |
+ bind(&ok); |
+ } |
+} |
+ |
+ |
int MacroAssembler::ArgumentStackSlotsForCFunctionCall(int num_arguments) { |
// On Windows 64 stack slots are reserved by the caller for all arguments |
// including the ones passed in registers, and space is always allocated for |