| 1076 | } |
| 1077 | |
| 1078 | bool put_x64_reg_value(x64_context* context, x64_reg_t reg, usz d_size, u64 value) |
| 1079 | { |
| 1080 | // save x64 reg value (for load operations) |
| 1081 | if (reg - X64R_RAX < 16) |
| 1082 | { |
| 1083 | // save the value into x64 register |
| 1084 | switch (d_size) |
| 1085 | { |
| 1086 | case 1: *X64REG(context, reg - X64R_RAX) = (value & 0xff) | (*X64REG(context, reg - X64R_RAX) & 0xffffff00); return true; |
| 1087 | case 2: *X64REG(context, reg - X64R_RAX) = (value & 0xffff) | (*X64REG(context, reg - X64R_RAX) & 0xffff0000); return true; |
| 1088 | case 4: *X64REG(context, reg - X64R_RAX) = value & 0xffffffff; return true; |
| 1089 | case 8: *X64REG(context, reg - X64R_RAX) = value; return true; |
| 1090 | } |
| 1091 | } |
| 1092 | |
| 1093 | sig_log.error("put_x64_reg_value(): invalid destination (reg=%d, d_size=%lld, value=0x%llx)", +reg, d_size, value); |
| 1094 | return false; |
| 1095 | } |
| 1096 | |
| 1097 | bool set_x64_cmp_flags(x64_context* context, usz d_size, u64 x, u64 y, bool carry = true) |
| 1098 | { |
no test coverage detected