/[dynamips]/trunk/ppc32_jit.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/ppc32_jit.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7 - (hide annotations)
Sat Oct 6 16:23:47 2007 UTC (16 years, 6 months ago) by dpavlin
Original Path: upstream/dynamips-0.2.7-RC1/ppc32_jit.h
File MIME type: text/plain
File size: 2793 byte(s)
dynamips-0.2.7-RC1

1 dpavlin 7 /*
2     * Cisco router simulation platform.
3     * Copyright (c) 2005,2006 Christophe Fillot (cf@utc.fr)
4     *
5     * PPC32 JIT compiler.
6     */
7    
8     #ifndef __PPC32_JIT_H__
9     #define __PPC32_JIT_H__
10    
11     #include "utils.h"
12    
13     /* Size of executable page area (in Mb) */
14     #ifndef __CYGWIN__
15     #define PPC_EXEC_AREA_SIZE 64
16     #else
17     #define PPC_EXEC_AREA_SIZE 16
18     #endif
19    
20     /* Buffer size for JIT code generation */
21     #define PPC_JIT_BUFSIZE 32768
22    
23     /* Maximum number of X86 chunks */
24     #define PPC_JIT_MAX_CHUNKS 32
25    
26     /* Instruction jump patch */
27     struct ppc32_insn_patch {
28     u_char *jit_insn;
29     m_uint64_t ppc_ia;
30     };
31    
32     /* Instruction patch table */
33     #define PPC32_INSN_PATCH_TABLE_SIZE 32
34    
35     struct ppc32_jit_patch_table {
36     struct ppc32_insn_patch patches[PPC32_INSN_PATCH_TABLE_SIZE];
37     u_int cur_patch;
38     struct ppc32_jit_patch_table *next;
39     };
40    
41     /* PPC32 translated code block */
42     struct ppc32_jit_tcb {
43     m_uint32_t start_ia;
44     u_char **jit_insn_ptr;
45     m_uint64_t acc_count;
46     m_uint32_t phys_page;
47     ppc_insn_t *ppc_code;
48     u_int ppc_trans_pos;
49     u_int jit_chunk_pos;
50     u_char *jit_ptr;
51     insn_exec_page_t *jit_buffer;
52     insn_exec_page_t *jit_chunks[PPC_JIT_MAX_CHUNKS];
53     struct ppc32_jit_patch_table *patch_table;
54     ppc32_jit_tcb_t *prev,*next;
55     #if DEBUG_BLOCK_TIMESTAMP
56     m_uint64_t tm_first_use,tm_last_use;
57     #endif
58     };
59    
60     /* PPC instruction recognition */
61     struct ppc32_insn_tag {
62     int (*emit)(cpu_ppc_t *cpu,ppc32_jit_tcb_t *,ppc_insn_t);
63     m_uint32_t mask,value;
64     };
65    
66     /* Get the JIT instruction pointer in a translated block */
67     static forced_inline
68     u_char *ppc32_jit_tcb_get_host_ptr(ppc32_jit_tcb_t *b,m_uint32_t vaddr)
69     {
70     m_uint32_t offset;
71    
72     offset = (vaddr - b->start_ia) >> 2;
73     return(b->jit_insn_ptr[offset]);
74     }
75    
76     /* Initialize instruction lookup table */
77     void ppc32_jit_create_ilt(void);
78    
79     /* Initialize the JIT structure */
80     int ppc32_jit_init(cpu_ppc_t *cpu);
81    
82     /* Flush the JIT */
83     u_int ppc32_jit_flush(cpu_ppc_t *cpu,u_int threshold);
84    
85     /* Shutdown the JIT */
86     void ppc32_jit_shutdown(cpu_ppc_t *cpu);
87    
88     /* Fetch a PowerPC instruction and emit corresponding translated code */
89     struct ppc32_insn_tag *ppc32_jit_fetch_and_emit(cpu_ppc_t *cpu,
90     ppc32_jit_tcb_t *block);
91    
92     /* Record a patch to apply in a compiled block */
93     int ppc32_jit_tcb_record_patch(ppc32_jit_tcb_t *block,u_char *jit_ptr,
94     m_uint32_t vaddr);
95    
96     /* Free an instruction block */
97     void ppc32_jit_tcb_free(cpu_ppc_t *cpu,ppc32_jit_tcb_t *block,
98     int list_removal);
99    
100     /* Check if the specified address belongs to the specified block */
101     int ppc32_jit_tcb_local_addr(ppc32_jit_tcb_t *block,m_uint32_t vaddr,
102     u_char **jit_addr);
103    
104     /* Execute compiled PowerPC code */
105     void *ppc32_jit_run_cpu(cpu_gen_t *gen);
106    
107     #endif

  ViewVC Help
Powered by ViewVC 1.1.26