mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-29 19:30:36 +02:00
Add movr_f_i, movr_i_f, movr_d_l, movr_l_d
These move values verbatim between FPRs and GPRs.
This commit is contained in:
parent
434fe2b4aa
commit
11918685e1
6 changed files with 128 additions and 4 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2012-2020 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2012-2020, 2025 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU lightning.
|
||||
*
|
||||
|
@ -622,6 +622,10 @@ jit_load_args_3(jit_state_t *_jit, jit_operand_t a, jit_operand_t b,
|
|||
M(_FF__, extr_f_d) \
|
||||
M(_FF__, movr_f) \
|
||||
M(_FF__, movr_d) \
|
||||
M(_GF__, movr_i_f) \
|
||||
M(_FG__, movr_f_i) \
|
||||
WHEN_64(M(_GF__, movr_l_d)) \
|
||||
WHEN_64(M(_FG__, movr_d_l)) \
|
||||
M(_Ff__, movi_f) \
|
||||
M(_Fd__, movi_d) \
|
||||
M(_GF__, truncr_d_i) \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2013-2019 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2013-2019, 2025 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU lightning.
|
||||
*
|
||||
|
@ -638,6 +638,18 @@ movi_f(jit_state_t *_jit, int32_t r0, float i0)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
movr_f_i(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
FMOVSW(_jit, r0, r1);
|
||||
}
|
||||
|
||||
static void
|
||||
movr_i_f(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
FMOVWS(_jit, r0, r1);
|
||||
}
|
||||
|
||||
static jit_reloc_t
|
||||
buneqr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
|
@ -759,6 +771,18 @@ movi_d(jit_state_t *_jit, int32_t r0, double i0)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
movr_d_l(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
FMOVDX(_jit, r0, r1);
|
||||
}
|
||||
|
||||
static void
|
||||
movr_l_d(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
FMOVXD(_jit, r0, r1);
|
||||
}
|
||||
|
||||
static jit_reloc_t
|
||||
buneqr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2012-2017, 2019 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2012-2017, 2019, 2025 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU lightning.
|
||||
*
|
||||
|
@ -913,6 +913,18 @@ movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t i0)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
movr_f_i(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
VMOV_S_A(_jit, r0, r1);
|
||||
}
|
||||
|
||||
static void
|
||||
movr_i_f(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
VMOV_A_S32(_jit, r0, r1);
|
||||
}
|
||||
|
||||
static void
|
||||
extr_d_f(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2012-2017, 2019 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2012-2017, 2019, 2025 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU lightning.
|
||||
*
|
||||
|
@ -128,13 +128,24 @@ movdlxr(jit_state_t *_jit, int32_t r0, int32_t r1)
|
|||
{
|
||||
ssexr(_jit, 0x66, X86_SSE_X2G, r0, r1);
|
||||
}
|
||||
static void
|
||||
movdlrx(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
ssexr(_jit, 0x66, X86_SSE_G2X, r0, r1);
|
||||
}
|
||||
|
||||
static void movdqxr(jit_state_t *_jit, int32_t r0, int32_t r1) maybe_unused;
|
||||
static void movdqrx(jit_state_t *_jit, int32_t r0, int32_t r1) maybe_unused;
|
||||
static void
|
||||
movdqxr(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
sselxr(_jit, 0x66, X86_SSE_X2G, r0, r1);
|
||||
}
|
||||
static void
|
||||
movdqrx(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
sselxr(_jit, 0x66, X86_SSE_G2X, r0, r1);
|
||||
}
|
||||
|
||||
static void
|
||||
movssmr(jit_state_t *_jit, int32_t md, int32_t rb, int32_t ri, int32_t ms, int32_t rd)
|
||||
|
@ -171,6 +182,29 @@ movr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
|
|||
ssexr(_jit, 0xf2, X86_SSE_MOV, r0, r1);
|
||||
}
|
||||
|
||||
static void
|
||||
movr_i_f(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
movdlrx(_jit, r0, r1);
|
||||
}
|
||||
static void
|
||||
movr_f_i(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
movdlxr(_jit, r0, r1);
|
||||
}
|
||||
#if __X64
|
||||
static void
|
||||
movr_l_d(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
movdqrx(_jit, r0, r1);
|
||||
}
|
||||
static void
|
||||
movr_d_l(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
movdqxr(_jit, r0, r1);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
addssr(jit_state_t *_jit, int32_t r0, int32_t r1)
|
||||
{
|
||||
|
|
26
tests/movr_dl.c
Normal file
26
tests/movr_dl.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
#include "test.h"
|
||||
|
||||
static void
|
||||
run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size)
|
||||
{
|
||||
#if __WORDSIZE > 32
|
||||
jit_begin(j, arena_base, arena_size);
|
||||
size_t align = jit_enter_jit_abi(j, 0, 0, 0);
|
||||
|
||||
jit_movi_d(j, JIT_F0, 3.14159);
|
||||
jit_movr_l_d(j, JIT_R0, JIT_F0);
|
||||
jit_movr_d_l(j, JIT_F1, JIT_R0);
|
||||
jit_leave_jit_abi(j, 0, 0, align);
|
||||
jit_retr_d(j, JIT_F1);
|
||||
|
||||
double (*f)(void) = jit_end(j, NULL);
|
||||
|
||||
ASSERT(f() == 3.14159);
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
return main_helper(argc, argv, run_test);
|
||||
}
|
24
tests/movr_fi.c
Normal file
24
tests/movr_fi.c
Normal file
|
@ -0,0 +1,24 @@
|
|||
#include "test.h"
|
||||
|
||||
static void
|
||||
run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size)
|
||||
{
|
||||
jit_begin(j, arena_base, arena_size);
|
||||
size_t align = jit_enter_jit_abi(j, 0, 0, 0);
|
||||
|
||||
jit_movi_f(j, JIT_F0, 3.14159);
|
||||
jit_movr_i_f(j, JIT_R0, JIT_F0);
|
||||
jit_movr_f_i(j, JIT_F1, JIT_R0);
|
||||
jit_leave_jit_abi(j, 0, 0, align);
|
||||
jit_retr_f(j, JIT_F1);
|
||||
|
||||
float (*f)(void) = jit_end(j, NULL);
|
||||
|
||||
ASSERT(f() == 3.14159f);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
return main_helper(argc, argv, run_test);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue