void cpu_loop(CPUS390XState *env)

{

    CPUState *cs = CPU(s390_env_get_cpu(env));

    int trapnr, n, sig;

    target_siginfo_t info;

    target_ulong addr;



    while (1) {

        cpu_exec_start(cs);

        trapnr = cpu_s390x_exec(cs);

        cpu_exec_end(cs);

        switch (trapnr) {

        case EXCP_INTERRUPT:

            /* Just indicate that signals should be handled asap.  */

            break;



        case EXCP_SVC:

            n = env->int_svc_code;

            if (!n) {

                /* syscalls > 255 */

                n = env->regs[1];

            }

            env->psw.addr += env->int_svc_ilen;

            env->regs[2] = do_syscall(env, n, env->regs[2], env->regs[3],

                                      env->regs[4], env->regs[5],

                                      env->regs[6], env->regs[7], 0, 0);

            break;



        case EXCP_DEBUG:

            sig = gdb_handlesig(cs, TARGET_SIGTRAP);

            if (sig) {

                n = TARGET_TRAP_BRKPT;

                goto do_signal_pc;

            }

            break;

        case EXCP_PGM:

            n = env->int_pgm_code;

            switch (n) {

            case PGM_OPERATION:

            case PGM_PRIVILEGED:

                sig = TARGET_SIGILL;

                n = TARGET_ILL_ILLOPC;

                goto do_signal_pc;

            case PGM_PROTECTION:

            case PGM_ADDRESSING:

                sig = TARGET_SIGSEGV;

                /* XXX: check env->error_code */

                n = TARGET_SEGV_MAPERR;

                addr = env->__excp_addr;

                goto do_signal;

            case PGM_EXECUTE:

            case PGM_SPECIFICATION:

            case PGM_SPECIAL_OP:

            case PGM_OPERAND:

            do_sigill_opn:

                sig = TARGET_SIGILL;

                n = TARGET_ILL_ILLOPN;

                goto do_signal_pc;



            case PGM_FIXPT_OVERFLOW:

                sig = TARGET_SIGFPE;

                n = TARGET_FPE_INTOVF;

                goto do_signal_pc;

            case PGM_FIXPT_DIVIDE:

                sig = TARGET_SIGFPE;

                n = TARGET_FPE_INTDIV;

                goto do_signal_pc;



            case PGM_DATA:

                n = (env->fpc >> 8) & 0xff;

                if (n == 0xff) {

                    /* compare-and-trap */

                    goto do_sigill_opn;

                } else {

                    /* An IEEE exception, simulated or otherwise.  */

                    if (n & 0x80) {

                        n = TARGET_FPE_FLTINV;

                    } else if (n & 0x40) {

                        n = TARGET_FPE_FLTDIV;

                    } else if (n & 0x20) {

                        n = TARGET_FPE_FLTOVF;

                    } else if (n & 0x10) {

                        n = TARGET_FPE_FLTUND;

                    } else if (n & 0x08) {

                        n = TARGET_FPE_FLTRES;

                    } else {

                        /* ??? Quantum exception; BFP, DFP error.  */

                        goto do_sigill_opn;

                    }

                    sig = TARGET_SIGFPE;

                    goto do_signal_pc;

                }



            default:

                fprintf(stderr, "Unhandled program exception: %#x\n", n);

                cpu_dump_state(cs, stderr, fprintf, 0);

                exit(EXIT_FAILURE);

            }

            break;



        do_signal_pc:

            addr = env->psw.addr;

        do_signal:

            info.si_signo = sig;

            info.si_errno = 0;

            info.si_code = n;

            info._sifields._sigfault._addr = addr;

            queue_signal(env, info.si_signo, &info);

            break;



        default:

            fprintf(stderr, "Unhandled trap: 0x%x\n", trapnr);

            cpu_dump_state(cs, stderr, fprintf, 0);

            exit(EXIT_FAILURE);

        }

        process_pending_signals (env);

    }

}

