diff mbox series

libcpp: deduplicate definition of padding size

Message ID 20240824144626.6646-1-amonakov@ispras.ru
State New
Headers show
Series libcpp: deduplicate definition of padding size | expand

Commit Message

Alexander Monakov Aug. 24, 2024, 2:46 p.m. UTC
Tie together the two functions that ensure tail padding with
search_line_ssse3 via CPP_BUFFER_PADDING macro.

libcpp/ChangeLog:

	* internal.h (CPP_BUFFER_PADDING): New macro; use it ...
	* charset.cc (_cpp_convert_input): ...here, and ...
	* files.cc (read_file_guts): ...here, and ...
	* lex.cc (search_line_ssse3): here.
---
 libcpp/charset.cc | 7 +------
 libcpp/files.cc   | 6 +-----
 libcpp/internal.h | 7 +++++++
 libcpp/lex.cc     | 4 ++--
 4 files changed, 11 insertions(+), 13 deletions(-)

Comments

Richard Biener Aug. 24, 2024, 7 p.m. UTC | #1
> Am 24.08.2024 um 16:47 schrieb Alexander Monakov <amonakov@ispras.ru>:
> 
> Tie together the two functions that ensure tail padding with
> search_line_ssse3 via CPP_BUFFER_PADDING macro.

Ok

Richard 

