* Temporarily restore a register to its original value. */
| 514 | * Temporarily restore a register to its original value. |
| 515 | */ |
| 516 | static int sendTemporaryRestoreReg(FILE *out, CallInfo &info, Register reg, |
| 517 | const Register *exclude, int *slot) |
| 518 | { |
| 519 | if (!info.isClobbered(reg)) |
| 520 | return INT32_MAX; |
| 521 | if (!info.isUsed(reg)) |
| 522 | { |
| 523 | // If reg is clobbered but not used, then we simply restore it. |
| 524 | sendMovFromStackToR64(out, info.getOffset(reg), getRegIdx(reg)); |
| 525 | info.restore(reg); |
| 526 | return INT32_MAX; |
| 527 | } |
| 528 | |
| 529 | int scratch = sendTemporaryMovReg(out, info, reg, exclude, slot); |
| 530 | sendMovFromStackToR64(out, info.getOffset(reg), getRegIdx(reg)); |
| 531 | return scratch; |
| 532 | } |
| 533 | |
| 534 | /* |
| 535 | * Undo sendTemporaryMovReg(). |
no test coverage detected