| Index: src/ia32/assembler-ia32.h
|
| diff --git a/src/ia32/assembler-ia32.h b/src/ia32/assembler-ia32.h
|
| index a5d289d97084bad51e3afebfe187bf31b0496ca4..71d894d8708730dfd353ae09195fa2ba49934838 100644
|
| --- a/src/ia32/assembler-ia32.h
|
| +++ b/src/ia32/assembler-ia32.h
|
| @@ -37,6 +37,8 @@
|
| #ifndef V8_IA32_ASSEMBLER_IA32_H_
|
| #define V8_IA32_ASSEMBLER_IA32_H_
|
|
|
| +#include <deque>
|
| +
|
| #include "src/isolate.h"
|
| #include "src/serialize.h"
|
|
|
| @@ -357,6 +359,11 @@ class Operand BASE_EMBEDDED {
|
| int32_t disp,
|
| RelocInfo::Mode rmode = RelocInfo::NONE32);
|
|
|
| + static Operand JumpTable(Register index, ScaleFactor scale, Label* table) {
|
| + return Operand(index, scale, reinterpret_cast<int32_t>(table),
|
| + RelocInfo::INTERNAL_REFERENCE);
|
| + }
|
| +
|
| static Operand StaticVariable(const ExternalReference& ext) {
|
| return Operand(reinterpret_cast<int32_t>(ext.address()),
|
| RelocInfo::EXTERNAL_REFERENCE);
|
| @@ -430,11 +437,7 @@ class Operand BASE_EMBEDDED {
|
|
|
| class Displacement BASE_EMBEDDED {
|
| public:
|
| - enum Type {
|
| - UNCONDITIONAL_JUMP,
|
| - CODE_RELATIVE,
|
| - OTHER
|
| - };
|
| + enum Type { UNCONDITIONAL_JUMP, CODE_RELATIVE, OTHER, CODE_ABSOLUTE };
|
|
|
| int data() const { return data_; }
|
| Type type() const { return TypeField::decode(data_); }
|
| @@ -804,6 +807,7 @@ class Assembler : public AssemblerBase {
|
| void int3();
|
| void nop();
|
| void ret(int imm16);
|
| + void ud2();
|
|
|
| // Label operations & relative jumps (PPUM Appendix D)
|
| //
|
| @@ -1268,6 +1272,7 @@ class Assembler : public AssemblerBase {
|
| // inline tables, e.g., jump-tables.
|
| void db(uint8_t data);
|
| void dd(uint32_t data);
|
| + void dd(Label* label);
|
|
|
| // Check if there is less than kGap bytes available in the buffer.
|
| // If this is the case, we need to grow the buffer before emitting
|
| @@ -1343,6 +1348,8 @@ class Assembler : public AssemblerBase {
|
|
|
| void emit_operand(Register reg, const Operand& adr);
|
|
|
| + void emit_label(Label* label);
|
| +
|
| void emit_farith(int b1, int b2, int i);
|
|
|
| // Emit vex prefix
|
| @@ -1369,6 +1376,11 @@ class Assembler : public AssemblerBase {
|
| friend class CodePatcher;
|
| friend class EnsureSpace;
|
|
|
| + // Internal reference positions, required for (potential) patching in
|
| + // GrowBuffer(); contains only those internal references whose labels
|
| + // are already bound.
|
| + std::deque<int> internal_reference_positions_;
|
| +
|
| // code generation
|
| RelocInfoWriter reloc_info_writer;
|
|
|
|
|