1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-05 03:30:24 +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_R15 _X15
#define JIT_R16 _X16
#define JIT_R17 _X17
#define JIT_RTMP _X18
#define JIT_TMP0 _X17
#define JIT_TMP1 _X18
#define JIT_V0 _X19
#define JIT_V1 _X20
#define JIT_V2 _X21

View file

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

View file

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