Optimized 32 and 64 bit division functions accelerated by the RP2040 hardware divider. More...

Files

file  divider.h
 High level APIs including combined quotient and remainder functions for 32 and 64 bit accelerated by the hardware divider.
 

Functions

int32_t div_s32s32 (int32_t a, int32_t b)
 Integer divide of two signed 32-bit values. More...
 
static int32_t divmod_s32s32_rem (int32_t a, int32_t b, int32_t *rem)
 Integer divide of two signed 32-bit values, with remainder. More...
 
divmod_result_t divmod_s32s32 (int32_t a, int32_t b)
 Integer divide of two signed 32-bit values. More...
 
uint32_t div_u32u32 (uint32_t a, uint32_t b)
 Integer divide of two unsigned 32-bit values. More...
 
static uint32_t divmod_u32u32_rem (uint32_t a, uint32_t b, uint32_t *rem)
 Integer divide of two unsigned 32-bit values, with remainder. More...
 
divmod_result_t divmod_u32u32 (uint32_t a, uint32_t b)
 Integer divide of two unsigned 32-bit values. More...
 
int64_t div_s64s64 (int64_t a, int64_t b)
 Integer divide of two signed 64-bit values. More...
 
int64_t divmod_s64s64_rem (int64_t a, int64_t b, int64_t *rem)
 Integer divide of two signed 64-bit values, with remainder. More...
 
int64_t divmod_s64s64 (int64_t a, int64_t b)
 Integer divide of two signed 64-bit values. More...
 
uint64_t div_u64u64 (uint64_t a, uint64_t b)
 Integer divide of two unsigned 64-bit values. More...
 
uint64_t divmod_u64u64_rem (uint64_t a, uint64_t b, uint64_t *rem)
 Integer divide of two unsigned 64-bit values, with remainder. More...
 
uint64_t divmod_u64u64 (uint64_t a, uint64_t b)
 Integer divide of two signed 64-bit values. More...
 
int32_t div_s32s32_unsafe (int32_t a, int32_t b)
 Unsafe integer divide of two signed 32-bit values. More...
 
int32_t divmod_s32s32_rem_unsafe (int32_t a, int32_t b, int32_t *rem)
 Unsafe integer divide of two signed 32-bit values, with remainder. More...
 
divmod_result_t divmod_s32s32_unsafe (int32_t a, int32_t b)
 Unsafe integer divide of two unsigned 32-bit values. More...
 
uint32_t div_u32u32_unsafe (uint32_t a, uint32_t b)
 Unsafe integer divide of two unsigned 32-bit values. More...
 
uint32_t divmod_u32u32_rem_unsafe (uint32_t a, uint32_t b, uint32_t *rem)
 Unsafe integer divide of two unsigned 32-bit values, with remainder. More...
 
divmod_result_t divmod_u32u32_unsafe (uint32_t a, uint32_t b)
 Unsafe integer divide of two unsigned 32-bit values. More...
 
int64_t div_s64s64_unsafe (int64_t a, int64_t b)
 Unsafe integer divide of two signed 64-bit values. More...
 
int64_t divmod_s64s64_rem_unsafe (int64_t a, int64_t b, int64_t *rem)
 Unsafe integer divide of two signed 64-bit values, with remainder. More...
 
int64_t divmod_s64s64_unsafe (int64_t a, int64_t b)
 Unsafe integer divide of two signed 64-bit values. More...
 
uint64_t div_u64u64_unsafe (uint64_t a, uint64_t b)
 Unsafe integer divide of two unsigned 64-bit values. More...
 
uint64_t divmod_u64u64_rem_unsafe (uint64_t a, uint64_t b, uint64_t *rem)
 Unsafe integer divide of two unsigned 64-bit values, with remainder. More...
 
uint64_t divmod_u64u64_unsafe (uint64_t a, uint64_t b)
 Unsafe integer divide of two signed 64-bit values. More...
 

Detailed Description

Optimized 32 and 64 bit division functions accelerated by the RP2040 hardware divider.

Additionally provides integration with the C / and % operators

Function Documentation

◆ div_s32s32()

int32_t div_s32s32 ( int32_t  a,
int32_t  b 
)

Integer divide of two signed 32-bit values.

Parameters
aDividend
bDivisor
Returns
quotient

◆ div_s32s32_unsafe()

int32_t div_s32s32_unsafe ( int32_t  a,
int32_t  b 
)

Unsafe integer divide of two signed 32-bit values.

Parameters
aDividend
bDivisor
Returns
quotient

Do not use in interrupts

◆ div_s64s64()

int64_t div_s64s64 ( int64_t  a,
int64_t  b 
)

Integer divide of two signed 64-bit values.

Parameters
aDividend
bDivisor
Returns
Quotient

◆ div_s64s64_unsafe()

int64_t div_s64s64_unsafe ( int64_t  a,
int64_t  b 
)

Unsafe integer divide of two signed 64-bit values.

Parameters
aDividend
bDivisor
Returns
Quotient

Do not use in interrupts

◆ div_u32u32()

uint32_t div_u32u32 ( uint32_t  a,
uint32_t  b 
)

Integer divide of two unsigned 32-bit values.

Parameters
aDividend
bDivisor
Returns
Quotient

◆ div_u32u32_unsafe()

uint32_t div_u32u32_unsafe ( uint32_t  a,
uint32_t  b 
)

Unsafe integer divide of two unsigned 32-bit values.

Parameters
aDividend
bDivisor
Returns
Quotient

Do not use in interrupts

◆ div_u64u64()

uint64_t div_u64u64 ( uint64_t  a,
uint64_t  b 
)

Integer divide of two unsigned 64-bit values.

Parameters
aDividend
bDivisor
Returns
Quotient

