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

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

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