Lines Matching refs:assm
51 inline Operand GetMemOp(LiftoffAssembler* assm, Register addr, Register offset, in GetMemOp() argument
59 assm->movl(scratch, Immediate(offset_imm)); in GetMemOp()
61 assm->addq(scratch, offset); in GetMemOp()
66 inline void Load(LiftoffAssembler* assm, LiftoffRegister dst, Operand src, in Load() argument
70 assm->movl(dst.gp(), src); in Load()
73 assm->movq(dst.gp(), src); in Load()
76 assm->Movss(dst.fp(), src); in Load()
79 assm->Movsd(dst.fp(), src); in Load()
86 inline void Store(LiftoffAssembler* assm, Operand dst, LiftoffRegister src, in Store() argument
90 assm->movl(dst, src.gp()); in Store()
93 assm->movq(dst, src.gp()); in Store()
96 assm->Movss(dst, src.fp()); in Store()
99 assm->Movsd(dst, src.fp()); in Store()
106 inline void push(LiftoffAssembler* assm, LiftoffRegister reg, ValueType type) { in push() argument
110 assm->pushq(reg.gp()); in push()
113 assm->subp(rsp, Immediate(kPointerSize)); in push()
114 assm->Movss(Operand(rsp, 0), reg.fp()); in push()
117 assm->subp(rsp, Immediate(kPointerSize)); in push()
118 assm->Movsd(Operand(rsp, 0), reg.fp()); in push()
126 inline void SpillRegisters(LiftoffAssembler* assm, Regs... regs) { in SpillRegisters() argument
128 if (assm->cache_state()->is_used(r)) assm->SpillRegister(r); in SpillRegisters()
426 void EmitCommutativeBinOp(LiftoffAssembler* assm, Register dst, Register lhs, in EmitCommutativeBinOp() argument
429 (assm->*op)(dst, lhs); in EmitCommutativeBinOp()
431 if (dst != lhs) (assm->*mov)(dst, lhs); in EmitCommutativeBinOp()
432 (assm->*op)(dst, rhs); in EmitCommutativeBinOp()
445 void EmitIntDivOrRem(LiftoffAssembler* assm, Register dst, Register lhs, in EmitIntDivOrRem() argument
457 assm->name##l(__VA_ARGS__); \ in EmitIntDivOrRem()
459 assm->name##q(__VA_ARGS__); \ in EmitIntDivOrRem()
468 liftoff::SpillRegisters(assm, rdx, rax); in EmitIntDivOrRem()
476 assm->j(zero, trap_div_by_zero); in EmitIntDivOrRem()
483 assm->j(not_equal, &do_div); in EmitIntDivOrRem()
486 assm->j(overflow, trap_div_unrepresentable); in EmitIntDivOrRem()
487 assm->bind(&do_div); in EmitIntDivOrRem()
493 assm->j(not_equal, &do_rem); in EmitIntDivOrRem()
498 assm->jmp(&done); in EmitIntDivOrRem()
499 assm->bind(&do_rem); in EmitIntDivOrRem()
506 assm->cdq(); in EmitIntDivOrRem()
507 assm->idivl(rhs); in EmitIntDivOrRem()
509 assm->xorl(rdx, rdx); in EmitIntDivOrRem()
510 assm->divl(rhs); in EmitIntDivOrRem()
512 assm->cqo(); in EmitIntDivOrRem()
513 assm->idivq(rhs); in EmitIntDivOrRem()
515 assm->xorq(rdx, rdx); in EmitIntDivOrRem()
516 assm->divq(rhs); in EmitIntDivOrRem()
524 if (special_case_minus_1) assm->bind(&done); in EmitIntDivOrRem()
570 inline void EmitShiftOperation(LiftoffAssembler* assm, Register dst, in EmitShiftOperation() argument
576 assm->Move(kScratchRegister, src, type); in EmitShiftOperation()
577 if (amount != rcx) assm->Move(rcx, amount, type); in EmitShiftOperation()
578 (assm->*emit_shift)(kScratchRegister); in EmitShiftOperation()
579 assm->Move(rcx, kScratchRegister, type); in EmitShiftOperation()
588 assm->cache_state()->is_used(LiftoffRegister(rcx)) || in EmitShiftOperation()
590 if (use_scratch) assm->movq(kScratchRegister, rcx); in EmitShiftOperation()
592 assm->Move(rcx, amount, type); in EmitShiftOperation()
596 if (dst != src) assm->Move(dst, src, type); in EmitShiftOperation()
597 (assm->*emit_shift)(dst); in EmitShiftOperation()
600 if (use_scratch) assm->movq(rcx, kScratchRegister); in EmitShiftOperation()
822 inline void EmitFloatMinOrMax(LiftoffAssembler* assm, DoubleRegister dst, in EmitFloatMinOrMax() argument
833 assm->name##s(__VA_ARGS__); \ in EmitFloatMinOrMax()
835 assm->name##d(__VA_ARGS__); \ in EmitFloatMinOrMax()
842 assm->j(parity_even, &is_nan, Label::kNear); // PF=1 in EmitFloatMinOrMax()
843 assm->j(below, &lhs_below_rhs, Label::kNear); // CF=1 in EmitFloatMinOrMax()
844 assm->j(above, &lhs_above_rhs, Label::kNear); // CF=0 && ZF=0 in EmitFloatMinOrMax()
853 assm->testl(kScratchRegister, Immediate(1)); in EmitFloatMinOrMax()
854 assm->j(zero, &lhs_below_rhs, Label::kNear); in EmitFloatMinOrMax()
855 assm->jmp(&lhs_above_rhs, Label::kNear); in EmitFloatMinOrMax()
857 assm->bind(&is_nan); in EmitFloatMinOrMax()
861 assm->jmp(&done, Label::kNear); in EmitFloatMinOrMax()
863 assm->bind(&lhs_below_rhs); in EmitFloatMinOrMax()
866 assm->jmp(&done, Label::kNear); in EmitFloatMinOrMax()
868 assm->bind(&lhs_above_rhs); in EmitFloatMinOrMax()
872 assm->bind(&done); in EmitFloatMinOrMax()
1058 inline void ConvertFloatToIntAndBack(LiftoffAssembler* assm, Register dst, in ConvertFloatToIntAndBack() argument
1063 assm->Cvttsd2si(dst, src); in ConvertFloatToIntAndBack()
1064 assm->Cvtlsi2sd(converted_back, dst); in ConvertFloatToIntAndBack()
1066 assm->Cvttsd2siq(dst, src); in ConvertFloatToIntAndBack()
1067 assm->movl(dst, dst); in ConvertFloatToIntAndBack()
1068 assm->Cvtqsi2sd(converted_back, dst); in ConvertFloatToIntAndBack()
1070 assm->Cvttsd2siq(dst, src); in ConvertFloatToIntAndBack()
1071 assm->Cvtqsi2sd(converted_back, dst); in ConvertFloatToIntAndBack()
1077 assm->Cvttss2si(dst, src); in ConvertFloatToIntAndBack()
1078 assm->Cvtlsi2ss(converted_back, dst); in ConvertFloatToIntAndBack()
1080 assm->Cvttss2siq(dst, src); in ConvertFloatToIntAndBack()
1081 assm->movl(dst, dst); in ConvertFloatToIntAndBack()
1082 assm->Cvtqsi2ss(converted_back, dst); in ConvertFloatToIntAndBack()
1084 assm->Cvttss2siq(dst, src); in ConvertFloatToIntAndBack()
1085 assm->Cvtqsi2ss(converted_back, dst); in ConvertFloatToIntAndBack()
1093 inline bool EmitTruncateFloatToInt(LiftoffAssembler* assm, Register dst, in EmitTruncateFloatToInt() argument
1096 assm->bailout("no SSE4.1"); in EmitTruncateFloatToInt()
1099 CpuFeatureScope feature(assm, SSE4_1); in EmitTruncateFloatToInt()
1105 assm->Roundsd(rounded, src, kRoundToZero); in EmitTruncateFloatToInt()
1107 assm->Roundss(rounded, src, kRoundToZero); in EmitTruncateFloatToInt()
1109 ConvertFloatToIntAndBack<dst_type, src_type>(assm, dst, rounded, in EmitTruncateFloatToInt()
1112 assm->Ucomisd(converted_back, rounded); in EmitTruncateFloatToInt()
1114 assm->Ucomiss(converted_back, rounded); in EmitTruncateFloatToInt()
1119 assm->j(parity_even, trap); in EmitTruncateFloatToInt()
1120 assm->j(not_equal, trap); in EmitTruncateFloatToInt()
1271 void EmitFloatSetCond(LiftoffAssembler* assm, Condition cond, Register dst, in EmitFloatSetCond() argument
1276 (assm->*cmp_op)(lhs, rhs); in EmitFloatSetCond()
1278 assm->j(parity_odd, ¬_nan, Label::kNear); in EmitFloatSetCond()
1281 assm->movl(dst, Immediate(1)); in EmitFloatSetCond()
1283 assm->xorl(dst, dst); in EmitFloatSetCond()
1285 assm->jmp(&cont, Label::kNear); in EmitFloatSetCond()
1286 assm->bind(¬_nan); in EmitFloatSetCond()
1288 assm->setcc(cond, dst); in EmitFloatSetCond()
1289 assm->movzxbl(dst, dst); in EmitFloatSetCond()
1290 assm->bind(&cont); in EmitFloatSetCond()