1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-06 12:10:28 +02:00

Allow a backend to have multiple temporary registers

This commit is contained in:
Andy Wingo 2019-05-15 16:19:33 +02:00
parent 5b8262e804
commit 09e71475f4
3 changed files with 25 additions and 17 deletions

View file

@ -121,8 +121,8 @@ jit_fpr_is_callee_save (jit_fpr_t reg)
#define JIT_R14 _X14 #define JIT_R14 _X14
#define JIT_R15 _X15 #define JIT_R15 _X15
#define JIT_R16 _X16 #define JIT_R16 _X16
#define JIT_R17 _X17 #define JIT_TMP0 _X17
#define JIT_RTMP _X18 #define JIT_TMP1 _X18
#define JIT_V0 _X19 #define JIT_V0 _X19
#define JIT_V1 _X20 #define JIT_V1 _X20
#define JIT_V2 _X21 #define JIT_V2 _X21

View file

@ -332,35 +332,43 @@ jit_align(jit_state_t *_jit, unsigned align)
static jit_gpr_t static jit_gpr_t
get_temp_gpr(jit_state_t *_jit) get_temp_gpr(jit_state_t *_jit)
{ {
ASSERT(!_jit->temp_gpr_saved); switch(_jit->temp_gpr_saved++)
_jit->temp_gpr_saved = 1; {
#ifdef JIT_RTMP case 0:
return JIT_RTMP; return JIT_TMP0;
#else #ifdef JIT_TMP1
return JIT_VTMP; case 1:
return JIT_TMP1;
#endif #endif
default:
abort();
}
} }
static jit_fpr_t static jit_fpr_t
get_temp_fpr(jit_state_t *_jit) get_temp_fpr(jit_state_t *_jit)
{ {
ASSERT(!_jit->temp_fpr_saved); switch(_jit->temp_gpr_saved++)
_jit->temp_fpr_saved = 1; {
return JIT_FTMP; case 0:
return JIT_FTMP;
default:
abort();
}
} }
static void static void
unget_temp_fpr(jit_state_t *_jit) unget_temp_fpr(jit_state_t *_jit)
{ {
ASSERT(_jit->temp_fpr_saved); ASSERT(_jit->temp_fpr_saved);
_jit->temp_fpr_saved = 0; _jit->temp_fpr_saved--;
} }
static void static void
unget_temp_gpr(jit_state_t *_jit) unget_temp_gpr(jit_state_t *_jit)
{ {
ASSERT(_jit->temp_gpr_saved); ASSERT(_jit->temp_gpr_saved);
_jit->temp_gpr_saved = 0; _jit->temp_gpr_saved--;
} }
static inline void emit_u8(jit_state_t *_jit, uint8_t u8) { static inline void emit_u8(jit_state_t *_jit, uint8_t u8) {

View file

@ -129,7 +129,7 @@ jit_fpr_is_callee_save (jit_fpr_t reg)
# define JIT_V0 _RBP # define JIT_V0 _RBP
# define JIT_V1 _RSI # define JIT_V1 _RSI
# define JIT_V2 _RDI # define JIT_V2 _RDI
# define JIT_TMP _RBX # define JIT_TMP0 _RBX
# define JIT_F0 _XMM0 # define JIT_F0 _XMM0
# define JIT_F1 _XMM1 # define JIT_F1 _XMM1
# define JIT_F2 _XMM2 # define JIT_F2 _XMM2
@ -138,7 +138,7 @@ jit_fpr_is_callee_save (jit_fpr_t reg)
# define JIT_F5 _XMM5 # define JIT_F5 _XMM5
# define JIT_F6 _XMM6 # define JIT_F6 _XMM6
# define JIT_FTMP _XMM7 # define JIT_FTMP _XMM7
# define JIT_PLATFORM_CALLEE_SAVE_GPRS JIT_TMP # define JIT_PLATFORM_CALLEE_SAVE_GPRS JIT_TMP0
#elif __CYGWIN__ #elif __CYGWIN__
# define JIT_R0 _RAX # define JIT_R0 _RAX
# define JIT_R1 _RCX # define JIT_R1 _RCX
@ -146,7 +146,7 @@ jit_fpr_is_callee_save (jit_fpr_t reg)
# define JIT_R3 _R8 # define JIT_R3 _R8
# define JIT_R4 _R9 # define JIT_R4 _R9
# define JIT_R5 _R10 # define JIT_R5 _R10
# define JIT_RTMP _R11 # define JIT_TMP0 _R11
# define JIT_V0 _RBX # define JIT_V0 _RBX
# define JIT_V1 _RSI # define JIT_V1 _RSI
# define JIT_V2 _RDI # define JIT_V2 _RDI
@ -180,7 +180,7 @@ jit_fpr_is_callee_save (jit_fpr_t reg)
# define JIT_R5 _R8 # define JIT_R5 _R8
# define JIT_R6 _R9 # define JIT_R6 _R9
# define JIT_R7 _R10 # define JIT_R7 _R10
# define JIT_RTMP _R11 # define JIT_TMP0 _R11
# define JIT_V0 _RBX # define JIT_V0 _RBX
# define JIT_V1 _R12 # define JIT_V1 _R12
# define JIT_V2 _R13 # define JIT_V2 _R13