| 567 | |
| 568 | |
| 569 | static void StorePairExclusive( |
| 570 | Architecture* arch, |
| 571 | LowLevelILFunction& il, |
| 572 | InstructionOperand& status, |
| 573 | InstructionOperand& src1, |
| 574 | InstructionOperand& src2, |
| 575 | InstructionOperand& dst, |
| 576 | size_t addr) |
| 577 | { |
| 578 | ExprId address = ReadAddress(il, dst, addr); |
| 579 | |
| 580 | LowLevelILLabel trueCode, falseCode; |
| 581 | size_t statusSize = get_register_size(status.reg); |
| 582 | il.AddInstruction(il.Intrinsic({ RegisterOrFlag::Register(status.reg) }, |
| 583 | ARMV7_INTRIN_EXCLUSIVE_MONITORS_PASS, |
| 584 | { address, il.Const(1, 8) })); |
| 585 | il.AddInstruction(il.If(il.CompareEqual(statusSize, il.Register(statusSize, status.reg), il.Const(statusSize, 1)), |
| 586 | trueCode, falseCode)); |
| 587 | il.MarkLabel(trueCode); |
| 588 | |
| 589 | StorePair(arch, il, src1, src2, dst, addr); |
| 590 | |
| 591 | il.MarkLabel(falseCode); |
| 592 | } |
| 593 | |
| 594 | |
| 595 | static void Saturate(LowLevelILFunction& il, uint32_t dest, ExprId to_saturate, ExprId saturate_to, bool is_signed) |
no test coverage detected