* Load a register to an arg register. */
| 837 | * Load a register to an arg register. |
| 838 | */ |
| 839 | static 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. |
no test coverage detected