1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-19 03:00:25 +02:00

"extern"-related cleanup, and further implementation

This commit is contained in:
Andy Wingo 2018-10-31 21:45:16 +01:00
parent 0d78447d85
commit 47970773bc
6 changed files with 67 additions and 58 deletions

46
jit.h
View file

@ -47,6 +47,12 @@ typedef intptr_t jit_imm_t;
typedef uintptr_t jit_uimm_t;
typedef struct jit_reloc *jit_reloc_t;
#if defined(__GNUC__) && (__GNUC__ >= 4)
# define JIT_API extern __attribute__ ((__visibility__("hidden")))
#else
# define JIT_API extern
#endif
#if defined(__i386__) || defined(__x86_64__)
# include "jit/x86.h"
#elif defined(__mips__)
@ -105,39 +111,39 @@ typedef struct jit_arg
} loc;
} jit_arg_t;
extern void init_jit(void);
JIT_API void init_jit(void);
extern jit_state_t *jit_new_state(void);
extern void jit_destroy_state(jit_state_t*);
JIT_API jit_state_t *jit_new_state(void);
JIT_API void jit_destroy_state(jit_state_t*);
extern void jit_begin(jit_state_t*, jit_addr_t, size_t);
extern void jit_reset(jit_state_t*);
extern jit_addr_t jit_end(jit_state_t*, size_t*);
JIT_API void jit_begin(jit_state_t*, jit_addr_t, size_t);
JIT_API void jit_reset(jit_state_t*);
JIT_API jit_addr_t jit_end(jit_state_t*, size_t*);
extern void jit_align(jit_state_t*, unsigned);
extern void jit_allocai(jit_state_t*, size_t);
extern void jit_allocar(jit_state_t*, jit_gpr_t, jit_gpr_t);
JIT_API void jit_align(jit_state_t*, unsigned);
JIT_API void jit_allocai(jit_state_t*, size_t);
JIT_API void jit_allocar(jit_state_t*, jit_gpr_t, jit_gpr_t);
extern jit_pointer_t jit_address(jit_state_t*);
extern void jit_patch_here(jit_state_t*, jit_reloc_t);
extern void jit_patch_there(jit_state_t*, jit_reloc_t, jit_pointer_t);
JIT_API jit_pointer_t jit_address(jit_state_t*);
JIT_API void jit_patch_here(jit_state_t*, jit_reloc_t);
JIT_API void jit_patch_there(jit_state_t*, jit_reloc_t, jit_pointer_t);
extern void jit_calli(jit_state_t *, jit_pointer_t f,
JIT_API void jit_calli(jit_state_t *, jit_pointer_t f,
size_t argc, const jit_arg_t *argv);
extern void jit_callr(jit_state_t *, jit_gpr_t f,
JIT_API void jit_callr(jit_state_t *, jit_gpr_t f,
size_t argc, const jit_arg_t *argv);
extern void jit_receive(jit_state_t*, size_t argc, jit_arg_t *argv);
JIT_API void jit_receive(jit_state_t*, size_t argc, jit_arg_t *argv);
#define JIT_PROTO_0(stem, ret) \
extern ret jit_##stem (jit_state_t*)
JIT_API ret jit_##stem (jit_state_t*)
#define JIT_PROTO_1(stem, ret, a) \
extern ret jit_##stem (jit_state_t*, jit_##a##_t)
JIT_API ret jit_##stem (jit_state_t*, jit_##a##_t)
#define JIT_PROTO_2(stem, ret, a, b) \
extern ret jit_##stem (jit_state_t*, jit_##a##_t, jit_##b##_t)
JIT_API ret jit_##stem (jit_state_t*, jit_##a##_t, jit_##b##_t)
#define JIT_PROTO_3(stem, ret, a, b, c) \
extern ret jit_##stem (jit_state_t*, jit_##a##_t, jit_##b##_t, jit_##c##_t)
JIT_API ret jit_##stem (jit_state_t*, jit_##a##_t, jit_##b##_t, jit_##c##_t)
#define JIT_PROTO_4(stem, ret, a, b, c, d) \
extern ret jit_##stem (jit_state_t*, jit_##a##_t, jit_##b##_t, jit_##c##_t, jit_##d##_t)
JIT_API ret jit_##stem (jit_state_t*, jit_##a##_t, jit_##b##_t, jit_##c##_t, jit_##d##_t)
#define JIT_PROTO_RFF__(stem) JIT_PROTO_2(stem, jit_reloc_t, fpr, fpr)
#define JIT_PROTO_RGG__(stem) JIT_PROTO_2(stem, jit_reloc_t, gpr, gpr)

View file

@ -1,5 +1,5 @@
/*
* Copyright (C) 2012-2017 Free Software Foundation, Inc.
* Copyright (C) 2012-2018 Free Software Foundation, Inc.
*
* This file is part of GNU lightning.
*
@ -474,7 +474,7 @@ __aeabi_f2d(float u)
return (u);
}
extern int
int
__aeabi_f2iz(float u)
{
return (u);

View file

@ -1,5 +1,5 @@
/*
* Copyright (C) 2012-2017 Free Software Foundation, Inc.
* Copyright (C) 2012-2018 Free Software Foundation, Inc.
*
* This file is part of GNU lightning.
*
@ -122,6 +122,6 @@ typedef struct {
/*
* Initialization
*/
extern jit_cpu_t jit_cpu;
JIT_API jit_cpu_t jit_cpu;
#endif /* _jit_arm_h */

View file

@ -41,9 +41,12 @@
#define jit_regload_isdead 2 /* delete and unset live bit */
/*
* Implementation
*/
static void jit_get_cpu(void);
static void jit_flush(jit_state_t *, const char *, const char *);
static void jit_nop(jit_state_t *, unsigned);
static void jit_patch(jit_state_t *, const uint8_t *loc, const uint8_t *addr);
static void jit_patch_last(jit_state_t *, const uint8_t *loc, const uint8_t *addr);
void
init_jit(void)
{
@ -134,18 +137,20 @@ jit_align(jit_state_t *_jit, unsigned align)
}
void
jit_patch_here(jit_state_t *_jit, jit_reloc_t *reloc)
jit_patch_here(jit_state_t *_jit, jit_reloc_t reloc)
{
jit_patch_there (_jit, reloc, jit_address (_jit));
}
void
jit_patch_there(jit_state_t* _jit, jit_reloc_t *reloc, jit_pointer_t *addr)
jit_patch_there(jit_state_t* _jit, jit_reloc_t reloc, jit_pointer_t addr)
{
if (reloc == _jit->last_instruction)
jit_patch_last (_jit, reloc, addr);
const uint8_t *loc = jit_reloc_instruction (reloc);
if (loc == _jit->last_instruction_start)
jit_patch_last (_jit, loc, addr);
else
jit_patch (_jit, reloc, addr);
jit_patch (_jit, loc, addr);
}
#if defined(__i386__) || defined(__x86_64__)

View file

@ -130,34 +130,32 @@
* returned by a "user" call
* to jit_get_reg() */
/*
* Types
*/
typedef struct jit_register jit_register_t;
struct jit_state {
union {
uint8_t *uc;
uint16_t *us;
uint32_t *ui;
uint64_t *ul;
jit_word_t w;
} pc;
struct {
uint8_t *ptr;
uint8_t *end;
jit_word_t length;
} code;
struct jit_state
{
union {
uint8_t *uc;
uint16_t *us;
uint32_t *ui;
uint64_t *ul;
intptr_t w;
uintptr_t uw;
} pc;
uint8_t *start;
uint8_t *last_instruction_start;
uint8_t *end;
};
struct jit_register {
jit_reg_t spec;
char *name;
struct jit_register
{
jit_reg_t spec;
char *name;
};
extern void jit_get_cpu(void);
extern void jit_flush(void *fptr, void *tptr);
typedef struct jit_register jit_register_t;
extern jit_register_t _rvs[];
static void jit_get_cpu(void);
static void jit_flush(void *fptr, void *tptr);
static jit_register_t _rvs[];
#endif /* _jit_private_h */

View file

@ -1,5 +1,5 @@
/*
* Copyright (C) 2012-2017 Free Software Foundation, Inc.
* Copyright (C) 2012-2018 Free Software Foundation, Inc.
*
* This file is part of GNU lightning.
*
@ -194,6 +194,6 @@ typedef struct {
/*
* Initialization
*/
extern jit_cpu_t jit_cpu;
JIT_API jit_cpu_t jit_cpu;
#endif /* _jit_x86_h */