Annotation of qemu/target-cris/cpu.h, revision 1.1

1.1     ! root        1: /*
        !             2:  *  CRIS virtual CPU header
        !             3:  *
        !             4:  *  Copyright (c) 2007 AXIS Communications AB
        !             5:  *  Written by Edgar E. Iglesias
        !             6:  *
        !             7:  * This library is free software; you can redistribute it and/or
        !             8:  * modify it under the terms of the GNU Lesser General Public
        !             9:  * License as published by the Free Software Foundation; either
        !            10:  * version 2 of the License, or (at your option) any later version.
        !            11:  *
        !            12:  * This library is distributed in the hope that it will be useful,
        !            13:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            14:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
        !            15:  * General Public License for more details.
        !            16:  *
        !            17:  * You should have received a copy of the GNU Lesser General Public
        !            18:  * License along with this library; if not, write to the Free Software
        !            19:  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
        !            20:  */
        !            21: #ifndef CPU_CRIS_H
        !            22: #define CPU_CRIS_H
        !            23: 
        !            24: #define TARGET_LONG_BITS 32
        !            25: 
        !            26: #include "cpu-defs.h"
        !            27: 
        !            28: #include "softfloat.h"
        !            29: 
        !            30: #define TARGET_HAS_ICE 1
        !            31: 
        !            32: #define ELF_MACHINE    EM_CRIS
        !            33: 
        !            34: #define EXCP_MMU_EXEC    0
        !            35: #define EXCP_MMU_READ    1
        !            36: #define EXCP_MMU_WRITE   2
        !            37: #define EXCP_MMU_FLUSH   3
        !            38: #define EXCP_MMU_MISS    4
        !            39: #define EXCP_BREAK      16 /* trap.  */
        !            40: 
        !            41: /* CPU flags.  */
        !            42: #define S_FLAG 0x200
        !            43: #define R_FLAG 0x100
        !            44: #define P_FLAG 0x80
        !            45: #define U_FLAG 0x40
        !            46: #define P_FLAG 0x80
        !            47: #define U_FLAG 0x40
        !            48: #define I_FLAG 0x20
        !            49: #define X_FLAG 0x10
        !            50: #define N_FLAG 0x08
        !            51: #define Z_FLAG 0x04
        !            52: #define V_FLAG 0x02
        !            53: #define C_FLAG 0x01
        !            54: #define ALU_FLAGS 0x1F
        !            55: 
        !            56: /* Condition codes.  */
        !            57: #define CC_CC   0
        !            58: #define CC_CS   1
        !            59: #define CC_NE   2
        !            60: #define CC_EQ   3
        !            61: #define CC_VC   4
        !            62: #define CC_VS   5
        !            63: #define CC_PL   6
        !            64: #define CC_MI   7
        !            65: #define CC_LS   8
        !            66: #define CC_HI   9
        !            67: #define CC_GE  10
        !            68: #define CC_LT  11
        !            69: #define CC_GT  12
        !            70: #define CC_LE  13
        !            71: #define CC_A   14
        !            72: #define CC_P   15
        !            73: 
        !            74: /* Internal flags for the implementation.  */
        !            75: #define F_DELAYSLOT 1
        !            76: 
        !            77: #define NB_MMU_MODES 2
        !            78: 
        !            79: typedef struct CPUCRISState {
        !            80:        uint32_t debug1;
        !            81:        uint32_t debug2;
        !            82:        uint32_t debug3;
        !            83: 
        !            84:        /*
        !            85:         * We just store the stores to the tlbset here for later evaluation
        !            86:         * when the hw needs access to them.
        !            87:         *
        !            88:         * One for I and another for D.
        !            89:         */
        !            90:        struct
        !            91:        {
        !            92:                uint32_t hi;
        !            93:                uint32_t lo;
        !            94:        } tlbsets[2][4][16];
        !            95: 
        !            96:        uint32_t sregs[256][16]; /* grrr why so many??  */
        !            97:        uint32_t regs[16];
        !            98:        uint32_t pregs[16];
        !            99:        uint32_t pc;
        !           100:        uint32_t sr;
        !           101:        uint32_t flag_mask; /* Per insn mask of affected flags.  */
        !           102: 
        !           103:        /* SSP and USP.  */
        !           104:        int current_sp;
        !           105:        uint32_t sp[2];
        !           106: 
        !           107:        /* These are setup up by the guest code just before transfering the
        !           108:           control back to the host.  */
        !           109:        int jmp;
        !           110:        uint32_t btarget;
        !           111:        int btaken;
        !           112: 
        !           113:        /* for traps.  */
        !           114:        int trapnr;
        !           115: 
        !           116:        /* Condition flag tracking.  */
        !           117:        uint32_t cc_op;
        !           118:        uint32_t cc_mask;
        !           119:        uint32_t cc_dest;
        !           120:        uint32_t cc_src;
        !           121:        uint32_t cc_result;
        !           122: 
        !           123:        /* size of the operation, 1 = byte, 2 = word, 4 = dword.  */
        !           124:        int cc_size;
        !           125: 
        !           126:        /* extended arithmetics.  */
        !           127:        int cc_x_live;
        !           128:        int cc_x;
        !           129: 
        !           130:        int features;
        !           131: 
        !           132:         uint64_t pending_interrupts;
        !           133:        int interrupt_request;
        !           134:        int exception_index;
        !           135:        int user_mode_only;
        !           136:        int halted;
        !           137: 
        !           138:        struct
        !           139:        {
        !           140:                int exec_insns;
        !           141:                int exec_loads;
        !           142:                int exec_stores;
        !           143:        } stats;
        !           144: 
        !           145: 
        !           146:        jmp_buf jmp_env;
        !           147:        CPU_COMMON
        !           148: } CPUCRISState;
        !           149: 
        !           150: CPUCRISState *cpu_cris_init(const char *cpu_model);
        !           151: int cpu_cris_exec(CPUCRISState *s);
        !           152: void cpu_cris_close(CPUCRISState *s);
        !           153: void do_interrupt(CPUCRISState *env);
        !           154: /* you can call this signal handler from your SIGBUS and SIGSEGV
        !           155:    signal handlers to inform the virtual CPU of exceptions. non zero
        !           156:    is returned if the signal was handled by the virtual CPU.  */
        !           157: int cpu_cris_signal_handler(int host_signum, void *pinfo,
        !           158:                            void *puc);
        !           159: void cpu_cris_flush_flags(CPUCRISState *, int);
        !           160: 
        !           161: 
        !           162: void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec,
        !           163:                           int is_asi);
        !           164: 
        !           165: enum {
        !           166:     CC_OP_DYNAMIC, /* Use env->cc_op  */
        !           167:     CC_OP_FLAGS,
        !           168:     CC_OP_LOGIC,
        !           169:     CC_OP_CMP,
        !           170:     CC_OP_MOVE,
        !           171:     CC_OP_MOVE_PD,
        !           172:     CC_OP_MOVE_SD,
        !           173:     CC_OP_ADD,
        !           174:     CC_OP_ADDC,
        !           175:     CC_OP_MCP,
        !           176:     CC_OP_ADDU,
        !           177:     CC_OP_SUB,
        !           178:     CC_OP_SUBU,
        !           179:     CC_OP_NEG,
        !           180:     CC_OP_BTST,
        !           181:     CC_OP_MULS,
        !           182:     CC_OP_MULU,
        !           183:     CC_OP_DSTEP,
        !           184:     CC_OP_BOUND,
        !           185: 
        !           186:     CC_OP_OR,
        !           187:     CC_OP_AND,
        !           188:     CC_OP_XOR,
        !           189:     CC_OP_LSL,
        !           190:     CC_OP_LSR,
        !           191:     CC_OP_ASR,
        !           192:     CC_OP_LZ
        !           193: };
        !           194: 
        !           195: #define CCF_C 0x01
        !           196: #define CCF_V 0x02
        !           197: #define CCF_Z 0x04
        !           198: #define CCF_N 0x08
        !           199: #define CCF_X 0x10
        !           200: 
        !           201: #define CRIS_SSP    0
        !           202: #define CRIS_USP    1
        !           203: 
        !           204: void cris_set_irq_level(CPUCRISState *env, int level, uint8_t vector);
        !           205: void cris_set_macsr(CPUCRISState *env, uint32_t val);
        !           206: void cris_switch_sp(CPUCRISState *env);
        !           207: 
        !           208: void do_cris_semihosting(CPUCRISState *env, int nr);
        !           209: 
        !           210: enum cris_features {
        !           211:     CRIS_FEATURE_CF_ISA_MUL,
        !           212: };
        !           213: 
        !           214: static inline int cris_feature(CPUCRISState *env, int feature)
        !           215: {
        !           216:     return (env->features & (1u << feature)) != 0;
        !           217: }
        !           218: 
        !           219: void register_cris_insns (CPUCRISState *env);
        !           220: 
        !           221: /* CRIS uses 8k pages.  */
        !           222: #define TARGET_PAGE_BITS 13
        !           223: 
        !           224: #define CPUState CPUCRISState
        !           225: #define cpu_init cpu_cris_init
        !           226: #define cpu_exec cpu_cris_exec
        !           227: #define cpu_gen_code cpu_cris_gen_code
        !           228: #define cpu_signal_handler cpu_cris_signal_handler
        !           229: 
        !           230: /* MMU modes definitions */
        !           231: #define MMU_MODE0_SUFFIX _kernel
        !           232: #define MMU_MODE1_SUFFIX _user
        !           233: #define MMU_USER_IDX 1
        !           234: /* CRIS FIXME: I guess we want to validate supervisor mode acceses here.  */
        !           235: static inline int cpu_mmu_index (CPUState *env)
        !           236: {
        !           237:     return 0;
        !           238: }
        !           239: 
        !           240: #include "cpu-all.h"
        !           241: 
        !           242: /* Register aliases.  */
        !           243: #define REG_SP  14
        !           244: #define REG_ACR 15
        !           245: #define REG_MOF 7
        !           246: 
        !           247: /* Support regs.  */
        !           248: #define SR_PID 2
        !           249: #define SR_SRS 3
        !           250: #define SR_EBP 9
        !           251: #define SR_ERP 10
        !           252: #define SR_CCS 13
        !           253: 
        !           254: /* Support func regs.  */
        !           255: #define SFR_RW_GC_CFG      0][0
        !           256: #define SFR_RW_MM_CFG      1][0
        !           257: #define SFR_RW_MM_KBASE_LO 1][1
        !           258: #define SFR_RW_MM_KBASE_HI 1][2
        !           259: #define SFR_R_MM_CAUSE     1][3
        !           260: #define SFR_RW_MM_TLB_SEL  1][4
        !           261: #define SFR_RW_MM_TLB_LO   1][5
        !           262: #define SFR_RW_MM_TLB_HI   1][6
        !           263: 
        !           264: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.