/*
 * min — меньший из двух int16_t.
 * __sdcccall(1): a в HL, b в DE; возврат в DE.
 *
 * FIXME: сравнение через `cp` беззнаковое — для отрицательных
 * аргументов результат неверный (min(-1,1) вернёт 1).  Унаследовано
 * из minmax.c до сплита; см. docs/libc-roadmap.md.
 */

#include <stdlib.h>

int16_t min(int16_t a, int16_t b) __naked
{
    (void)a; (void)b;
    __asm
        ld    a, h
        cp    d
        jr    c, min_less
        jr    nz, min_greater
        ld    a, l
        cp    e
        jr    c, min_less
    min_greater:
        ret         /* DE уже содержит b */
    min_less:
        ex    de, hl
        ret
    __endasm;
}
