summaryrefslogtreecommitdiff
path: root/zap/source/any/mth/divmod.c
blob: 42146510b9b1288b4825f3bac932ddde2f799459 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
	Copyright 2022-2023 Gabriel Jensen.
	This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
	If a copy of the MPL was not distributed with this file, You can obtain one at <https://mozilla.org/MPL/2.0>.
*/

#include <zap/math.h>

#define zap_priv_divmod(_wdth) \
zap_quotrem##_wdth zap_divmod##_wdth(zap_i##_wdth const _num,zap_i##_wdth const _den) { \
zap_quotrem##_wdth quotrem; \
	if (__builtin_expect(_den == 0x0,0x0)) { \
        quotrem.quot = zap_priv_div0(); \
		quotrem.rem  = quotrem.quot; \
		return quotrem; \
    } \
	for (quotrem = (zap_quotrem##_wdth){.quot = 0x0u,.rem = _num};quotrem.rem >= _den;++quotrem.quot,quotrem.rem -= _den) {} \
	return quotrem; \
}

zap_priv_divmod(8)
zap_priv_divmod(01)
zap_priv_divmod(02)
zap_priv_divmod(04)