From d8870dcf385a75ae8df2f8bb5bd5ee59525ed348 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Thu, 18 Oct 2018 13:37:05 -0400 Subject: [PATCH] optimize internal putc_unlocked macro used in putc to check whether flush due to line buffering is needed, the int-type character argument must be truncated to unsigned char for comparison. if the original value is subsequently passed to __overflow, it must be preserved, adding to register pressure. since it doesn't matter, truncate all uses so the original value is no longer live. --- src/internal/stdio_impl.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/internal/stdio_impl.h b/src/internal/stdio_impl.h index 44497344..055ef718 100644 --- a/src/internal/stdio_impl.h +++ b/src/internal/stdio_impl.h @@ -106,7 +106,8 @@ hidden void __getopt_msg(const char *, const char *, const char *, size_t); #define putc_unlocked(c, f) \ ( (((unsigned char)(c)!=(f)->lbf && (f)->wpos!=(f)->wend)) \ - ? *(f)->wpos++ = (c) : __overflow((f),(c)) ) + ? *(f)->wpos++ = (unsigned char)(c) \ + : __overflow((f),(unsigned char)(c)) ) /* Caller-allocated FILE * operations */ hidden FILE *__fopen_rb_ca(const char *, FILE *, unsigned char *, size_t); -- 2.25.1