void cpu_loop(CPUS390XState *env)

{

    CPUState *cs = CPU(s390_env_get_cpu(env));

    int trapnr, n, sig;

    target_siginfo_t info;

    target_ulong addr;



    while (1) {

        cpu_exec_start(cs);

        trapnr = cpu_s390x_exec(cs);

        cpu_exec_end(cs);

        switch (trapnr) {

        case EXCP_INTERRUPT:

            

            break;



        case EXCP_SVC:

            n = env->int_svc_code;

            if (!n) {

                

                n = env->regs[1];

            }

            env->psw.addr += env->int_svc_ilen;

            env->regs[2] = do_syscall(env, n, env->regs[2], env->regs[3],

                                      env->regs[4], env->regs[5],

                                      env->regs[6], env->regs[7], 0, 0);

            break;



        case EXCP_DEBUG:

            sig = gdb_handlesig(cs, TARGET_SIGTRAP);

            if (sig) {

                n = TARGET_TRAP_BRKPT;

                goto do_signal_pc;

            }

            break;

        case EXCP_PGM:

            n = env->int_pgm_code;

            switch (n) {

            case PGM_OPERATION:

            case PGM_PRIVILEGED:

                sig = TARGET_SIGILL;

                n = TARGET_ILL_ILLOPC;

                goto do_signal_pc;

            case PGM_PROTECTION:

            case PGM_ADDRESSING:

                sig = TARGET_SIGSEGV;

                

                n = TARGET_SEGV_MAPERR;

                addr = env->__excp_addr;

                goto do_signal;

            case PGM_EXECUTE:

            case PGM_SPECIFICATION:

            case PGM_SPECIAL_OP:

            case PGM_OPERAND:

            do_sigill_opn:

                sig = TARGET_SIGILL;

                n = TARGET_ILL_ILLOPN;

                goto do_signal_pc;



            case PGM_FIXPT_OVERFLOW:

                sig = TARGET_SIGFPE;

                n = TARGET_FPE_INTOVF;

                goto do_signal_pc;

            case PGM_FIXPT_DIVIDE:

                sig = TARGET_SIGFPE;

                n = TARGET_FPE_INTDIV;

                goto do_signal_pc;



            case PGM_DATA:

                n = (env->fpc >> 8) & 0xff;

                if (n == 0xff) {

                    

                    goto do_sigill_opn;

                } else {

                    

                    if (n & 0x80) {

                        n = TARGET_FPE_FLTINV;

                    } else if (n & 0x40) {

                        n = TARGET_FPE_FLTDIV;

                    } else if (n & 0x20) {

                        n = TARGET_FPE_FLTOVF;

                    } else if (n & 0x10) {

                        n = TARGET_FPE_FLTUND;

                    } else if (n & 0x08) {

                        n = TARGET_FPE_FLTRES;

                    } else {

                        

                        goto do_sigill_opn;

                    }

                    sig = TARGET_SIGFPE;

                    goto do_signal_pc;

                }



            default:

                fprintf(stderr, "Unhandled program exception: %#x\n", n);

                cpu_dump_state(cs, stderr, fprintf, 0);

                exit(EXIT_FAILURE);

            }

            break;



        do_signal_pc:

            addr = env->psw.addr;

        do_signal:

            info.si_signo = sig;

            info.si_errno = 0;

            info.si_code = n;

            info._sifields._sigfault._addr = addr;

            queue_signal(env, info.si_signo, &info);

            break;



        default:

            fprintf(stderr, "Unhandled trap: 0x%x\n", trapnr);

            cpu_dump_state(cs, stderr, fprintf, 0);

            exit(EXIT_FAILURE);

        }

        process_pending_signals (env);

    }

}

void FUNC_0(CPUS390XState *VAR_0)