◆ div_u64u64_unsafe()

uint64_t div_u64u64_unsafe ( uint64_t  a,
uint64_t  b 
)

Unsafe integer divide of two unsigned 64-bit values.

Parameters
aDividend
bDivisor
Returns
Quotient

Do not use in interrupts

◆ divmod_s32s32()

divmod_result_t divmod_s32s32 ( int32_t  a,
int32_t  b 
)

Integer divide of two signed 32-bit values.

Parameters
aDividend
bDivisor
Returns
quotient in low word/r0, remainder in high word/r1

◆ divmod_s32s32_rem()

static int32_t divmod_s32s32_rem ( int32_t  a,
int32_t  b,
int32_t *  rem 
)
inlinestatic

Integer divide of two signed 32-bit values, with remainder.

Parameters
aDividend
bDivisor
[out]remThe remainder of dividend/divisor
Returns
Quotient result of dividend/divisor

◆ divmod_s32s32_rem_unsafe()

int32_t divmod_s32s32_rem_unsafe ( int32_t  a,
int32_t  b,
int32_t *  rem 
)

Unsafe integer divide of two signed 32-bit values, with remainder.

Parameters
aDividend
bDivisor
[out]remThe remainder of dividend/divisor
Returns
Quotient result of dividend/divisor

Do not use in interrupts

◆ divmod_s32s32_unsafe()

divmod_result_t divmod_s32s32_unsafe ( int32_t  a,
int32_t  b 
)

Unsafe integer divide of two unsigned 32-bit values.

Parameters
aDividend
bDivisor
Returns
quotient in low word/r0, remainder in high word/r1

Do not use in interrupts

◆ divmod_s64s64()

int64_t divmod_s64s64 ( int64_t  a,
int64_t  b 
)

Integer divide of two signed 64-bit values.

Parameters
aDividend
bDivisor
Returns
quotient in result (r0,r1), remainder in regs (r2, r3)

◆ divmod_s64s64_rem()

int64_t divmod_s64s64_rem ( int64_t  a,
int64_t  b,
int64_t *  rem 
)

Integer divide of two signed 64-bit values, with remainder.

Parameters
aDividend
bDivisor
[out]remThe remainder of dividend/divisor
Returns
Quotient result of dividend/divisor

◆ divmod_s64s64_rem_unsafe()

int64_t divmod_s64s64_rem_unsafe ( int64_t  a,
int64_t  b,
int64_t *  rem 
)

Unsafe integer divide of two signed 64-bit values, with remainder.

Parameters
aDividend
bDivisor
[out]remThe remainder of dividend/divisor
Returns
Quotient result of dividend/divisor

Do not use in interrupts

◆ divmod_s64s64_unsafe()

int64_t divmod_s64s64_unsafe ( int64_t  a,
int64_t  b 
)

Unsafe integer divide of two signed 64-bit values.

Parameters
aDividend
bDivisor
Returns
quotient in result (r0,r1), remainder in regs (r2, r3)

Do not use in interrupts

◆ divmod_u32u32()

divmod_result_t divmod_u32u32 ( uint32_t  a,
uint32_t  b 
)

Integer divide of two unsigned 32-bit values.

Parameters
aDividend
bDivisor
Returns
quotient in low word/r0, remainder in high word/r1

◆ divmod_u32u32_rem()

static uint32_t divmod_u32u32_rem ( uint32_t  a,
uint32_t  b,
uint32_t *  rem 
)
inlinestatic

Integer divide of two unsigned 32-bit values, with remainder.

Parameters
aDividend
bDivisor
[out]remThe remainder of dividend/divisor
Returns
Quotient result of dividend/divisor

◆ divmod_u32u32_rem_unsafe()

uint32_t divmod_u32u32_rem_unsafe ( uint32_t  a,
uint32_t  b,
uint32_t *  rem 
)

Unsafe integer divide of two unsigned 32-bit values, with remainder.

Parameters
aDividend
bDivisor
[out]remThe remainder of dividend/divisor
Returns
Quotient result of dividend/divisor

Do not use in interrupts

◆ divmod_u32u32_unsafe()

divmod_result_t divmod_u32u32_unsafe ( uint32_t  a,
uint32_t  b 
)

Unsafe integer divide of two unsigned 32-bit values.

Parameters
aDividend
bDivisor
Returns
quotient in low word/r0, remainder in high word/r1

Do not use in interrupts

◆ divmod_u64u64()

uint64_t divmod_u64u64 ( uint64_t  a,
uint64_t  b 
)

Integer divide of two signed 64-bit values.

Parameters
aDividend
bDivisor
Returns
quotient in result (r0,r1), remainder in regs (r2, r3)

◆ divmod_u64u64_rem()

uint64_t divmod_u64u64_rem ( uint64_t  a,
uint64_t  b,
uint64_t *  rem 
)

Integer divide of two unsigned 64-bit values, with remainder.

Parameters
aDividend
bDivisor
[out]remThe remainder of dividend/divisor
Returns
Quotient result of dividend/divisor

◆ divmod_u64u64_rem_unsafe()

uint64_t divmod_u64u64_rem_unsafe ( uint64_t  a,
uint64_t  b,
uint64_t *  rem 
)

Unsafe integer divide of two unsigned 64-bit values, with remainder.

Parameters
aDividend
bDivisor
[out]remThe remainder of dividend/divisor
Returns
Quotient result of dividend/divisor

Do not use in interrupts

◆ divmod_u64u64_unsafe()

uint64_t divmod_u64u64_unsafe ( uint64_t  a,
uint64_t  b 
)

Unsafe integer divide of two signed 64-bit values.

Parameters
aDividend
bDivisor
Returns
quotient in result (r0,r1), remainder in regs (r2, r3)

Do not use in interrupts