<!--
	Assembler Encoding for the Move mnemonic
	Version: 1.0.0
	Date Created:  2007-03-23
	Last Modified: 2007-06-06

	Designed for Pentium and higher x86 Processors in 32bit mode protected mode
	Optimized for Speed

	Done list:
	o U/S8-256,Boolean to U/S8-32,Boolean
	o EndRegs data for all applicable operations
	o Volatile Register operations for all applicable operations

	To Do:
	o All types to U/S48-256
-->
<encoding procfamily="x86" bitdepth="32" proc="P1">
	<!-- ############################################################################################################ -->
	<!-- ############################################################################################################ -->
	<!-- ############################################################################################################ -->
	<!-- Move Mnemonic -->
	<mnemonic name="Move" type="Assign" option="Speed">
		<!-- ********************************************************************************************************** -->
		<!-- Moving TO 8bit values -->

		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 8-256bit -->
		<codetypeset param0="U/S8" param1="U/S8-256">
			<codeset param0="M" param1="M" total="2" totalv="1"
				lostregs="al" endregs="al=@1.U8,al=@0.U8" endpipe="U">
				<line code="mov al, @1.U8" time="U 1" timev=" V1" comment="Get the value's low byte" />
				<line code="mov @0, al"    time="U*1" timev="U 1" comment="Store it" />
			</codeset>
			<codeset param0="M" param1="R,I" total="1" totalv="0" endpipe="S">
				<line code="mov @0, @1.U8" time="U 1" timev=" V1" comment="Move the low byte" />
			</codeset>

			<codeset param0="R" param1="M,R,I" total="1" totalv="0" endpipe="S">
				<line code="mov @0, @1.U8" time="U 1" timev=" V1" comment="Move the low byte" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From Boolean -->
		<codetypeset param0="U/S8" param1="Boolean">
			<codeset param0="M" param1="M" total="2" totalv="1"
				lostregs="al" endregs="al=@1.U8,al=@0.U8" endpipe="U">
				<line code="mov al, @1.U8" time="U 1" timev=" V1" comment="Get the value" />
				<line code="mov @0, al"    time="U*1" timev="U 1" comment="Store it" />
			</codeset>
			<codeset param0="M" param1="R" total="1" totalv="0" endpipe="S">
				<line code="mov @0, @1.U8" time="U 1" timev=" V1" comment="Get the value" />
			</codeset>

			<codeset param0="R" param1="M,R" total="1" totalv="0" endpipe="S">
				<line code="mov @0, @1.U8" time="U 1" timev=" V1" comment="Get the value" />
			</codeset>
		</codetypeset>



		<!-- ********************************************************************************************************** -->
		<!-- Moving TO 16bit values -->

		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 8bit -->

		<!-- ====================================================================================== -->
		<!-- From U8 to U/S16 -->
		<codetypeset param0="U/S16" param1="U8">
			<codeset param0="M" param1="M" total="2" totalv="2"
				lostregs="al" endregs="al=@1.U8,al=@0.U8" endpipe="U">
				<line code="mov al, @1"      time="U 1" timev=" V1" comment="Get the value" />
				<line code="mov @0.U8[1], 0" time=" V1" timev="U 1" comment="Store a 0 in the high byte" />
				<line code="mov @0.U8, al"   time="U 1" timev="U*1" comment="Store it" />
			</codeset>
			<codeset param0="M" param1="R" total="2" totalv="1" endpipe="U">
				<line code="mov @0.U8, @1.U8" time="U 1" timev=" V1" comment="Get the value" />
				<line code="mov @0.U8[1], 0"  time="U*1" timev="U 1" comment="Store a 0 in the high byte" />
			</codeset>

			<codeset param0="R" param1="M,R" total="2" totalv="1" endpipe="U">
				<line code="xor @0.U32, @0.U32" time="U 1" timev=" V1" comment="Clear to zero" />
				<line code="mov @0.U8, @1"      time="U*1" timev="U 1" comment="Move the value" />
			</codeset>
		</codetypeset>


		<!-- ====================================================================================== -->
		<!-- From S8 to U/S16 -->
		<codetypeset param0="U/S16" param1="S8">
			<codeset param0="M" param1="M,R" total="4" totalv="3"
				lostregs="al" endregs="al=@0.U8[1]" endpipe="U">
				<line code="mov al, @1"       time="U 1" timev=" V1" comment="Get the value" />
				<line code="mov @0.U8, al"    time="U*1" timev="U 1" comment="Store it" />
				<line code="sar al, 8"        time="U!1"             comment="SAR to sign extend" />
				<line code="mov @0.U8[1], al" time="U*1"             comment="Store it" />
			</codeset>
			<codeset param0="M" param1="V" total="3" totalv="2"
				lostregs="@1.U8" endpipe="U">
				<line code="mov @0.U8, @1.U8"    time="U 1" timev=" V1" comment="Store it" />
				<line code="sar @1.U8, 8"        time="U!1"             comment="SAR to sign extend" />
				<line code="mov @0.U8[1], @1.U8" time="U*1"             comment="Store it" />
			</codeset>

			<codeset param0="R" param1="M,R" total="3" endpipe="V">
				<line code="movsx @0.U32, @1" time="&#45;&#45;3" comment="Move the sign extended value" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 16-24bit -->
		<codetypeset param0="U/S16" param1="U/S16-24">
			<codeset param0="M" param1="M" total="4" totalv="3"
				lostregs="ax" endregs="ax=@1.U16,ax=@0.U16" endpipe="U">
				<line code="mov ax, @1.U16" time="U 1+1" timev=" V1+1" comment="Get the value" />
				<line code="mov @0, ax"     time="U*1+1" timev="U 1+1" comment="Store it" />
			</codeset>
			<codeset param0="M" param1="R,I" total="2" totalv="1" endpipe="S">
				<line code="mov @0, @1.U16" time="U 1+1" timev=" V1+1" comment="Move it" />
			</codeset>

			<codeset param0="R" param1="M" total="2" totalv="1" endpipe="S">
				<line code="mov @0, @1.U16" time="U 1+1" timev=" V1+1" comment="Move it" />
			</codeset>
			<codeset param0="R" param1="R,I" total="1" totalv="0" endpipe="S">
				<line code="mov @0.U32, @1.U32" time="U 1" timev=" V1" comment="Move it" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 32-256bit -->
		<codetypeset param0="U/S16" param1="U/S32-256">
			<codeset param0="M" param1="M" total="3" totalv="2"
				lostregs="eax" endregs="eax=@1.U32,ax=@0.U16" endpipe="U">
				<line code="mov eax, @1.U32" time="U 1"   timev=" V1"   comment="Get the value" />
				<line code="mov @0, ax"      time="U*1+1" timev="U 1+1" comment="Store it" />
			</codeset>
			<codeset param0="M" param1="R" total="2" totalv="1" endpipe="S">
				<line code="mov @0, @1.U16" time="U 1+1" timev=" V1+1" comment="Move it" />
			</codeset>

			<codeset param0="R" param1="M,R" total="1" totalv="0" endpipe="S">
				<line code="mov @0, @1.U32" time="U 1" timev=" V1" comment="Move it" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From Boolean -->
		<codetypeset param0="U/S16" param1="Boolean">
			<codeset param0="M" param1="M" total="2" totalv="2"
				lostregs="al" endregs="al=@1.U8,al=@0.U8" endpipe="U">
				<line code="mov al, @1.U8"   time="U 1" timev=" V1" comment="Get the value" />
				<line code="mov @0.U8[1], 0" time=" V1" timev="U 1" comment="Store a zero in the high byte" />
				<line code="mov @0.U8, al"   time="U 1" timev="U*1" comment="Store it" />
			</codeset>
			<codeset param0="M" param1="R" total="2" totalv="1" endpipe="U">
				<line code="mov @0.U8, @1.U8" time="U 1" timev=" V1" comment="Store it" />
				<line code="mov @0.U8[1], 0"  time="U*1" timev="U 1" comment="Store a zero in the high byte" />
			</codeset>

			<codeset param0="R" param1="M,R" total="2" totalv="1" endpipe="U">
				<line code="xor @0.U32, @0.U32" time="U 1" timev=" V1" comment="Clear to zero" />
				<line code="mov @0.U8, @1.U8"   time="U*1" timev="U 1" comment="Get the value" />
			</codeset>
		</codetypeset>



		<!-- ********************************************************************************************************** -->
		<!-- Moving TO 24bit values -->

		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 8bit -->

		<!-- ====================================================================================== -->
		<!-- From U8 to U/S24 -->
		<codetypeset param0="U/S24" param1="U8">
			<codeset param0="M" param1="M" total="3" totalv="2"
				lostregs="al" endregs="al=@1.U8,al=@0.U8" endpipe="U">
				<line code="mov @0.U8[2], 0"  time="U 1" timev=" V1" comment="Store a zero in the high byte" />
				<line code="mov al, @1"       time=" V1" timev="U 1" comment="Get the value" />
				<line code="mov @0.U8[1], 0"  time="U 1" timev=" V1" comment="Store a zero in the middle byte" />
				<line code="mov @0.U8, al"    time="U*1" timev="U 1" comment="Store the value in the low byte" />
			</codeset>
			<codeset param0="M" param1="R" total="3" totalv="2" endpipe="U">
				<line code="mov @0.U8[2], 0"  time="U 1" timev=" V1" comment="Store a zero in the high byte" />
				<line code="mov @0.U8, @1"    time="U*1" timev="U 1" comment="Store the value in the low byte" />
				<line code="mov @0.U8[1], 0"  time="U*1"             comment="Store a zero in the middle byte" />
			</codeset>

			<codeset param0="R" param1="M,R" total="2" totalv="1" endpipe="U">
				<line code="xor @0.U32, @0.U32" time="U 1" timev=" V1" comment="Clear to zero" />
				<line code="mov @0.U8, @1"      time="U*1" timev="U 1" comment="Move the value over" />
			</codeset>
		</codetypeset>

		<!-- ====================================================================================== -->
		<!-- From S8 to U/S24 -->
		<codetypeset param0="U/S24" param1="S8">
			<codeset param0="M" param1="M" total="5" totalv="4"
				lostregs="al" endregs="al=@0.U8[1],al=@0.U8[2]" endpipe="U">
				<line code="mov al, @1.U8"    time="U 1" timev=" V1" comment="Get the value" />
				<line code="mov @0.U8, al"    time="U*1" timev="U 1" comment="Store the low byte" />
				<line code="sar al, 8"        time="U!1"             comment="Convert al to the upper byte (sign extend)" />
				<line code="mov @0.U8[1], al" time="U*1"             comment="Store the middle byte" />
				<line code="mov @0.U8[2], al" time="U*1"             comment="store the high byte" />
			</codeset>
			<codeset param0="M" param1="R" total="4" totalv="3"
				lostregs="al" endregs="al=@0.U8[1],al=@0.U8[2]" endpipe="U">
				<line code="mov al, @1.U8"    time="U 1" timev=" V1" comment="Get the value" />
				<line code="sar al, 8"        time="U!1"             comment="Convert al to the upper byte (sign extend)" />
				<line code="mov @0.U8, @1.U8" time=" V1"             comment="Store the low byte" />
				<line code="mov @0.U8[1], al" time="U*1"             comment="Store the middle byte" />
				<line code="mov @0.U8[2], al" time="U*1"             comment="store the high byte" />
			</codeset>
			<codeset param0="M" param1="V" total="4" totalv="3"
				lostregs="@1.U8" endpipe="U">
				<line code="mov @0.U8, @1.U8"    time="U 1" timev=" V1" comment="Store the low byte" />
				<line code="sar @1.U8, 8"        time="U!1"             comment="Convert al to the upper byte (sign extend)" />
				<line code="mov @0.U8[1], @1.U8" time="U*1"             comment="Store the middle byte" />
				<line code="mov @0.U8[2], @1.U8" time="U*1"             comment="store the high byte" />
			</codeset>

			<codeset param0="R" param1="M,R" param0type="U24" total="4" endpipe="U">
				<line code="movsx @0.U32, @1.U8"  time="&#45;&#45;3" comment="Move the sign extended value over" />
				<line code="and @0.U32, 0FFFFFFh" time="U 1"         comment="Clear the high byte" />
			</codeset>
			<codeset param0="R" param1="M,R" param0type="S24" total="3" endpipe="V">
				<line code="movsx @0.U32, @1.U8" time="&#45;&#45;3" comment="Move the sign extended value over" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 16bit -->

		<!-- ====================================================================================== -->
		<!-- From U16 to U/S24 -->
		<codetypeset param0="U/S24" param1="U16">
			<codeset param0="M" param1="M" total="4" totalv="4"
				lostregs="ax" endregs="ax=@1.U16,ax=@0.U16" endpipe="U">
				<line code="mov ax, @1"      time="U 1+1" timev=" V1+1" comment="Get the value" />
				<line code="mov @0.U8[2], 0" time=" V1"   timev="U 1"   comment="Store zero in the high byte" />
				<line code="mov @0.U16, ax"  time="U 1+1" timev="U*1+1" comment="Store the value" />
			</codeset>
			<codeset param0="M" param1="R" total="3" totalv="2" endpipe="U">
				<line code="mov @0.U16, @1"  time="U 1+1" timev=" V1+1" comment="Store the value" />
				<line code="mov @0.U8[2], 0" time="U*1"   timev="U 1"   comment="Store zero in the high byte" />
			</codeset>

			<codeset param0="R" param1="M,R" total="3" totalv="2" endpipe="U">
				<line code="xor @0.U32, @0.U32" time="U 1"   timev=" V1"   comment="Clear to zero" />
				<line code="mov @0.U16, @1"     time="U*1+1" timev="U 1+1" comment="Move the value over" />
			</codeset>
		</codetypeset>

		<!-- ====================================================================================== -->
		<!-- From S16 to U/S24 -->
		<codetypeset param0="U/S24" param1="S16">
			<codeset param0="M" param1="M" total="6" totalv="5"
				lostregs="ax" endregs="al=@1.U8,al=@0.U8,ah=@0.U8[2]" endpipe="U">
				<line code="mov ax, @1.U16"    time="U 1+1" timev=" V1+1" comment="Get the value" />
				<line code="mov @0.U16, ax"    time="U*1+1" timev="U 1+1" comment="Store the low word" />
				<line code="sar ah, 8"         time="U!1"                 comment="SAR preserves the high bit (Quick sign extending)" />
				<line code="mov @0.U8[2], ah"  time="U*1"                 comment="Store the sign-extended high byte" />
			</codeset>
			<codeset param0="M" param1="R" total="4" totalv="3"
				lostregs="al" endregs="al=@0.U8[2]" endpipe="U">
				<line code="mov al, @1.U8[1]"  time="U 1"   timev=" V1" comment="Get the high byte from the value" />
				<line code="sar al, 8"         time="U!1"               comment="SAR preserves the high bit (Quick sign extending)" />
				<line code="mov @0.U16, @1"    time=" V1+1"             comment="Store the low word" />
				<line code="mov @0.U8[2], al"  time="U 1"               comment="Store the sign-extended high byte" />
			</codeset>
			<codeset param0="M" param1="V" total="3" totalv="2"
				lostregs="@1.U8[1]" endpipe="U">
				<line code="mov @0.U16, @1"         time="U 1" timev=" V1" comment="Store the low word" />
				<line code="sar @1.U8[1], 8"        time="U!1"             comment="SAR preserves the high bit (Quick sign extending)" />
				<line code="mov @0.U8[2], @1.U8[1]" time="U*1"             comment="Store the sign-extended high byte" />
			</codeset>

			<codeset param0="R" param1="M,R" param0type="U24" total="4" endpipe="U">
				<line code="movsx @0.U32, @1.U16" time="&#45;&#45;3" comment="Move the sign exteded value over" />
				<line code="and @0.U32, 0FFFFFFh" time="U 1"         comment="Clear the high byte" />
			</codeset>
			<codeset param0="R" param1="M,R" param0type="S24" total="3" endpipe="V">
				<line code="movsx @0.U32, @1.U16" time="&#45;&#45;3" comment="Move the sign exteded value over" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 24bit -->
		<codetypeset param0="U/S24" param1="U/S24">
			<codeset param0="M" param1="M" total="5" totalv="4"
				lostregs="ax" endregs="ah=@1.U8[1],al=@1.U8[2],ah=@0.U8[1],al=@0.U8[2]" endpipe="U">
				<line code="mov ax, @1.U16"   time="U 1+1" timev=" V1+1" comment="Get the low 2 bytes" />
				<line code="mov @0.U16, ax"   time="U*1+1" timev="U 1+1" comment="Store it" />
				<line code="mov al, @1.U8[2]" time=" V1"                 comment="Get the high byte" />
				<line code="mov @0.U8[2], al" time="U 1"                 comment="Store it" />
			</codeset>
			<codeset param0="M" param1="R" total="4" totalv="3"
				lostregs="eax" endregs="ah=@1.U8[2],al=@1.U8[1],ah=@0.U8[2],al=@0.U8[1]" endpipe="U">
				<line code="mov eax, @1.U32"    time="U 1"   timev=" V1" comment="Get the low 2 bytes" />
				<line code="shr eax, 8"         time="U!1"               comment="Get the high byte" />
				<line code="mov @0.U16, @1.U16" time=" V1+1"             comment="Store the low word" />
				<line code="mov @0.U8[2], ah"   time="U 1"               comment="Store the high byte" />
			</codeset>
			<codeset param0="M" param1="V" total="4" totalv="3"
				lostregs="@1.U32" endpipe="U">
				<line code="mov @0.U16, @1.U16"  time="U 1+1" timev=" V1+1" comment="Get the low 2 bytes" />
				<line code="shr @1.U32, 16"      time="U!1"                 comment="Shift to access the high byte" />
				<line code="mov @0.U8[2], @1.U8" time="U*1"                 comment="Store the high byte" />
			</codeset>
			<codeset param0="M" param1="I" total="3" totalv="2" endpipe="U">
				<line code="mov @0.U16, @1.U16"     time="U 1+1" timev=" V1+1" comment="Store the low 2 bytes" />
				<line code="mov @0.U8[2], @1.U8[2]" time="U*1"   timev="U 1"   comment="Store the high byte" />
			</codeset>

			<codeset param0="R" param1="M" param0type="U24" total="4" totalv="3" endpipe="U">
				<line code="mov @0.U8, @1.U8[2]" time="U 1"   timev=" V1" comment="Get the high byte" />
				<line code="shl @0.U32, 16"      time="U!1"               comment="Shift it into position" />
				<line code="mov @0.U16, @1.U16"  time="U*1+1"             comment="Get the low 2 bytes" />
			</codeset>
			<codeset param0="R" param1="M" param0type="S24" total="5" totalv="4" endpipe="U">
				<line code="mov @0.U8, @1.U8[2]" time="U 1"   timev=" V1" comment="Get the high byte" />
				<line code="shl @0.U32, 24"      time="U!1"               comment="Shift it into position" />
				<line code="sar @0.U32, 8"       time="U!1"               comment="SAR to sign extend" />
				<line code="mov @0.U16, @1.U16"  time="U*1+1"             comment="Get the low 2 bytes" />
			</codeset>
			<codeset param0="R" param1="R,I" param0type="U24" param1type="U24" total="1" totalv="0" endpipe="S">
				<line code="mov @0.U32, @1.U32" time="U 1" timev=" V1" comment="Transfer the full 32bit value" />
			</codeset>
			<codeset param0="R" param1="R" param0type="U24" param1type="S24" total="2" totalv="1" endpipe="U">
				<line code="mov @0.U32, @1.U32"   time="U 1" timev=" V1" comment="Transfer the full 32bit value" />
				<line code="and @0.U32, 0FFFFFFh" time="U*1" timev="U 1" comment="Clear the high byte" />
			</codeset>
			<codeset param0="R" param1="R" param0type="S24" param1type="U24" total="3" totalv="2" endpipe="U">
				<line code="mov @0.U32, @1.U32" time="U 1" timev=" V1" comment="Transfer the full 32bit value" />
				<line code="shl @0.U32, 8"      time="U!1"             comment="Shift to the high byte" />
				<line code="sar @0.U32, 8"      time="U!1"             comment="SAR to sign extend" />
			</codeset>
			<codeset param0="R" param1="R,I" param0type="S24" param1type="S24" total="1" totalv="0" endpipe="S">
				<line code="mov @0.U32, @1.U32" time="U 1" timev=" V1" comment="Transfer the full 32bit value" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 32-256bit -->
		<codetypeset param0="U/S24" param1="U/S32-256">
			<codeset param0="M" param1="M" total="5" totalv="4"
				lostregs="eax" endregs="ah=@1.U8[2],al=@1.U8[1],ah=@0.U8[2],al=@0.U8[1]" endpipe="U">
				<line code="mov eax, @1.U32"  time="U 1"   timev=" V1"   comment="Get the new value" />
				<line code="mov @0.U16, ax"   time="U*1+1" timev="U 1+1" comment="Store the low word" />
				<line code="shr eax, 8"       time="U!1"                 comment="Shift the high byte down" />
				<line code="mov @0.U8[2], ah" time="U*1"                 comment="Store the high byte" />
			</codeset>
			<codeset param0="M" param1="R" total="4" totalv="3"
				lostregs="eax" endregs="ah=@1.U8[2],al=@1.U8[1],ah=@0.U8[2],al=@0.U8[1]" endpipe="U">
				<line code="mov eax, @1.U32"    time="U 1"   timev=" V1" comment="Get the low dword of the value" />
				<line code="shr eax, 8"         time="U!1"               comment="Shift the high byte down" />
				<line code="mov @0.U16, @1.U16" time=" V1+1"             comment="Get the new value" />
				<line code="mov @0.U8[2], ah"   time="U 1"               comment="Store the high byte" />
			</codeset>
			<codeset param0="M" param1="V" total="4" totalv="3"
				lostregs="@1.U32" endpipe="U">
				<line code="mov @0.U16, @1.U16"  time="U 1+1" timev=" V1+1" comment="Get the new value" />
				<line code="shr @1.U32, 16"      time="U!1"                 comment="Shift to access the high byte" />
				<line code="mov @0.U8[2], @1.U8" time="U*1"                 comment="Store the high byte" />
			</codeset>

			<codeset param0="R" param1="M,R" param0type="U24" total="2" totalv="1" endpipe="U">
				<line code="mov @0.U32, @1.U32"   time="U 1" timev=" V1" comment="Copy the full value over" />
				<line code="and @0.U32, 0FFFFFFh" time="U*1" timev="U 1" comment="Clear the high byte" />
			</codeset>
			<codeset param0="R" param1="M,R" param0type="S24" total="3" totalv="2" endpipe="U">
				<line code="mov @0.U32, @1.U32" time="U 1" timev=" V1" comment="Copy the full value over" />
				<line code="shl @0.U32, 8"      time="U!1"             comment="Move to the high byte" />
				<line code="sar @0.U32, 8"      time="U!1"             comment="SAR to sign extend" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From Boolean -->
		<codetypeset param0="U/S24" param1="Boolean">
			<codeset param0="M" param1="M" total="3" totalv="3"
				lostregs="al" endregs="al=@1.U8,al=@0.U8" endpipe="U">
				<line code="mov al, @1.U8"    time="U 1" timev=" V1" comment="Get the value" />
				<line code="mov @0.U8[1], 0"  time=" V1" timev="U 1" comment="Store 0 in the middle byte" />
				<line code="mov @0.U8, al"    time="U 1" timev="U*1" comment="Store the low word" />
				<line code="mov @0.U8[2], 0"  time="U*1"             comment="Since it's 0, use the middle byte for the high byte" />
			</codeset>
			<codeset param0="M" param1="R" total="3" totalv="2" endpipe="U">
				<line code="mov @0.U8, @1"   time="U 1" timev=" V1" comment="Store the low byte" />
				<line code="mov @0.U8[1], 0" time="U*1" timev="U 1" comment="Store a 0 to the middle byte" />
				<line code="mov @0.U8[2], 0" time="U*1"             comment="Store a 0 to the high byte" />
			</codeset>

			<codeset param0="R" param1="M,R" total="2" totalv="1" endpipe="U">
				<line code="xor @0.U32, @0.U32" time="U 1" timev=" V1" comment="Clear to zero" />
				<line code="mov @0.U8, @1.U8"   time="U*1" timev="U 1" comment="Get the value" />
			</codeset>
		</codetypeset>



		<!-- ********************************************************************************************************** -->
		<!-- Moving TO 32bit values -->

		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 8bit -->

		<!-- ====================================================================================== -->
		<!-- From U8 to U/S32 -->
		<codetypeset param0="U/S32" param1="U8">
			<codeset param0="M" param1="M,R" total="3" totalv="2"
				lostregs="eax" endregs="eax=@1.U8,eax=@0.U32" endpipe="U">
				<line code="xor eax, eax" time="U 1" timev=" V1" comment="Clear to zero" />
				<line code="mov al, @1"   time="U*1" timev="U 1" comment="Get the value" />
				<line code="mov @0, eax"  time="U*1"             comment="Store it zero extended" />
			</codeset>

			<codeset param0="R" param1="M,R" total="2" totalv="1" endpipe="U">
				<line code="xor @0, @0"    time="U 1" timev=" V1" comment="Clear to zero" />
				<line code="mov @0.U8, @1" time="U*1" timev="U 1" comment="Move the value over zero extended" />
			</codeset>
		</codetypeset>

		<!-- ====================================================================================== -->
		<!-- From S8 to U/S32 -->
		<codetypeset param0="U/S32" param1="S8">
			<codeset param0="M" param1="M,R" total="4"
				lostregs="eax" endregs="eax=@1.S8,eax=@0.S32" endpipe="U">
				<line code="movsx eax, @1.U8" time="&#45;&#45;3" comment="Sign extend the value" />
				<line code="mov @0, eax"      time="U*1"         comment="Store it" />
			</codeset>

			<codeset param0="R" param1="M,R" total="3" endpipe="V">
				<line code="movsx @0, @1.U8" time="&#45;&#45;3" comment="Move the value over sign extended" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 16bit -->

		<!-- ====================================================================================== -->
		<!-- From U16 to U/S32 -->
		<codetypeset param0="U/S32" param1="U16">
			<codeset param0="M" param1="M,R" total="4" totalv="3"
				lostregs="eax" endregs="eax=@1.U16,eax=@0.U32" endpipe="U">
				<line code="xor eax, eax" time="U 1"   timev=" V1"   comment="Clear to zero" />
				<line code="mov ax, @1"   time="U*1+1" timev="U 1+1" comment="Get the value" />
				<line code="mov @0, eax"  time="U*1"                 comment="Store it zero extended" />
			</codeset>

			<codeset param0="R" param1="M,R" total="3" totalv="2" endpipe="U">
				<line code="xor @0, @0"     time="U 1"   timev=" V1"   comment="Clear to zero" />
				<line code="mov @0.U16, @1" time="U*1+1" timev="U 1+1" comment="Move the value over zero extended" />
			</codeset>
		</codetypeset>

		<!-- ====================================================================================== -->
		<!-- From S16 to U/S32 -->
		<codetypeset param0="U/S32" param1="S16">
			<codeset param0="M" param1="M,R" total="4"
				lostregs="eax" endregs="eax=@1.S16,eax=@0.U32" endpipe="U">
				<line code="movsx eax, @1.U16" time="&#45;&#45;3" comment="Get the value sign extended" />
				<line code="mov @0, eax"       time="U 1"         comment="Store it" />
			</codeset>
			<codeset param0="M" param1="V" total="3"
				lostregs="@1.U32" endpipe="U">
				<line code="shl @1.U32, 16" time="U!1" comment="Shift it up 16bits" />
				<line code="sar @1.U32, 16" time="U!1" comment="Shift arithmetic back to sign extend" />
				<line code="mov @0, @1.U32" time="U*1" comment="Store it" />
			</codeset>

			<codeset param0="R" param1="M,R" total="3" endpipe="V">
				<line code="movsx @0, @1.U16" time="&#45;&#45;3" comment="Move the value over sign extended" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 24bit -->

		<!-- ====================================================================================== -->
		<!-- From U24 to U/S32 -->
		<codetypeset param0="U/S32" param1="U24">
			<codeset param0="M" param1="M" total="6" totalv="5"
				lostregs="eax,edx" endregs="eax=@1.U24,eax=@0.U32" endpipe="U">
				<line code="xor edx, edx"     time="U 1" timev=" V1" comment="Clear to zero" />
				<line code="xor eax, eax"     time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="mov dl, @1.U8[2]" time="U 1" timev=" V1" comment="Get the high byte" />
				<line code="shl edx, 16"      time="U!1"             comment="Shift it into position" />
				<line code="mov ah, @1.U8[1]" time=" V1"             comment="Get the middle byte" />
				<line code="or eax, edx"      time="U 1"             comment="Combine the values" />
				<line code="mov al, @1.U8"    time="U*1"             comment="Get the low byte" />
				<line code="mov @0, eax"      time="U*1"             comment="Store it" />
			</codeset> 
			<codeset param0="M" param1="R" total="1" totalv="0" endpipe="S">
				<line code="mov @0.U32, @1.U32" time="U 1" timev=" V1" comment="Move the whole register over" />
			</codeset>

			<codeset param0="R" param1="M" total="5" totalv="4"
				lostregs="eax" endpipe="U">
				<line code="xor eax, eax"           time="U 1" timev=" V1" comment="Clear to zero" />
				<line code="xor @0, @0"             time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="mov al, @1.U8[2]"       time="U 1" timev=" V1" comment="Get the high byte" />
				<line code="shl eax, 16"            time="U!1"             comment="Shift it into position" />
				<line code="mov @0.U8[1], @1.U8[1]" time=" V1"             comment="Get the middle byte" />
				<line code="or @0, eax"             time="U 1"             comment="Combine the values" />
				<line code="mov @0.U8, @1.U8"       time="U*1"             comment="Get the low byte" />
			</codeset>
			<codeset param0="R" param1="R" total="1" totalv="0" endpipe="S">
				<line code="mov @0.U32, @1.U32"   time="U 1" timev=" V1" comment="Move the whole register over" />
			</codeset>
		</codetypeset>

		<!-- ====================================================================================== -->
		<!-- From S24 to U/S32 -->
		<codetypeset param0="U/S32" param1="S24">
			<codeset param0="M" param1="M" total="5" totalv="5"
				lostregs="eax,edx" endregs="eax=@1.S24,eax=@0.U32" endpipe="U">
				<line code="mov dl, @1.U8[2]" time="U 1" timev=" V1" comment="Third byte, so we can shift it" />
				<line code="xor eax, eax"     time=" V1" timev="U 1" comment="Clear our value" />
				<line code="shl edx, 24"      time="U!1"             comment="Shift it so the sign bit is the high bit AND we clear the register" />
				<line code="mov al, @1.U8"    time=" V1"             comment="First byte" />
				<line code="sar edx, 8"       time="U!1"             comment="SAR to sign extend" />
				<line code="mov ah, @1.U8[1]" time=" V1"             comment="Second byte" />
				<line code="or eax, edx"      time="U*1"             comment="Merge the three bytes" />
				<line code="mov @0, eax"      time="U*1"             comment="Store it" />
			</codeset>
			<codeset param0="M" param1="R" total="1" totalv="0" endpipe="S">
				<line code="mov @0.U32, @1.U32" time="U 1" timev=" V1" comment="Move the whole register over" />
			</codeset>

			<codeset param0="R" param1="M" total="4"
				lostregs="eax" endpipe="U" startpipe="U">
				<line code="mov al, @1.U8[2]"       time="U 1" comment="Third byte, so we can shift it" />
				<line code="xor @0, @0"             time=" V1" comment="Clear our value" />
				<line code="shl eax, 24"            time="U!1" comment="Shift it to the high byte" />
				<line code="mov @0.U8, @1.U8"       time=" V1" comment="First byte" />
				<line code="sar eax, 8"             time="U!1" comment="SAR to sign extend" />
				<line code="mov @0.U8[1], @1.U8[1]" time=" V1" comment="Second byte" />
				<line code="or @0, eax"             time="U 1" comment="Merge the three bytes" />
			</codeset>
			<!-- Same as above, but starting in V pipe -->
			<codeset param0="R" param1="M" total="4"
				lostregs="eax" endpipe="U" startpipe="V">
				<line code="mov al, @1.U8[2]"       time=" V1" comment="Third byte, so we can shift it" />
				<line code="shl eax, 24"            time="U!1" comment="Shift it to the high byte" />
				<line code="xor @0, @0"             time=" V1" comment="Clear our value" />
				<line code="sar eax, 8"             time="U!1" comment="SAR to sign extend" />
				<line code="mov @0.U8, @1.U8"       time=" V1" comment="First byte" />
				<line code="mov @0.U8[1], @1.U8[1]" time="U 1" comment="Second byte" />
				<line code="or @0, eax"             time="U*1" comment="Merge the three bytes" />
			</codeset>
			<codeset param0="R" param1="R" total="1" totalv="0" endpipe="S">
				<line code="mov @0.U32, @1.U32"   time="U 1" timev=" V1" comment="Move the whole register over" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 32-256bit -->
		<codetypeset param0="U/S32" param1="U/S32-256">
			<codeset param0="M" param1="M" total="2" totalv="1"
				lostregs="eax" endregs="eax=@1.U32,eax=@0.U32" endpipe="U">
				<line code="mov eax, @1.U32" time="U 1" timev=" V1" comment="Get the value" />
				<line code="mov @0, eax"     time="U*1" timev="U 1" comment="Store it" />
			</codeset>
			<codeset param0="M" param1="R,I" total="1" totalv="0" endpipe="S">
				<line code="mov @0, @1.U32" time="U 1" timev=" V1" comment="Move the value over" />
			</codeset>

			<codeset param0="R" param1="M,R,I" total="1" totalv="0" endpipe="S">
				<line code="mov @0, @1.U32" time="U 1" timev=" V1" comment="Move the value over" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From Boolean -->
		<codetypeset param0="U/S32" param1="Boolean">
			<codeset param0="M" param1="M,R" total="3" totalv="2"
				lostregs="eax" endregs="eax=@1.U8,eax=@0.U32" endpipe="U">
				<line code="xor eax, eax"  time="U 1" timev=" V1" comment="Clear to zero" />
				<line code="mov al, @1.U8" time="U*1" timev="U 1" comment="Get the value" />
				<line code="mov @0, eax"   time="U*1"             comment="Store it" />
			</codeset>

			<codeset param0="R" param1="M,R" total="2" totalv="1" endpipe="U">
				<line code="xor @0.U32, @0.U32" time="U 1" timev=" V1" comment="Clear to zero" />
				<line code="mov @0.U8, @1.U8"   time="U*1" timev="U 1" comment="Get the value" />
			</codeset>
		</codetypeset>



		<!-- ********************************************************************************************************** -->
		<!-- Moving TO Boolean -->

		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 8bit -->
		<codetypeset param0="Boolean" param1="U/S8">
			<codeset param0="M" param1="M,R" total="4" totalv="3"
				lostregs="al,dl" endregs="dl=@0.U8" endpipe="U">
				<line code="mov al, @1"    time="U 1" timev=" V1" comment="Get the value" />
				<line code="xor dl, dl"    time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="add al, -1"    time="U 1" timev=" V1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"    time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0.U8, dl" time="U*1"             comment="Store the result" />
			</codeset>
			<codeset param0="M" param1="V" total="4" totalv="3"
				lostregs="@1.U8" endpipe="U">
				<line code="add @1.U8, -1"    time="U 1" timev=" V1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="mov @1.U8, 0"     time="U*1" timev="U 1" comment="Clear to zero" />
				<line code="adc @1.U8, @1.U8" time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0.U8, @1.U8" time="U*1"             comment="Store the result" />
			</codeset>

			<codeset param0="R" param1="M,R" total="3" totalv="2"
				lostregs="al" endpipe="U">
				<line code="mov al, @1"       time="U 1" timev=" V1" comment="Get the value" />
				<line code="xor @0.U8, @0.U8" time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="add al, -1"       time="U*1" timev=" V1" comment="Add -1. This will set carry if non-zero" />
				<line code="adc @0.U8, @0.U8" time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="V" total="2" totalv="2"
				lostregs="@1.U8" endpipe="U">
				<line code="xor @0.U8, @0.U8" time="U 1" timev=" V1" comment="Clear to zero" />
				<line code="add @1.U8, -1"    time=" V1" timev="U 1" comment="Add -1. This will set carry if non-zero" />
				<line code="adc @0.U8, @0.U8" time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 16bit -->
		<codetypeset param0="Boolean" param1="U/S16">
			<codeset param0="M" param1="M,R" total="6" totalv="5"
				lostregs="ax,dl" endregs="dl=@0.U8" endpipe="U">
				<line code="mov ax, @1"    time="U 1+1" timev=" V1+1" comment="Get the value" />
				<line code="xor dl, dl"    time=" V1"   timev="U 1"   comment="Clear to zero" />
				<line code="add ax, -1"    time="U 1+1" timev=" V1+1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"    time="U!1"                 comment="1 if carry, 0 if no carry" />
				<line code="mov @0.U8, dl" time="U*1"                 comment="Store the result" />
			</codeset>
			<codeset param0="M" param1="V" total="5" totalv="4"
				lostregs="@1.U16" endpipe="U">
				<line code="add @1.U16, -1"   time="U 1+1" timev=" V1+1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="mov @1.U8, 0"     time="U*1"   timev="U 1"   comment="Clear to zero" />
				<line code="adc @1.U8, @1.U8" time="U!1"                 comment="1 if carry, 0 if no carry" />
				<line code="mov @0.U8, @1.U8" time="U*1"                 comment="Store the result" />
			</codeset>

			<codeset param0="R" param1="M" total="5" totalv="4"
				lostregs="ax" endpipe="U">
				<line code="mov ax, @1"       time="U 1+1" timev=" V1+1" comment="Get the value" />
				<line code="xor @0.U8, @0.U8" time=" V1"   timev="U 1"   comment="Clear to zero" />
				<line code="add ax, -1"       time="U 1+1" timev=" V1+1" comment="Add -1. This will set carry if non-zero" />
				<line code="adc @0.U8, @0.U8" time="U!1"                 comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="R" total="4" totalv="3"
				lostregs="eax" endpipe="U">
				<line code="mov eax, @1"      time="U 1"   timev=" V1"   comment="Get the value" />
				<line code="xor @0.U8, @0.U8" time=" V1"   timev="U 1"   comment="Clear to zero" />
				<line code="add ax, -1"       time="U 1+1" timev=" V1+1" comment="Add -1. This will set carry if non-zero" />
				<line code="adc @0.U8, @0.U8" time="U!1"                 comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="V" total="3" totalv="3"
				lostregs="@1.U16" endpipe="U">
				<line code="xor @0.U8, @0.U8" time="U 1"   timev="V 1"   comment="Clear to zero" />
				<line code="add @1.U16, -1"   time=" V1+1" timev="U 1+1" comment="Add -1. This will set carry if non-zero" />
				<line code="adc @0.U8, @0.U8" time="U!1"                 comment="1 if carry, 0 if no carry" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 24bit -->
		<codetypeset param0="Boolean" param1="U/S24">
			<codeset param0="M" param1="M" total="7" totalv="6"
				lostregs="ax,dx"
				endregs="ah=@1.U8[1],dh=@1.U8[2],dl=@0.U8" endpipe="U">
				<line code="mov al, @1.U8"    time="U 1" timev=" V1" comment="Get byte 1" />
				<line code="xor dl, dl"       time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="mov ah, @1.U8[1]" time="U 1" timev=" V1" comment="Get byte 2" />
				<line code="or al, ah"        time="U*1" timev="U 1" comment="Bytes 1 and 2 merged" />
				<line code="mov dh, @1.U8[2]" time=" V1"             comment="Get byte 3" />
				<line code="or al, dh"        time="U 1"             comment="Bytes 1, 2 and 3 are now merged" />
				<line code="add al, -1"       time="U*1"             comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"       time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, dl"       time="U*1"             comment="Store the result" />
			</codeset>
			<codeset param0="M" param1="R" param1type="U24" total="4" totalv="3"
				lostregs="eax,dl" endregs="dl=@0.U8" endpipe="U">
				<line code="mov eax, @1.U32"   time="U 1" timev=" V1" comment="Move the whole 24bit register" />
				<line code="xor dl, dl"        time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="add eax, -1"       time="U 1" timev=" V1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"        time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, dl"        time="U*1"             comment="Store the result" />
			</codeset>
			<codeset param0="M" param1="R" param1type="S24" total="5" totalv="4"
				lostregs="eax,dl" endregs="dl=@0.U8" endpipe="U">
				<line code="mov eax, @1.U32"   time="U 1" timev=" V1" comment="Move the whole 24bit register" />
				<line code="xor dl, dl"        time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="and eax, 0FFFFFFh" time="U 1" timev=" V1" comment="Clear the high byte" />
				<line code="add eax, -1"       time="U*1" timev="U 1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"        time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, dl"        time="U*1"             comment="Store the result" />
			</codeset>
			<codeset param0="M" param1="V" param1type="U24" total="4" totalv="3"
				lostregs="@1.U32" endpipe="U">
				<line code="add @1.U32, -1"       time="U 1" timev=" V1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="mov @1.U8, 0"         time="U*1" timev="U 1" comment="Clear to zero" />
				<line code="adc @1.U8, @1.U8"     time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, @1.U8"        time="U*1"             comment="Store the result" />
			</codeset>
			<codeset param0="M" param1="V" param1type="S24" total="5" totalv="4"
				lostregs="@1.U32" endpipe="U">
				<line code="and @1.U32, 0FFFFFFh" time="U 1" timev=" V1" comment="Clear the high byte" />
				<line code="add @1.U32, -1"       time="U*1" timev="U 1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="mov @1.U8, 0"         time="U*1"             comment="Clear to zero" />
				<line code="adc @1.U8, @1.U8"     time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, @1.U8"        time="U*1"             comment="Store the result" />
			</codeset>

			<!--
			<codeset param0="R" param1="M" total="7" totalv="6"
				lostregs="al" endpipe="U">
				<line code="mov al, @1.U8"   time="U 1" timev=" V1" comment="Get byte 1" />
				<line code="xor @0, @0"      time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="or al, @1.U8[1]" time="U*2" timev=" V2" comment="Get byte 2" />
				<line code="or al, @1.U8[2]" time="U*2" timev="U 2" comment="Get byte 3" />
				<line code="add al, -1"      time="U*1"             comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"      time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
			-->
			<!-- This is a tiny bit faster than the code above -->
			<codeset param0="R" param1="M" total="6" totalv="5"
				lostregs="al,dl" endregs="dl=@1.U8[2]" endpipe="U">
				<line code="mov al, @1.U8"    time="U 1" timev=" V1" comment="Get byte 1" />
				<line code="xor @0, @0"       time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="mov dl, @1.U8[1]" time="U 1" timev=" V1" comment="Get byte 2" />
				<line code="or al, dl"        time="U*1" timev="U 1" comment="Combine them" />
				<line code="mov dl, @1.U8[2]" time=" V1"             comment="Get byte 3" />
				<line code="or al, dl"        time="U 1"             comment="Combine them" />
				<line code="add al, -1"       time="U*1"             comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"       time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="R" param1type="U24" total="3" totalv="2"
				lostregs="eax" endpipe="U">
				<line code="mov eax, @1.U32" time="U 1" timev=" V1" comment="Move the whole 24bit register" />
				<line code="xor @0, @0"      time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="add eax, -1"     time="U 1" timev=" V1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"      time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="R" param1type="S24" total="4" totalv="3"
				lostregs="eax" endpipe="U">
				<line code="mov eax, @1.U32"   time="U 1" timev=" V1" comment="Move the whole 24bit register" />
				<line code="and eax, 0FFFFFFh" time="U*1" timev="U 1" comment="Clear the high byte" />
				<line code="xor @0, @0"        time=" V1"             comment="Clear to zero" />
				<line code="add eax, -1"       time="U 1"             comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"        time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="V" param1type="U24" total="2" totalv="2"
				lostregs="@1.U32" endpipe="U">
				<line code="xor @0, @0"     time="U 1" timev=" V1" comment="Clear to zero" />
				<line code="add @1.U32, -1" time=" V1" timev="U 1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"     time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="V" param1type="S24" total="3" totalv="2"
				lostregs="@1.U32" endpipe="U">
				<line code="and @1.U32, 0FFFFFFh" time="U 1" timev=" V1" comment="Clear the high byte" />
				<line code="xor @0, @0"           time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="add @1.U32, -1"       time="U 1" timev=" V1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"           time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 32bit -->
		<codetypeset param0="Boolean" param1="U/S32">
			<codeset param0="M" param1="M,R" total="4" totalv="3"
				lostregs="eax,dl" endregs="dl=@0.U8" endpipe="U">
				<line code="mov eax, @1" time="U 1" timev=" V1" comment="Get the value" />
				<line code="xor dl, dl"  time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="add eax, -1" time="U 1" timev=" V1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"  time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, dl"  time="U*1"             comment="Store the result" />
			</codeset>
			<codeset param0="M" param1="V" total="4" totalv="3"
				lostregs="@1.U32" endpipe="U">
				<line code="add @1.U32, -1"   time="U 1" timev=" V1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="mov @1.U8, 0"     time="U*1" timev="U 1" comment="Clear to zero" />
				<line code="adc @1.U8, @1.U8" time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, @1.U8"    time="U*1"             comment="Store the result" />
			</codeset>

			<codeset param0="R" param1="M,R" total="3" totalv="2"
				lostregs="eax" endpipe="U">
				<line code="mov eax, @1" time="U 1" timev=" V1" comment="Get the value" />
				<line code="xor @0, @0"  time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="add eax, -1" time="U*1" timev=" V1" comment="Add -1. This will set carry if non-zero" />
				<line code="adc @0, @0"  time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="V" total="2" totalv="2"
				lostregs="@1.U32" endpipe="U">
				<line code="xor @0, @0"     time="U 1" timev=" V1" comment="Clear to zero" />
				<line code="add @1.U32, -1" time=" V1" timev="U 1" comment="Add -1. This will set carry if non-zero" />
				<line code="adc @0, @0"     time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 48bit -->
		<codetypeset param0="Boolean" param1="U/S48">
			<codeset param0="M" param1="M" total="7" totalv="6"
				lostregs="eax,dl" endregs="dl=@0.U8" endpipe="U">
				<line code="mov eax, @1.U32"  time="U 1"   timev=" V1"   comment="Get the rest" />
				<line code="xor dl, dl"       time=" V1"   timev="U 1"   comment="Clear to zero" />
				<line code="or ax, @1.U16[2]" time="U*2+1" timev=" V2+1" comment="Merge the bits" />
				<line code="add eax, -1"      time="U*1"   timev="U 1"   comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"       time="U!1"                 comment="1 if carry, 0 if no carry" />
				<line code="mov @0, dl"       time="U*1"                 comment="Store the result" />
			</codeset>
			<codeset param0="M" param1="R" param1type="U48" total="5" totalv="4"
				lostregs="eax,dl" endregs="dl=@0.U8" endpipe="U">
				<line code="mov eax, @1.U32"   time="U 1" timev=" V1" comment="Get the low 32 bits" />
				<line code="xor dl, dl"        time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="or eax, @1.U32[1]" time="U 1" timev=" V1" comment="Merge the bits" />
				<line code="add eax, -1"       time="U*1" timev="U 1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"        time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, dl"        time="U*1"             comment="Store the result" />
			</codeset>
			<codeset param0="M" param1="R" param1type="S48" total="6" totalv="5"
				lostregs="eax,dl" endregs="dl=@0.U8" endpipe="U">
				<line code="mov eax, @1.U32"  time="U 1"   timev=" V1"   comment="Get the low 32 bits" />
				<line code="xor dl, dl"       time=" V1"   timev="U 1"   comment="Clear to zero" />
				<line code="or ax, @1.U16[1]" time="U 1+1" timev=" V1+1" comment="Merge the bits" />
				<line code="add eax, -1"      time="U*1"   timev="U 1"   comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"       time="U!1"                 comment="1 if carry, 0 if no carry" />
				<line code="mov @0, dl"       time="U*1"                 comment="Store the result" />
			</codeset>
			<codeset param0="M" param1="V" param1type="U48" total="5" totalv="4"
				lostregs="@1.U32" endpipe="U">
				<line code="or @1.U32, @1.U32[1]" time="U 1" timev=" V1" comment="Merge the bits" />
				<line code="add @1.U32, -1"       time="U*1" timev="U 1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="mov @1.U8, 0"         time="U*1"             comment="Clear to zero" />
				<line code="adc @1.U8, @1.U8"     time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, @1.U8"        time="U*1"             comment="Store the result" />
			</codeset>
			<codeset param0="M" param1="V" param1type="S48" total="6" totalv="5"
				lostregs="@1.U32" endpipe="U">
				<line code="or @1.U16, @1.U16[2]"  time="U*1+1" timev=" V1+1" comment="Merge the bits" />
				<line code="add @1.U32, -1"        time="U*1"   timev="U 1"   comment="Add -1. This will set carry if it is non-zero" />
				<line code="mov @1.U8, 0"          time="U*1"                 comment="Clear to zero" />
				<line code="adc @1.U8, @1.U8"      time="U!1"                 comment="1 if carry, 0 if no carry" />
				<line code="mov @0, @1.U8"         time="U*1"                 comment="Store the result" />
			</codeset>

			<codeset param0="R" param1="M" total="6" totalv="5"
				lostregs="eax" endpipe="U">
				<line code="mov eax, @1.U32"  time="U 1"   timev=" V1"   comment="Get the rest" />
				<line code="xor @0, @0"       time=" V1"   timev="U 1"   comment="Clear to zero" />
				<line code="or ax, @1.U16[2]" time="U*2+1" timev=" V2+1" comment="Merge the bits" />
				<line code="add eax, -1"      time="U*1"   timev="U 1"   comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"       time="U!1"                 comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="R" param1type="U48" total="4" totalv="3"
				lostregs="eax" endpipe="U">
				<line code="mov eax, @1.U32"   time="U 1" timev=" V1" comment="Get the bottom DWord" />
				<line code="xor @0, @0"        time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="or eax, @1.U32[1]" time="U 1" timev=" V1" comment="Merge the bits" />
				<line code="add eax, -1"       time="U*1" timev="U 1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"        time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="R" param1type="S48" total="5" totalv="4"
				lostregs="eax" endpipe="U">
				<line code="mov eax, @1.U32"  time="U 1"   timev=" V1"   comment="Get the bottom DWord" />
				<line code="xor @0, @0"       time=" V1"   timev="U 1"   comment="Clear to zero" />
				<line code="or ax, @1.U16[2]" time="U 1+1" timev=" V1+1" comment="Merge the bits" />
				<line code="add eax, -1"      time="U*1"   timev="U 1"   comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"       time="U!1"                 comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="V" param1type="U48" total="3" totalv="2"
				lostregs="@1.U32" endpipe="U">
				<line code="or @1.U32, @1.U32[1]" time="U 1" timev=" V1" comment="Merge the bits" />
				<line code="xor @0, @0"           time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="add @1.U32, -1"       time="U 1" timev=" V1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"           time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="V" param1type="S48" total="4" totalv="3"
				lostregs="@1.U32" endpipe="U">
				<line code="or @1.U16, @1.U16[2]" time="U 1+1" timev=" V1+1" comment="Merge the bits" />
				<line code="xor @0, @0"           time=" V1"   timev="U 1"   comment="Clear to zero" />
				<line code="add @1.U32, -1"       time="U 1"   timev=" V1"   comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"           time="U!1"                 comment="1 if carry, 0 if no carry" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 64bit -->
		<codetypeset param0="Boolean" param1="U/S64">
			<codeset param0="M" param1="M" total="5" totalv="5"
				lostregs="eax,edx" endregs="dl=@0.U8" endpipe="U">
				<line code="mov edx, @1.U32"    time="U 1" timev=" V1" comment="Get the lower 32bits" />
				<line code="mov eax, @1.U32[1]" time=" V1" timev="U 1" comment="Get the upper 32bits" />
				<line code="or eax, edx"        time="U 1" timev="U*1" comment="OR them together" />
				<line code="xor dl, dl"         time=" V1"             comment="Clear to zero" />
				<line code="add eax, -1"        time="U*1"             comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"         time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, dl"         time="U*1"             comment="Store it" />
			</codeset>
			<codeset param0="M" param1="R" total="5" totalv="4"
				lostregs="eax,dl" endregs="dl=@0.U8" endpipe="U">
				<line code="mov eax, @1.U32"   time="U 1" timev=" V1" comment="Get the lower 32bits" />
				<line code="xor dl, dl"        time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="or eax, @1.U32[1]" time="U*1" timev=" V1" comment="OR in the upper 32bits" />
				<line code="add eax, -1"       time="U*1" timev="U 1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"        time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, dl"        time="U*1"             comment="Store it" />
			</codeset>
			<codeset param0="M" param1="V" total="5" totalv="4"
				lostregs="@1.U32" endpipe="U">
				<line code="or @1.U32, @1.U32[1]" time="U 1" timev=" V1" comment="OR in the upper 32bits" />
				<line code="add @1.U32, -1"       time="U*1" timev="U 1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="mov @1.U8, 0"         time="U*1"             comment="Clear to zero" />
				<line code="adc @1.U8, @1.U8"     time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, @1.U8"        time="U*1"             comment="Store it" />
			</codeset>

			<codeset param0="R" param1="M" total="4" totalv="3"
				lostregs="eax,edx" endregs="edx=@1.U32" endpipe="U">
				<line code="mov edx @1.U32"     time="U 1" timev=" V1" comment="Get the lower 32bits" />
				<line code="mov eax, @1.U32[1]" time=" V1" timev="U 1" comment="Get the upper 32bits" />
				<line code="xor @0, @0"         time="U 1" timev=" V1" comment="Clear to zero" />
				<line code="or eax, edx"        time=" V1" timev="U 1" comment="OR them together" />
				<line code="add eax, -1"        time="U 1" timev="U*1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"         time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="R" total="4" totalv="3"
				lostregs="eax" endpipe="U">
				<line code="mov eax, @1.U32"   time="U 1" timev=" V1" comment="Get the lower 32bits" />
				<line code="xor @0, @0"        time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="or eax, @1.U32[1]" time="U 1" timev=" V1" comment="OR in the upper 32bits" />
				<line code="add eax, -1"       time="U*1" timev="U 1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"        time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="V" total="3" totalv="2"
				lostregs="@1.U32" endpipe="U">
				<line code="or @1.U32, @1.U32[1]" time="U 1" timev=" V1" comment="OR in the upper 32bits" />
				<line code="xor @0, @0"           time=" V1" timev="U 1" comment="Clear to zero" />
				<line code="add @1.U32, -1"       time="U 1" timev=" V1" comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"           time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 128bit -->
		<codetypeset param0="Boolean" param1="U/S128">
			<codeset param0="M" param1="M" total="7" totalv="7"
				lostregs="eax,edx" endregs="edx=@0.U8" endpipe="U">
				<line code="mov edx, @1.U32"    time="U 1" timev=" V1" comment="Get the lower 32bits" />
				<line code="mov eax, @1.U32[1]" time=" V1" timev="U 1" comment="Get the next 32bits" />
				<line code="or eax, edx"        time="U 1" timev="U*1" comment="Merge them" />
				<line code="mov edx, @1.U32[2]" time=" V1"             comment="Get the next 32bits" />
				<line code="or eax, edx"        time="U 1"             comment="Merge them" />
				<line code="mov edx, @1.U32[3]" time=" V1"             comment="Get the last 32bits" />
				<line code="or eax, edx"        time="U 1"             comment="Merge them" />
				<line code="xor edx, edx"       time=" V1"             comment="Clear to zero" />
				<line code="add eax, -1"        time="U 1"             comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"         time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, dl"         time="U*1"             comment="Store it" />
			</codeset>
			<codeset param0="M" param1="R" total="6" totalv="6"
				lostregs="eax,edx" endregs="edx=@0.U8" endpipe="U">
				<line code="mov edx, @1.U32"    time="U 1" timev=" V1" comment="Get the lower 32bits" />
				<line code="mov eax, @1.U32[1]" time=" V1" timev="U 1" comment="Get the next 32bits" />
				<line code="or edx, @1.U32[2]"  time="U 1" timev=" V1" comment="Merge the next 32bits" />
				<line code="or eax, @1.U32[3]"  time=" V1" timev="U 1" comment="Merge the last 32bits" />
				<line code="or eax, edx"        time="U 1" timev="U*1" comment="Merge them all together" />
				<line code="xor edx, edx"       time=" V1"             comment="Clear to zero" />
				<line code="add eax, -1"        time="U*1"             comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"         time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, dl"         time="U*1"             comment="Store it" />
			</codeset>

			<codeset param0="R" param1="M" total="6" totalv="6"
				lostregs="eax,edx" endregs="eax=@1.U32[3]" endpipe="U">
				<line code="mov edx, @1.U32"    time="U 1" timev=" V1" comment="Get the lower 32bits" />
				<line code="mov eax, @1.U32[1]" time=" V1" timev="U 1" comment="Get the next 32bits" />
				<line code="or edx, eax"        time="U 1" timev="U*1" comment="Merge them" />
				<line code="mov eax, @1.U32[2]" time=" V1"             comment="Get the next 32bits" />
				<line code="or edx, eax"        time="U 1"             comment="Merge them" />
				<line code="mov eax, @1.U32[3]" time=" V1"             comment="Get the last 32bits" />
				<line code="or edx, eax"        time="U 1"             comment="Merge them" />
				<line code="xor @0, @0"         time=" V1"             comment="Clear to zero" />
				<line code="add edx, -1"        time="U*1"             comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"         time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="R" total="5" totalv="5"
				lostregs="eax,edx" endregs="eax=@1.U32[3]" endpipe="U">
				<line code="mov edx, @1.U32"    time="U 1" timev=" V1" comment="Get the lower 32bits" />
				<line code="mov eax, @1.U32[1]" time=" V1" timev="U 1" comment="Get the next 32bits" />
				<line code="or edx, @1.U32[2]"  time="U 1" timev="U*1" comment="Merge the next 32bits" />
				<line code="or eax, @1.U32[3]"  time=" V1"             comment="Merge the last 32bits" />
				<line code="or edx, eax"        time="U 1"             comment="Merge them all together" />
				<line code="xor @0, @0"         time=" V1"             comment="Clear to zero" />
				<line code="add edx, -1"        time="U*1"             comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"         time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From 256bit -->
		<codetypeset param0="Boolean" param1="U/S256">
			<codeset param0="M" param1="M" total="11" totalv="11"
				lostregs="eax,edx" endregs="edx=@0.U8" endpipe="U">
				<line code="mov edx, @1.U32"    time="U 1" timev=" V1" comment="Get the lower 32bits" />
				<line code="mov eax, @1.U32[1]" time=" V1" timev="U 1" comment="Get the next 32bits" />
				<line code="or eax, edx"        time="U 1" timev="U*1" comment="Merge them" />
				<line code="mov edx, @1.U32[2]" time=" V1"             comment="Get the next 32bits" />
				<line code="or eax, edx"        time="U 1"             comment="Merge them" />
				<line code="mov edx, @1.U32[3]" time=" V1"             comment="Get the next 32bits" />
				<line code="or eax, edx"        time="U 1"             comment="Merge them" />
				<line code="mov edx, @1.U32[4]" time=" V1"             comment="Get the next 32bits" />
				<line code="or eax, edx"        time="U 1"             comment="Merge them" />
				<line code="mov edx, @1.U32[5]" time=" V1"             comment="Get the next 32bits" />
				<line code="or eax, edx"        time="U 1"             comment="Merge them" />
				<line code="mov edx, @1.U32[6]" time=" V1"             comment="Get the next 32bits" />
				<line code="or eax, edx"        time="U 1"             comment="Merge them" />
				<line code="mov edx, @1.U32[7]" time=" V1"             comment="Get the last 32bits" />
				<line code="or eax, edx"        time="U 1"             comment="Merge them" />
				<line code="xor edx, edx"       time=" V1"             comment="Clear to zero" />
				<line code="add eax, -1"        time="U*1"             comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"         time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, dl"         time="U*1"             comment="Store it" />
			</codeset>
			<codeset param0="M" param1="R" total="8" totalv="8"
				lostregs="eax,edx" endregs="edx=@0.U8" endpipe="U">
				<line code="mov edx, @1.U32"    time="U 1" timev=" V1" comment="Get the lower 32bits" />
				<line code="mov eax, @1.U32[1]" time=" V1" timev="U 1" comment="Get the next 32bits" />
				<line code="or edx, @1.U32[2]"  time="U 1" timev=" V1" comment="Merge the next 32bits" />
				<line code="or eax, @1.U32[3]"  time=" V1" timev="U 1" comment="Merge the next 32bits" />
				<line code="or edx, @1.U32[4]"  time="U 1" timev=" V1" comment="Merge the next 32bits" />
				<line code="or eax, @1.U32[5]"  time=" V1" timev="U 1" comment="Merge the next 32bits" />
				<line code="or edx, @1.U32[6]"  time="U 1" timev=" V1" comment="Merge the next 32bits" />
				<line code="or eax, @1.U32[7]"  time=" V1" timev="U 1" comment="Merge the last 32bits" />
				<line code="or eax, edx"        time="U 1" timev="U*1" comment="Merge them all together" />
				<line code="xor edx, edx"       time=" V1"             comment="Clear to zero" />
				<line code="add eax, -1"        time="U*1"             comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc dl, dl"         time="U!1"             comment="1 if carry, 0 if no carry" />
				<line code="mov @0, dl"         time="U*1"             comment="Store it" />
			</codeset>

			<codeset param0="R" param1="M" total="10" totalv="10"
				lostregs="eax,edx" endregs="eax=@1.U32[7]" endpipe="U">
				<line code="mov edx, @1.U32"    time="U 1" timev=" V1" comment="Get the lower 32bits" />
				<line code="mov eax, @1.U32[1]" time=" V1" timev="U 1" comment="Get the next 32bits" />
				<line code="or edx, eax"        time="U 1" timev="U*1" comment="Merge them" />
				<line code="mov eax, @1.U32[2]" time=" V1"             comment="Get the next 32bits" />
				<line code="or edx, eax"        time="U 1"             comment="Merge them" />
				<line code="mov eax, @1.U32[3]" time=" V1"             comment="Get the next 32bits" />
				<line code="or edx, eax"        time="U 1"             comment="Merge them" />
				<line code="mov eax, @1.U32[4]" time=" V1"             comment="Get the next 32bits" />
				<line code="or edx, eax"        time="U 1"             comment="Merge them" />
				<line code="mov eax, @1.U32[5]" time=" V1"             comment="Get the next 32bits" />
				<line code="or edx, eax"        time="U 1"             comment="Merge them" />
				<line code="mov eax, @1.U32[6]" time=" V1"             comment="Get the next 32bits" />
				<line code="or edx, eax"        time="U 1"             comment="Merge them" />
				<line code="mov eax, @1.U32[7]" time=" V1"             comment="Get the last 32bits" />
				<line code="or edx, eax"        time="U 1"             comment="Merge them" />
				<line code="xor @0, @0"         time=" V1"             comment="Clear to zero" />
				<line code="add edx, -1"        time="U*1"             comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"         time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
			<codeset param0="R" param1="R" total="7" totalv="7"
				lostregs="eax,edx" endpipe="U">
				<line code="mov edx, @1.U32"    time="U 1" timev=" V1" comment="Get the lower 32bits" />
				<line code="mov eax, @1.U32[1]" time=" V1" timev="U 1" comment="Get the next 32bits" />
				<line code="or edx, @1.U32[2]"  time="U 1" timev=" V1" comment="Merge the next 32bits" />
				<line code="or eax, @1.U32[3]"  time=" V1" timev="U 1" comment="Merge the next 32bits" />
				<line code="or edx, @1.U32[4]"  time="U 1" timev=" V1" comment="Merge the next 32bits" />
				<line code="or eax, @1.U32[5]"  time=" V1" timev="U 1" comment="Merge the next 32bits" />
				<line code="or edx, @1.U32[6]"  time="U 1" timev=" V1" comment="Merge the next 32bits" />
				<line code="or eax, @1.U32[7]"  time=" V1" timev="U 1" comment="Merge the last 32bits" />
				<line code="or edx, eax"        time="U 1" timev="U*1" comment="Merge them all together" />
				<line code="xor @0, @0"         time=" V1"             comment="Clear to zero" />
				<line code="add edx, -1"        time="U*1"             comment="Add -1. This will set carry if it is non-zero" />
				<line code="adc @0, @0"         time="U!1"             comment="1 if carry, 0 if no carry" />
			</codeset>
		</codetypeset>


		<!-- $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ -->
		<!-- From Boolean -->
		<codetypeset param0="Boolean" param1="Boolean">
			<!-- 1/0 and -1/0 are the same here -->
			<codeset param0="M" param1="M" total="2" totalv="1"
				lostregs="al" endregs="al=@1.U8,al=@0.U8" endpipe="U">
				<line code="mov al, @1" time="U 1" timev=" V1" comment="Get the value" />
				<line code="mov @0, al" time="U*1" timev="U 1" comment="Store it" />
			</codeset>
			<codeset param0="M" param1="R,I" total="1" totalv="0" endpipe="S">
				<line code="mov @0, @1" time="U 1" timev=" V1" comment="Move it" />
			</codeset>

			<codeset param0="R" param1="M,R,I" total="1" totalv="0" endpipe="S">
				<line code="mov @0, @1" time="U 1" timev=" V1" comment="Move it" />
			</codeset>
		</codetypeset>
	</mnemonic>
</encoding>
