anchor.diff:         replace_term('<call-read-field>', ReadFieldDefFnName),
          splice_trees('<OutParams>', Params2)]).
   
  -format_float_field_decoder(MsgName, XFieldDef, AnRes, Opts) ->
  +format_floating_point_field_decoder(MsgName, XFieldDef, Type, AnRes, Opts) ->
       {#?gpb_field{name=FName}, _IsOneof} = XFieldDef,
       Params = decoder_params(MsgName, AnRes),
       {InParams, PrevValue} = decoder_in_params(Params, MsgName, XFieldDef,
  
positive.code:                                   {'-InfinityOutParams', ?expr('-infinity')},
                                    {'NanOutParams', ?expr(nan)}]],
      ReadFieldDefFnName = mk_fn(dfp_read_field_def_, MsgName),
      gpb_codegen:format_fn(
        mk_fn(d_field_, MsgName, FName),
        fun(<<0:16,128,127, Rest/binary>>, Z1, Z2, '<InParams>') ->
                '<call-read-field>'(Rest, Z1, Z2, 'InfinityOutParams');
           (<<0:16,128,255, Rest/binary>>, Z1, Z2, '<InParams>') ->
                '<call-read-field>'(Rest, Z1, Z2, '-InfinityOutParams');
           (<<_:16,1:1,_:7,_:1,127:7, Rest/binary>>, Z1, Z2, '<InParams>') ->
                '<call-read-field>'(Rest, Z1, Z2, 'NanOutParams');
           (<<Value:32/little-float, Rest/binary>>, Z1, Z2, '<InParams>') ->
                '<call-read-field>'(Rest, Z1, Z2, 'OutParams')
        end,
        [splice_trees('<InParams>', InParams),
         replace_term('<call-read-field>', ReadFieldDefFnName)] ++
            OutParamsReplacements).
  
  format_double_field_decoder(MsgName, XFieldDef, AnRes, Opts) ->
      {#?gpb_field{name=FName}, _IsOneof} = XFieldDef,
      Params = decoder_params(MsgName, AnRes),
      {InParams, PrevValue} = decoder_in_params(Params, MsgName, XFieldDef,
                                                AnRes, Opts),
      OutParamsReplacements =
          [splice_trees(Marker, updated_merged_params(MsgName, XFieldDef, AnRes,
                                                      OutExpr, PrevValue, Params,
                                                      Opts))
           || {Marker, OutExpr} <- [{'OutParams', ?expr(Value)},
                                    {'InfinityOutParams', ?expr(infinity)},
                                    {'-InfinityOutParams', ?expr('-infinity')},
                                    {'NanOutParams', ?expr(nan)}]],
      ReadFieldDefFnName = mk_fn(dfp_read_field_def_, MsgName),
      gpb_codegen:format_fn(
        mk_fn(d_field_, MsgName, FName),
        fun(<<0:48,240,127, Rest/binary>>, Z1, Z2, '<InParams>') ->
                '<call-read-field>'(Rest, Z1, Z2, 'InfinityOutParams');
           (<<0:48,240,255, Rest/binary>>, Z1, Z2, '<InParams>') ->
                '<call-read-field>'(Rest, Z1, Z2, '-InfinityOutParams');
           (<<_:48,15:4,_:4,_:1,127:7, Rest/binary>>, Z1, Z2, '<InParams>') ->
                '<call-read-field>'(Rest, Z1, Z2, 'NanOutParams');
           (<<Value:64/little-float, Rest/binary>>, Z1, Z2, '<InParams>') ->
                '<call-read-field>'(Rest, Z1, Z2, 'OutParams')
        end,
        [splice_trees('<InParams>', InParams),
         replace_term('<call-read-field>', ReadFieldDefFnName)] ++
            OutParamsReplacements).
  
  assign_to_var(Var, Expr) ->
      ?expr('<Var>' = '<Expr>',
  
negative.code:         replace_term('<encode-packed>', PackedFnName)]),
       case BitType of
           float ->
               format_packed_float_encoder(PackedFnName);
           double ->
               format_packed_double_encoder(PackedFnName);
           _ ->
               gpb_codegen:format_fn(
                 PackedFnName,
  