~vcs-imports/qemu/git

« back to all changes in this revision

Viewing changes to target-i386/cpu.h

  • Committer: ths
  • Date: 2007-09-16 21:08:06 UTC
  • Revision ID: git-v1:5fafdf24ef2c090c164d4dc89684b3f379dbdd87
find -type f | xargs sed -i 's/[\t ]$//g' # on most files


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3173 c046a42c-6fe2-441c-8c8c-71466251a162

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 * i386 virtual CPU header
3
 
 * 
 
3
 *
4
4
 *  Copyright (c) 2003 Fabrice Bellard
5
5
 *
6
6
 * This library is free software; you can redistribute it and/or
116
116
#define NT_MASK                 0x00004000
117
117
#define RF_MASK                 0x00010000
118
118
#define VM_MASK                 0x00020000
119
 
#define AC_MASK                 0x00040000 
 
119
#define AC_MASK                 0x00040000
120
120
#define VIF_MASK                0x00080000
121
121
#define VIP_MASK                0x00100000
122
122
#define ID_MASK                 0x00200000
476
476
        int i32;
477
477
        int64_t i64;
478
478
    } fp_convert;
479
 
    
 
479
   
480
480
    float_status sse_status;
481
481
    uint32_t mxcsr;
482
482
    XMMReg xmm_regs[CPU_NB_REGS];
504
504
    uint32_t saved_esp;
505
505
    int native_fp_regs; /* if true, the FPU state is in the native CPU regs */
506
506
#endif
507
 
    
 
507
   
508
508
    /* exception/interrupt handling */
509
509
    jmp_buf jmp_env;
510
510
    int exception_index;
513
513
    target_ulong exception_next_eip;
514
514
    target_ulong dr[8]; /* debug registers */
515
515
    uint32_t smbase;
516
 
    int interrupt_request; 
 
516
    int interrupt_request;
517
517
    int user_mode_only; /* user mode only simulation */
518
518
    int old_exception;  /* exception in flight */
519
519
 
531
531
    uint32_t cpuid_model[12];
532
532
    uint32_t cpuid_ext2_features;
533
533
    uint32_t cpuid_apic_id;
534
 
    
 
534
   
535
535
#ifdef USE_KQEMU
536
536
    int kqemu_enabled;
537
537
    int last_io_time;
550
550
 
551
551
/* this function must always be used to load data in the segment
552
552
   cache: it synchronizes the hflags with the segment cache values */
553
 
static inline void cpu_x86_load_seg_cache(CPUX86State *env, 
 
553
static inline void cpu_x86_load_seg_cache(CPUX86State *env,
554
554
                                          int seg_reg, unsigned int selector,
555
555
                                          target_ulong base,
556
 
                                          unsigned int limit, 
 
556
                                          unsigned int limit,
557
557
                                          unsigned int flags)
558
558
{
559
559
    SegmentCache *sc;
560
560
    unsigned int new_hflags;
561
 
    
 
561
   
562
562
    sc = &env->segs[seg_reg];
563
563
    sc->selector = selector;
564
564
    sc->base = base;
573
573
                /* long mode */
574
574
                env->hflags |= HF_CS32_MASK | HF_SS32_MASK | HF_CS64_MASK;
575
575
                env->hflags &= ~(HF_ADDSEG_MASK);
576
 
            } else 
 
576
            } else
577
577
#endif
578
578
            {
579
579
                /* legacy / compatibility case */
587
587
            >> (DESC_B_SHIFT - HF_SS32_SHIFT);
588
588
        if (env->hflags & HF_CS64_MASK) {
589
589
            /* zero base assumed for DS, ES and SS in long mode */
590
 
        } else if (!(env->cr[0] & CR0_PE_MASK) || 
 
590
        } else if (!(env->cr[0] & CR0_PE_MASK) ||
591
591
                   (env->eflags & VM_MASK) ||
592
592
                   !(env->hflags & HF_CS32_MASK)) {
593
593
            /* XXX: try to avoid this test. The problem comes from the
597
597
               translate-i386.c. */
598
598
            new_hflags |= HF_ADDSEG_MASK;
599
599
        } else {
600
 
            new_hflags |= ((env->segs[R_DS].base | 
 
600
            new_hflags |= ((env->segs[R_DS].base |
601
601
                            env->segs[R_ES].base |
602
 
                            env->segs[R_SS].base) != 0) << 
 
602
                            env->segs[R_SS].base) != 0) <<
603
603
                HF_ADDSEG_SHIFT;
604
604
        }
605
 
        env->hflags = (env->hflags & 
 
605
        env->hflags = (env->hflags &
606
606
                       ~(HF_SS32_MASK | HF_ADDSEG_MASK)) | new_hflags;
607
607
    }
608
608
}
630
630
/* you can call this signal handler from your SIGBUS and SIGSEGV
631
631
   signal handlers to inform the virtual CPU of exceptions. non zero
632
632
   is returned if the signal was handled by the virtual CPU.  */
633
 
int cpu_x86_signal_handler(int host_signum, void *pinfo, 
 
633
int cpu_x86_signal_handler(int host_signum, void *pinfo,
634
634
                           void *puc);
635
635
void cpu_x86_set_a20(CPUX86State *env, int a20_state);
636
636