| Index: src/arm/macro-assembler-arm.cc
|
| diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc
|
| index 190e8682f711c4c9c8046b85897d485ee5d4f200..72f5cd718ba7aebb3c85d0fff037fe1f868ff10c 100644
|
| --- a/src/arm/macro-assembler-arm.cc
|
| +++ b/src/arm/macro-assembler-arm.cc
|
| @@ -52,6 +52,60 @@ MacroAssembler::MacroAssembler(Isolate* arg_isolate, void* buffer, int size)
|
| }
|
|
|
|
|
| +void MacroAssembler::AddMemOperand(Register dst,
|
| + Register src1,
|
| + const MemOperand& src2,
|
| + SBit s) {
|
| + ldr(ip, src2);
|
| + add(dst, src1, Operand(ip), s);
|
| +}
|
| +
|
| +
|
| +void MacroAssembler::SubMemOperand(Register dst,
|
| + Register src1,
|
| + const MemOperand& src2,
|
| + SBit s) {
|
| + ldr(ip, src2);
|
| + sub(dst, src1, Operand(ip), s);
|
| +}
|
| +
|
| +
|
| +void MacroAssembler::RsbMemOperand(Register dst,
|
| + Register src1,
|
| + const MemOperand& src2,
|
| + SBit s) {
|
| + ldr(ip, src2);
|
| + rsb(dst, src1, Operand(ip), s);
|
| +}
|
| +
|
| +
|
| +void MacroAssembler::AndMemOperand(Register dst,
|
| + Register src1,
|
| + const MemOperand& src2,
|
| + SBit s) {
|
| + ldr(ip, src2);
|
| + and_(dst, src1, Operand(ip), s);
|
| +}
|
| +
|
| +
|
| +void MacroAssembler::OrrMemOperand(Register dst,
|
| + Register src1,
|
| + const MemOperand& src2,
|
| + SBit s) {
|
| + ldr(ip, src2);
|
| + orr(dst, src1, Operand(ip), s);
|
| +}
|
| +
|
| +
|
| +void MacroAssembler::EorMemOperand(Register dst,
|
| + Register src1,
|
| + const MemOperand& src2,
|
| + SBit s) {
|
| + ldr(ip, src2);
|
| + eor(dst, src1, Operand(ip), s);
|
| +}
|
| +
|
| +
|
| void MacroAssembler::Jump(Register target, Condition cond) {
|
| bx(target, cond);
|
| }
|
| @@ -733,9 +787,10 @@ void MacroAssembler::VFPEnsureFPSCRState(Register scratch) {
|
| bind(&fpscr_done);
|
| }
|
|
|
| -void MacroAssembler::VFPCanonicalizeNaN(const DwVfpRegister value,
|
| +void MacroAssembler::VFPCanonicalizeNaN(const DwVfpRegister result,
|
| + const DwVfpRegister value,
|
| const Condition cond) {
|
| - vsub(value, value, kDoubleRegZero, cond);
|
| + vsub(result, value, kDoubleRegZero, cond);
|
| }
|
|
|
|
|
| @@ -2057,8 +2112,25 @@ void MacroAssembler::CompareObjectType(Register object,
|
| Register map,
|
| Register type_reg,
|
| InstanceType type) {
|
| + const Register temp = type_reg.is(no_reg) ? ip : type_reg;
|
| +
|
| + ldr(map, FieldMemOperand(object, HeapObject::kMapOffset));
|
| + CompareInstanceType(map, temp, type);
|
| +}
|
| +
|
| +
|
| +void MacroAssembler::CheckObjectTypeRange(Register object,
|
| + Register map,
|
| + InstanceType min_type,
|
| + InstanceType max_type,
|
| + Label* false_label) {
|
| + STATIC_ASSERT(Map::kInstanceTypeOffset < 4096);
|
| + STATIC_ASSERT(LAST_TYPE < 256);
|
| ldr(map, FieldMemOperand(object, HeapObject::kMapOffset));
|
| - CompareInstanceType(map, type_reg, type);
|
| + ldrb(ip, FieldMemOperand(map, Map::kInstanceTypeOffset));
|
| + sub(ip, ip, Operand(min_type));
|
| + cmp(ip, Operand(max_type - min_type));
|
| + b(hi, false_label);
|
| }
|
|
|
|
|
|
|