Index: src/arm/assembler-arm.h |
diff --git a/src/arm/assembler-arm.h b/src/arm/assembler-arm.h |
index c0f0125803c285f1b87e820c537ebb1f4f736342..54f77794e2f87cef2c0decc9a0bf6fc6ad87d97b 100644 |
--- a/src/arm/assembler-arm.h |
+++ b/src/arm/assembler-arm.h |
@@ -697,6 +697,9 @@ extern const Instr kCmpCmnFlip; |
extern const Instr kAddSubFlip; |
extern const Instr kAndBicFlip; |
+extern const Instr kThumbLdrPCMask; |
+extern const Instr kThumbLdrPCPattern; |
+ |
struct VmovIndex { |
unsigned char index; |
}; |
@@ -806,6 +809,7 @@ class Assembler : public AssemblerBase { |
// Difference between address of current opcode and value read from pc |
// register. |
static const int kPcLoadDelta = 8; |
+ static const int kThumbPcLoadDelta = 4; |
static const int kJSReturnSequenceInstructions = 4; |
static const int kDebugBreakSlotInstructions = 3; |
@@ -1578,6 +1582,8 @@ class Assembler : public AssemblerBase { |
static bool IsNop(Instr instr, int type = NON_MARKING_NOP); |
static bool IsMovT(Instr instr); |
static bool IsMovW(Instr instr); |
+ static bool IsMovTThumb(Instr instr); |
+ static bool IsMovWThumb(Instr instr); |
// Constants in pools are accessed via pc relative addressing, which can |
// reach +/-4KB for integer PC-relative loads and +/-1KB for floating-point |
@@ -1595,6 +1601,11 @@ class Assembler : public AssemblerBase { |
// Check if is time to emit a constant pool. |
void CheckConstPool(bool force_emit, bool require_jump); |
+ void set_thumb_mode() { thumb_mode_ = true; } |
+ void set_arm_mode() { thumb_mode_ = false; } |
+ |
+ bool is_thumb_mode() {return thumb_mode_; } |
+ |
protected: |
// Relocation for a type-recording IC has the AST id added to it. This |
// member variable is a way to pass the information from the call site to |
@@ -1605,9 +1616,11 @@ class Assembler : public AssemblerBase { |
// Decode branch instruction at pos and return branch target pos |
int target_at(int pos); |
+ int target_at_thumb(int pos); |
// Patch branch instruction at pos to branch to given branch target pos |
void target_at_put(int pos, int target_pos); |
+ void target_at_put_thumb(int pos, int target_pos); |
// Prevent contant pool emission until EndBlockConstPool is called. |
// Call to this function can be nested but must be followed by an equal |
@@ -1851,6 +1864,8 @@ class Assembler : public AssemblerBase { |
PositionsRecorder positions_recorder_; |
friend class PositionsRecorder; |
friend class EnsureSpace; |
+ |
+ bool thumb_mode_; |
}; |