libcpp: deduplicate definition of padding size

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.
This commit is contained in:
Alexander Monakov 2024-08-24 17:37:13 +03:00
parent 0ceeb9926d
commit a8260ebeae
4 changed files with 11 additions and 13 deletions

View file

@ -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. */

View file

@ -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);

View file

@ -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
{

View file

@ -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;