| 466 | |
| 467 | |
| 468 | static void CMovFlagGroup(const int64_t addr, const xed_decoded_inst_t* xedd, LowLevelILFunction& il, uint32_t flag) |
| 469 | { |
| 470 | // keep the true branch but let the false branch goto doneLabel directly |
| 471 | LowLevelILLabel trueLabel, doneLabel; |
| 472 | |
| 473 | il.AddInstruction( |
| 474 | il.If( |
| 475 | il.FlagGroup(flag), |
| 476 | trueLabel, doneLabel |
| 477 | ) |
| 478 | ); |
| 479 | |
| 480 | il.MarkLabel(trueLabel); |
| 481 | |
| 482 | il.AddInstruction( |
| 483 | WriteILOperand(il, xedd, addr, 0, 0, |
| 484 | ReadILOperand(il, xedd, addr, 1, 1))); |
| 485 | |
| 486 | il.AddInstruction(il.Goto(doneLabel)); |
| 487 | il.MarkLabel(doneLabel); |
| 488 | } |
| 489 | |
| 490 | |
| 491 | bool GetLowLevelILForInstruction(Architecture* arch, const uint64_t addr, LowLevelILFunction& il, const xed_decoded_inst_t* const xedd) |
no test coverage detected