#pragma once
#ifndef FXDIV_H
#define FXDIV_H
#if defined(__cplusplus) && (__cplusplus >= 201103L)
#include <cstddef>
#include <cstdint>
#include <climits>
#elif !defined(__OPENCL_VERSION__)
#include <stddef.h>
#include <stdint.h>
#include <limits.h>
#endif
#if defined(_MSC_VER)
#include <intrin.h>
#if defined(_M_IX86) || defined(_M_X64)
#include <immintrin.h>
#endif
#endif
#ifndef FXDIV_USE_INLINE_ASSEMBLY
#define FXDIV_USE_INLINE_ASSEMBLY …
#endif
static inline uint64_t fxdiv_mulext_uint32_t(uint32_t a, uint32_t b) { … }
static inline uint32_t fxdiv_mulhi_uint32_t(uint32_t a, uint32_t b) { … }
static inline uint64_t fxdiv_mulhi_uint64_t(uint64_t a, uint64_t b) { … }
static inline size_t fxdiv_mulhi_size_t(size_t a, size_t b) { … }
struct fxdiv_divisor_uint32_t { … };
struct fxdiv_result_uint32_t { … };
struct fxdiv_divisor_uint64_t { … };
struct fxdiv_result_uint64_t { … };
struct fxdiv_divisor_size_t { … };
struct fxdiv_result_size_t { … };
static inline struct fxdiv_divisor_uint32_t fxdiv_init_uint32_t(uint32_t d) { … }
static inline struct fxdiv_divisor_uint64_t fxdiv_init_uint64_t(uint64_t d) { … }
static inline struct fxdiv_divisor_size_t fxdiv_init_size_t(size_t d) { … }
static inline uint32_t fxdiv_quotient_uint32_t(uint32_t n, const struct fxdiv_divisor_uint32_t divisor) { … }
static inline uint64_t fxdiv_quotient_uint64_t(uint64_t n, const struct fxdiv_divisor_uint64_t divisor) { … }
static inline size_t fxdiv_quotient_size_t(size_t n, const struct fxdiv_divisor_size_t divisor) { … }
static inline uint32_t fxdiv_remainder_uint32_t(uint32_t n, const struct fxdiv_divisor_uint32_t divisor) { … }
static inline uint64_t fxdiv_remainder_uint64_t(uint64_t n, const struct fxdiv_divisor_uint64_t divisor) { … }
static inline size_t fxdiv_remainder_size_t(size_t n, const struct fxdiv_divisor_size_t divisor) { … }
static inline uint32_t fxdiv_round_down_uint32_t(uint32_t n, const struct fxdiv_divisor_uint32_t granularity) { … }
static inline uint64_t fxdiv_round_down_uint64_t(uint64_t n, const struct fxdiv_divisor_uint64_t granularity) { … }
static inline size_t fxdiv_round_down_size_t(size_t n, const struct fxdiv_divisor_size_t granularity) { … }
static inline struct fxdiv_result_uint32_t fxdiv_divide_uint32_t(uint32_t n, const struct fxdiv_divisor_uint32_t divisor) { … }
static inline struct fxdiv_result_uint64_t fxdiv_divide_uint64_t(uint64_t n, const struct fxdiv_divisor_uint64_t divisor) { … }
static inline struct fxdiv_result_size_t fxdiv_divide_size_t(size_t n, const struct fxdiv_divisor_size_t divisor) { … }
#endif