From a2ba4016a64f84193261db9a52196adc39cb5767 Mon Sep 17 00:00:00 2001 From: Pierre Roux Date: Thu, 12 Sep 2019 19:02:18 +0200 Subject: Reimplement is_float is_float was relying on Obj.tag triggering a check that we are in the OCaml heap which is expensive. On extreme examples, this can lead to a global 2x speedup. Thanks to Maxime Dénès and Jacques-Henri Jourdan for their help in diagnosing this. --- kernel/byterun/coq_float64.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'kernel/byterun') diff --git a/kernel/byterun/coq_float64.h b/kernel/byterun/coq_float64.h index 6814c31642..9fc390bd33 100644 --- a/kernel/byterun/coq_float64.h +++ b/kernel/byterun/coq_float64.h @@ -29,4 +29,8 @@ DECLARE_FUNOP(fsqrt, sqrt(x)) DECLARE_FUNOP(next_up, nextafter(x, INFINITY)) DECLARE_FUNOP(next_down, nextafter(x, -INFINITY)) +value coq_is_double(value x) { + return Val_long(Is_double(x)); +} + #endif /* _COQ_FLOAT64_ */ -- cgit v1.2.3