Index: runtime/vm/assembler_arm.h |
diff --git a/runtime/vm/assembler_arm.h b/runtime/vm/assembler_arm.h |
index 9a08c8e6fe50243a428a2aac9978a885a16782aa..49e621bf4ed4f2112c243babf29935b1e7873227 100644 |
--- a/runtime/vm/assembler_arm.h |
+++ b/runtime/vm/assembler_arm.h |
@@ -717,6 +717,7 @@ class Assembler : public ValueObject { |
void Lsr(Register rd, Register rm, Register rs, Condition cond = AL); |
void Asr(Register rd, Register rm, uint32_t shift_imm, Condition cond = AL); |
void Asr(Register rd, Register rm, Register rs, Condition cond = AL); |
+ void AsrS(Register rd, Register rm, uint32_t shift_imm, Condition cond = AL); |
void Ror(Register rd, Register rm, uint32_t shift_imm, Condition cond = AL); |
void Ror(Register rd, Register rm, Register rs, Condition cond = AL); |
void Rrx(Register rd, Register rm, Condition cond = AL); |
@@ -734,6 +735,10 @@ class Assembler : public ValueObject { |
Lsl(reg, reg, kSmiTagSize, cond); |
} |
+ void SmiTag(Register dst, Register src, Condition cond = AL) { |
+ Lsl(dst, src, kSmiTagSize, cond); |
+ } |
+ |
void SmiUntag(Register reg, Condition cond = AL) { |
Asr(reg, reg, kSmiTagSize, cond); |
} |
@@ -742,6 +747,12 @@ class Assembler : public ValueObject { |
Asr(dst, src, kSmiTagSize, cond); |
} |
+ void SmiUntag(Register dst, Register src, Label* ok) { |
+ ASSERT(kSmiTagSize == 1); |
+ AsrS(dst, src, kSmiTagSize); |
+ b(ok, CC); |
+ } |
+ |
// Function frame setup and tear down. |
void EnterFrame(RegList regs, intptr_t frame_space); |
void LeaveFrame(RegList regs); |