Merge V8 5.3.332.45. DO NOT MERGE
Test: Manual
FPIIM-449
Change-Id: Id3254828b068abdea3cb10442e0172a8c9a98e03
(cherry picked from commit 13e2dadd00298019ed862f2b2fc5068bba730bcf)
diff --git a/src/assembler.h b/src/assembler.h
index 353abdb..0c2b7e8 100644
--- a/src/assembler.h
+++ b/src/assembler.h
@@ -39,6 +39,7 @@
#include "src/builtins.h"
#include "src/isolate.h"
#include "src/log.h"
+#include "src/register-configuration.h"
#include "src/runtime/runtime.h"
namespace v8 {
@@ -386,6 +387,7 @@
EMBEDDED_OBJECT,
// To relocate pointers into the wasm memory embedded in wasm code
WASM_MEMORY_REFERENCE,
+ WASM_GLOBAL_REFERENCE,
WASM_MEMORY_SIZE_REFERENCE,
CELL,
@@ -448,8 +450,7 @@
}
static inline bool IsRealRelocMode(Mode mode) {
- return mode >= FIRST_REAL_RELOC_MODE &&
- mode <= LAST_REAL_RELOC_MODE;
+ return mode >= FIRST_REAL_RELOC_MODE && mode <= LAST_REAL_RELOC_MODE;
}
static inline bool IsCodeTarget(Mode mode) {
return mode <= LAST_CODE_ENUM;
@@ -529,6 +530,9 @@
static inline bool IsWasmMemorySizeReference(Mode mode) {
return mode == WASM_MEMORY_SIZE_REFERENCE;
}
+ static inline bool IsWasmGlobalReference(Mode mode) {
+ return mode == WASM_GLOBAL_REFERENCE;
+ }
static inline int ModeMask(Mode mode) { return 1 << mode; }
// Accessors
@@ -556,44 +560,42 @@
bool IsInConstantPool();
Address wasm_memory_reference();
+ Address wasm_global_reference();
uint32_t wasm_memory_size_reference();
void update_wasm_memory_reference(
Address old_base, Address new_base, uint32_t old_size, uint32_t new_size,
ICacheFlushMode icache_flush_mode = SKIP_ICACHE_FLUSH);
+ void update_wasm_global_reference(
+ Address old_base, Address new_base,
+ ICacheFlushMode icache_flush_mode = SKIP_ICACHE_FLUSH);
// this relocation applies to;
// can only be called if IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_)
INLINE(Address target_address());
- INLINE(void set_target_address(Address target,
- WriteBarrierMode write_barrier_mode =
- UPDATE_WRITE_BARRIER,
- ICacheFlushMode icache_flush_mode =
- FLUSH_ICACHE_IF_NEEDED));
+ INLINE(void set_target_address(
+ Address target,
+ WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER,
+ ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED));
INLINE(Object* target_object());
INLINE(Handle<Object> target_object_handle(Assembler* origin));
- INLINE(void set_target_object(Object* target,
- WriteBarrierMode write_barrier_mode =
- UPDATE_WRITE_BARRIER,
- ICacheFlushMode icache_flush_mode =
- FLUSH_ICACHE_IF_NEEDED));
+ INLINE(void set_target_object(
+ Object* target,
+ WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER,
+ ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED));
INLINE(Address target_runtime_entry(Assembler* origin));
- INLINE(void set_target_runtime_entry(Address target,
- WriteBarrierMode write_barrier_mode =
- UPDATE_WRITE_BARRIER,
- ICacheFlushMode icache_flush_mode =
- FLUSH_ICACHE_IF_NEEDED));
+ INLINE(void set_target_runtime_entry(
+ Address target,
+ WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER,
+ ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED));
INLINE(Cell* target_cell());
INLINE(Handle<Cell> target_cell_handle());
- INLINE(void set_target_cell(Cell* cell,
- WriteBarrierMode write_barrier_mode =
- UPDATE_WRITE_BARRIER,
- ICacheFlushMode icache_flush_mode =
- FLUSH_ICACHE_IF_NEEDED));
+ INLINE(void set_target_cell(
+ Cell* cell, WriteBarrierMode write_barrier_mode = UPDATE_WRITE_BARRIER,
+ ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED));
INLINE(Handle<Object> code_age_stub_handle(Assembler* origin));
INLINE(Code* code_age_stub());
- INLINE(void set_code_age_stub(Code* stub,
- ICacheFlushMode icache_flush_mode =
- FLUSH_ICACHE_IF_NEEDED));
+ INLINE(void set_code_age_stub(
+ Code* stub, ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED));
// Returns the address of the constant pool entry where the target address
// is held. This should only be called if IsInConstantPool returns true.
@@ -674,6 +676,11 @@
static const int kApplyMask; // Modes affected by apply. Depends on arch.
private:
+ void unchecked_update_wasm_memory_reference(Address address,
+ ICacheFlushMode flush_mode);
+ void unchecked_update_wasm_memory_size(uint32_t size,
+ ICacheFlushMode flush_mode);
+
Isolate* isolate_;
// On ARM, note that pc_ is the address of the constant pool entry
// to be relocated and not the address of the instruction
@@ -889,8 +896,6 @@
};
static void SetUp();
- static void InitializeMathExpData();
- static void TearDownMathExpData();
typedef void* ExternalReferenceRedirector(Isolate* isolate, void* original,
Type type);
@@ -968,13 +973,6 @@
static ExternalReference f64_acos_wrapper_function(Isolate* isolate);
static ExternalReference f64_asin_wrapper_function(Isolate* isolate);
- static ExternalReference f64_atan_wrapper_function(Isolate* isolate);
- static ExternalReference f64_cos_wrapper_function(Isolate* isolate);
- static ExternalReference f64_sin_wrapper_function(Isolate* isolate);
- static ExternalReference f64_tan_wrapper_function(Isolate* isolate);
- static ExternalReference f64_exp_wrapper_function(Isolate* isolate);
- static ExternalReference f64_log_wrapper_function(Isolate* isolate);
- static ExternalReference f64_atan2_wrapper_function(Isolate* isolate);
static ExternalReference f64_pow_wrapper_function(Isolate* isolate);
static ExternalReference f64_mod_wrapper_function(Isolate* isolate);
@@ -1036,10 +1034,20 @@
static ExternalReference address_of_the_hole_nan();
static ExternalReference address_of_uint32_bias();
- static ExternalReference math_log_double_function(Isolate* isolate);
-
- static ExternalReference math_exp_constants(int constant_index);
- static ExternalReference math_exp_log_table();
+ // IEEE 754 functions.
+ static ExternalReference ieee754_atan_function(Isolate* isolate);
+ static ExternalReference ieee754_atan2_function(Isolate* isolate);
+ static ExternalReference ieee754_atanh_function(Isolate* isolate);
+ static ExternalReference ieee754_cbrt_function(Isolate* isolate);
+ static ExternalReference ieee754_cos_function(Isolate* isolate);
+ static ExternalReference ieee754_exp_function(Isolate* isolate);
+ static ExternalReference ieee754_expm1_function(Isolate* isolate);
+ static ExternalReference ieee754_log_function(Isolate* isolate);
+ static ExternalReference ieee754_log1p_function(Isolate* isolate);
+ static ExternalReference ieee754_log10_function(Isolate* isolate);
+ static ExternalReference ieee754_log2_function(Isolate* isolate);
+ static ExternalReference ieee754_sin_function(Isolate* isolate);
+ static ExternalReference ieee754_tan_function(Isolate* isolate);
static ExternalReference page_flags(Page* page);
@@ -1064,8 +1072,11 @@
Address address() const { return reinterpret_cast<Address>(address_); }
- // Used to check if single stepping is enabled in generated code.
- static ExternalReference debug_step_in_enabled_address(Isolate* isolate);
+ // Used to read out the last step action of the debugger.
+ static ExternalReference debug_last_step_action_address(Isolate* isolate);
+
+ // Used to check for suspended generator, used for stepping across await call.
+ static ExternalReference debug_suspended_generator_address(Isolate* isolate);
#ifndef V8_INTERPRETED_REGEXP
// C functions called from RegExp generated code.
@@ -1128,23 +1139,14 @@
// -----------------------------------------------------------------------------
// Position recording support
-struct PositionState {
- PositionState() : current_position(RelocInfo::kNoPosition),
- written_position(RelocInfo::kNoPosition),
- current_statement_position(RelocInfo::kNoPosition),
- written_statement_position(RelocInfo::kNoPosition) {}
-
- int current_position;
- int written_position;
-
- int current_statement_position;
- int written_statement_position;
-};
-
class AssemblerPositionsRecorder : public PositionsRecorder {
public:
explicit AssemblerPositionsRecorder(Assembler* assembler)
- : assembler_(assembler) {}
+ : assembler_(assembler),
+ current_position_(RelocInfo::kNoPosition),
+ written_position_(RelocInfo::kNoPosition),
+ current_statement_position_(RelocInfo::kNoPosition),
+ written_statement_position_(RelocInfo::kNoPosition) {}
// Set current position to pos.
void RecordPosition(int pos);
@@ -1152,18 +1154,17 @@
// Set current statement position to pos.
void RecordStatementPosition(int pos);
- // Write recorded positions to relocation information.
- bool WriteRecordedPositions();
-
- int current_position() const { return state_.current_position; }
-
- int current_statement_position() const {
- return state_.current_statement_position;
- }
-
private:
+ // Write recorded positions to relocation information.
+ void WriteRecordedPositions();
+
Assembler* assembler_;
- PositionState state_;
+
+ int current_position_;
+ int written_position_;
+
+ int current_statement_position_;
+ int written_statement_position_;
DISALLOW_COPY_AND_ASSIGN(AssemblerPositionsRecorder);
};