From f843ff8efedbdcbcd3c71bbbb780365474a35aa8 Mon Sep 17 00:00:00 2001 From: Edd Barrett Date: Tue, 17 Mar 2026 15:59:48 +0000 Subject: [PATCH] Mark mp_binary_op() unroll_safe. This slows down mandelbrot, but speeds up "bigloop"-like benchmarks and CLBG fannkuch Python3 #8. fannkuch Python3 #8 speeds up by about 40%. This makes us about over 2x upstream micropython on that benchmark. https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/fannkuchredux-python3-8.html --- py/runtime.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/py/runtime.c b/py/runtime.c index 8b1de8396f0bf..f9dc103d61f95 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -385,7 +385,12 @@ mp_obj_t mp_unary_op(mp_unary_op_t op, mp_obj_t arg) { } } -mp_obj_t MICROPY_WRAP_MP_BINARY_OP(mp_binary_op)(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs) { +// NOTE: this annotation makes bigloop and CLBG fannkuch Python3 #8 faster, but +// makes Laurie's LLM-generated mandelbrot benchmark slower. +#ifdef USE_YK +__attribute__((yk_unroll_safe)) +#endif +mp_obj_t mp_binary_op(mp_binary_op_t op, mp_obj_t lhs, mp_obj_t rhs) { DEBUG_OP_printf("binary " UINT_FMT " %q %p %p\n", op, mp_binary_op_method_name[op], lhs, rhs); // TODO correctly distinguish inplace operators for mutable objects