Hi Blue,

On Tue, Jun 19, 2012 at 2:24 AM, Blue Swirl <blauwir...@gmail.com> wrote:
> On Mon, Jun 18, 2012 at 1:02 AM, Jia Liu <pro...@gmail.com> wrote:
>> Add OpenRISC target machine.
>>
>> Signed-off-by: Jia Liu <pro...@gmail.com>
>> ---
>>  target-openrisc/cpu.h     |   67 
>> ++++++++++++++++++++++++++++++++++++++++++++-
>>  target-openrisc/machine.c |   22 ++++++++++++++-
>>  2 files changed, 87 insertions(+), 2 deletions(-)
>>
>> diff --git a/target-openrisc/cpu.h b/target-openrisc/cpu.h
>> index 9f9f4b5..498075a 100644
>> --- a/target-openrisc/cpu.h
>> +++ b/target-openrisc/cpu.h
>> @@ -44,6 +44,15 @@ struct CPUOpenRISCState;
>>  #define TARGET_PHYS_ADDR_SPACE_BITS 32
>>  #define TARGET_VIRT_ADDR_SPACE_BITS 32
>>
>> +#define SET_FP_CAUSE(reg, v)    do {\
>> +                                    (reg) = ((reg) & ~(0x3f << 12)) | \
>> +                                            ((v & 0x3f) << 12);\
>> +                                } while (0)
>> +#define GET_FP_ENABLE(reg)       (((reg) >>  7) & 0x1f)
>> +#define UPDATE_FP_FLAGS(reg, v)   do {\
>> +                                      (reg) |= ((v & 0x1f) << 2);\
>> +                                  } while (0)
>> +
>>  /* Internel flags, delay slot flag */
>
> Internal

Oh! Sorry, thank you for point this.

>
>>  #define D_FLAG    1
>>
>> @@ -117,6 +126,40 @@ enum {
>>     IMMUCFGR_HTR = (1 << 11),
>>  };
>>
>> +/* Float piont control status register */
>
> point

Oh! Sorry, thank you for point this.

