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:
parent
5b8262e804
commit
09e71475f4
3 changed files with 25 additions and 17 deletions
|
@ -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
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue