4425 {
4426 if (nloc.IsStack()) return;
4427
4428 if (nloc.IsRegisters()) {
4429 const auto& reg_loc = nloc.WidenTo4Bytes(
compiler->zone()).AsRegisters();
4430 const intptr_t num_regs = reg_loc.num_regs();
4431
4432
4433 for (intptr_t i = num_regs - 1; i >= 0; i--) {
4434 __ PushRegister(reg_loc.reg_at(i));
4435 }
4436 } else if (nloc.IsFpuRegisters()) {
4437
4439 NoTemporaryAllocator temp_alloc;
4440 const auto&
dst = compiler::ffi::NativeStackLocation(
4441 nloc.payload_type(), nloc.payload_type(),
SPREG, 0);
4442 compiler->EmitNativeMove(dst, nloc, &temp_alloc);
4443 } else if (nloc.IsPointerToMemory()) {
4444 const auto& pointer_loc = nloc.AsPointerToMemory().pointer_location();
4445 if (pointer_loc.IsRegisters()) {
4446 const auto& regs_loc = pointer_loc.AsRegisters();
4447 ASSERT(regs_loc.num_regs() == 1);
4448 __ PushRegister(regs_loc.reg_at(0));
4449 } else {
4450 ASSERT(pointer_loc.IsStack());
4451
4452 }
4453 } else if (nloc.IsMultiple()) {
4454 const auto& multiple = nloc.AsMultiple();
4455 const intptr_t num = multiple.locations().length();
4456
4457 for (intptr_t i = num; i-- > 0;) {
4459 }
4460 } else {
4462 const auto& both = nloc.AsBoth();
4464 }
4465}
DECLARE_INSTRUCTION_SERIALIZABLE_FIELDS(NativeEntryInstr, FunctionEntryInstr, FIELD_LIST) private void SaveArgument(FlowGraphCompiler *compiler, const compiler::ffi::NativeLocation &loc) const