summaryrefslogtreecommitdiff
path: root/core/minute-ia/irq_handler.h
diff options
context:
space:
mode:
authorHyungwoo Yang <hyungwoo.yang@intel.com>2019-01-30 12:30:47 -0800
committerchrome-bot <chrome-bot@chromium.org>2019-02-26 05:09:12 -0800
commitdecc9452e981a7c8ce5c6b8983061a054057c615 (patch)
treeeaea7bba6491f96bc06a77e2af2fd43d4b210894 /core/minute-ia/irq_handler.h
parent0a3f44e4f508d0c6a96519e6db97b2f2fd4bfb23 (diff)
downloadchrome-ec-decc9452e981a7c8ce5c6b8983061a054057c615.tar.gz
ish: save/restore FPU context only for the task uses FPU
Currently we save/retore FPU H/W context for every task on every contxt switch. This hurts overall performance of ISH. This patch allows save and restore FPU H/W context only for a task that declares it uses FPU. BRANCH=none BUG=none TEST=verified in Atlas platform Change-Id: Ic2f0bbf59f655661e2dd788c688edc4e83068c1c Signed-off-by: Hyungwoo Yang <hyungwoo.yang@intel.com> Reviewed-on: https://chromium-review.googlesource.com/1448818 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Tested-by: Hyungwoo Yang <hyungwoo.yang@intel.corp-partner.google.com> Reviewed-by: Jett Rink <jettrink@chromium.org>
Diffstat (limited to 'core/minute-ia/irq_handler.h')
-rw-r--r--core/minute-ia/irq_handler.h14
1 files changed, 12 insertions, 2 deletions
diff --git a/core/minute-ia/irq_handler.h b/core/minute-ia/irq_handler.h
index c561ee472b..4df2b14da6 100644
--- a/core/minute-ia/irq_handler.h
+++ b/core/minute-ia/irq_handler.h
@@ -9,10 +9,20 @@
#define __CROS_EC_IRQ_HANDLER_H
#include "registers.h"
+#include "task_defs.h"
#ifdef CONFIG_FPU
-#define save_fpu_ctx "fnsave 20(%eax)\n"
-#define rstr_fpu_ctx "frstor 20(%eax)\n"
+#define save_fpu_ctx "movl "USE_FPU_OFFSET_STR"(%eax), %ebx\n" \
+ "test %ebx, %ebx\n" \
+ "jz 9f\n" \
+ "fnsave "FPU_CTX_OFFSET_STR"(%eax)\n" \
+ "9:\n"
+
+#define rstr_fpu_ctx "movl "USE_FPU_OFFSET_STR"(%eax), %ebx\n" \
+ "test %ebx, %ebx\n" \
+ "jz 9f\n" \
+ "frstor "FPU_CTX_OFFSET_STR"(%eax)\n" \
+ "9:\n"
#else
#define save_fpu_ctx
#define rstr_fpu_ctx