use libc::{c_int, c_long, c_longlong, intmax_t};
#[no_mangle]
unsafe extern "C" fn ffs(i: c_int) -> c_int {
if i == 0 {
0
} else {
i.trailing_zeros() as c_int + 1
}
}
#[no_mangle]
unsafe extern "C" fn ffsl(i: c_long) -> c_int {
if i == 0 {
0
} else {
i.trailing_zeros() as c_int + 1
}
}
#[no_mangle]
unsafe extern "C" fn ffsll(i: c_longlong) -> c_int {
if i == 0 {
0
} else {
i.trailing_zeros() as c_int + 1
}
}
#[no_mangle]
unsafe extern "C" fn abs(i: c_int) -> c_int {
libc!(libc::abs(i));
i.abs()
}
#[no_mangle]
unsafe extern "C" fn labs(i: c_long) -> c_long {
libc!(libc::labs(i));
i.abs()
}
#[no_mangle]
unsafe extern "C" fn llabs(i: c_longlong) -> c_longlong {
i.abs()
}
#[no_mangle]
unsafe extern "C" fn imaxabs(i: intmax_t) -> intmax_t {
i.abs()
}
#[repr(C)]
struct div_t {
quot: c_int,
rem: c_int,
}
#[repr(C)]
struct ldiv_t {
quot: c_long,
rem: c_long,
}
#[repr(C)]
struct lldiv_t {
quot: c_longlong,
rem: c_longlong,
}
#[no_mangle]
unsafe extern "C" fn div(numerator: c_int, denominator: c_int) -> div_t {
div_t {
quot: numerator / denominator,
rem: numerator % denominator,
}
}
#[no_mangle]
unsafe extern "C" fn ldiv(numerator: c_long, denominator: c_long) -> ldiv_t {
ldiv_t {
quot: numerator / denominator,
rem: numerator % denominator,
}
}
#[no_mangle]
unsafe extern "C" fn lldiv(numerator: c_longlong, denominator: c_longlong) -> lldiv_t {
lldiv_t {
quot: numerator / denominator,
rem: numerator % denominator,
}
}
#[no_mangle]
unsafe extern "C" fn __ffsdi2(i: c_long) -> c_int {
ffsl(i)
}
#[no_mangle]
unsafe extern "C" fn __clzdi2(i: c_long) -> c_int {
i.leading_zeros() as c_int
}
#[no_mangle]
unsafe extern "C" fn __ctzdi2(i: c_long) -> c_int {
i.trailing_zeros() as c_int
}
#[no_mangle]
unsafe extern "C" fn __popcountdi2(i: c_long) -> c_int {
i.count_ones() as c_int
}