{

    CPUState *cs = CPU(s390_env_get_cpu(VAR_0));

    int VAR_1, VAR_2, VAR_3;

    target_siginfo_t info;

    target_ulong addr;



    while (1) {

        cpu_exec_start(cs);

        VAR_1 = cpu_s390x_exec(cs);

        cpu_exec_end(cs);

        switch (VAR_1) {

        case EXCP_INTERRUPT:

            

            break;



        case EXCP_SVC:

            VAR_2 = VAR_0->int_svc_code;

            if (!VAR_2) {

                

                VAR_2 = VAR_0->regs[1];

            }

            VAR_0->psw.addr += VAR_0->int_svc_ilen;

            VAR_0->regs[2] = do_syscall(VAR_0, VAR_2, VAR_0->regs[2], VAR_0->regs[3],

                                      VAR_0->regs[4], VAR_0->regs[5],

                                      VAR_0->regs[6], VAR_0->regs[7], 0, 0);

            break;



        case EXCP_DEBUG:

            VAR_3 = gdb_handlesig(cs, TARGET_SIGTRAP);

            if (VAR_3) {

                VAR_2 = TARGET_TRAP_BRKPT;

                goto do_signal_pc;

            }

            break;

        case EXCP_PGM:

            VAR_2 = VAR_0->int_pgm_code;

            switch (VAR_2) {

            case PGM_OPERATION:

            case PGM_PRIVILEGED:

                VAR_3 = TARGET_SIGILL;

                VAR_2 = TARGET_ILL_ILLOPC;

                goto do_signal_pc;

            case PGM_PROTECTION:

            case PGM_ADDRESSING:

                VAR_3 = TARGET_SIGSEGV;

                

                VAR_2 = TARGET_SEGV_MAPERR;

                addr = VAR_0->__excp_addr;

                goto do_signal;

            case PGM_EXECUTE:

            case PGM_SPECIFICATION:

            case PGM_SPECIAL_OP:

            case PGM_OPERAND:

            do_sigill_opn:

                VAR_3 = TARGET_SIGILL;

                VAR_2 = TARGET_ILL_ILLOPN;

                goto do_signal_pc;



            case PGM_FIXPT_OVERFLOW:

                VAR_3 = TARGET_SIGFPE;

                VAR_2 = TARGET_FPE_INTOVF;

                goto do_signal_pc;

            case PGM_FIXPT_DIVIDE:

                VAR_3 = TARGET_SIGFPE;

                VAR_2 = TARGET_FPE_INTDIV;

                goto do_signal_pc;



            case PGM_DATA:

                VAR_2 = (VAR_0->fpc >> 8) & 0xff;

                if (VAR_2 == 0xff) {

                    

                    goto do_sigill_opn;

                } else {

                    

                    if (VAR_2 & 0x80) {

                        VAR_2 = TARGET_FPE_FLTINV;

                    } else if (VAR_2 & 0x40) {

                        VAR_2 = TARGET_FPE_FLTDIV;

                    } else if (VAR_2 & 0x20) {

                        VAR_2 = TARGET_FPE_FLTOVF;

                    } else if (VAR_2 & 0x10) {

                        VAR_2 = TARGET_FPE_FLTUND;

                    } else if (VAR_2 & 0x08) {

                        VAR_2 = TARGET_FPE_FLTRES;

                    } else {

                        

                        goto do_sigill_opn;

                    }

                    VAR_3 = TARGET_SIGFPE;

                    goto do_signal_pc;

                }



            default:

                fprintf(stderr, "Unhandled program exception: %#x\VAR_2", VAR_2);

                cpu_dump_state(cs, stderr, fprintf, 0);

                exit(EXIT_FAILURE);

            }

            break;



        do_signal_pc:

            addr = VAR_0->psw.addr;

        do_signal:

            info.si_signo = VAR_3;

            info.si_errno = 0;

            info.si_code = VAR_2;

            info._sifields._sigfault._addr = addr;

            queue_signal(VAR_0, info.si_signo, &info);

            break;



        default:

            fprintf(stderr, "Unhandled trap: 0x%x\VAR_2", VAR_1);

            cpu_dump_state(cs, stderr, fprintf, 0);

            exit(EXIT_FAILURE);

        }

        process_pending_signals (VAR_0);

    }

}

