// ICCompare_Int32 bool ICCompare_Int32::Compiler::generateStubCode(MacroAssembler &masm) { // Guard that R0 is an integer and R1 is an integer. Label failure; // by wangqing, 2013-11-22 masm.movl(ImmTag(JSVAL_TAG_INT32), cmpTempRegister); masm.bne(R0.typeReg(), cmpTempRegister, &failure); masm.nop(); masm.movl(ImmTag(JSVAL_TAG_INT32), cmpTempRegister); masm.bne(R1.typeReg(), cmpTempRegister, &failure); masm.nop(); // Compare payload regs of R0 and R1. Assembler::Condition cond = JSOpToCondition(op, /* signed = */true); masm.cmpl(R0.payloadReg(), R1.payloadReg()); masm.setCC(cond, R0.payloadReg()); masm.movzxbl(R0.payloadReg(), R0.payloadReg()); // Box the result and return masm.tagValue(JSVAL_TYPE_BOOLEAN, R0.payloadReg(), R0); EmitReturnFromIC(masm); // Failure case - jump to next stub masm.bindBranch(&failure); EmitStubGuardFailure(masm); return true; }
bool ICCompare_Int32::Compiler::generateStubCode(MacroAssembler &masm) { // Guard that R0 is an integer and R1 is an integer. Label failure; Label conditionTrue; masm.branchTestInt32(Assembler::NotEqual, R0, &failure); masm.branchTestInt32(Assembler::NotEqual, R1, &failure); // Compare payload regs of R0 and R1. Assembler::Condition cond = JSOpToCondition(op, /* signed = */true); masm.ma_cmp_set(R0.payloadReg(), R0.payloadReg(), R1.payloadReg(), cond); masm.tagValue(JSVAL_TYPE_BOOLEAN, R0.payloadReg(), R0); EmitReturnFromIC(masm); // Failure case - jump to next stub masm.bind(&failure); EmitStubGuardFailure(masm); return true; }
bool ICCompare_Int32::Compiler::generateStubCode(MacroAssembler &masm) { // Guard that R0 is an integer and R1 is an integer. Label failure; masm.branchTestInt32(Assembler::NotEqual, R0, &failure); masm.branchTestInt32(Assembler::NotEqual, R1, &failure); // Directly compare the int32 payload of R0 and R1. Assembler::Condition cond = JSOpToCondition(op, /* signed = */true); masm.mov(ImmWord(0), ScratchReg); masm.cmpl(R0.valueReg(), R1.valueReg()); masm.setCC(cond, ScratchReg); // Box the result and return masm.boxValue(JSVAL_TYPE_BOOLEAN, ScratchReg, R0.valueReg()); EmitReturnFromIC(masm); // Failure case - jump to next stub masm.bind(&failure); EmitStubGuardFailure(masm); return true; }