commit e4ea36bfcb331ff7df5e19a6775250d97a5288c3 parent a788616082575e9be8f07c9a318bdef7e8032221 Author: Nihal Jere <nihal@nihaljere.xyz> Date: Sun, 9 Jan 2022 23:10:29 -0600 x64: push and pop numbered registers Diffstat:
M | x64.c | | | 26 | ++++++++++++++++++-------- |
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/x64.c b/x64.c @@ -617,18 +617,28 @@ ret(char *buf) return 1; } -size_t push_r64(char *buf, enum reg reg) +size_t +push_r64(char *buf, enum reg reg) { - if (buf) - *buf = 0x50 + reg; + if (buf) { + if (reg >= 8) + *(buf++) = REX_B; - return 1; + *buf = 0x50 + (reg & 7); + } + + return reg >= 8 ? 2 : 1; } -size_t pop_r64(char *buf, enum reg reg) +size_t +pop_r64(char *buf, enum reg reg) { - if (buf) - *buf = 0x58 + reg; + if (buf) { + if (reg >= 8) + *(buf++) = REX_B; - return 1; + *buf = 0x58 + (reg & 7); + } + + return reg >= 8 ? 2 : 1; }