void FUNC_0(CPUS390XState *VAR_0)
{ CPUState *cs = CPU(s390_env_get_cpu(VAR_0)); int VAR_1, VAR_2, VAR_3; target_siginfo_t info; target_ulong addr; while (1) { cpu_exec_start(cs); VAR_1 = cpu_s390x_exec(cs); cpu_exec_end(cs); switch (VAR_1) { case EXCP_INTERRUPT:
break; case EXCP_SVC:
VAR_2 = VAR_0->int_svc_code; if (!VAR_2) { VAR_2 = VAR_0->regs[1]; } VAR_0->psw.addr += VAR_0->int_svc_ilen; VAR_0->regs[2] = do_syscall(VAR_0, VAR_2, VAR_0->regs[2], VAR_0->regs[3],
VAR_0->regs[4], VAR_0->regs[5],
VAR_0->regs[6], VAR_0->regs[7], 0, 0); break; case EXCP_DEBUG:
VAR_3 = gdb_handlesig(cs, TARGET_SIGTRAP); if (VAR_3) { VAR_2 = TARGET_TRAP_BRKPT; goto do_signal_pc; } break; case EXCP_PGM:
VAR_2 = VAR_0->int_pgm_code; switch (VAR_2) { case PGM_OPERATION:
case PGM_PRIVILEGED:
VAR_3 = TARGET_SIGILL; VAR_2 = TARGET_ILL_ILLOPC; goto do_signal_pc; case PGM_PROTECTION:
case PGM_ADDRESSING:
VAR_3 = TARGET_SIGSEGV; VAR_2 = TARGET_SEGV_MAPERR; addr = VAR_0->__excp_addr; goto do_signal; case PGM_EXECUTE:
case PGM_SPECIFICATION:
case PGM_SPECIAL_OP:
case PGM_OPERAND:
do_sigill_opn:
VAR_3 = TARGET_SIGILL; VAR_2 = TARGET_ILL_ILLOPN; goto do_signal_pc; case PGM_FIXPT_OVERFLOW:
VAR_3 = TARGET_SIGFPE; VAR_2 = TARGET_FPE_INTOVF; goto do_signal_pc; case PGM_FIXPT_DIVIDE:
VAR_3 = TARGET_SIGFPE; VAR_2 = TARGET_FPE_INTDIV; goto do_signal_pc; case PGM_DATA:
VAR_2 = (VAR_0->fpc >> 8) & 0xff; if (VAR_2 == 0xff) { goto do_sigill_opn; } else { if (VAR_2 & 0x80) { VAR_2 = TARGET_FPE_FLTINV; } else if (VAR_2 & 0x40) { VAR_2 = TARGET_FPE_FLTDIV; } else if (VAR_2 & 0x20) { VAR_2 = TARGET_FPE_FLTOVF; } else if (VAR_2 & 0x10) { VAR_2 = TARGET_FPE_FLTUND; } else if (VAR_2 & 0x08) { VAR_2 = TARGET_FPE_FLTRES; } else { goto do_sigill_opn; } VAR_3 = TARGET_SIGFPE; goto do_signal_pc; } default:
fprintf(stderr, "Unhandled program exception: %#x\VAR_2", VAR_2); cpu_dump_state(cs, stderr, fprintf, 0); exit(EXIT_FAILURE); } break; do_signal_pc:
addr = VAR_0->psw.addr; do_signal:
info.si_signo = VAR_3; info.si_errno = 0; info.si_code = VAR_2; info._sifields._sigfault._addr = addr; queue_signal(VAR_0, info.si_signo, &info); break; default:
fprintf(stderr, "Unhandled trap: 0x%x\VAR_2", VAR_1); cpu_dump_state(cs, stderr, fprintf, 0); exit(EXIT_FAILURE); } process_pending_signals (VAR_0); } }