| 1612 | } |
| 1613 | |
| 1614 | void GenCodeCmdMovCmplxStk(VMCmd cmd) |
| 1615 | { |
| 1616 | EMIT_COMMENT("MOV complex stack"); |
| 1617 | EMIT_OP_REG(o_pop, rEDX); |
| 1618 | |
| 1619 | if(cmd.helper == 0) |
| 1620 | return; |
| 1621 | if(cmd.helper <= 32) |
| 1622 | { |
| 1623 | unsigned int currShift = 0; |
| 1624 | while(currShift < cmd.helper) |
| 1625 | { |
| 1626 | EMIT_OP_RPTR(o_pop, sDWORD, rEDX, cmd.argument + currShift); |
| 1627 | currShift += 4; |
| 1628 | } |
| 1629 | EMIT_OP_REG_NUM(o_sub, rESP, cmd.helper); |
| 1630 | assert(currShift == cmd.helper); |
| 1631 | }else{ |
| 1632 | EMIT_OP_REG_REG(o_mov, rEBX, rEDI); |
| 1633 | |
| 1634 | EMIT_OP_REG_REG(o_mov, rESI, rESP); |
| 1635 | EMIT_OP_REG_RPTR(o_lea, rEDI, sNONE, rEDX, cmd.argument); |
| 1636 | EMIT_OP_REG_NUM(o_mov, rECX, cmd.helper >> 2); |
| 1637 | EMIT_OP(o_rep_movsd); |
| 1638 | |
| 1639 | EMIT_OP_REG_REG(o_mov, rEDI, rEBX); |
| 1640 | } |
| 1641 | KILL_REG(rEBX);KILL_REG(rECX);KILL_REG(rEDX); |
| 1642 | } |
| 1643 | |
| 1644 | void GenCodeCmdPop(VMCmd cmd) |
| 1645 | { |
nothing calls this directly
no test coverage detected