Statistics
| Branch: | Revision:

root / target-arm / cpu.h @ afc7df11

History | View | Annotate | Download (2.6 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 b8a9e8f1 bellard
#define EXCP_UDEF            1   /* undefined instruction */
28 b8a9e8f1 bellard
#define EXCP_SWI             2   /* software interrupt */
29 b8a9e8f1 bellard
#define EXCP_PREFETCH_ABORT  3
30 b8a9e8f1 bellard
#define EXCP_DATA_ABORT      4
31 2c0262af bellard
32 2c0262af bellard
typedef struct CPUARMState {
33 2c0262af bellard
    uint32_t regs[16];
34 2c0262af bellard
    uint32_t cpsr;
35 2c0262af bellard
    
36 2c0262af bellard
    /* cpsr flag cache for faster execution */
37 2c0262af bellard
    uint32_t CF; /* 0 or 1 */
38 2c0262af bellard
    uint32_t VF; /* V is the bit 31. All other bits are undefined */
39 2c0262af bellard
    uint32_t NZF; /* N is bit 31. Z is computed from NZF */
40 99c475ab bellard
    uint32_t QF; /* 0 or 1 */
41 99c475ab bellard
42 99c475ab bellard
    int thumb; /* 0 = arm mode, 1 = thumb mode */
43 2c0262af bellard
44 b8a9e8f1 bellard
    /* coprocessor 15 (MMU) status */
45 b8a9e8f1 bellard
    uint32_t cp15_6;
46 b8a9e8f1 bellard
    
47 2c0262af bellard
    /* exception/interrupt handling */
48 2c0262af bellard
    jmp_buf jmp_env;
49 2c0262af bellard
    int exception_index;
50 2c0262af bellard
    int interrupt_request;
51 2c0262af bellard
    struct TranslationBlock *current_tb;
52 2c0262af bellard
    int user_mode_only;
53 2c0262af bellard
54 d720b93d bellard
    /* in order to avoid passing too many arguments to the memory
55 d720b93d bellard
       write helpers, we store some rarely used information in the CPU
56 d720b93d bellard
       context) */
57 d720b93d bellard
    unsigned long mem_write_pc; /* host pc at which the memory was
58 d720b93d bellard
                                   written */
59 d720b93d bellard
    unsigned long mem_write_vaddr; /* target virtual addr at which the
60 d720b93d bellard
                                      memory was written */
61 2c0262af bellard
    /* user data */
62 2c0262af bellard
    void *opaque;
63 2c0262af bellard
} CPUARMState;
64 2c0262af bellard
65 2c0262af bellard
CPUARMState *cpu_arm_init(void);
66 2c0262af bellard
int cpu_arm_exec(CPUARMState *s);
67 2c0262af bellard
void cpu_arm_close(CPUARMState *s);
68 2c0262af bellard
/* you can call this signal handler from your SIGBUS and SIGSEGV
69 2c0262af bellard
   signal handlers to inform the virtual CPU of exceptions. non zero
70 2c0262af bellard
   is returned if the signal was handled by the virtual CPU.  */
71 2c0262af bellard
struct siginfo;
72 2c0262af bellard
int cpu_arm_signal_handler(int host_signum, struct siginfo *info, 
73 2c0262af bellard
                           void *puc);
74 2c0262af bellard
75 2c0262af bellard
#define TARGET_PAGE_BITS 12
76 2c0262af bellard
#include "cpu-all.h"
77 2c0262af bellard
78 2c0262af bellard
#endif