From 9e18956fcb279d33ae00d82db7382b81bad7dcc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= Date: Tue, 5 Mar 2019 10:20:33 +0100 Subject: Optimize multiplication in binary matching instructions --- erts/emulator/beam/bs_instrs.tab | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'erts/emulator/beam/bs_instrs.tab') diff --git a/erts/emulator/beam/bs_instrs.tab b/erts/emulator/beam/bs_instrs.tab index 10f43cd786..493ec10222 100644 --- a/erts/emulator/beam/bs_instrs.tab +++ b/erts/emulator/beam/bs_instrs.tab @@ -23,10 +23,17 @@ BS_SAFE_MUL(A, B, Fail, Dst) { Uint a = $A; Uint b = $B; - Uint res = a * b; + Uint res; +#ifdef HAVE_OVERFLOW_CHECK_BUILTINS + if (__builtin_mul_overflow(a, b, &res)) { + $Fail; + } +#else + res = a * b; if (res / b != a) { $Fail; } +#endif $Dst = res; } -- cgit v1.2.3