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

1.1     ! root        1: /*
        !             2:  * S/390 virtual CPU header
        !             3:  *
        !             4:  *  Copyright (c) 2009 Ulrich Hecht
        !             5:  *
        !             6:  * This library is free software; you can redistribute it and/or
        !             7:  * modify it under the terms of the GNU Lesser General Public
        !             8:  * License as published by the Free Software Foundation; either
        !             9:  * version 2 of the License, or (at your option) any later version.
        !            10:  *
        !            11:  * This library is distributed in the hope that it will be useful,
        !            12:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
        !            14:  * Lesser General Public License for more details.
        !            15:  *
        !            16:  * You should have received a copy of the GNU Lesser General Public
        !            17:  * License along with this library; if not, write to the Free Software
        !            18:  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 USA
        !            19:  */
        !            20: #ifndef CPU_S390X_H
        !            21: #define CPU_S390X_H
        !            22: 
        !            23: #define TARGET_LONG_BITS 64
        !            24: 
        !            25: #define ELF_MACHINE    EM_S390
        !            26: 
        !            27: #define CPUState struct CPUS390XState
        !            28: 
        !            29: #include "cpu-defs.h"
        !            30: 
        !            31: #include "softfloat.h"
        !            32: 
        !            33: #define NB_MMU_MODES 2
        !            34: 
        !            35: typedef union FPReg {
        !            36:     struct {
        !            37: #ifdef WORDS_BIGENDIAN
        !            38:         float32 e;
        !            39:         int32_t __pad;
        !            40: #else
        !            41:         int32_t __pad;
        !            42:         float32 e;
        !            43: #endif
        !            44:     };
        !            45:     float64 d;
        !            46:     uint64_t i;
        !            47: } FPReg;
        !            48: 
        !            49: typedef struct CPUS390XState {
        !            50:     uint64_t regs[16]; /* GP registers */
        !            51: 
        !            52:     uint32_t aregs[16];        /* access registers */
        !            53: 
        !            54:     uint32_t fpc;      /* floating-point control register */
        !            55:     FPReg fregs[16]; /* FP registers */
        !            56:     float_status fpu_status; /* passed to softfloat lib */
        !            57: 
        !            58:     struct {
        !            59:         uint64_t mask;
        !            60:         uint64_t addr;
        !            61:     } psw;
        !            62: 
        !            63:     int cc; /* condition code (0-3) */
        !            64: 
        !            65:     uint64_t __excp_addr;
        !            66: 
        !            67:     CPU_COMMON
        !            68: } CPUS390XState;
        !            69: 
        !            70: #if defined(CONFIG_USER_ONLY)
        !            71: static inline void cpu_clone_regs(CPUState *env, target_ulong newsp)
        !            72: {
        !            73:     if (newsp)
        !            74:         env->regs[15] = newsp;
        !            75:     env->regs[0] = 0;
        !            76: }
        !            77: #endif
        !            78: 
        !            79: #define MMU_MODE0_SUFFIX _kernel
        !            80: #define MMU_MODE1_SUFFIX _user
        !            81: #define MMU_USER_IDX 1
        !            82: static inline int cpu_mmu_index (CPUState *env)
        !            83: {
        !            84:     /* XXX: Currently we don't implement virtual memory */
        !            85:     return 0;
        !            86: }
        !            87: 
        !            88: CPUS390XState *cpu_s390x_init(const char *cpu_model);
        !            89: int cpu_s390x_exec(CPUS390XState *s);
        !            90: void cpu_s390x_close(CPUS390XState *s);
        !            91: 
        !            92: /* you can call this signal handler from your SIGBUS and SIGSEGV
        !            93:    signal handlers to inform the virtual CPU of exceptions. non zero
        !            94:    is returned if the signal was handled by the virtual CPU.  */
        !            95: int cpu_s390x_signal_handler(int host_signum, void *pinfo,
        !            96:                            void *puc);
        !            97: int cpu_s390x_handle_mmu_fault (CPUS390XState *env, target_ulong address, int rw,
        !            98:                               int mmu_idx, int is_softmuu);
        !            99: #define cpu_handle_mmu_fault cpu_s390x_handle_mmu_fault
        !           100: 
        !           101: #define TARGET_PAGE_BITS 12
        !           102: 
        !           103: #ifndef CONFIG_USER_ONLY
        !           104: extern int s390_virtio_hypercall(CPUState *env);
        !           105: extern void kvm_s390_virtio_irq(CPUState *env, int config_change, uint64_t token);
        !           106: extern CPUState *s390_cpu_addr2state(uint16_t cpu_addr);
        !           107: #endif
        !           108: 
        !           109: 
        !           110: #define cpu_init cpu_s390x_init
        !           111: #define cpu_exec cpu_s390x_exec
        !           112: #define cpu_gen_code cpu_s390x_gen_code
        !           113: 
        !           114: #include "cpu-all.h"
        !           115: #include "exec-all.h"
        !           116: 
        !           117: #define EXCP_OPEX 1 /* operation exception (sigill) */
        !           118: #define EXCP_SVC 2 /* supervisor call (syscall) */
        !           119: #define EXCP_ADDR 5 /* addressing exception */
        !           120: #define EXCP_EXECUTE_SVC 0xff00000 /* supervisor call via execute insn */
        !           121: 
        !           122: static inline void cpu_pc_from_tb(CPUState *env, TranslationBlock* tb)
        !           123: {
        !           124:     env->psw.addr = tb->pc;
        !           125: }
        !           126: 
        !           127: static inline void cpu_get_tb_cpu_state(CPUState* env, target_ulong *pc,
        !           128:                                         target_ulong *cs_base, int *flags)
        !           129: {
        !           130:     *pc = env->psw.addr;
        !           131:     /* XXX this is correct for user-mode emulation, but needs
        !           132:      *     the asce register information as well when softmmu
        !           133:      *     is implemented in the future */
        !           134:     *cs_base = 0;
        !           135:     *flags = env->psw.mask;
        !           136: }
        !           137: 
        !           138: /* Program Status Word.  */
        !           139: #define S390_PSWM_REGNUM 0
        !           140: #define S390_PSWA_REGNUM 1
        !           141: /* General Purpose Registers.  */
        !           142: #define S390_R0_REGNUM 2
        !           143: #define S390_R1_REGNUM 3
        !           144: #define S390_R2_REGNUM 4
        !           145: #define S390_R3_REGNUM 5
        !           146: #define S390_R4_REGNUM 6
        !           147: #define S390_R5_REGNUM 7
        !           148: #define S390_R6_REGNUM 8
        !           149: #define S390_R7_REGNUM 9
        !           150: #define S390_R8_REGNUM 10
        !           151: #define S390_R9_REGNUM 11
        !           152: #define S390_R10_REGNUM 12
        !           153: #define S390_R11_REGNUM 13
        !           154: #define S390_R12_REGNUM 14
        !           155: #define S390_R13_REGNUM 15
        !           156: #define S390_R14_REGNUM 16
        !           157: #define S390_R15_REGNUM 17
        !           158: /* Access Registers.  */
        !           159: #define S390_A0_REGNUM 18
        !           160: #define S390_A1_REGNUM 19
        !           161: #define S390_A2_REGNUM 20
        !           162: #define S390_A3_REGNUM 21
        !           163: #define S390_A4_REGNUM 22
        !           164: #define S390_A5_REGNUM 23
        !           165: #define S390_A6_REGNUM 24
        !           166: #define S390_A7_REGNUM 25
        !           167: #define S390_A8_REGNUM 26
        !           168: #define S390_A9_REGNUM 27
        !           169: #define S390_A10_REGNUM 28
        !           170: #define S390_A11_REGNUM 29
        !           171: #define S390_A12_REGNUM 30
        !           172: #define S390_A13_REGNUM 31
        !           173: #define S390_A14_REGNUM 32
        !           174: #define S390_A15_REGNUM 33
        !           175: /* Floating Point Control Word.  */
        !           176: #define S390_FPC_REGNUM 34
        !           177: /* Floating Point Registers.  */
        !           178: #define S390_F0_REGNUM 35
        !           179: #define S390_F1_REGNUM 36
        !           180: #define S390_F2_REGNUM 37
        !           181: #define S390_F3_REGNUM 38
        !           182: #define S390_F4_REGNUM 39
        !           183: #define S390_F5_REGNUM 40
        !           184: #define S390_F6_REGNUM 41
        !           185: #define S390_F7_REGNUM 42
        !           186: #define S390_F8_REGNUM 43
        !           187: #define S390_F9_REGNUM 44
        !           188: #define S390_F10_REGNUM 45
        !           189: #define S390_F11_REGNUM 46
        !           190: #define S390_F12_REGNUM 47
        !           191: #define S390_F13_REGNUM 48
        !           192: #define S390_F14_REGNUM 49
        !           193: #define S390_F15_REGNUM 50
        !           194: /* Total.  */
        !           195: #define S390_NUM_REGS 51
        !           196: 
        !           197: /* Pseudo registers -- PC and condition code.  */
        !           198: #define S390_PC_REGNUM S390_NUM_REGS
        !           199: #define S390_CC_REGNUM (S390_NUM_REGS+1)
        !           200: #define S390_NUM_PSEUDO_REGS 2
        !           201: #define S390_NUM_TOTAL_REGS (S390_NUM_REGS+2)
        !           202: 
        !           203: 
        !           204: 
        !           205: /* Program Status Word.  */
        !           206: #define S390_PSWM_REGNUM 0
        !           207: #define S390_PSWA_REGNUM 1
        !           208: /* General Purpose Registers.  */
        !           209: #define S390_R0_REGNUM 2
        !           210: #define S390_R1_REGNUM 3
        !           211: #define S390_R2_REGNUM 4
        !           212: #define S390_R3_REGNUM 5
        !           213: #define S390_R4_REGNUM 6
        !           214: #define S390_R5_REGNUM 7
        !           215: #define S390_R6_REGNUM 8
        !           216: #define S390_R7_REGNUM 9
        !           217: #define S390_R8_REGNUM 10
        !           218: #define S390_R9_REGNUM 11
        !           219: #define S390_R10_REGNUM 12
        !           220: #define S390_R11_REGNUM 13
        !           221: #define S390_R12_REGNUM 14
        !           222: #define S390_R13_REGNUM 15
        !           223: #define S390_R14_REGNUM 16
        !           224: #define S390_R15_REGNUM 17
        !           225: /* Access Registers.  */
        !           226: #define S390_A0_REGNUM 18
        !           227: #define S390_A1_REGNUM 19
        !           228: #define S390_A2_REGNUM 20
        !           229: #define S390_A3_REGNUM 21
        !           230: #define S390_A4_REGNUM 22
        !           231: #define S390_A5_REGNUM 23
        !           232: #define S390_A6_REGNUM 24
        !           233: #define S390_A7_REGNUM 25
        !           234: #define S390_A8_REGNUM 26
        !           235: #define S390_A9_REGNUM 27
        !           236: #define S390_A10_REGNUM 28
        !           237: #define S390_A11_REGNUM 29
        !           238: #define S390_A12_REGNUM 30
        !           239: #define S390_A13_REGNUM 31
        !           240: #define S390_A14_REGNUM 32
        !           241: #define S390_A15_REGNUM 33
        !           242: /* Floating Point Control Word.  */
        !           243: #define S390_FPC_REGNUM 34
        !           244: /* Floating Point Registers.  */
        !           245: #define S390_F0_REGNUM 35
        !           246: #define S390_F1_REGNUM 36
        !           247: #define S390_F2_REGNUM 37
        !           248: #define S390_F3_REGNUM 38
        !           249: #define S390_F4_REGNUM 39
        !           250: #define S390_F5_REGNUM 40
        !           251: #define S390_F6_REGNUM 41
        !           252: #define S390_F7_REGNUM 42
        !           253: #define S390_F8_REGNUM 43
        !           254: #define S390_F9_REGNUM 44
        !           255: #define S390_F10_REGNUM 45
        !           256: #define S390_F11_REGNUM 46
        !           257: #define S390_F12_REGNUM 47
        !           258: #define S390_F13_REGNUM 48
        !           259: #define S390_F14_REGNUM 49
        !           260: #define S390_F15_REGNUM 50
        !           261: /* Total.  */
        !           262: #define S390_NUM_REGS 51
        !           263: 
        !           264: /* Pseudo registers -- PC and condition code.  */
        !           265: #define S390_PC_REGNUM S390_NUM_REGS
        !           266: #define S390_CC_REGNUM (S390_NUM_REGS+1)
        !           267: #define S390_NUM_PSEUDO_REGS 2
        !           268: #define S390_NUM_TOTAL_REGS (S390_NUM_REGS+2)
        !           269: 
        !           270: 
        !           271: #endif

unix.superglobalmegacorp.com

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