return unit_type from verify_function, so that it can modify the context
[ajla.git] / stdlib / private / longreal.ajla
blobb026d39335dbf2b40448c9a504337980de33b980
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.longreal;
21 define real_ops [
22 fn @1_add(a b : floating(@2,@3)) : floating(@2,@3) := a + b;
23 fn @1_subtract(a b : floating(@2,@3)) : floating(@2,@3) := a - b;
24 fn @1_multiply(a b : floating(@2,@3)) : floating(@2,@3) := a * b;
25 fn @1_divide_int(a b : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
26 fn @1_divide_real(a b : floating(@2,@3)) : floating(@2,@3) := a / b;
27 fn @1_modulo(a b : floating(@2,@3)) : floating(@2,@3) := fmod(a, b);
28 fn @1_power(a b : floating(@2,@3)) : floating(@2,@3) := power(a, b);
29 fn @1_atan2(a b : floating(@2,@3)) : floating(@2,@3) := atan2(a, b);
30 fn @1_and(a b : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
31 fn @1_or(a b : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
32 fn @1_xor(a b : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
33 fn @1_shl(a b : floating(@2,@3)) : floating(@2,@3) := ldexp(a, b);
34 fn @1_shr(a b : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
35 fn @1_rol(a b : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
36 fn @1_ror(a b : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
37 fn @1_bts(a b : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
38 fn @1_btr(a b : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
39 fn @1_btc(a b : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
40 fn @1_equal(a b : floating(@2,@3)) : bool := a = b;
41 fn @1_not_equal(a b : floating(@2,@3)) : bool := a <> b;
42 fn @1_less(a b : floating(@2,@3)) : bool := a < b;
43 fn @1_less_equal(a b : floating(@2,@3)) : bool := a <= b;
44 fn @1_greater(a b : floating(@2,@3)) : bool := a > b;
45 fn @1_greater_equal(a b : floating(@2,@3)) : bool := a >= b;
46 fn @1_bt(a b : floating(@2,@3)) : bool [ abort internal("unsupported real op"); ]
47 fn @1_not(a : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
48 fn @1_neg(a : floating(@2,@3)) : floating(@2,@3) := -a;
49 fn @1_bswap(a : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
50 fn @1_brev(a : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
51 fn @1_bsf(a : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
52 fn @1_bsr(a : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
53 fn @1_popcnt(a : floating(@2,@3)) : floating(@2,@3) [ abort internal("unsupported real op"); ]
54 fn @1_sqrt(a : floating(@2,@3)) : floating(@2,@3) := sqrt(a);
55 fn @1_cbrt(a : floating(@2,@3)) : floating(@2,@3) := cbrt(a);
56 fn @1_sin(a : floating(@2,@3)) : floating(@2,@3) := sin(a);
57 fn @1_cos(a : floating(@2,@3)) : floating(@2,@3) := cos(a);
58 fn @1_tan(a : floating(@2,@3)) : floating(@2,@3) := tan(a);
59 fn @1_asin(a : floating(@2,@3)) : floating(@2,@3) := asin(a);
60 fn @1_acos(a : floating(@2,@3)) : floating(@2,@3) := acos(a);
61 fn @1_atan(a : floating(@2,@3)) : floating(@2,@3) := atan(a);
62 fn @1_sinh(a : floating(@2,@3)) : floating(@2,@3) := sinh(a);
63 fn @1_cosh(a : floating(@2,@3)) : floating(@2,@3) := cosh(a);
64 fn @1_tanh(a : floating(@2,@3)) : floating(@2,@3) := tanh(a);
65 fn @1_asinh(a : floating(@2,@3)) : floating(@2,@3) := asinh(a);
66 fn @1_acosh(a : floating(@2,@3)) : floating(@2,@3) := acosh(a);
67 fn @1_atanh(a : floating(@2,@3)) : floating(@2,@3) := atanh(a);
68 fn @1_exp2(a : floating(@2,@3)) : floating(@2,@3) := exp2(a);
69 fn @1_exp(a : floating(@2,@3)) : floating(@2,@3) := exp(a);
70 fn @1_exp10(a : floating(@2,@3)) : floating(@2,@3) := exp10(a);
71 fn @1_log2(a : floating(@2,@3)) : floating(@2,@3) := log2(a);
72 fn @1_log(a : floating(@2,@3)) : floating(@2,@3) := log(a);
73 fn @1_log10(a : floating(@2,@3)) : floating(@2,@3) := log10(a);
74 fn @1_round(a : floating(@2,@3)) : floating(@2,@3) := round(a);
75 fn @1_floor(a : floating(@2,@3)) : floating(@2,@3) := floor(a);
76 fn @1_ceil(a : floating(@2,@3)) : floating(@2,@3) := ceil(a);
77 fn @1_trunc(a : floating(@2,@3)) : floating(@2,@3) := trunc(a);
78 fn @1_fract(a : floating(@2,@3)) : floating(@2,@3) := fract(a);
79 fn @1_mantissa(a : floating(@2,@3)) : floating(@2,@3) := mantissa(a);
80 fn @1_exponent(a : floating(@2,@3)) : floating(@2,@3) := exponent(a);
81 fn @1_next_number(a : floating(@2,@3)) : floating(@2,@3) := next_number(a);
82 fn @1_prev_number(a : floating(@2,@3)) : floating(@2,@3) := prev_number(a);
83 fn @1_convert_to_int(a : floating(@2,@3)) : int := a;
84 fn @1_convert_from_int(a : int) : floating(@2,@3) := a;
85 fn @1_is_exception(a : floating(@2,@3)) : bool := is_exception a;
86 fn @1_exception_class(a : floating(@2,@3)) : int := exception_class a;
87 fn @1_exception_type(a : floating(@2,@3)) : int := exception_type a;
88 fn @1_exception_aux(a : floating(@2,@3)) : int := exception_aux a;
89 fn @1_system_property(a : floating(@2,@3)) : int [ abort internal("unsupported real op"); ]
92 real_ops(real16, 5, 11);
93 real_ops(real32, 8, 24);
94 real_ops(real64, 11, 53);
95 real_ops(real80, 15, 64);
96 real_ops(real128, 15, 113);