/***************************************************************
__MPU_INTEGER.H
This file contains declarations of functions for
INTEGER arithmetic operations.
PART OF : MPU - library .
USAGE : Internal only .
NOTE : Include "libmpu.h" before this FILE .
Copyright (C) 2000 - 2024 by Andrew V.Kosteltsev.
All Rights Reserved.
***************************************************************/
#ifndef __MPU_INTEGER_H
#define __MPU_INTEGER_H
#ifdef __cplusplus
extern "C" {
#endif
extern void iadd_8( __mpu_uint8_t *c, __mpu_uint8_t *a, __mpu_uint8_t *b );
extern void iadc_8( __mpu_uint8_t *c, __mpu_uint8_t *a, __mpu_uint8_t *b );
extern void isub_8( __mpu_uint8_t *c, __mpu_uint8_t *a, __mpu_uint8_t *b );
extern void isbb_8( __mpu_uint8_t *c, __mpu_uint8_t *a, __mpu_uint8_t *b );
extern void iadd_16( __mpu_uint16_t *c, __mpu_uint16_t *a, __mpu_uint16_t *b );
extern void iadc_16( __mpu_uint16_t *c, __mpu_uint16_t *a, __mpu_uint16_t *b );
extern void isub_16( __mpu_uint16_t *c, __mpu_uint16_t *a, __mpu_uint16_t *b );
extern void isbb_16( __mpu_uint16_t *c, __mpu_uint16_t *a, __mpu_uint16_t *b );
extern void iadd_32( __mpu_uint32_t *c, __mpu_uint32_t *a, __mpu_uint32_t *b );
extern void iadc_32( __mpu_uint32_t *c, __mpu_uint32_t *a, __mpu_uint32_t *b );
extern void isub_32( __mpu_uint32_t *c, __mpu_uint32_t *a, __mpu_uint32_t *b );
extern void isbb_32( __mpu_uint32_t *c, __mpu_uint32_t *a, __mpu_uint32_t *b );
extern void iadd_np( EMUSHORT *c, EMUSHORT *a, EMUSHORT *b, int np );
extern void iadc_np( EMUSHORT *c, EMUSHORT *a, EMUSHORT *b, int np );
extern void isub_np( EMUSHORT *c, EMUSHORT *a, EMUSHORT *b, int np );
extern void isbb_np( EMUSHORT *c, EMUSHORT *a, EMUSHORT *b, int np );
extern void ishl_8( __mpu_uint8_t *c, __mpu_uint8_t *a );
extern void ishr_8( __mpu_uint8_t *c, __mpu_uint8_t *a );
extern void isal_8( __mpu_uint8_t *c, __mpu_uint8_t *a );
extern void isar_8( __mpu_uint8_t *c, __mpu_uint8_t *a );
extern void ishl_16( __mpu_uint16_t *c, __mpu_uint16_t *a );
extern void ishr_16( __mpu_uint16_t *c, __mpu_uint16_t *a );
extern void isal_16( __mpu_uint16_t *c, __mpu_uint16_t *a );
extern void isar_16( __mpu_uint16_t *c, __mpu_uint16_t *a );
extern void ishl_32( __mpu_uint32_t *c, __mpu_uint32_t *a );
extern void ishr_32( __mpu_uint32_t *c, __mpu_uint32_t *a );
extern void isal_32( __mpu_uint32_t *c, __mpu_uint32_t *a );
extern void isar_32( __mpu_uint32_t *c, __mpu_uint32_t *a );
extern void ishl_np( EMUSHORT *c, EMUSHORT *a, int np );
extern void ishr_np( EMUSHORT *c, EMUSHORT *a, int np );
extern void isal_np( EMUSHORT *c, EMUSHORT *a, int np );
extern void isar_np( EMUSHORT *c, EMUSHORT *a, int np );
extern void irol_8( __mpu_uint8_t *c, __mpu_uint8_t *a );
extern void iror_8( __mpu_uint8_t *c, __mpu_uint8_t *a );
extern void ircl_8( __mpu_uint8_t *c, __mpu_uint8_t *a );
extern void ircr_8( __mpu_uint8_t *c, __mpu_uint8_t *a );
extern void irol_16( __mpu_uint16_t *c, __mpu_uint16_t *a );
extern void iror_16( __mpu_uint16_t *c, __mpu_uint16_t *a );
extern void ircl_16( __mpu_uint16_t *c, __mpu_uint16_t *a );
extern void ircr_16( __mpu_uint16_t *c, __mpu_uint16_t *a );
extern void irol_32( __mpu_uint32_t *c, __mpu_uint32_t *a );
extern void iror_32( __mpu_uint32_t *c, __mpu_uint32_t *a );
extern void ircl_32( __mpu_uint32_t *c, __mpu_uint32_t *a );
extern void ircr_32( __mpu_uint32_t *c, __mpu_uint32_t *a );
extern void irol_np( EMUSHORT *c, EMUSHORT *a, int np );
extern void iror_np( EMUSHORT *c, EMUSHORT *a, int np );
extern void ircl_np( EMUSHORT *c, EMUSHORT *a, int np );
extern void ircr_np( EMUSHORT *c, EMUSHORT *a, int np );
extern void ishln_8( __mpu_uint8_t *c, __mpu_uint8_t *a, unsigned int b );
extern void ishrn_8( __mpu_uint8_t *c, __mpu_uint8_t *a, unsigned int b );
extern void isaln_8( __mpu_uint8_t *c, __mpu_uint8_t *a, unsigned int b );
extern void isarn_8( __mpu_uint8_t *c, __mpu_uint8_t *a, unsigned int b );
extern void ishln_16( __mpu_uint16_t *c, __mpu_uint16_t *a, unsigned int b );
extern void ishrn_16( __mpu_uint16_t *c, __mpu_uint16_t *a, unsigned int b );
extern void isaln_16( __mpu_uint16_t *c, __mpu_uint16_t *a, unsigned int b );
extern void isarn_16( __mpu_uint16_t *c, __mpu_uint16_t *a, unsigned int b );
extern void ishln_32( __mpu_uint32_t *c, __mpu_uint32_t *a, unsigned int b );
extern void ishrn_32( __mpu_uint32_t *c, __mpu_uint32_t *a, unsigned int b );
extern void isaln_32( __mpu_uint32_t *c, __mpu_uint32_t *a, unsigned int b );
extern void isarn_32( __mpu_uint32_t *c, __mpu_uint32_t *a, unsigned int b );
extern void ishln_np( EMUSHORT *c, EMUSHORT *a, unsigned int b, int np );
extern void ishrn_np( EMUSHORT *c, EMUSHORT *a, unsigned int b, int np );
extern void isaln_np( EMUSHORT *c, EMUSHORT *a, unsigned int b, int np );
extern void isarn_np( EMUSHORT *c, EMUSHORT *a, unsigned int b, int np );
extern void iroln_8( __mpu_uint8_t *c, __mpu_uint8_t *a, unsigned int b );
extern void irorn_8( __mpu_uint8_t *c, __mpu_uint8_t *a, unsigned int b );
extern void ircln_8( __mpu_uint8_t *c, __mpu_uint8_t *a, unsigned int b );
extern void ircrn_8( __mpu_uint8_t *c, __mpu_uint8_t *a, unsigned int b );
extern void iroln_16( __mpu_uint16_t *c, __mpu_uint16_t *a, unsigned int b );
extern void irorn_16( __mpu_uint16_t *c, __mpu_uint16_t *a, unsigned int b );
extern void ircln_16( __mpu_uint16_t *c, __mpu_uint16_t *a, unsigned int b );
extern void ircrn_16( __mpu_uint16_t *c, __mpu_uint16_t *a, unsigned int b );
extern void iroln_32( __mpu_uint32_t *c, __mpu_uint32_t *a, unsigned int b );
extern void irorn_32( __mpu_uint32_t *c, __mpu_uint32_t *a, unsigned int b );
extern void ircln_32( __mpu_uint32_t *c, __mpu_uint32_t *a, unsigned int b );
extern void ircrn_32( __mpu_uint32_t *c, __mpu_uint32_t *a, unsigned int b );
extern void iroln_np( EMUSHORT *c, EMUSHORT *a, unsigned int b, int np );
extern void irorn_np( EMUSHORT *c, EMUSHORT *a, unsigned int b, int np );
extern void ircln_np( EMUSHORT *c, EMUSHORT *a, unsigned int b, int np );
extern void ircrn_np( EMUSHORT *c, EMUSHORT *a, unsigned int b, int np );
extern void inot_8( __mpu_uint8_t *c, __mpu_uint8_t *a );
extern void inot_16( __mpu_uint16_t *c, __mpu_uint16_t *a );
extern void inot_32( __mpu_uint32_t *c, __mpu_uint32_t *a );
extern void inot_np( EMUSHORT *c, EMUSHORT *a, int np );
extern void ineg_8( __mpu_uint8_t *c, __mpu_uint8_t *a );
extern void ineg_16( __mpu_uint16_t *c, __mpu_uint16_t *a );
extern void ineg_32( __mpu_uint32_t *c, __mpu_uint32_t *a );
extern void ineg_np( EMUSHORT *c, EMUSHORT *a, int np );
extern void iand_8( __mpu_uint8_t *c, __mpu_uint8_t *a, __mpu_uint8_t *b );
extern void iand_16( __mpu_uint16_t *c, __mpu_uint16_t *a, __mpu_uint16_t *b );
extern void iand_32( __mpu_uint32_t *c, __mpu_uint32_t *a, __mpu_uint32_t *b );
extern void iand_np( EMUSHORT *c, EMUSHORT *a, EMUSHORT *b, int np );
extern void itest_8( __mpu_uint8_t *a, __mpu_uint8_t *b );
extern void itest_16( __mpu_uint16_t *a, __mpu_uint16_t *b );
extern void itest_32( __mpu_uint32_t *a, __mpu_uint32_t *b );
extern void itest_np( EMUSHORT *a, EMUSHORT *b, int np );
extern void icmp_8( __mpu_uint8_t *a, __mpu_uint8_t *b );
extern void icmp_16( __mpu_uint16_t *a, __mpu_uint16_t *b );
extern void icmp_32( __mpu_uint32_t *a, __mpu_uint32_t *b );
extern void icmp_np( EMUSHORT *a, EMUSHORT *b, int np );
extern void ior_8( __mpu_uint8_t *c, __mpu_uint8_t *a, __mpu_uint8_t *b );
extern void ior_16( __mpu_uint16_t *c, __mpu_uint16_t *a, __mpu_uint16_t *b );
extern void ior_32( __mpu_uint32_t *c, __mpu_uint32_t *a, __mpu_uint32_t *b );
extern void ior_np( EMUSHORT *c, EMUSHORT *a, EMUSHORT *b, int np );
extern void ixor_8( __mpu_uint8_t *c, __mpu_uint8_t *a, __mpu_uint8_t *b );
extern void ixor_16( __mpu_uint16_t *c, __mpu_uint16_t *a, __mpu_uint16_t *b );
extern void ixor_32( __mpu_uint32_t *c, __mpu_uint32_t *a, __mpu_uint32_t *b );
extern void ixor_np( EMUSHORT *c, EMUSHORT *a, EMUSHORT *b, int np );
extern void iinc_8( __mpu_uint8_t *c, __mpu_uint8_t *a );
extern void iinc_16( __mpu_uint16_t *c, __mpu_uint16_t *a );
extern void iinc_32( __mpu_uint32_t *c, __mpu_uint32_t *a );
extern void iinc_np( EMUSHORT *c, EMUSHORT *a, int np );
extern void idec_8( __mpu_uint8_t *c, __mpu_uint8_t *a );
extern void idec_16( __mpu_uint16_t *c, __mpu_uint16_t *a );
extern void idec_32( __mpu_uint32_t *c, __mpu_uint32_t *a );
extern void idec_np( EMUSHORT *c, EMUSHORT *a, int np );
extern void icpy_8( __mpu_uint8_t *c, __mpu_uint8_t *a );
extern void icpy_16( __mpu_uint16_t *c, __mpu_uint16_t *a );
extern void icpy_32( __mpu_uint32_t *c, __mpu_uint32_t *a );
extern void icpy_s2l_8to16( __mpu_uint16_t *c, __mpu_uint8_t *a );
extern void icpy_s2l_8to32( __mpu_uint32_t *c, __mpu_uint8_t *a );
extern void icpy_s2l_8to_np( EMUSHORT *c, __mpu_uint8_t *a, int np );
extern void icpy_s2l_16to32( __mpu_uint32_t *c, __mpu_uint16_t *a );
extern void icpy_s2l_16to_np( EMUSHORT *c, __mpu_uint16_t *a, int np );
#if BITS_PER_EMUSHORT > 32
extern void icpy_s2l_32to_np( EMUSHORT *c, __mpu_uint32_t *a, int np );
#endif /* BITS_PER_EMUSHORT > 32 */
extern void icpy_l2s_16to8( __mpu_uint8_t *c, __mpu_uint16_t *a );
extern void icpy_l2s_32to8( __mpu_uint8_t *c, __mpu_uint32_t *a );
extern void icpy_l2s_np_to8( __mpu_uint8_t *c, EMUSHORT *a, int np );
extern void icpy_l2s_32to16( __mpu_uint16_t *c, __mpu_uint32_t *a );
extern void icpy_l2s_np_to16( __mpu_uint16_t *c, EMUSHORT *a, int np );
#if BITS_PER_EMUSHORT > 32
extern void icpy_l2s_np_to32( __mpu_uint32_t *c, EMUSHORT *a, int np );
#endif /* BITS_PER_EMUSHORT > 32 */
extern void icpy_np( EMUSHORT *c, EMUSHORT *a, int np_c, int np_a );
extern void icvt_s2l_8to16( __mpu_uint16_t *c, __mpu_uint8_t *a );
extern void icvt_s2l_8to32( __mpu_uint32_t *c, __mpu_uint8_t *a );
extern void icvt_s2l_8to_np( EMUSHORT *c, __mpu_uint8_t *a, int np );
extern void icvt_s2l_16to32( __mpu_uint32_t *c, __mpu_uint16_t *a );
extern void icvt_s2l_16to_np( EMUSHORT *c, __mpu_uint16_t *a, int np );
#if BITS_PER_EMUSHORT > 32
extern void icvt_s2l_32to_np( EMUSHORT *c, __mpu_uint32_t *a, int np );
#endif /* BITS_PER_EMUSHORT > 32 */
extern void icvt_l2s_16to8( __mpu_uint8_t *c, __mpu_uint16_t *a );
extern void icvt_l2s_32to8( __mpu_uint8_t *c, __mpu_uint32_t *a );
extern void icvt_l2s_np_to8( __mpu_uint8_t *c, EMUSHORT *a, int np );
extern void icvt_l2s_32to16( __mpu_uint16_t *c, __mpu_uint32_t *a );
extern void icvt_l2s_np_to16( __mpu_uint16_t *c, EMUSHORT *a, int np );
#if BITS_PER_EMUSHORT > 32
extern void icvt_l2s_np_to32( __mpu_uint32_t *c, EMUSHORT *a, int np );
#endif /* BITS_PER_EMUSHORT > 32 */
extern void icvt_np( EMUSHORT *c, EMUSHORT *a, int np_c, int np_a );
extern void ixchg_8( __mpu_uint8_t *a, __mpu_uint8_t *b );
extern void ixchg_16( __mpu_uint16_t *a, __mpu_uint16_t *b );
extern void ixchg_32( __mpu_uint32_t *a, __mpu_uint32_t *b );
extern void ixchg_np( EMUSHORT *a, EMUSHORT *b, int np );
extern void imul_8( __mpu_uint16_t *prod, __mpu_uint8_t *num, __mpu_uint8_t *mul );
extern void imul_16( __mpu_uint32_t *prod, __mpu_uint16_t *num, __mpu_uint16_t *mul );
#if BITS_PER_EMUSHORT > 32 /* 64 bits only */
extern void imul_32( __mpu_uint64_t *prod, __mpu_uint32_t *num, __mpu_uint32_t *mul );
#endif /* BITS_PER_EMUSHORT > 32 */
extern void ismul_8( __mpu_uint16_t *prod, __mpu_uint8_t *num, __mpu_uint8_t *mul );
extern void ismul_16( __mpu_uint32_t *prod, __mpu_uint16_t *num, __mpu_uint16_t *mul );
#if BITS_PER_EMUSHORT > 32 /* 64 bits only */
extern void ismul_32( __mpu_uint64_t *prod, __mpu_uint32_t *num, __mpu_uint32_t *mul );
#endif /* BITS_PER_EMUSHORT > 32 */
extern void idiv_8( __mpu_uint8_t *quot, __mpu_uint8_t *rem, __mpu_uint8_t *num, __mpu_uint8_t *den );
extern void idiv_16( __mpu_uint16_t *quot, __mpu_uint16_t *rem, __mpu_uint16_t *num, __mpu_uint16_t *den );
#if BITS_PER_EMUSHORT > 32 /* 64 bits only */
extern void idiv_32( __mpu_uint32_t *quot, __mpu_uint32_t *rem, __mpu_uint32_t *num, __mpu_uint32_t *den );
#endif /* BITS_PER_EMUSHORT > 32 */
extern void isdiv_8( __mpu_uint8_t *quot, __mpu_uint8_t *rem, __mpu_uint8_t *num, __mpu_uint8_t *den );
extern void isdiv_16( __mpu_uint16_t *quot, __mpu_uint16_t *rem, __mpu_uint16_t *num, __mpu_uint16_t *den );
#if BITS_PER_EMUSHORT > 32 /* 64 bits only */
extern void isdiv_32( __mpu_uint32_t *quot, __mpu_uint32_t *rem, __mpu_uint32_t *num, __mpu_uint32_t *den );
#endif /* BITS_PER_EMUSHORT > 32 */
extern void imul_np( EMUSHORT *prod, EMUSHORT *num, EMUSHORT *mul, int np_prod, int np_num );
extern void ismul_np( EMUSHORT *prod, EMUSHORT *num, EMUSHORT *mul, int np_prod, int np_num );
extern void idiv_np( EMUSHORT *quot, EMUSHORT *rem, EMUSHORT *num, EMUSHORT *den, int np );
extern void isdiv_np( EMUSHORT *quot, EMUSHORT *rem, EMUSHORT *num, EMUSHORT *den, int np );
extern void iatoi_8( __mpu_uint8_t *c, __mpu_char8_t *str );
extern void iatoui_8( __mpu_uint8_t *c, __mpu_char8_t *str );
extern void iatoi_16( __mpu_uint16_t *c, __mpu_char8_t *str );
extern void iatoui_16( __mpu_uint16_t *c, __mpu_char8_t *str );
#if BITS_PER_EMUSHORT > 32 /* 64 bits only */
extern void iatoi_32( __mpu_uint32_t *c, __mpu_char8_t *str );
extern void iatoui_32( __mpu_uint32_t *c, __mpu_char8_t *str );
#endif /* BITS_PER_EMUSHORT > 32 */
extern void iatoi_np( EMUSHORT *c, __mpu_char8_t *str, int np );
extern void iatoui_np( EMUSHORT *c, __mpu_char8_t *str, int np );
extern void iitoa_8( __mpu_char8_t *str, __mpu_uint8_t *a, int radix, int uf );
extern void iuitoa_8( __mpu_char8_t *str, __mpu_uint8_t *a, int radix, int uf );
extern void iitoa_16( __mpu_char8_t *str, __mpu_uint16_t *a, int radix, int uf );
extern void iuitoa_16( __mpu_char8_t *str, __mpu_uint16_t *a, int radix, int uf );
#if BITS_PER_EMUSHORT > 32 /* 64 bits only */
extern void iitoa_32( __mpu_char8_t *str, __mpu_uint32_t *a, int radix, int uf );
extern void iuitoa_32( __mpu_char8_t *str, __mpu_uint32_t *a, int radix, int uf );
#endif /* BITS_PER_EMUSHORT > 32 */
extern void iitoa_np( __mpu_char8_t *str, EMUSHORT *a, int radix, int uf, int np );
extern void iuitoa_np( __mpu_char8_t *str, EMUSHORT *a, int radix, int uf, int np );
#ifdef __cplusplus
} /* ... extern "C" */
#endif
#endif /* __MPU_INTEGER_H */