>
>> +enum {
>> +    FPCSR_FPEE = 1,
>> +    FPCSR_RM = (3 << 1),
>> +    FPCSR_OVF = (1 << 3),
>> +    FPCSR_UNF = (1 << 4),
>> +    FPCSR_SNF = (1 << 5),
>> +    FPCSR_QNF = (1 << 6),
>> +    FPCSR_ZF = (1 << 7),
>> +    FPCSR_IXF = (1 << 8),
>> +    FPCSR_IVF = (1 << 9),
>> +    FPCSR_INF = (1 << 10),
>> +    FPCSR_DZF = (1 << 11),
>> +};
>> +
>> +/* Exceptions indices */
>> +enum {
>> +    EXCP_RESET    = 0x1,
>> +    EXCP_BUSERR   = 0x2,
>> +    EXCP_DPF      = 0x3,
>> +    EXCP_IPF      = 0x4,
>> +    EXCP_TICK     = 0x5,
>> +    EXCP_ALIGN    = 0x6,
>> +    EXCP_ILLEGAL  = 0x7,
>> +    EXCP_INT      = 0x8,
>> +    EXCP_DTLBMISS = 0x9,
>> +    EXCP_ITLBMISS = 0xa,
>> +    EXCP_RANGE    = 0xb,
>> +    EXCP_SYSCALL  = 0xc,
>> +    EXCP_FPE      = 0xd,
>> +    EXCP_TRAP     = 0xe,
>> +    EXCP_NR,
>> +};
>> +
>>  /* Supervisor register */
>>  enum {
>>     SR_SM = 1,
>> @@ -151,6 +194,14 @@ enum {
>>     OPENRISC_FEATURE_OR1200,
>>  };
>>
>> +/* Tick Timer Mode Register */
>> +enum {
>> +    TTMR_TP = (0xfffffff),
>> +    TTMR_IP = (1 << 28),
>> +    TTMR_IE = (1 << 29),
>> +    TTMR_M  = (3 << 30),
>> +};
>> +
>>  typedef struct CPUOpenRISCState CPUOpenRISCState;
>>  struct CPUOpenRISCState {
>>     target_ulong gpr[32];     /* General registers */
>> @@ -159,12 +210,25 @@ struct CPUOpenRISCState {
>>     target_ulong ppc;         /* Prev PC */
>>     target_ulong jmp_pc;      /* Jump PC */
>>
>> +    target_ulong machi;       /* Multiply register MACHI */
>> +    target_ulong maclo;       /* Multiply register MACLO */
>> +
>> +    target_ulong fpmaddhi;    /* Multiply and add float register FPMADDHI */
>> +    target_ulong fpmaddlo;    /* Multiply and add float register FPMADDLO */
>> +
>> +    target_ulong epcr;        /* Exception PC register */
>> +    target_ulong eear;        /* Exception EA register */
>> +
>>     uint32_t sr;              /* Supervisor register */
>>     uint32_t vr;              /* Version register */
>>     uint32_t upr;             /* Unit presence register */
>>     uint32_t cpucfgr;         /* CPU configure register */
>>     uint32_t dmmucfgr;        /* DMMU configure register */
>>     uint32_t immucfgr;        /* IMMU configure register */
>> +    uint32_t esr;             /* Exception supervisor register */
>> +    uint32_t fpcsr;           /* Float register */
>> +    float_status fp_status;
>> +
>>     uint32_t flags;           /* cpu_flags, we only use it for exception
>>                                  in solt so far.  */
>>     uint32_t btaken;          /* the SR_F bit */
>> @@ -265,7 +329,8 @@ static inline void cpu_get_tb_cpu_state(CPUOpenRISCState 
>> *env,
>>  {
>>     *pc = env->pc;
>>     *cs_base = 0;
>> -    *flags = 0;
>> +    /* D_FLAG -- branch insrtuction exception */
>
> instruction

Oh! Sorry, thank you for point this.

>
>> +    *flags = (env->flags&D_FLAG);
>
> Please add spaces around '&'. Also the parentheses are not necessary.
>

Added, thanks.

>>  }
>>
>>  static inline int cpu_mmu_index(CPUOpenRISCState *env)
>> diff --git a/target-openrisc/machine.c b/target-openrisc/machine.c
>> index 11bf275..e5d59a7 100644
>> --- a/target-openrisc/machine.c
>> +++ b/target-openrisc/machine.c
>> @@ -20,11 +20,31 @@
>>  #include "hw/hw.h"
>>  #include "hw/boards.h"
>>
>> +static const VMStateDescription vmstate_cpu = {
>> +    .name = "cpu",
>> +    .version_id = CPU_SAVE_VERSION,
>> +    .minimum_version_id = 1,
>> +    .minimum_version_id_old = 1,
>> +    .fields = (VMStateField[]) {
>> +        VMSTATE_UINT32_ARRAY(gpr, CPUOpenRISCState, 32),
>> +        VMSTATE_UINT32(sr, CPUOpenRISCState),
>> +        VMSTATE_UINT32(epcr, CPUOpenRISCState),
>> +        VMSTATE_UINT32(eear, CPUOpenRISCState),
>> +        VMSTATE_UINT32(esr, CPUOpenRISCState),
>> +        VMSTATE_UINT32(fpcsr, CPUOpenRISCState),
>> +        VMSTATE_UINT32(pc, CPUOpenRISCState),
>> +        VMSTATE_UINT32(npc, CPUOpenRISCState),
>> +        VMSTATE_UINT32(ppc, CPUOpenRISCState),
>> +        VMSTATE_END_OF_LIST()
>> +    }
>> +};
>> +
>>  void cpu_save(QEMUFile *f, void *opaque)
>>  {
>> +    vmstate_save_state(f, &vmstate_cpu, opaque);
>>  }
>>
>>  int cpu_load(QEMUFile *f, void *opaque, int version_id)
>>  {
>> -    return 0;
>> +    return vmstate_load_state(f, &vmstate_cpu, opaque, version_id);
>>  }
>> --
>> 1.7.9.5
>>
>>


Regards,
Jia.

Reply via email to