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

Function sendLoadRegToArg

src/e9tool/e9metadata.cpp:839–882  ·  view source on GitHub ↗

* Load a register to an arg register. */

Source from the content-addressed store, hash-verified

837 * Load a register to an arg register.
838 */
839static void sendLoadRegToArg(FILE *out, Register reg, CallInfo &info, int regno)
840{
841 size_t size = getRegSize(reg);
842 if (info.isClobbered(reg))
843 {
844 switch (size)
845 {
846 case sizeof(int64_t):
847 default:
848 sendMovFromStackToR64(out, info.getOffset(reg), regno);
849 break;
850 case sizeof(int32_t):
851 sendMovFromStack32ToR64(out, info.getOffset(reg), regno);
852 break;
853 case sizeof(int16_t):
854 sendMovFromStack16ToR64(out, info.getOffset(reg), regno);
855 break;
856 case sizeof(int8_t):
857 sendMovFromStack8ToR64(out,
858 info.getOffset(reg) + (isHighReg(reg)? 1: 0), regno);
859 break;
860 }
861 }
862 else
863 {
864 switch (size)
865 {
866 case sizeof(int64_t):
867 default:
868 sendMovFromR64ToR64(out, getRegIdx(reg), regno);
869 break;
870 case sizeof(int32_t):
871 sendMovFromR32ToR64(out, getRegIdx(reg), regno);
872 break;
873 case sizeof(int16_t):
874 sendMovFromR16ToR64(out, getRegIdx(reg), regno);
875 break;
876 case sizeof(int8_t):
877 sendMovFromR8ToR64(out, getRegIdx(reg), isHighReg(reg),
878 regno);
879 break;
880 }
881 }
882}
883
884/*
885 * Emits instructions to load a register by value or reference.

Callers 2

sendLoadOperandMetadataFunction · 0.85
sendLoadArgumentMetadataFunction · 0.85

Calls 15

getRegSizeFunction · 0.85
sendMovFromStackToR64Function · 0.85
sendMovFromStack32ToR64Function · 0.85
sendMovFromStack16ToR64Function · 0.85
sendMovFromStack8ToR64Function · 0.85
isHighRegFunction · 0.85
sendMovFromR64ToR64Function · 0.85
getRegIdxFunction · 0.85
sendMovFromR32ToR64Function · 0.85
sendMovFromR16ToR64Function · 0.85
sendMovFromR8ToR64Function · 0.85
sendSaveRegToStackFunction · 0.85

Tested by

no test coverage detected