(mir)修复传递参数是指针存在的问题

mxr 3 weeks ago
parent b9151b866e
commit e248d72f5c

@ -590,8 +590,11 @@ void LowerInstruction(const ir::Instruction& inst, MachineFunction& function,
EmitValueToReg(arg, reg, slots, block, function);
fpArgCount++;
} else {
// 整数参数
PhysReg reg = static_cast<PhysReg>(static_cast<int>(PhysReg::W0) + intArgCount);
// 区分指针与普通整数:指针使用 64 位 Xn 寄存器
bool isPointer = argType->IsPtrInt32() || argType->IsPtrFloat() || argType->IsPtrInt1() ||
argType->IsArray(); // 数组在作为函数参数时会退化为指针
PhysReg baseReg = isPointer ? PhysReg::X0 : PhysReg::W0;
PhysReg reg = static_cast<PhysReg>(static_cast<int>(baseReg) + intArgCount);
EmitValueToReg(arg, reg, slots, block, function);
intArgCount++;
}

Loading…
Cancel
Save