public static void AddTo(this ExpressionResult source, Register target, CodeGen codeGen, ILinkingInfo fixer)
 {
     source.DereferenceToRegister(
         target,
         codeGen,
         fixer,
         codeGen.Add,
         codeGen.AddFromDereferenced,
         codeGen.AddFromDereferenced2,
         codeGen.AddFromDereferenced3,
         codeGen.AddFromDereferenced4
         );
 }
 public static void SubsdTo(this ExpressionResult source, Register target, CodeGen codeGen, ILinkingInfo fixer)
 {
     source.DereferenceToRegister(
         target,
         codeGen,
         fixer,
         (targetRegister, sourceRegister) => codeGen.Subsd(targetRegister.AsFloat(), sourceRegister.AsFloat()),
         codeGen.SubsdFromDereferenced,
         codeGen.SubsdFromDereferenced2,
         codeGen.SubsdFromDereferenced3,
         codeGen.SubsdFromDereferenced4
         );
 }
        public static void ImulTo(this ExpressionResult source, Register target, CodeGen codeGen, ILinkingInfo fixer)
        {
            if (target.BitSize == 8)
            {
                throw new ArgumentException($"{nameof(ImulTo)} does not work with 8 bit types");
            }

            source.DereferenceToRegister(
                target,
                codeGen,
                fixer,
                codeGen.Imul,
                codeGen.ImulFromDereferenced,
                codeGen.ImulFromDereferenced2,
                codeGen.ImulFromDereferenced3,
                codeGen.ImulFromDereferenced4
                );
        }