> libcpp/ChangeLog:
> 
>    * internal.h (CPP_BUFFER_PADDING): New macro; use it ...
>    * charset.cc (_cpp_convert_input): ...here, and ...
>    * files.cc (read_file_guts): ...here, and ...
>    * lex.cc (search_line_ssse3): here.
> ---
> libcpp/charset.cc | 7 +------
> libcpp/files.cc   | 6 +-----
> libcpp/internal.h | 7 +++++++
> libcpp/lex.cc     | 4 ++--
> 4 files changed, 11 insertions(+), 13 deletions(-)
> 
> diff --git a/libcpp/charset.cc b/libcpp/charset.cc
> index 79072877cb..fd57f61398 100644
> --- a/libcpp/charset.cc
> +++ b/libcpp/charset.cc
> @@ -3093,7 +3093,7 @@ _cpp_convert_input (cpp_reader *pfile, const char *input_charset,
>   struct cset_converter input_cset;
>   struct _cpp_strbuf to;
>   unsigned char *buffer;
> -  size_t pad;
> +  size_t pad = CPP_BUFFER_PADDING;
> 
>   input_cset = init_iconv_desc (pfile, SOURCE_CHARSET, input_charset);
>   if (input_cset.func == convert_no_conversion)
> @@ -3130,11 +3130,6 @@ _cpp_convert_input (cpp_reader *pfile, const char *input_charset,
>    }
>     }
> 
> -#ifdef HAVE_SSSE3
> -  pad = 64;
> -#else
> -  pad = 16;
> -#endif
>   /* Resize buffer if we allocated substantially too much, or if we
>      don't have enough space for the following padding, which allows
>      search_line_fast to use (possibly misaligned) vector loads.  */
> diff --git a/libcpp/files.cc b/libcpp/files.cc
> index 3775091d25..fc66b9c3d7 100644
> --- a/libcpp/files.cc
> +++ b/libcpp/files.cc
> @@ -732,11 +732,7 @@ read_file_guts (cpp_reader *pfile, _cpp_file *file, location_t loc,
>        the majority of C source files.  */
>     size = 8 * 1024;
> 
> -#ifdef HAVE_SSSE3
> -  pad = 64;
> -#else
> -  pad = 16;
> -#endif
> +  pad = CPP_BUFFER_PADDING;
>   /* The '+ PAD' here is space for the final '\n' and PAD-1 bytes of padding,
>      allowing search_line_fast to use (possibly misaligned) vector loads.  */
>   buf = XNEWVEC (uchar, size + pad);
> diff --git a/libcpp/internal.h b/libcpp/internal.h
> index a20215c570..ad0a5d5d4e 100644
> --- a/libcpp/internal.h
> +++ b/libcpp/internal.h
> @@ -322,6 +322,13 @@ struct _cpp_line_note
>   unsigned int type;
> };
> 
> +/* Tail padding required by search_line_fast alternatives.  */
> +#ifdef HAVE_SSSE3
> +#define CPP_BUFFER_PADDING 64
> +#else
> +#define CPP_BUFFER_PADDING 16
> +#endif
> +
> /* Represents the contents of a file cpplib has read in.  */
> struct cpp_buffer
> {
> diff --git a/libcpp/lex.cc b/libcpp/lex.cc
> index f2d47d112b..7f0f8d0773 100644
> --- a/libcpp/lex.cc
> +++ b/libcpp/lex.cc
> @@ -359,8 +359,8 @@ search_line_ssse3 (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
>                 "host character encoding is ASCII");
> 
>   v16qi d1, d2, t1, t2;
> -  /* Unaligned loads.  Reading beyond the final newline is safe,
> -     since files.cc:read_file_guts pads the allocation.  */
> +  /* Unaligned loads, potentially using padding after the final newline.  */
> +  static_assert (CPP_BUFFER_PADDING >= 64, "");
>   d1 = *(const v16qi_u *)s;
>   d2 = *(const v16qi_u *)(s + 16);
>   unsigned m1, m2, found;
> --
> 2.46.0
>
diff mbox series

Patch

diff --git a/libcpp/charset.cc b/libcpp/charset.cc
index 79072877cb..fd57f61398 100644
--- a/libcpp/charset.cc
+++ b/libcpp/charset.cc
@@ -3093,7 +3093,7 @@  _cpp_convert_input (cpp_reader *pfile, const char *input_charset,
   struct cset_converter input_cset;
   struct _cpp_strbuf to;
   unsigned char *buffer;
-  size_t pad;
+  size_t pad = CPP_BUFFER_PADDING;
 
   input_cset = init_iconv_desc (pfile, SOURCE_CHARSET, input_charset);
   if (input_cset.func == convert_no_conversion)
@@ -3130,11 +3130,6 @@  _cpp_convert_input (cpp_reader *pfile, const char *input_charset,
 	}
     }
 
-#ifdef HAVE_SSSE3
-  pad = 64;
-#else
-  pad = 16;
-#endif
   /* Resize buffer if we allocated substantially too much, or if we
      don't have enough space for the following padding, which allows
      search_line_fast to use (possibly misaligned) vector loads.  */
diff --git a/libcpp/files.cc b/libcpp/files.cc
index 3775091d25..fc66b9c3d7 100644
--- a/libcpp/files.cc
+++ b/libcpp/files.cc
@@ -732,11 +732,7 @@  read_file_guts (cpp_reader *pfile, _cpp_file *file, location_t loc,
        the majority of C source files.  */
     size = 8 * 1024;
 
-#ifdef HAVE_SSSE3
-  pad = 64;
-#else
-  pad = 16;
-#endif
+  pad = CPP_BUFFER_PADDING;
   /* The '+ PAD' here is space for the final '\n' and PAD-1 bytes of padding,
      allowing search_line_fast to use (possibly misaligned) vector loads.  */
   buf = XNEWVEC (uchar, size + pad);
diff --git a/libcpp/internal.h b/libcpp/internal.h
index a20215c570..ad0a5d5d4e 100644
--- a/libcpp/internal.h
+++ b/libcpp/internal.h
@@ -322,6 +322,13 @@  struct _cpp_line_note
   unsigned int type;
 };
 
+/* Tail padding required by search_line_fast alternatives.  */
+#ifdef HAVE_SSSE3
+#define CPP_BUFFER_PADDING 64
+#else
+#define CPP_BUFFER_PADDING 16
+#endif
+
 /* Represents the contents of a file cpplib has read in.  */
 struct cpp_buffer
 {
diff --git a/libcpp/lex.cc b/libcpp/lex.cc
index f2d47d112b..7f0f8d0773 100644
--- a/libcpp/lex.cc
+++ b/libcpp/lex.cc
@@ -359,8 +359,8 @@  search_line_ssse3 (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
                 "host character encoding is ASCII");
 
   v16qi d1, d2, t1, t2;
-  /* Unaligned loads.  Reading beyond the final newline is safe,
-     since files.cc:read_file_guts pads the allocation.  */
+  /* Unaligned loads, potentially using padding after the final newline.  */
+  static_assert (CPP_BUFFER_PADDING >= 64, "");
   d1 = *(const v16qi_u *)s;
   d2 = *(const v16qi_u *)(s + 16);
   unsigned m1, m2, found;