Mercurial > repos > blastem
diff gen_x86.c @ 665:d0943769353b
Added functions to gen_x86 for saving and restoring callee save registers to better abstract over ABI differences between x86 and x86-64
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 02 Jan 2015 13:14:09 -0800 |
parents | 24ccfd70133a |
children | 7ed1dbb48f61 |
line wrap: on
line diff
--- a/gen_x86.c Fri Jan 02 12:04:58 2015 -0800 +++ b/gen_x86.c Fri Jan 02 13:14:09 2015 -0800 @@ -2039,3 +2039,33 @@ *no_adjust_rsp = code->cur - (no_adjust_rsp+1); #endif } + +void save_callee_save_regs(code_info *code) +{ + push_r(code, RBX); + push_r(code, RBP); +#ifdef X86_64 + push_r(code, R12); + push_r(code, R13); + push_r(code, R14); + push_r(code, R15); +#else + push_r(code, RDI); + push_r(code, RSI); +#endif +} + +void restore_callee_save_regs(code_info *code) +{ +#ifdef X86_64 + pop_r(code, R15); + pop_r(code, R14); + pop_r(code, R13); + pop_r(code, R12); +#else + pop_r(code, RSI); + pop_r(code, RDI); +#endif + pop_r(code, RBP); + pop_r(code, RBX); +}