Statistics
| Branch: | Revision:

root / target-arm / cpu.h @ 0fa85d43

History | View | Annotate | Download (2.4 kB)

1 2c0262af bellard
/*
2 2c0262af bellard
 * ARM virtual CPU header
3 2c0262af bellard
 * 
4 2c0262af bellard
 *  Copyright (c) 2003 Fabrice Bellard
5 2c0262af bellard
 *
6 2c0262af bellard
 * This library is free software; you can redistribute it and/or
7 2c0262af bellard
 * modify it under the terms of the GNU Lesser General Public
8 2c0262af bellard
 * License as published by the Free Software Foundation; either
9 2c0262af bellard
 * version 2 of the License, or (at your option) any later version.
10 2c0262af bellard
 *
11 2c0262af bellard
 * This library is distributed in the hope that it will be useful,
12 2c0262af bellard
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 2c0262af bellard
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 2c0262af bellard
 * Lesser General Public License for more details.
15 2c0262af bellard
 *
16 2c0262af bellard
 * You should have received a copy of the GNU Lesser General Public
17 2c0262af bellard
 * License along with this library; if not, write to the Free Software
18 2c0262af bellard
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 2c0262af bellard
 */
20 2c0262af bellard
#ifndef CPU_ARM_H
21 2c0262af bellard
#define CPU_ARM_H
22 2c0262af bellard
23 3cf1e035 bellard
#define TARGET_LONG_BITS 32
24 3cf1e035 bellard
25 2c0262af bellard
#include "cpu-defs.h"
26 2c0262af bellard
27 2c0262af bellard
#define EXCP_UDEF       1   /* undefined instruction */
28 2c0262af bellard
#define EXCP_SWI        2   /* software interrupt */
29 2c0262af bellard
30 2c0262af bellard
typedef struct CPUARMState {
31 2c0262af bellard
    uint32_t regs[16];
32 2c0262af bellard
    uint32_t cpsr;
33 2c0262af bellard
    
34 2c0262af bellard
    /* cpsr flag cache for faster execution */
35 2c0262af bellard
    uint32_t CF; /* 0 or 1 */
36 2c0262af bellard
    uint32_t VF; /* V is the bit 31. All other bits are undefined */
37 2c0262af bellard
    uint32_t NZF; /* N is bit 31. Z is computed from NZF */
38 2c0262af bellard
39 2c0262af bellard
    /* exception/interrupt handling */
40 2c0262af bellard
    jmp_buf jmp_env;
41 2c0262af bellard
    int exception_index;
42 2c0262af bellard
    int interrupt_request;
43 2c0262af bellard
    struct TranslationBlock *current_tb;
44 2c0262af bellard
    int user_mode_only;
45 2c0262af bellard
46 d720b93d bellard
    /* in order to avoid passing too many arguments to the memory
47 d720b93d bellard
       write helpers, we store some rarely used information in the CPU
48 d720b93d bellard
       context) */
49 d720b93d bellard
    unsigned long mem_write_pc; /* host pc at which the memory was
50 d720b93d bellard
                                   written */
51 d720b93d bellard
    unsigned long mem_write_vaddr; /* target virtual addr at which the
52 d720b93d bellard
                                      memory was written */
53 2c0262af bellard
    /* user data */
54 2c0262af bellard
    void *opaque;
55 2c0262af bellard
} CPUARMState;
56 2c0262af bellard
57 2c0262af bellard
CPUARMState *cpu_arm_init(void);
58 2c0262af bellard
int cpu_arm_exec(CPUARMState *s);
59 2c0262af bellard
void cpu_arm_close(CPUARMState *s);
60 2c0262af bellard
/* you can call this signal handler from your SIGBUS and SIGSEGV
61 2c0262af bellard
   signal handlers to inform the virtual CPU of exceptions. non zero
62 2c0262af bellard
   is returned if the signal was handled by the virtual CPU.  */
63 2c0262af bellard
struct siginfo;
64 2c0262af bellard
int cpu_arm_signal_handler(int host_signum, struct siginfo *info, 
65 2c0262af bellard
                           void *puc);
66 2c0262af bellard
67 2c0262af bellard
#define TARGET_PAGE_BITS 12
68 2c0262af bellard
#include "cpu-all.h"
69 2c0262af bellard
70 2c0262af bellard
#endif