| 362 | } |
| 363 | |
| 364 | const char* srcGetOF(struct GenData* data) { |
| 365 | switch (data->lazyFlags) { |
| 366 | case sFLAGS_NONE: |
| 367 | return "(cpu->flags & OF)"; |
| 368 | case sFLAGS_ADD8: |
| 369 | return "(((cpu->dst.u8 ^ cpu->src.u8 ^ 0x80) & (cpu->result.u8 ^ cpu->src.u8)) & 0x80)"; |
| 370 | case sFLAGS_OR8: |
| 371 | return "0"; |
| 372 | case sFLAGS_ADC8: |
| 373 | return "(((cpu->dst.u8 ^ cpu->src.u8 ^ 0x80) & (cpu->result.u8 ^ cpu->src.u8)) & 0x80)"; |
| 374 | case sFLAGS_SBB8: |
| 375 | return "(((cpu->dst.u8 ^ cpu->src.u8) & (cpu->dst.u8 ^ cpu->result.u8)) & 0x80)"; |
| 376 | case sFLAGS_AND8: |
| 377 | return "0"; |
| 378 | case sFLAGS_SUB8: |
| 379 | return "(((cpu->dst.u8 ^ cpu->src.u8) & (cpu->dst.u8 ^ cpu->result.u8)) & 0x80)"; |
| 380 | case sFLAGS_XOR8: |
| 381 | return "0"; |
| 382 | case sFLAGS_INC8: |
| 383 | return "(cpu->result.u8 == 0x80)"; |
| 384 | case sFLAGS_DEC8: |
| 385 | return "(cpu->result.u8 == 0x7f)"; |
| 386 | case sFLAGS_SHL8: |
| 387 | return "((cpu->result.u8 ^ cpu->dst.u8) & 0x80)"; |
| 388 | case sFLAGS_SHR8: |
| 389 | return "(((cpu->src.u8&0x1f)==1) ? (cpu->dst.u8 >= 0x80); : 0)"; |
| 390 | case sFLAGS_SAR8: |
| 391 | return "0"; |
| 392 | case sFLAGS_CMP8: |
| 393 | return "(((cpu->dst.u8 ^ cpu->src.u8) & (cpu->dst.u8 ^ cpu->result.u8)) & 0x80)"; |
| 394 | case sFLAGS_TEST8: |
| 395 | return "0"; |
| 396 | case sFLAGS_NEG8: |
| 397 | return "(cpu->dst.u8 == 0x80)"; |
| 398 | |
| 399 | case sFLAGS_ADD16: |
| 400 | return "(((cpu->dst.u16 ^ cpu->src.u16 ^ 0x8000) & (cpu->result.u16 ^ cpu->src.u16)) & 0x8000)"; |
| 401 | case sFLAGS_OR16: |
| 402 | return "0"; |
| 403 | case sFLAGS_ADC16: |
| 404 | return "(((cpu->dst.u16 ^ cpu->src.u16 ^ 0x8000) & (cpu->result.u16 ^ cpu->src.u16)) & 0x8000)"; |
| 405 | case sFLAGS_SBB16: |
| 406 | return "(((cpu->dst.u16 ^ cpu->src.u16) & (cpu->dst.u16 ^ cpu->result.u16)) & 0x8000)"; |
| 407 | case sFLAGS_AND16: |
| 408 | return "0"; |
| 409 | case sFLAGS_SUB16: |
| 410 | return "(((cpu->dst.u16 ^ cpu->src.u16) & (cpu->dst.u16 ^ cpu->result.u16)) & 0x8000)"; |
| 411 | case sFLAGS_XOR16: |
| 412 | return "0"; |
| 413 | case sFLAGS_INC16: |
| 414 | return "(cpu->result.u16 == 0x8000)"; |
| 415 | case sFLAGS_DEC16: |
| 416 | return "(cpu->result.u16 == 0x7fff)"; |
| 417 | case sFLAGS_SHL16: |
| 418 | return "((cpu->result.u16 ^ cpu->dst.u16) & 0x8000)"; |
| 419 | case sFLAGS_SHR16: |
| 420 | return "(((cpu->src.u8&0x1f)==1) ? (cpu->dst.u16 >= 0x8000) : 0)"; |
| 421 | case sFLAGS_SAR16: |