nooc

nooc programming language compiler
git clone git://git.nihaljere.xyz/nooc
Log | Files | Refs | LICENSE

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:
Mx64.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; }