Annotation of qemu/target-m68k/cpu.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * m68k virtual CPU header
                      3:  * 
                      4:  *  Copyright (c) 2005-2006 CodeSourcery
                      5:  *  Written by Paul Brook
                      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_M68K_H
                     22: #define CPU_M68K_H
                     23: 
                     24: #define TARGET_LONG_BITS 32
                     25: 
                     26: #include "cpu-defs.h"
                     27: 
                     28: #include "softfloat.h"
                     29: 
                     30: #define MAX_QREGS 32
                     31: 
                     32: #define TARGET_HAS_ICE 1
                     33: 
                     34: #define ELF_MACHINE    EM_68K
                     35: 
                     36: #define EXCP_ACCESS         2   /* Access (MMU) error.  */
                     37: #define EXCP_ADDRESS        3   /* Address error.  */
                     38: #define EXCP_ILLEGAL        4   /* Illegal instruction.  */
                     39: #define EXCP_DIV0           5   /* Divide by zero */
                     40: #define EXCP_PRIVILEGE      8   /* Privilege violation.  */
                     41: #define EXCP_TRACE          9
                     42: #define EXCP_LINEA          10  /* Unimplemented line-A (MAC) opcode.  */
                     43: #define EXCP_LINEF          11  /* Unimplemented line-F (FPU) opcode.  */
                     44: #define EXCP_DEBUGNBP       12  /* Non-breakpoint debug interrupt.  */
                     45: #define EXCP_DEBEGBP        13  /* Breakpoint debug interrupt.  */
                     46: #define EXCP_FORMAT         14  /* RTE format error.  */
                     47: #define EXCP_UNINITIALIZED  15
                     48: #define EXCP_TRAP0          32   /* User trap #0.  */
                     49: #define EXCP_TRAP15         47   /* User trap #15.  */
                     50: #define EXCP_UNSUPPORTED    61
                     51: #define EXCP_ICE            13
                     52: 
                     53: typedef struct CPUM68KState {
                     54:     uint32_t dregs[8];
                     55:     uint32_t aregs[8];
                     56:     uint32_t pc;
                     57:     uint32_t sr;
                     58: 
                     59:     /* Condition flags.  */
                     60:     uint32_t cc_op;
                     61:     uint32_t cc_dest;
                     62:     uint32_t cc_src;
                     63:     uint32_t cc_x;
                     64: 
                     65:     float64 fregs[8];
                     66:     float64 fp_result;
                     67:     uint32_t fpcr;
                     68:     uint32_t fpsr;
                     69:     float_status fp_status;
                     70: 
                     71:     /* Temporary storage for DIV helpers.  */
                     72:     uint32_t div1;
                     73:     uint32_t div2;
                     74:     
                     75:     /* MMU status.  */
                     76:     struct {
                     77:         uint32_t ar;
                     78:     } mmu;
                     79:     /* ??? remove this.  */
                     80:     uint32_t t1;
                     81: 
                     82:     /* exception/interrupt handling */
                     83:     jmp_buf jmp_env;
                     84:     int exception_index;
                     85:     int interrupt_request;
                     86:     int user_mode_only;
                     87:     uint32_t address;
                     88: 
                     89:     uint32_t qregs[MAX_QREGS];
                     90: 
                     91:     CPU_COMMON
                     92: } CPUM68KState;
                     93: 
                     94: CPUM68KState *cpu_m68k_init(void);
                     95: int cpu_m68k_exec(CPUM68KState *s);
                     96: void cpu_m68k_close(CPUM68KState *s);
                     97: /* you can call this signal handler from your SIGBUS and SIGSEGV
                     98:    signal handlers to inform the virtual CPU of exceptions. non zero
                     99:    is returned if the signal was handled by the virtual CPU.  */
                    100: int cpu_m68k_signal_handler(int host_signum, void *pinfo, 
                    101:                            void *puc);
                    102: void cpu_m68k_flush_flags(CPUM68KState *, int);
                    103: 
                    104: enum {
                    105:     CC_OP_DYNAMIC, /* Use env->cc_op  */
                    106:     CC_OP_FLAGS, /* CC_DEST = CVZN, CC_SRC = unused */
                    107:     CC_OP_LOGIC, /* CC_DEST = result, CC_SRC = unused */
                    108:     CC_OP_ADD,   /* CC_DEST = result, CC_SRC = source */
                    109:     CC_OP_SUB,   /* CC_DEST = result, CC_SRC = source */
                    110:     CC_OP_CMPB,  /* CC_DEST = result, CC_SRC = source */
                    111:     CC_OP_CMPW,  /* CC_DEST = result, CC_SRC = source */
                    112:     CC_OP_ADDX,  /* CC_DEST = result, CC_SRC = source */
                    113:     CC_OP_SUBX,  /* CC_DEST = result, CC_SRC = source */
                    114:     CC_OP_SHL,   /* CC_DEST = source, CC_SRC = shift */
                    115:     CC_OP_SHR,   /* CC_DEST = source, CC_SRC = shift */
                    116:     CC_OP_SAR,   /* CC_DEST = source, CC_SRC = shift */
                    117: };
                    118: 
                    119: #define CCF_C 0x01
                    120: #define CCF_V 0x02
                    121: #define CCF_Z 0x04
                    122: #define CCF_N 0x08
                    123: #define CCF_X 0x01
                    124: 
                    125: typedef struct m68k_def_t m68k_def_t;
                    126: 
                    127: m68k_def_t *m68k_find_by_name(const char *);
                    128: void cpu_m68k_register(CPUM68KState *, m68k_def_t *);
                    129: 
                    130: #define M68K_FPCR_PREC (1 << 6)
                    131: 
                    132: #ifdef CONFIG_USER_ONLY
                    133: /* Linux uses 8k pages.  */
                    134: #define TARGET_PAGE_BITS 13
                    135: #else
                    136: /* Smallest TLB entry size is 1k.  */ 
                    137: #define TARGET_PAGE_BITS 10
                    138: #endif
                    139: #include "cpu-all.h"
                    140: 
                    141: #endif

unix.superglobalmegacorp.com

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