lean_sys/primitive/
uint64.rs1use crate::*;
2
3#[inline]
4pub unsafe fn lean_uint64_of_nat(a: b_lean_obj_arg) -> u64 {
5 if lean_is_scalar(a) {
6 lean_unbox(a) as u64
7 } else {
8 lean_uint64_of_big_nat(a)
9 }
10}
11
12#[inline]
13pub unsafe fn lean_uint64_of_nat_mk(a: lean_obj_arg) -> u64 {
14 let r = lean_uint64_of_nat(a);
15 lean_dec(a);
16 r
17}
18
19#[inline(always)]
20pub fn lean_uint64_add(a1: u64, a2: u64) -> u64 {
21 a1.wrapping_add(a2)
22}
23
24#[inline(always)]
25pub fn lean_uint64_sub(a1: u64, a2: u64) -> u64 {
26 a1.wrapping_sub(a2)
27}
28
29#[inline(always)]
30pub fn lean_uint64_mul(a1: u64, a2: u64) -> u64 {
31 a1.wrapping_mul(a2)
32}
33
34#[inline(always)]
35pub fn lean_uint64_div(a1: u64, a2: u64) -> u64 {
36 if a2 == 0 {
37 0
38 } else {
39 a1 / a2
40 }
41}
42
43#[inline(always)]
44pub fn lean_uint64_mod(a1: u64, a2: u64) -> u64 {
45 if a2 == 0 {
46 a1
47 } else {
48 a1 % a2
49 }
50}
51
52#[inline(always)]
53pub fn lean_uint64_land(a1: u64, a2: u64) -> u64 {
54 a1 & a2
55}
56
57#[inline(always)]
58pub fn lean_uint64_lor(a1: u64, a2: u64) -> u64 {
59 a1 | a2
60}
61
62#[inline(always)]
63pub fn lean_uint64_xor(a1: u64, a2: u64) -> u64 {
64 a1 ^ a2
65}
66
67#[inline(always)]
68pub fn lean_uint64_shift_left(a1: u64, a2: u64) -> u64 {
69 a1.wrapping_shl(a2 as u32)
70}
71
72#[inline(always)]
73pub fn lean_uint64_shift_right(a1: u64, a2: u64) -> u64 {
74 a1.wrapping_shr(a2 as u32)
75}
76
77#[inline(always)]
78pub fn lean_uint64_complement(a: u64) -> u64 {
79 !a
80}
81
82#[inline(always)]
83pub fn lean_uint64_neg(a: u64) -> u64 {
84 0 - a
85}
86
87#[inline(always)]
88pub fn lean_uint64_dec_eq(a1: u64, a2: u64) -> u64 {
89 (a1 == a2) as u64
90}
91
92#[inline(always)]
93pub fn lean_uint64_dec_lt(a1: u64, a2: u64) -> u64 {
94 (a1 < a2) as u64
95}
96
97#[inline(always)]
98pub fn lean_uint64_dec_le(a1: u64, a2: u64) -> u64 {
99 (a1 <= a2) as u64
100}
101
102#[inline]
103pub fn lean_uint64_to_uint8(a: u64) -> u8 {
104 a as u8
105}
106
107#[inline]
108pub fn lean_uint64_to_uint16(a: u64) -> u16 {
109 a as u16
110}
111
112#[inline]
113pub fn lean_uint64_to_uint32(a: u64) -> u32 {
114 a as u32
115}
116
117#[inline]
118pub fn lean_uint64_to_usize(a: u64) -> usize {
119 a as usize
120}
121
122extern "C" {
123 pub fn lean_uint64_of_big_nat(a: b_lean_obj_arg) -> u64;
124 pub fn lean_uint64_mix_hash(a1: u64, a2: u64) -> u64;
125}