]> gitweb.factorcode.org Git - factor.git/blob - vm/math.hpp
Fix conflict
[factor.git] / vm / math.hpp
1 namespace factor
2 {
3
4 static const fixnum fixnum_max = (((fixnum)1 << (WORD_SIZE - TAG_BITS - 1)) - 1);
5 static const fixnum fixnum_min = (-((fixnum)1 << (WORD_SIZE - TAG_BITS - 1)));
6 static const fixnum array_size_max = ((cell)1 << (WORD_SIZE - TAG_BITS - 2));
7
8 // defined in assembler
9 PRIMITIVE(fixnum_add);
10 PRIMITIVE(fixnum_subtract);
11 PRIMITIVE(fixnum_multiply);
12
13 PRIMITIVE(bignum_to_fixnum);
14 PRIMITIVE(float_to_fixnum);
15
16 PRIMITIVE(fixnum_divint);
17 PRIMITIVE(fixnum_divmod);
18 PRIMITIVE(fixnum_shift);
19
20 PRIMITIVE(fixnum_to_bignum);
21 PRIMITIVE(float_to_bignum);
22 PRIMITIVE(bignum_eq);
23 PRIMITIVE(bignum_add);
24 PRIMITIVE(bignum_subtract);
25 PRIMITIVE(bignum_multiply);
26 PRIMITIVE(bignum_divint);
27 PRIMITIVE(bignum_divmod);
28 PRIMITIVE(bignum_mod);
29 PRIMITIVE(bignum_and);
30 PRIMITIVE(bignum_or);
31 PRIMITIVE(bignum_xor);
32 PRIMITIVE(bignum_shift);
33 PRIMITIVE(bignum_less);
34 PRIMITIVE(bignum_lesseq);
35 PRIMITIVE(bignum_greater);
36 PRIMITIVE(bignum_greatereq);
37 PRIMITIVE(bignum_not);
38 PRIMITIVE(bignum_bitp);
39 PRIMITIVE(bignum_log2);
40 PRIMITIVE(byte_array_to_bignum);
41
42 PRIMITIVE(fixnum_to_float);
43 PRIMITIVE(bignum_to_float);
44 PRIMITIVE(str_to_float);
45 PRIMITIVE(float_to_str);
46 PRIMITIVE(float_to_bits);
47
48 PRIMITIVE(float_eq);
49 PRIMITIVE(float_add);
50 PRIMITIVE(float_subtract);
51 PRIMITIVE(float_multiply);
52 PRIMITIVE(float_divfloat);
53 PRIMITIVE(float_mod);
54 PRIMITIVE(float_less);
55 PRIMITIVE(float_lesseq);
56 PRIMITIVE(float_greater);
57 PRIMITIVE(float_greatereq);
58
59 PRIMITIVE(float_bits);
60 PRIMITIVE(bits_float);
61 PRIMITIVE(double_bits);
62 PRIMITIVE(bits_double);
63
64 VM_C_API void box_float(float flo, factorvm *vm);
65 VM_C_API float to_float(cell value, factorvm *vm);
66 VM_C_API void box_double(double flo, factorvm *vm);
67 VM_C_API double to_double(cell value, factorvm *vm);
68
69 VM_C_API void box_signed_1(s8 n, factorvm *vm);
70 VM_C_API void box_unsigned_1(u8 n, factorvm *vm);
71 VM_C_API void box_signed_2(s16 n, factorvm *vm);
72 VM_C_API void box_unsigned_2(u16 n, factorvm *vm);
73 VM_C_API void box_signed_4(s32 n, factorvm *vm);
74 VM_C_API void box_unsigned_4(u32 n, factorvm *vm);
75 VM_C_API void box_signed_cell(fixnum integer, factorvm *vm);
76 VM_C_API void box_unsigned_cell(cell cell, factorvm *vm);
77 VM_C_API void box_signed_8(s64 n, factorvm *vm);
78 VM_C_API void box_unsigned_8(u64 n, factorvm *vm);
79
80 VM_C_API s64 to_signed_8(cell obj, factorvm *vm);
81 VM_C_API u64 to_unsigned_8(cell obj, factorvm *vm);
82
83 VM_C_API fixnum to_fixnum(cell tagged, factorvm *vm);
84 VM_C_API cell to_cell(cell tagged, factorvm *vm);
85
86 VM_ASM_API_OVERFLOW void overflow_fixnum_add(fixnum x, fixnum y, factorvm *vm);
87 VM_ASM_API_OVERFLOW void overflow_fixnum_subtract(fixnum x, fixnum y, factorvm *vm);
88 VM_ASM_API_OVERFLOW void overflow_fixnum_multiply(fixnum x, fixnum y, factorvm *vm);
89
90 }