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 }