summaryrefslogtreecommitdiffstats
path: root/llvm/include/hqemu.h
blob: f5e7180de42319065e4df32dd20fbe2be432fe50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
 *  (C) 2015 by Computer System Laboratory, IIS, Academia Sinica, Taiwan.
 *      See COPYRIGHT in top-level directory.
 */

#ifndef __HQEMU_H
#define __HQEMU_H

#ifdef __cplusplus
extern "C"
{
#endif

#include "config-host.h"
#include "config-target.h"
#include "hqemu-config.h"

#define build_tcg(_env)        ((_env)->build_mode & BUILD_TCG)
#define build_llvm(_env)       ((_env)->build_mode & BUILD_LLVM)
#define build_llvm_only(_env)  ((_env)->build_mode == BUILD_LLVM)

void hqemu_help(void);

/* Optimizations */
int optimization_init(CPUArchState *env);
int optimization_finalize(CPUArchState *env);
int optimization_reset(CPUArchState *env, int force_flush);
int optimization_remove_entry(CPUArchState *env, TranslationBlock *tb);
int optimization_flush_page(CPUArchState *env, target_ulong pc);
int optimization_init_tb(TranslationBlock *tb, int id);

void itlb_update_entry(CPUArchState *env, TranslationBlock *tb);
void ibtc_update_entry(CPUArchState *env, TranslationBlock *tb);

int lpt_reset(CPUArchState *env);
int lpt_add_page(CPUArchState *env, target_ulong addr, target_ulong size);
int lpt_search_page(CPUArchState *env, target_ulong addr, target_ulong *addrp, target_ulong *sizep);
int lpt_flush_page(CPUArchState *env, target_ulong addr, target_ulong *addrp, target_ulong *sizep);


/* Tracer */
void tracer_exec_tb(CPUArchState *env, uintptr_t next_tb, TranslationBlock *tb);
void tracer_reset(CPUArchState *env);


/* LLVM */
int llvm_init(void);
int llvm_finalize(void);
int llvm_alloc_cache(void);
int llvm_check_cache(void);
int llvm_tb_flush(void);
int llvm_tb_remove(TranslationBlock *tb);
void llvm_handle_chaining(uintptr_t next_tb, TranslationBlock *tb);
int llvm_locate_trace(uintptr_t searched_pc);
TranslationBlock *llvm_find_pc(CPUState *cpu, uintptr_t searched_pc);
int llvm_restore_state(CPUState *cpu, TranslationBlock *tb, uintptr_t searched_pc);
void llvm_fork_start(void);
void llvm_fork_end(int child);


/* Annotation */
enum {
    ANNOTATION_NONE = 0,
    ANNOTATION_LOOP,
};
int llvm_has_annotation(target_ulong addr, int annotation);


/* External variables */
extern int tracer_mode;
extern target_ulong pcid;
extern unsigned long alignment_count[]; /* 0: misaligned, 1: aligned. */
extern unsigned long aligned_boundary;

#ifdef __cplusplus
}
#endif

#endif

/*
 * vim: ts=8 sts=4 sw=4 expandtab
 */

OpenPOWER on IntegriCloud