Index: src/assembler.h |
diff --git a/src/assembler.h b/src/assembler.h |
index d3207040b3e55c986c1ccca4f3dbd240c4bfbfff..8147227f0b812b3c55694821034474ae1d56a97a 100644 |
--- a/src/assembler.h |
+++ b/src/assembler.h |
@@ -44,6 +44,19 @@ namespace internal { |
// ----------------------------------------------------------------------------- |
+// Platform independent assembler base class. |
+ |
+class AssemblerBase: public Malloced { |
+ public: |
+ explicit AssemblerBase(Isolate* isolate) : isolate_(isolate) {} |
+ |
+ Isolate* isolate() const { return isolate_; } |
+ |
+ private: |
+ Isolate* isolate_; |
+}; |
+ |
+// ----------------------------------------------------------------------------- |
// Common double constants. |
class DoubleConstant: public AllStatic { |
@@ -501,25 +514,25 @@ class ExternalReference BASE_EMBEDDED { |
typedef void* ExternalReferenceRedirector(void* original, Type type); |
- explicit ExternalReference(Builtins::CFunctionId id); |
+ ExternalReference(Builtins::CFunctionId id, Isolate* isolate); |
- explicit ExternalReference(ApiFunction* ptr, Type type); |
+ ExternalReference(ApiFunction* ptr, Type type, Isolate* isolate); |
- explicit ExternalReference(Builtins::Name name); |
+ ExternalReference(Builtins::Name name, Isolate* isolate); |
- explicit ExternalReference(Runtime::FunctionId id); |
+ ExternalReference(Runtime::FunctionId id, Isolate* isolate); |
- explicit ExternalReference(const Runtime::Function* f); |
+ ExternalReference(const Runtime::Function* f, Isolate* isolate); |
- explicit ExternalReference(const IC_Utility& ic_utility); |
+ ExternalReference(const IC_Utility& ic_utility, Isolate* isolate); |
#ifdef ENABLE_DEBUGGER_SUPPORT |
- explicit ExternalReference(const Debug_Address& debug_address); |
+ ExternalReference(const Debug_Address& debug_address, Isolate* isolate); |
#endif |
explicit ExternalReference(StatsCounter* counter); |
- explicit ExternalReference(Isolate::AddressId id); |
+ ExternalReference(Isolate::AddressId id, Isolate* isolate); |
explicit ExternalReference(const SCTableReference& table_ref); |
@@ -530,63 +543,67 @@ class ExternalReference BASE_EMBEDDED { |
// pattern. This means that they have to be added to the |
// ExternalReferenceTable in serialize.cc manually. |
- static ExternalReference perform_gc_function(); |
- static ExternalReference fill_heap_number_with_random_function(); |
- static ExternalReference random_uint32_function(); |
- static ExternalReference transcendental_cache_array_address(); |
- static ExternalReference delete_handle_scope_extensions(); |
+ static ExternalReference perform_gc_function(Isolate* isolate); |
+ static ExternalReference fill_heap_number_with_random_function( |
+ Isolate* isolate); |
+ static ExternalReference random_uint32_function(Isolate* isolate); |
+ static ExternalReference transcendental_cache_array_address(Isolate* isolate); |
+ static ExternalReference delete_handle_scope_extensions(Isolate* isolate); |
// Deoptimization support. |
- static ExternalReference new_deoptimizer_function(); |
- static ExternalReference compute_output_frames_function(); |
- static ExternalReference global_contexts_list(); |
+ static ExternalReference new_deoptimizer_function(Isolate* isolate); |
+ static ExternalReference compute_output_frames_function(Isolate* isolate); |
+ static ExternalReference global_contexts_list(Isolate* isolate); |
// Static data in the keyed lookup cache. |
- static ExternalReference keyed_lookup_cache_keys(); |
- static ExternalReference keyed_lookup_cache_field_offsets(); |
+ static ExternalReference keyed_lookup_cache_keys(Isolate* isolate); |
+ static ExternalReference keyed_lookup_cache_field_offsets(Isolate* isolate); |
// Static variable Factory::the_hole_value.location() |
- static ExternalReference the_hole_value_location(); |
+ static ExternalReference the_hole_value_location(Isolate* isolate); |
// Static variable Factory::arguments_marker.location() |
- static ExternalReference arguments_marker_location(); |
+ static ExternalReference arguments_marker_location(Isolate* isolate); |
// Static variable Heap::roots_address() |
- static ExternalReference roots_address(); |
+ static ExternalReference roots_address(Isolate* isolate); |
// Static variable StackGuard::address_of_jslimit() |
- static ExternalReference address_of_stack_limit(); |
+ static ExternalReference address_of_stack_limit(Isolate* isolate); |
// Static variable StackGuard::address_of_real_jslimit() |
- static ExternalReference address_of_real_stack_limit(); |
+ static ExternalReference address_of_real_stack_limit(Isolate* isolate); |
// Static variable RegExpStack::limit_address() |
- static ExternalReference address_of_regexp_stack_limit(); |
+ static ExternalReference address_of_regexp_stack_limit(Isolate* isolate); |
// Static variables for RegExp. |
- static ExternalReference address_of_static_offsets_vector(); |
- static ExternalReference address_of_regexp_stack_memory_address(); |
- static ExternalReference address_of_regexp_stack_memory_size(); |
+ static ExternalReference address_of_static_offsets_vector(Isolate* isolate); |
+ static ExternalReference address_of_regexp_stack_memory_address( |
+ Isolate* isolate); |
+ static ExternalReference address_of_regexp_stack_memory_size( |
+ Isolate* isolate); |
// Static variable Heap::NewSpaceStart() |
- static ExternalReference new_space_start(); |
- static ExternalReference new_space_mask(); |
- static ExternalReference heap_always_allocate_scope_depth(); |
+ static ExternalReference new_space_start(Isolate* isolate); |
+ static ExternalReference new_space_mask(Isolate* isolate); |
+ static ExternalReference heap_always_allocate_scope_depth(Isolate* isolate); |
// Used for fast allocation in generated code. |
- static ExternalReference new_space_allocation_top_address(); |
- static ExternalReference new_space_allocation_limit_address(); |
+ static ExternalReference new_space_allocation_top_address(Isolate* isolate); |
+ static ExternalReference new_space_allocation_limit_address(Isolate* isolate); |
- static ExternalReference double_fp_operation(Token::Value operation); |
- static ExternalReference compare_doubles(); |
- static ExternalReference power_double_double_function(); |
- static ExternalReference power_double_int_function(); |
+ static ExternalReference double_fp_operation(Token::Value operation, |
+ Isolate* isolate); |
+ static ExternalReference compare_doubles(Isolate* isolate); |
+ static ExternalReference power_double_double_function(Isolate* isolate); |
+ static ExternalReference power_double_int_function(Isolate* isolate); |
static ExternalReference handle_scope_next_address(); |
static ExternalReference handle_scope_limit_address(); |
static ExternalReference handle_scope_level_address(); |
- static ExternalReference scheduled_exception_address(); |
+ static ExternalReference scheduled_exception_address(Isolate* isolate); |
// Static variables containing common double constants. |
static ExternalReference address_of_min_int(); |
@@ -595,31 +612,31 @@ class ExternalReference BASE_EMBEDDED { |
static ExternalReference address_of_negative_infinity(); |
static ExternalReference address_of_nan(); |
- static ExternalReference math_sin_double_function(); |
- static ExternalReference math_cos_double_function(); |
- static ExternalReference math_log_double_function(); |
+ static ExternalReference math_sin_double_function(Isolate* isolate); |
+ static ExternalReference math_cos_double_function(Isolate* isolate); |
+ static ExternalReference math_log_double_function(Isolate* isolate); |
Address address() const {return reinterpret_cast<Address>(address_);} |
#ifdef ENABLE_DEBUGGER_SUPPORT |
// Function Debug::Break() |
- static ExternalReference debug_break(); |
+ static ExternalReference debug_break(Isolate* isolate); |
// Used to check if single stepping is enabled in generated code. |
- static ExternalReference debug_step_in_fp_address(); |
+ static ExternalReference debug_step_in_fp_address(Isolate* isolate); |
#endif |
#ifndef V8_INTERPRETED_REGEXP |
// C functions called from RegExp generated code. |
// Function NativeRegExpMacroAssembler::CaseInsensitiveCompareUC16() |
- static ExternalReference re_case_insensitive_compare_uc16(); |
+ static ExternalReference re_case_insensitive_compare_uc16(Isolate* isolate); |
// Function RegExpMacroAssembler*::CheckStackGuardState() |
- static ExternalReference re_check_stack_guard_state(); |
+ static ExternalReference re_check_stack_guard_state(Isolate* isolate); |
// Function NativeRegExpMacroAssembler::GrowStack() |
- static ExternalReference re_grow_stack(); |
+ static ExternalReference re_grow_stack(Isolate* isolate); |
// byte NativeRegExpMacroAssembler::word_character_bitmap |
static ExternalReference re_word_character_map(); |
@@ -639,21 +656,23 @@ class ExternalReference BASE_EMBEDDED { |
explicit ExternalReference(void* address) |
: address_(address) {} |
- static void* Redirect(void* address, |
+ static void* Redirect(Isolate* isolate, |
+ void* address, |
Type type = ExternalReference::BUILTIN_CALL) { |
ExternalReferenceRedirector* redirector = |
reinterpret_cast<ExternalReferenceRedirector*>( |
- Isolate::Current()->external_reference_redirector()); |
+ isolate->external_reference_redirector()); |
if (redirector == NULL) return address; |
void* answer = (*redirector)(address, type); |
return answer; |
} |
- static void* Redirect(Address address_arg, |
+ static void* Redirect(Isolate* isolate, |
+ Address address_arg, |
Type type = ExternalReference::BUILTIN_CALL) { |
ExternalReferenceRedirector* redirector = |
reinterpret_cast<ExternalReferenceRedirector*>( |
- Isolate::Current()->external_reference_redirector()); |
+ isolate->external_reference_redirector()); |
void* address = reinterpret_cast<void*>(address_arg); |
void* answer = (redirector == NULL) ? |
address : |