lean_sys/primitive/
int32.rs1use crate::*;
2
3#[inline]
4pub unsafe fn lean_int32_of_int(a: b_lean_obj_arg) -> u32 {
5 if lean_is_scalar(a) {
6 lean_scalar_to_int64(a) as i32 as u32
7 } else {
8 lean_int32_of_big_int(a) as u32
9 }
10}
11
12#[inline]
13pub unsafe fn lean_int32_of_nat(a: b_lean_obj_arg) -> u32 {
14 if lean_is_scalar(a) {
15 lean_unbox(a) as i32 as u32
16 } else {
17 lean_int32_of_big_int(a) as u32
18 }
19}
20
21#[inline(always)]
22pub unsafe fn lean_int32_to_int(a: u32) -> lean_obj_res {
23 lean_int64_to_int(a as i32 as i64)
24}
25
26#[inline(always)]
27pub fn lean_int32_neg(a: u32) -> u32 {
28 (a as i32).wrapping_neg() as u32
29}
30
31#[inline(always)]
32pub fn lean_int32_add(a1: u32, a2: u32) -> u32 {
33 (a1 as i32).wrapping_add(a2 as i32) as u32
34}
35
36#[inline(always)]
37pub fn lean_int32_sub(a1: u32, a2: u32) -> u32 {
38 (a1 as i32).wrapping_sub(a2 as i32) as u32
39}
40
41#[inline(always)]
42pub fn lean_int32_mul(a1: u32, a2: u32) -> u32 {
43 (a1 as i32).wrapping_mul(a2 as i32) as u32
44}
45
46#[inline(always)]
47pub fn lean_int32_div(a1: u32, a2: u32) -> u32 {
48 if a2 == 0 {
49 0
50 } else {
51 (a1 as i32).wrapping_div(a2 as i32) as u32
52 }
53}
54
55#[inline(always)]
56pub fn lean_int32_mod(a1: u32, a2: u32) -> u32 {
57 if a2 == 0 {
58 a1
59 } else {
60 (a1 as i32).wrapping_rem(a2 as i32) as u32
61 }
62}
63
64#[inline(always)]
65pub fn lean_int32_land(a1: u32, a2: u32) -> u32 {
66 ((a1 as i32) & (a2 as i32)) as u32
67}
68
69#[inline(always)]
70pub fn lean_int32_lor(a1: u32, a2: u32) -> u32 {
71 ((a1 as i32) | (a2 as i32)) as u32
72}
73
74#[inline(always)]
75pub fn lean_int32_xor(a1: u32, a2: u32) -> u32 {
76 ((a1 as i32) ^ (a2 as i32)) as u32
77}
78
79#[inline(always)]
80pub fn lean_int32_shift_left(a1: u32, a2: u32) -> u32 {
81 let rhs = (a2 as i32 % 32 + 32) % 32; (a1 as i32).wrapping_shl(rhs as u32) as u32
83}
84
85#[inline(always)]
86pub fn lean_int32_shift_right(a1: u32, a2: u32) -> u32 {
87 let rhs = (a2 as i32 % 32 + 32) % 32; (a1 as i32).wrapping_shr(rhs as u32) as u32
89}
90
91#[inline(always)]
92pub fn lean_int32_complement(a: u32) -> u32 {
93 !(a as i32) as u32
94}
95
96#[inline(always)]
97pub fn lean_int32_abs(a: u32) -> u32 {
98 (a as i32).unsigned_abs()
99}
100
101#[inline(always)]
102pub fn lean_int32_dec_eq(a1: u32, a2: u32) -> u32 {
103 (a1 as i32 == a2 as i32) as u32
104}
105
106#[inline(always)]
107pub fn lean_int32_dec_lt(a1: u32, a2: u32) -> u32 {
108 ((a1 as i32) < a2 as i32) as u32
109}
110
111#[inline(always)]
112pub fn lean_int32_dec_le(a1: u32, a2: u32) -> u32 {
113 (a1 as i32 <= a2 as i32) as u32
114}
115
116#[inline]
117pub fn lean_int32_to_int8(a: u32) -> u8 {
118 a as i32 as i8 as u8
119}
120#[inline]
121pub fn lean_int32_to_int16(a: u32) -> u16 {
122 a as i32 as i16 as u16
123}
124#[inline]
125pub fn lean_int32_to_int64(a: u32) -> u64 {
126 a as i32 as i64 as u64
127}
128#[inline]
129pub fn lean_int32_to_isize(a: u32) -> usize {
130 a as i32 as isize as usize
131}
132
133extern "C" {
134 pub fn lean_int32_of_big_int(a: b_lean_obj_arg) -> i32;
135}