Changeset 846

Show
Ignore:
Timestamp:
02/08/07 21:19:48 (2 years ago)
Author:
common
Message:

libemu

  • fix 8bit registers
  • move result32_flags_update declarations to _data
  • implement result32_flags_update as makro (less code)
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • libemu/trunk/include/emu/emu_cpu.h

    r845 r846  
    2929enum emu_reg8 
    3030{ 
    31         al=0, ah,       /* eax */ 
    32         cl, ch,         /* ecx */ 
    33         dl, dh,         /* edx */ 
    34         bl, bh          /* ebx */ 
     31        al=0,   /* eax */ 
     32        cl,     /* ecx */ 
     33        dl,     /* edx */ 
     34        bl,     /* ebx */ 
     35        ah,     /* eax */ 
     36        ch,     /* ecx */ 
     37        dh,     /* edx */ 
     38        bh      /* ebx */ 
     39 
    3540}; 
    3641 
     
    6065 
    6166 
    62 inline void result8_flags_update(struct emu_cpu *c, uint8_t result); 
    63 inline void result16_flags_update(struct emu_cpu *c, uint16_t result); 
    64 inline void result32_flags_update(struct emu_cpu *c, uint32_t result); 
    6567 
    6668 
  • libemu/trunk/include/emu/emu_cpu_data.h

    r832 r846  
    103103 
    104104 
     105inline void result8_flags_update(struct emu_cpu *c, uint8_t result); 
     106inline void result16_flags_update(struct emu_cpu *c, uint16_t result); 
     107inline void result32_flags_update(struct emu_cpu *c, uint32_t result); 
     108 
     109 
    105110#endif /*EMU_CPU_DATA_H_*/ 
  • libemu/trunk/src/emu_cpu.c

    r845 r846  
    217217} 
    218218 
    219 inline void result8_flags_update(struct emu_cpu *c, uint8_t result) 
    220 
    221         int i; 
    222         int num_bits=0; 
    223         for ( i=0;i<sizeof(result);i++ ) 
    224                 if (result & (1 << i) ) 
    225                         num_bits++; 
    226  
    227         if (num_bits == 0) 
    228                 CPU_FLAG_SET(c,f_zf); 
    229  
    230         if ((num_bits %2) == 0) 
    231                 CPU_FLAG_SET(c,f_pf); 
    232  
    233         if (result & (1 << (sizeof(result) - 1))) 
    234                 CPU_FLAG_SET(c,f_sf); 
    235 
    236  
    237 inline void result16_flags_update(struct emu_cpu *c, uint16_t result) 
    238 
    239         int i; 
    240         int num_bits=0; 
    241         for ( i=0;i<sizeof(result);i++ ) 
    242                 if (result & (1 << i) ) 
    243                         num_bits++; 
    244  
    245         if (num_bits == 0) 
    246                 CPU_FLAG_SET(c,f_zf); 
    247  
    248         if ((num_bits %2) == 0) 
    249                 CPU_FLAG_SET(c,f_pf); 
    250  
    251         if (result & (1 << (sizeof(result) - 1))) 
    252                 CPU_FLAG_SET(c,f_sf);} 
    253  
    254 inline void result32_flags_update(struct emu_cpu *c, uint32_t result) 
    255 
    256         int i; 
    257         int num_bits=0; 
    258         for ( i=0;i<sizeof(result);i++ ) 
    259                 if (result & (1 << i) ) 
    260                         num_bits++; 
    261  
    262         if (num_bits == 0) 
    263                 CPU_FLAG_SET(c,f_zf); 
    264  
    265         if ((num_bits %2) == 0) 
    266                 CPU_FLAG_SET(c,f_pf); 
    267  
    268         if (result & (1 << (sizeof(result) - 1))) 
    269                 CPU_FLAG_SET(c,f_sf); 
    270 
     219 
     220#define flags_update(name,size)                                                                                                 \ 
     221                                                                                                                                                                \ 
     222inline void name##_flags_update(struct emu_cpu *c, size##_t result)                             \ 
     223{                                                                                                                                                               \ 
     224        int i;                                                                                                                                          \ 
     225        int num_bits=0;                                                                                                                         \ 
     226        for ( i=0;i<sizeof(result)*8;i++ )                                                                                      \ 
     227                if (result & (1 << i) )                                                                                                 \ 
     228                        num_bits++;                                                                                                                     \ 
     229                                                                                                                                                                \ 
     230        int num_p_bits=0;                                                                                                                       \ 
     231        for ( i=0;i<8;i++ )                                                                                                                     \ 
     232                if (result & (1 << i) )                                                                                                 \ 
     233                        num_p_bits++;                                                                                                           \ 
     234                                                                                                                                                                \ 
     235        if (num_bits == 0)                                                                                                                      \ 
     236                CPU_FLAG_SET(c,f_zf);                                                                                                   \ 
     237                                                                                                                                                                \ 
     238        if ((num_p_bits % 2) == 0)                                                                                                      \ 
     239                CPU_FLAG_SET(c,f_pf);                                                                                                   \ 
     240                                                                                                                                                                \ 
     241        if (result & (1 << (sizeof(result) - 1)))                                                                       \ 
     242                CPU_FLAG_SET(c,f_sf);                                                                                                   \ 
     243}                                                                                                                                                               \ 
     244 
     245 
     246flags_update(result8,uint8) 
     247flags_update(result16,uint16) 
     248flags_update(result32,uint32) 
    271249 
    272250void emu_cpu_eip_set(struct emu_cpu *c, uint32_t val)