| 4321 | } |
| 4322 | |
| 4323 | void WinDebugger::AddParamValue(int paramIdx, bool hadThis, CPURegisters* registers, const DbgTypedValue& typedValue) |
| 4324 | { |
| 4325 | #if BF_DBG_32 |
| 4326 | PushValue(registers, typedValue); |
| 4327 | #else |
| 4328 | int regIdx = paramIdx + (hadThis ? 1 : 0); |
| 4329 | if (typedValue.mType->IsFloat()) |
| 4330 | { |
| 4331 | PushValue(registers, typedValue); |
| 4332 | if (regIdx < 4) |
| 4333 | { |
| 4334 | if (typedValue.mType->mTypeCode == DbgType_Single) |
| 4335 | { |
| 4336 | registers->mXmmRegsArray[regIdx].f[0] = typedValue.mSingle; |
| 4337 | } |
| 4338 | else |
| 4339 | { |
| 4340 | registers->mXmmDRegsArray[regIdx].d[0] = typedValue.mDouble; |
| 4341 | } |
| 4342 | } |
| 4343 | } |
| 4344 | else |
| 4345 | { |
| 4346 | PushValue(registers, typedValue); |
| 4347 | if (regIdx < 4) |
| 4348 | { |
| 4349 | int64 val; |
| 4350 | if (typedValue.mType->IsCompositeType()) |
| 4351 | val = typedValue.mSrcAddress; |
| 4352 | else |
| 4353 | val = typedValue.mPtr; |
| 4354 | if (regIdx == 0) |
| 4355 | registers->mIntRegs.rcx = val; |
| 4356 | else if (regIdx == 1) |
| 4357 | registers->mIntRegs.rdx = val; |
| 4358 | else if (regIdx == 2) |
| 4359 | registers->mIntRegs.r8 = val; |
| 4360 | else if (regIdx == 3) |
| 4361 | registers->mIntRegs.r9 = val; |
| 4362 | } |
| 4363 | } |
| 4364 | #endif |
| 4365 | } |
| 4366 | |
| 4367 | bool WinDebugger::CheckNeedsSRetArgument(DbgType* retType) |
| 4368 | { |
no test coverage detected