public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] lib: hexdump: use a look-up table to do hex_to_bin
@ 2016-06-29 16:15 zengzhaoxiu
  2016-06-29 16:22 ` [PATCH 2/2] lib: kstrtox: _parse_integer: use hex_to_bin instead local conversion, and reduce branches zengzhaoxiu
                   ` (3 more replies)
  0 siblings, 4 replies; 14+ messages in thread
From: zengzhaoxiu @ 2016-06-29 16:15 UTC (permalink / raw)
  To: linux-kernel
  Cc: Zhaoxiu Zeng, Andrew Morton, Hidehiro Kawai, Michal Nazarewicz,
	Borislav Petkov, Michal Hocko, Rasmus Villemoes, Nicolas Iooss,
	Steven Rostedt (Red Hat), Gustavo Padovan, Geert Uytterhoeven,
	Horacio Mijail Anton Quiles, Andy Shevchenko

From: Zhaoxiu Zeng <zhaoxiu.zeng@gmail.com>

Signed-off-by: Zhaoxiu Zeng <zhaoxiu.zeng@gmail.com>
---
 include/linux/kernel.h | 15 ++++++++++++++-
 lib/hexdump.c          | 36 +++++++++++++++++++-----------------
 2 files changed, 33 insertions(+), 18 deletions(-)

diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index 94aa10f..72a0432 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -532,7 +532,20 @@ static inline char *hex_byte_pack_upper(char *buf, u8 byte)
 	return buf;
 }
 
-extern int hex_to_bin(char ch);
+extern const int8_t h2b_lut[];
+
+/**
+ * hex_to_bin - convert a hex digit to its real value
+ * @ch: ascii character represents hex digit
+ *
+ * hex_to_bin() converts one hex digit to its actual value or -1 in case of bad
+ * input.
+ */
+static inline int hex_to_bin(char ch)
+{
+	return h2b_lut[(unsigned char)ch];
+}
+
 extern int __must_check hex2bin(u8 *dst, const char *src, size_t count);
 extern char *bin2hex(char *dst, const void *src, size_t count);
 
diff --git a/lib/hexdump.c b/lib/hexdump.c
index 992457b..878697f 100644
--- a/lib/hexdump.c
+++ b/lib/hexdump.c
@@ -18,23 +18,25 @@ EXPORT_SYMBOL(hex_asc);
 const char hex_asc_upper[] = "0123456789ABCDEF";
 EXPORT_SYMBOL(hex_asc_upper);
 
-/**
- * hex_to_bin - convert a hex digit to its real value
- * @ch: ascii character represents hex digit
- *
- * hex_to_bin() converts one hex digit to its actual value or -1 in case of bad
- * input.
- */
-int hex_to_bin(char ch)
-{
-	if ((ch >= '0') && (ch <= '9'))
-		return ch - '0';
-	ch = tolower(ch);
-	if ((ch >= 'a') && (ch <= 'f'))
-		return ch - 'a' + 10;
-	return -1;
-}
-EXPORT_SYMBOL(hex_to_bin);
+const int8_t h2b_lut[] = {
+	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+	 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, -1, -1, -1, -1, -1, -1,
+	-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+	-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+};
+EXPORT_SYMBOL(h2b_lut);
 
 /**
  * hex2bin - convert an ascii hexadecimal string to its binary representation
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2016-06-30 21:18 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-29 16:15 [PATCH 1/2] lib: hexdump: use a look-up table to do hex_to_bin zengzhaoxiu
2016-06-29 16:22 ` [PATCH 2/2] lib: kstrtox: _parse_integer: use hex_to_bin instead local conversion, and reduce branches zengzhaoxiu
2016-06-29 22:06   ` Alexey Dobriyan
2016-06-30 14:45     ` Zhaoxiu Zeng
2016-06-29 16:22 ` [PATCH 1/2] lib: hexdump: use a look-up table to do hex_to_bin Andy Shevchenko
2016-06-29 16:24 ` Steven Rostedt
2016-06-29 18:31 ` Michal Nazarewicz
2016-06-29 18:52   ` Andy Shevchenko
2016-06-30 19:26     ` Joe Perches
2016-06-30 19:42       ` Geert Uytterhoeven
2016-06-30 20:06         ` Joe Perches
2016-06-30 20:44           ` Andy Shevchenko
2016-06-30 21:18       ` Michal Nazarewicz
2016-06-30 14:21   ` Zhaoxiu Zeng

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox