================
@@ -1124,71 +1124,103 @@ LIBC_INLINE int 
convert_float_dec_auto_typed(Writer<write_mode> *writer,
 
 // TODO: unify the float converters to remove the duplicated checks for 
inf/nan.
 
-template <WriteMode write_mode>
-LIBC_INLINE int convert_float_decimal(Writer<write_mode> *writer,
-                                      const FormatSection &to_conv) {
-  if (to_conv.length_modifier == LengthModifier::L) {
-    fputil::FPBits<long double>::StorageType float_raw = to_conv.conv_val_raw;
-    fputil::FPBits<long double> float_bits(float_raw);
-    if (!float_bits.is_inf_or_nan()) {
-      return convert_float_decimal_typed<long double>(writer, to_conv,
-                                                      float_bits);
-    }
-  } else {
-    fputil::FPBits<double>::StorageType float_raw =
-        static_cast<fputil::FPBits<double>::StorageType>(to_conv.conv_val_raw);
-    fputil::FPBits<double> float_bits(float_raw);
-    if (!float_bits.is_inf_or_nan()) {
-      return convert_float_decimal_typed<double>(writer, to_conv, float_bits);
-    }
-  }
-
-  return convert_inf_nan(writer, to_conv);
-}
-
-template <WriteMode write_mode>
-LIBC_INLINE int convert_float_dec_exp(Writer<write_mode> *writer,
-                                      const FormatSection &to_conv) {
-  if (to_conv.length_modifier == LengthModifier::L) {
-    fputil::FPBits<long double>::StorageType float_raw = to_conv.conv_val_raw;
-    fputil::FPBits<long double> float_bits(float_raw);
-    if (!float_bits.is_inf_or_nan()) {
-      return convert_float_dec_exp_typed<long double>(writer, to_conv,
-                                                      float_bits);
-    }
-  } else {
-    fputil::FPBits<double>::StorageType float_raw =
-        static_cast<fputil::FPBits<double>::StorageType>(to_conv.conv_val_raw);
-    fputil::FPBits<double> float_bits(float_raw);
-    if (!float_bits.is_inf_or_nan()) {
-      return convert_float_dec_exp_typed<double>(writer, to_conv, float_bits);
-    }
-  }
-
-  return convert_inf_nan(writer, to_conv);
-}
-
-template <WriteMode write_mode>
-LIBC_INLINE int convert_float_dec_auto(Writer<write_mode> *writer,
-                                       const FormatSection &to_conv) {
-  if (to_conv.length_modifier == LengthModifier::L) {
-    fputil::FPBits<long double>::StorageType float_raw = to_conv.conv_val_raw;
-    fputil::FPBits<long double> float_bits(float_raw);
-    if (!float_bits.is_inf_or_nan()) {
-      return convert_float_dec_auto_typed<long double>(writer, to_conv,
-                                                       float_bits);
-    }
-  } else {
-    fputil::FPBits<double>::StorageType float_raw =
-        static_cast<fputil::FPBits<double>::StorageType>(to_conv.conv_val_raw);
-    fputil::FPBits<double> float_bits(float_raw);
-    if (!float_bits.is_inf_or_nan()) {
-      return convert_float_dec_auto_typed<double>(writer, to_conv, float_bits);
-    }
-  }
-
-  return convert_inf_nan(writer, to_conv);
-}
+LIBC_PRINTF_MODULE((template <WriteMode write_mode>
+                    int convert_float_decimal(Writer<write_mode> *writer,
+                                              const FormatSection &to_conv)),
+                   {
+                     if (to_conv.length_modifier == LengthModifier::L) {
+                       fputil::FPBits<long double>::StorageType float_raw =
+                           to_conv.conv_val_raw;
+                       fputil::FPBits<long double> float_bits(float_raw);
+                       if (!float_bits.is_inf_or_nan()) {
+                         return convert_float_decimal_typed<long double>(
+                             writer, to_conv, float_bits);
+                       }
+                     } else {
+                       fputil::FPBits<double>::StorageType float_raw =
+                           static_cast<fputil::FPBits<double>::StorageType>(
+                               to_conv.conv_val_raw);
+                       fputil::FPBits<double> float_bits(float_raw);
+                       if (!float_bits.is_inf_or_nan()) {
+                         return convert_float_decimal_typed<double>(
+                             writer, to_conv, float_bits);
+                       }
+                     }
+
+                     return convert_inf_nan(writer, to_conv);
+                   })
+
+LIBC_PRINTF_MODULE((template <WriteMode write_mode>
+                    int convert_float_dec_exp(Writer<write_mode> *writer,
+                                              const FormatSection &to_conv)),
+                   {
+                     if (to_conv.length_modifier == LengthModifier::L) {
+                       fputil::FPBits<long double>::StorageType float_raw =
+                           to_conv.conv_val_raw;
+                       fputil::FPBits<long double> float_bits(float_raw);
+                       if (!float_bits.is_inf_or_nan()) {
+                         return convert_float_dec_exp_typed<long double>(
+                             writer, to_conv, float_bits);
+                       }
+                     } else {
+                       fputil::FPBits<double>::StorageType float_raw =
+                           static_cast<fputil::FPBits<double>::StorageType>(
+                               to_conv.conv_val_raw);
+                       fputil::FPBits<double> float_bits(float_raw);
+                       if (!float_bits.is_inf_or_nan()) {
+                         return convert_float_dec_exp_typed<double>(
+                             writer, to_conv, float_bits);
+                       }
+                     }
+
+                     return convert_inf_nan(writer, to_conv);
+                   })
+
+LIBC_PRINTF_MODULE((template <WriteMode write_mode>
+                    int convert_float_dec_auto(Writer<write_mode> *writer,
+                                               const FormatSection &to_conv)),
+                   {
+                     if (to_conv.length_modifier == LengthModifier::L) {
+                       fputil::FPBits<long double>::StorageType float_raw =
+                           to_conv.conv_val_raw;
+                       fputil::FPBits<long double> float_bits(float_raw);
+                       if (!float_bits.is_inf_or_nan()) {
+                         return convert_float_dec_auto_typed<long double>(
+                             writer, to_conv, float_bits);
+                       }
+                     } else {
+                       fputil::FPBits<double>::StorageType float_raw =
+                           static_cast<fputil::FPBits<double>::StorageType>(
+                               to_conv.conv_val_raw);
+                       fputil::FPBits<double> float_bits(float_raw);
+                       if (!float_bits.is_inf_or_nan()) {
+                         return convert_float_dec_auto_typed<double>(
+                             writer, to_conv, float_bits);
+                       }
+                     }
+
+                     return convert_inf_nan(writer, to_conv);
+                   })
+
+#ifdef LIBC_PRINTF_DEFINE_MODULES
+#define HANDLE_WRITE_MODE(MODE)                                                
\
+  template int convert_float_decimal<WriteMode::MODE>(                         
\
+      Writer<WriteMode::MODE> * writer, const FormatSection &to_conv);
+#include "src/stdio/printf_core/write_modes.def"
+#undef HANDLE_WRITE_MODE
+
+#define HANDLE_WRITE_MODE(MODE)                                                
\
+  template int convert_float_dec_exp<WriteMode::MODE>(                         
\
+      Writer<WriteMode::MODE> * writer, const FormatSection &to_conv);
+#include "src/stdio/printf_core/write_modes.def"
+#undef HANDLE_WRITE_MODE
+
+#define HANDLE_WRITE_MODE(MODE)                                                
\
+  template int convert_float_dec_auto<WriteMode::MODE>(                        
\
+      Writer<WriteMode::MODE> * writer, const FormatSection &to_conv);
+#include "src/stdio/printf_core/write_modes.def"
+#undef HANDLE_WRITE_MODE
+#endif
----------------
michaelrj-google wrote:

nit: Comment on the `#endif` to clarify this closes `LIBC_PRINTF_DEFINE_MODULES`

https://github.com/llvm/llvm-project/pull/147426
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to