| 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 | \ |
|---|
| | 222 | inline 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 | |
|---|
| | 246 | flags_update(result8,uint8) |
|---|
| | 247 | flags_update(result16,uint16) |
|---|
| | 248 | flags_update(result32,uint32) |
|---|