From 64f3e597e0065834771e0c961e645e7744b58fba Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Wed, 3 Oct 2007 00:08:41 +0000 Subject: [PATCH] Float loading speedup. SVN revision: 31940 --- legacy/eet/src/lib/eet_data.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/legacy/eet/src/lib/eet_data.c b/legacy/eet/src/lib/eet_data.c index 65f0cc046d..018a96c19d 100644 --- a/legacy/eet/src/lib/eet_data.c +++ b/legacy/eet/src/lib/eet_data.c @@ -370,6 +370,19 @@ eet_data_get_float(void *src, void *src_end, void *dst) p = s; len = 0; while ((p < (char *)src_end) && (*p != 0)) {len++; p++;} + + /* fast handle of simple case 0xMp+E*/ + if ((len == 6) && (s[0] == '0') && (s[1] == 'x') && (s[3] == 'p')) + { + int mantisse = (s[2] >= 'a') ? (s[2] - 'a' + 10) : (s[2] - '0'); + int exponent = 1 << (s[5] - '0'); + + if (s[4] == '+') *d = ((float)mantisse) * (float)exponent; + else *d = ((float)mantisse) / (float)exponent; + + return len + 1; + } + str = alloca(len + 1); memcpy(str, s, len); str[len] = '\0';