summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLepton Wu <lepton@chromium.org>2019-10-21 20:22:18 -0700
committerLepton Wu <lepton@chromium.org>2019-10-24 23:37:18 +0000
commite137b3a9b71a2711c1f68c8a8b9c0a7407fbcc4b (patch)
tree1a6f740be3757e844d2168d91a1e2203d55397fb
parenta4fec4dd6a2ff2209047ea9931cbf50bb4521819 (diff)
mapi: Inline call x86_current_tls.
This saves one return and a simple benchmark which calls glGetString repeatedly on my desktop shows it improves calls per second from 118M to 128M. Signed-off-by: Lepton Wu <lepton@chromium.org> Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
-rw-r--r--src/mapi/entry_x86_tls.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/mapi/entry_x86_tls.h b/src/mapi/entry_x86_tls.h
index 545b5a3c786..4b3d6bd02ad 100644
--- a/src/mapi/entry_x86_tls.h
+++ b/src/mapi/entry_x86_tls.h
@@ -56,9 +56,13 @@ __asm__(".balign 16\n"
".balign 16\n" \
func ":"
-#define STUB_ASM_CODE(slot) \
- "call x86_current_tls\n\t" \
- "movl %gs:(%eax), %eax\n\t" \
+#define STUB_ASM_CODE(slot) \
+ "call 1f\n" \
+ "1:\n\t" \
+ "popl %eax\n\t" \
+ "addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %eax\n\t" \
+ "movl " ENTRY_CURRENT_TABLE "@GOTNTPOFF(%eax), %eax\n\t" \
+ "movl %gs:(%eax), %eax\n\t" \
"jmp *(4 * " slot ")(%eax)"
#define MAPI_TMP_STUB_ASM_GCC