Mercurial > repos > blastem
comparison 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 |
comparison
equal
deleted
inserted
replaced
664:bca748422bf0 | 665:d0943769353b |
---|---|
2037 call(code, fun); | 2037 call(code, fun); |
2038 add_ir(code, adjust + 8 , RSP, SZ_PTR); | 2038 add_ir(code, adjust + 8 , RSP, SZ_PTR); |
2039 *no_adjust_rsp = code->cur - (no_adjust_rsp+1); | 2039 *no_adjust_rsp = code->cur - (no_adjust_rsp+1); |
2040 #endif | 2040 #endif |
2041 } | 2041 } |
2042 | |
2043 void save_callee_save_regs(code_info *code) | |
2044 { | |
2045 push_r(code, RBX); | |
2046 push_r(code, RBP); | |
2047 #ifdef X86_64 | |
2048 push_r(code, R12); | |
2049 push_r(code, R13); | |
2050 push_r(code, R14); | |
2051 push_r(code, R15); | |
2052 #else | |
2053 push_r(code, RDI); | |
2054 push_r(code, RSI); | |
2055 #endif | |
2056 } | |
2057 | |
2058 void restore_callee_save_regs(code_info *code) | |
2059 { | |
2060 #ifdef X86_64 | |
2061 pop_r(code, R15); | |
2062 pop_r(code, R14); | |
2063 pop_r(code, R13); | |
2064 pop_r(code, R12); | |
2065 #else | |
2066 pop_r(code, RSI); | |
2067 pop_r(code, RDI); | |
2068 #endif | |
2069 pop_r(code, RBP); | |
2070 pop_r(code, RBX); | |
2071 } |