MCPcopy Create free account
hub / github.com/GJDuck/e9patch / sendTemporaryRestoreReg

Function sendTemporaryRestoreReg

src/e9tool/e9metadata.cpp:516–532  ·  view source on GitHub ↗

* Temporarily restore a register to its original value. */

Source from the content-addressed store, hash-verified

514 * Temporarily restore a register to its original value.
515 */
516static 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().

Callers 2

sendLoadFromMemOpToR64Function · 0.85
sendLoadNextMetadataFunction · 0.85

Calls 7

sendMovFromStackToR64Function · 0.85
getRegIdxFunction · 0.85
sendTemporaryMovRegFunction · 0.85
isClobberedMethod · 0.80
isUsedMethod · 0.80
getOffsetMethod · 0.80
restoreMethod · 0.80

Tested by

no test coverage detected