rework the verifier to prepare for loop cutting
[ajla.git] / newlib / private / long.ajla
blob861c783a329ea9ad60d46db8c483ca3d7de54893
1 {*
2  * Copyright (C) 2024 Mikulas Patocka
3  *
4  * This file is part of Ajla.
5  *
6  * Ajla is free software: you can redistribute it and/or modify it under the
7  * terms of the GNU General Public License as published by the Free Software
8  * Foundation, either version 3 of the License, or (at your option) any later
9  * version.
10  *
11  * Ajla is distributed in the hope that it will be useful, but WITHOUT ANY
12  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13  * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along with
16  * Ajla. If not, see <https://www.gnu.org/licenses/>.
17  *}
19 private unit private.long;
21 define fixed_ops [
22 fn @1@2_add(a b : @1int(@2)) : @1int(@2) := a + b;
23 fn @1@2_subtract(a b : @1int(@2)) : @1int(@2) := a - b;
24 fn @1@2_multiply(a b : @1int(@2)) : @1int(@2) := a * b;
25 fn @1@2_divide_int(a b : @1int(@2)) : @1int(@2) := a div b;
26 fn @1@2_divide_real(a b : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
27 fn @1@2_modulo(a b : @1int(@2)) : @1int(@2) := a mod b;
28 fn @1@2_power(a b : @1int(@2)) : @1int(@2) := ipower(a, b);
29 fn @1@2_atan2(a b : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
30 fn @1@2_and(a b : @1int(@2)) : @1int(@2) := a and b;
31 fn @1@2_or(a b : @1int(@2)) : @1int(@2) := a or b;
32 fn @1@2_xor(a b : @1int(@2)) : @1int(@2) := a xor b;
33 fn @1@2_shl(a b : @1int(@2)) : @1int(@2) := a shl b;
34 fn @1@2_shr(a b : @1int(@2)) : @1int(@2) := a shr b;
35 fn @1@2_rol(a b : @1int(@2)) : @1int(@2) := a rol b;
36 fn @1@2_ror(a b : @1int(@2)) : @1int(@2) := a ror b;
37 fn @1@2_bts(a b : @1int(@2)) : @1int(@2) := a bts b;
38 fn @1@2_btr(a b : @1int(@2)) : @1int(@2) := a btr b;
39 fn @1@2_btc(a b : @1int(@2)) : @1int(@2) := a btc b;
40 fn @1@2_equal(a b : @1int(@2)) : bool := a = b;
41 fn @1@2_not_equal(a b : @1int(@2)) : bool := a <> b;
42 fn @1@2_less(a b : @1int(@2)) : bool := a < b;
43 fn @1@2_less_equal(a b : @1int(@2)) : bool := a <= b;
44 fn @1@2_greater(a b : @1int(@2)) : bool := a > b;
45 fn @1@2_greater_equal(a b : @1int(@2)) : bool := a >= b;
46 fn @1@2_bt(a b : @1int(@2)) : bool := a bt b;
47 fn @1@2_not(a : @1int(@2)) : @1int(@2) := not a;
48 fn @1@2_neg(a : @1int(@2)) : @1int(@2) := -a;
49 fn @1@2_bswap(a : @1int(@2)) : @1int(@2) := bswap a;
50 fn @1@2_brev(a : @1int(@2)) : @1int(@2) := brev a;
51 fn @1@2_bsf(a : @1int(@2)) : @1int(@2) := bsf a;
52 fn @1@2_bsr(a : @1int(@2)) : @1int(@2) := bsr a;
53 fn @1@2_popcnt(a : @1int(@2)) : @1int(@2) := popcnt a;
54 fn @1@2_sqrt(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
55 fn @1@2_cbrt(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
56 fn @1@2_sin(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
57 fn @1@2_cos(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
58 fn @1@2_tan(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
59 fn @1@2_asin(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
60 fn @1@2_acos(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
61 fn @1@2_atan(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
62 fn @1@2_sinh(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
63 fn @1@2_cosh(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
64 fn @1@2_tanh(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
65 fn @1@2_asinh(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
66 fn @1@2_acosh(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
67 fn @1@2_atanh(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
68 fn @1@2_exp2(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
69 fn @1@2_exp(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
70 fn @1@2_exp10(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
71 fn @1@2_log2(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
72 fn @1@2_log(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
73 fn @1@2_log10(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
74 fn @1@2_round(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
75 fn @1@2_ceil(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
76 fn @1@2_floor(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
77 fn @1@2_trunc(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
78 fn @1@2_fract(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
79 fn @1@2_mantissa(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
80 fn @1@2_exponent(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
81 fn @1@2_prev_number(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
82 fn @1@2_next_number(a : @1int(@2)) : @1int(@2) [ abort internal("unsupported integer op"); ]
83 fn @1@2_convert_to_int(a : @1int(@2)) : int := a;
84 fn @1@2_convert_from_int(a : int) : @1int(@2) := a;
85 fn @1@2_is_exception(a : @1int(@2)) : bool := is_exception a;
86 fn @1@2_exception_class(a : @1int(@2)) : int := exception_class a;
87 fn @1@2_exception_type(a : @1int(@2)) : int := exception_type a;
88 fn @1@2_exception_aux(a : @1int(@2)) : int := exception_aux a;
89 fn @1@2_system_property(a : @1int(@2)) : int := sysprop(a);
92 fixed_ops(s, 128);
93 fixed_ops(u, 128);