@instruction<EOL><INDENT>def SHRD(cpu, dest, src, count):<DEDENT>
OperandSize = dest.size<EOL>MASK = ((<NUM_LIT:1> << OperandSize) - <NUM_LIT:1>)<EOL>tempCount = Operators.ZEXTEND(count.read(), OperandSize) & (OperandSize - <NUM_LIT:1>)<EOL>if isinstance(tempCount, int) and tempCount == <NUM_LIT:0>:<EOL><INDENT>pass<EOL><DEDENT>else:<EOL><INDENT>arg0 = dest.read()<EOL>arg1 = src.read()<EOL>res = Operators.ITEBV(OperandSize, tempCount == <NUM_LIT:0>, arg0, (arg0 >> tempCount) | (arg1 << (dest.size - tempCount)))<EOL>res = res & MASK<EOL>dest.write(res)<EOL>lastbit = <NUM_LIT:0> != (arg0 >> (tempCount - <NUM_LIT:1>)) & <NUM_LIT:1><EOL>cpu._set_shiftd_flags(OperandSize, arg0, res, lastbit, tempCount)<EOL><DEDENT>
Double precision shift right.

Shifts the first operand (destination operand) to the right the number of bits specified by the third operand
(count operand). The second operand (source operand) provides bits to shift in from the left (starting with
the most significant bit of the destination operand).

:param cpu: current CPU.
:param dest: destination operand.
:param src: source operand.
:param count: count operand