Math Processor Unit Library

libmpu – library of arithmetic functions for integer, real, and complex numbers of increased digit capacity

16 Commits   0 Branches   2 Tags
868b2b66 (kx 2024-12-20 16:11:07 +0300   1) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   2) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300   3)   __MPU_CONTEXT.H
868b2b66 (kx 2024-12-20 16:11:07 +0300   4) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   5)        This file contains CONTEXT operation functions & data
868b2b66 (kx 2024-12-20 16:11:07 +0300   6)        declarations.
868b2b66 (kx 2024-12-20 16:11:07 +0300   7) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   8)        PART OF : MPU - library .
868b2b66 (kx 2024-12-20 16:11:07 +0300   9) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  10)        USAGE   : Internal only .
868b2b66 (kx 2024-12-20 16:11:07 +0300  11) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  12)        NOTE    : Include "libmpu.h" before this FILE .
868b2b66 (kx 2024-12-20 16:11:07 +0300  13) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  14)        Copyright (C) 2000 - 2024  by Andrew V.Kosteltsev.
868b2b66 (kx 2024-12-20 16:11:07 +0300  15)        All Rights Reserved.
868b2b66 (kx 2024-12-20 16:11:07 +0300  16)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  17) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  18) #ifndef   __MPU_CONTEXT_H
868b2b66 (kx 2024-12-20 16:11:07 +0300  19) #define   __MPU_CONTEXT_H
868b2b66 (kx 2024-12-20 16:11:07 +0300  20) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  21) #ifdef  __cplusplus
868b2b66 (kx 2024-12-20 16:11:07 +0300  22) extern "C" {
868b2b66 (kx 2024-12-20 16:11:07 +0300  23) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  24) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  25) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  26) #define REGISTERS_MEM_SIZE_IN_UNITS  524288
868b2b66 (kx 2024-12-20 16:11:07 +0300  27) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  28) typedef struct __mpu_context mpu_context;
868b2b66 (kx 2024-12-20 16:11:07 +0300  29) struct __mpu_context
868b2b66 (kx 2024-12-20 16:11:07 +0300  30) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  31)   __mpu_error_t _ierrno; /*  integer errno */
868b2b66 (kx 2024-12-20 16:11:07 +0300  32)   __mpu_error_t _rerrno; /*     real errno */
868b2b66 (kx 2024-12-20 16:11:07 +0300  33)   __mpu_error_t _cerrno; /*  complex errno */
868b2b66 (kx 2024-12-20 16:11:07 +0300  34)   __mpu_error_t _merrno; /*     math errno */
868b2b66 (kx 2024-12-20 16:11:07 +0300  35) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  36)   __mpu_error_t _ewarns; /* extra warnings */
868b2b66 (kx 2024-12-20 16:11:07 +0300  37) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  38)   __mpu_uint32_t mflags; /* mpu flags register */
868b2b66 (kx 2024-12-20 16:11:07 +0300  39) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  40)   __mpu_void_t *_cur_brk;
868b2b66 (kx 2024-12-20 16:11:07 +0300  41)   __mpu_UNIT_t  _mem[REGISTERS_MEM_SIZE_IN_UNITS];
868b2b66 (kx 2024-12-20 16:11:07 +0300  42) };
868b2b66 (kx 2024-12-20 16:11:07 +0300  43) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  44) extern struct __mpu_context *pmctx;
868b2b66 (kx 2024-12-20 16:11:07 +0300  45) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  46) #define __integer_error_no  (*(&(pmctx->_ierrno)))
868b2b66 (kx 2024-12-20 16:11:07 +0300  47) #define __real_error_no     (*(&(pmctx->_rerrno)))
868b2b66 (kx 2024-12-20 16:11:07 +0300  48) #define __complex_error_no  (*(&(pmctx->_cerrno)))
868b2b66 (kx 2024-12-20 16:11:07 +0300  49) #define __math_error_no     (*(&(pmctx->_merrno)))
868b2b66 (kx 2024-12-20 16:11:07 +0300  50) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  51) #define __extra_warnings    (*(&(pmctx->_ewarns)))
868b2b66 (kx 2024-12-20 16:11:07 +0300  52) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  53) #define __cur_brk  (*((__mpu_void_t **)&(pmctx->_cur_brk)))
868b2b66 (kx 2024-12-20 16:11:07 +0300  54) #define __mem      ((__mpu_UNIT_t *)&((pmctx->_mem)[0]))
868b2b66 (kx 2024-12-20 16:11:07 +0300  55) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  56) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  57) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  58)   INTEGER OPERATIONS FLAGS:
868b2b66 (kx 2024-12-20 16:11:07 +0300  59)   ------------------------
868b2b66 (kx 2024-12-20 16:11:07 +0300  60)       AF - Auxiliary Carry Flag
868b2b66 (kx 2024-12-20 16:11:07 +0300  61)       CF - Carry Flag
868b2b66 (kx 2024-12-20 16:11:07 +0300  62)       OF - Overflow Flag
868b2b66 (kx 2024-12-20 16:11:07 +0300  63)       SF - Sign Flag
868b2b66 (kx 2024-12-20 16:11:07 +0300  64)       PF - Parity Flag (of lowest significant byte)
868b2b66 (kx 2024-12-20 16:11:07 +0300  65)       ZF - Zero Flag
868b2b66 (kx 2024-12-20 16:11:07 +0300  66)       RF - major || remainder
868b2b66 (kx 2024-12-20 16:11:07 +0300  67)       VF - Invalid operation
868b2b66 (kx 2024-12-20 16:11:07 +0300  68) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  69)       NOTE: AF, PF are set only by 8-, 16-bit operations.
868b2b66 (kx 2024-12-20 16:11:07 +0300  70) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  71)   REAL OPERATIONS FLAGS:
868b2b66 (kx 2024-12-20 16:11:07 +0300  72)   ---------------------
868b2b66 (kx 2024-12-20 16:11:07 +0300  73)     DOMF - Domain Flag
868b2b66 (kx 2024-12-20 16:11:07 +0300  74)     SNGF - Singularity Flag
868b2b66 (kx 2024-12-20 16:11:07 +0300  75)     OVFF - Overflow Flag
868b2b66 (kx 2024-12-20 16:11:07 +0300  76)     UDFF - Underflow Flag
868b2b66 (kx 2024-12-20 16:11:07 +0300  77)     TLSF - TLOSS Flag
868b2b66 (kx 2024-12-20 16:11:07 +0300  78)     PLSF - PLOSS Flag
868b2b66 (kx 2024-12-20 16:11:07 +0300  79)     INDF - ind-produsing operation Flag
868b2b66 (kx 2024-12-20 16:11:07 +0300  80)     INXF - Inexact Flag
868b2b66 (kx 2024-12-20 16:11:07 +0300  81)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  82) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  83) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  84)   Значения флагов снимаются часто, а опереция  log2(mask)
868b2b66 (kx 2024-12-20 16:11:07 +0300  85)   для вычисления сдвига посредством подсчета установленных
868b2b66 (kx 2024-12-20 16:11:07 +0300  86)   битов
868b2b66 (kx 2024-12-20 16:11:07 +0300  87) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  88)     SHIFT(flag) = __BITCOUNT((flag ## _MASK)-1)
868b2b66 (kx 2024-12-20 16:11:07 +0300  89) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  90)   может занимать время.  Поэтому здесь используются явные
868b2b66 (kx 2024-12-20 16:11:07 +0300  91)   значения количества битов на которое надо сдвигать флаг,
868b2b66 (kx 2024-12-20 16:11:07 +0300  92)   чтобы снять его величину.
868b2b66 (kx 2024-12-20 16:11:07 +0300  93)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  94) #define   AF_MASK __mpu_UINT32_C( 0x00000001 )
868b2b66 (kx 2024-12-20 16:11:07 +0300  95) #define   CF_MASK __mpu_UINT32_C( 0x00000002 )
868b2b66 (kx 2024-12-20 16:11:07 +0300  96) #define   OF_MASK __mpu_UINT32_C( 0x00000004 )
868b2b66 (kx 2024-12-20 16:11:07 +0300  97) #define   SF_MASK __mpu_UINT32_C( 0x00000008 )
868b2b66 (kx 2024-12-20 16:11:07 +0300  98) #define   PF_MASK __mpu_UINT32_C( 0x00000010 )
868b2b66 (kx 2024-12-20 16:11:07 +0300  99) #define   ZF_MASK __mpu_UINT32_C( 0x00000020 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 100) #define   RF_MASK __mpu_UINT32_C( 0x00000040 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 101) #define   VF_MASK __mpu_UINT32_C( 0x00000080 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 102) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 103) #define   AF_SHIFT   0
868b2b66 (kx 2024-12-20 16:11:07 +0300 104) #define   CF_SHIFT   1
868b2b66 (kx 2024-12-20 16:11:07 +0300 105) #define   OF_SHIFT   2
868b2b66 (kx 2024-12-20 16:11:07 +0300 106) #define   SF_SHIFT   3
868b2b66 (kx 2024-12-20 16:11:07 +0300 107) #define   PF_SHIFT   4
868b2b66 (kx 2024-12-20 16:11:07 +0300 108) #define   ZF_SHIFT   5
868b2b66 (kx 2024-12-20 16:11:07 +0300 109) #define   RF_SHIFT   6
868b2b66 (kx 2024-12-20 16:11:07 +0300 110) #define   VF_SHIFT   7
868b2b66 (kx 2024-12-20 16:11:07 +0300 111) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 112) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 113) #define DOMF_MASK __mpu_UINT32_C( 0x00000100 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 114) #define SNGF_MASK __mpu_UINT32_C( 0x00000200 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 115) #define OVFF_MASK __mpu_UINT32_C( 0x00000400 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 116) #define UDFF_MASK __mpu_UINT32_C( 0x00000800 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 117) #define TLSF_MASK __mpu_UINT32_C( 0x00001000 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 118) #define PLSF_MASK __mpu_UINT32_C( 0x00002000 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 119) #define INDF_MASK __mpu_UINT32_C( 0x00004000 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 120) #define INXF_MASK __mpu_UINT32_C( 0x00008000 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 121) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 122) #define DOMF_SHIFT   8
868b2b66 (kx 2024-12-20 16:11:07 +0300 123) #define SNGF_SHIFT   9
868b2b66 (kx 2024-12-20 16:11:07 +0300 124) #define OVFF_SHIFT  10
868b2b66 (kx 2024-12-20 16:11:07 +0300 125) #define UDFF_SHIFT  11
868b2b66 (kx 2024-12-20 16:11:07 +0300 126) #define TLSF_SHIFT  12
868b2b66 (kx 2024-12-20 16:11:07 +0300 127) #define PLSF_SHIFT  13
868b2b66 (kx 2024-12-20 16:11:07 +0300 128) #define INDF_SHIFT  14
868b2b66 (kx 2024-12-20 16:11:07 +0300 129) #define INXF_SHIFT  15
868b2b66 (kx 2024-12-20 16:11:07 +0300 130) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 131) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 132) #define IFLAGS_MASK __mpu_UINT32_C( 0x000000ff )
868b2b66 (kx 2024-12-20 16:11:07 +0300 133) #define RFLAGS_MASK __mpu_UINT32_C( 0x0000ff00 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 134) #define MFLAGS_MASK __mpu_UINT32_C( 0x0000ffff )
868b2b66 (kx 2024-12-20 16:11:07 +0300 135) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 136) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 137) #if HAVE___BUILTIN_POPCOUNT
868b2b66 (kx 2024-12-20 16:11:07 +0300 138) #define __BITCOUNT  __builtin_popcount
868b2b66 (kx 2024-12-20 16:11:07 +0300 139) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300 140) #define __BITCOUNT(x) (((_BX(x)+(_BX(x)>>4)) & 0x0F0F0F0F) % 255)
868b2b66 (kx 2024-12-20 16:11:07 +0300 141) #define _BX(x) ((x) - (((x)>>1)&0x77777777)  \
868b2b66 (kx 2024-12-20 16:11:07 +0300 142)                     - (((x)>>2)&0x33333333)  \
868b2b66 (kx 2024-12-20 16:11:07 +0300 143)                     - (((x)>>3)&0x11111111))
868b2b66 (kx 2024-12-20 16:11:07 +0300 144) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 145) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 146) #if HAVE___BUILTIN_PARITY
868b2b66 (kx 2024-12-20 16:11:07 +0300 147) #define __PARITY  __builtin_parity
868b2b66 (kx 2024-12-20 16:11:07 +0300 148) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300 149) #define __PARITY(x) (__BITCOUNT(x) % 2)
868b2b66 (kx 2024-12-20 16:11:07 +0300 150) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 151) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 152) #define __MPARITY(x)  (((x)&0xff)?!__PARITY(x):0)
868b2b66 (kx 2024-12-20 16:11:07 +0300 153) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 154) /* All arithmetic flags for store/restore operations: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 155) #define __MPU_FLAGS  (pmctx->mflags)
868b2b66 (kx 2024-12-20 16:11:07 +0300 156) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 157) /* Set, clear, or invert particular flag (by name): */
868b2b66 (kx 2024-12-20 16:11:07 +0300 158) #define __SET_MFLAG(flag)     (pmctx->mflags |= (flag ## _MASK))
868b2b66 (kx 2024-12-20 16:11:07 +0300 159) #define __CLEAR_MFLAG(flag)   (pmctx->mflags &= (~flag ## _MASK))
868b2b66 (kx 2024-12-20 16:11:07 +0300 160) #define __INVERT_MFLAG(flag)  (pmctx->mflags ^= (flag ## _MASK))
868b2b66 (kx 2024-12-20 16:11:07 +0300 161) #define __MFLAG(flag)         ((pmctx->mflags & flag ## _MASK)>>(flag ## _SHIFT))
868b2b66 (kx 2024-12-20 16:11:07 +0300 162) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 163) /* Clear set of integer, relal or all of arithmetic flags: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 164) #define __CLEAR_IFLAGS  (pmctx->mflags &= (~IFLAGS_MASK))
868b2b66 (kx 2024-12-20 16:11:07 +0300 165) #define __CLEAR_RFLAGS  (pmctx->mflags &= (~RFLAGS_MASK))
868b2b66 (kx 2024-12-20 16:11:07 +0300 166) #define __CLEAR_MFLAGS  (pmctx->mflags &= (~MFLAGS_MASK))
868b2b66 (kx 2024-12-20 16:11:07 +0300 167) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 168) #define __CLEAR_IFLAGS_WITHOUT_CARRY  (pmctx->mflags &= (~(IFLAGS_MASK & (~CF_MASK))))
868b2b66 (kx 2024-12-20 16:11:07 +0300 169) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 170) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 171) /* Set integer flags: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 172) #define __STA  __SET_MFLAG( AF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 173) #define __STC  __SET_MFLAG( CF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 174) #define __STO  __SET_MFLAG( OF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 175) #define __STS  __SET_MFLAG( SF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 176) #define __STP  __SET_MFLAG( PF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 177) #define __STZ  __SET_MFLAG( ZF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 178) #define __STR  __SET_MFLAG( RF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 179) #define __STV  __SET_MFLAG( VF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 180) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 181) /* Clear integer flags: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 182) #define __CLA  __CLEAR_MFLAG( AF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 183) #define __CLC  __CLEAR_MFLAG( CF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 184) #define __CLO  __CLEAR_MFLAG( OF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 185) #define __CLS  __CLEAR_MFLAG( SF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 186) #define __CLP  __CLEAR_MFLAG( PF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 187) #define __CLZ  __CLEAR_MFLAG( ZF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 188) #define __CLR  __CLEAR_MFLAG( RF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 189) #define __CLV  __CLEAR_MFLAG( VF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 190) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 191) /* Complement integer flags: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 192) #define __CMA  __INVERT_MFLAG( AF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 193) #define __CMC  __INVERT_MFLAG( CF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 194) #define __CMO  __INVERT_MFLAG( OF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 195) #define __CMS  __INVERT_MFLAG( SF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 196) #define __CMP  __INVERT_MFLAG( PF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 197) #define __CMZ  __INVERT_MFLAG( ZF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 198) #define __CMR  __INVERT_MFLAG( RF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 199) #define __CMV  __INVERT_MFLAG( VF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 200) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 201) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 202) /* Set real flags: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 203) #define __STDOM __SET_MFLAG( DOMF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 204) #define __STSNG __SET_MFLAG( SNGF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 205) #define __STOVF __SET_MFLAG( OVFF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 206) #define __STUDF __SET_MFLAG( UDFF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 207) #define __STTLS __SET_MFLAG( TLSF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 208) #define __STPLS __SET_MFLAG( PLSF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 209) #define __STIND __SET_MFLAG( INDF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 210) #define __STINX __SET_MFLAG( INXF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 211) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 212) /* Clear real flags: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 213) #define __CLDOM __CLEAR_MFLAG( DOMF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 214) #define __CLSNG __CLEAR_MFLAG( SNGF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 215) #define __CLOVF __CLEAR_MFLAG( OVFF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 216) #define __CLUDF __CLEAR_MFLAG( UDFF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 217) #define __CLTLS __CLEAR_MFLAG( TLSF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 218) #define __CLPLS __CLEAR_MFLAG( PLSF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 219) #define __CLIND __CLEAR_MFLAG( INDF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 220) #define __CLINX __CLEAR_MFLAG( INXF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 221) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 222) /* Complement real flags: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 223) #define __CMDOM __INVERT_MFLAG( DOMF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 224) #define __CMSNG __INVERT_MFLAG( SNGF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 225) #define __CMOVF __INVERT_MFLAG( OVFF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 226) #define __CMUDF __INVERT_MFLAG( UDFF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 227) #define __CMTLS __INVERT_MFLAG( TLSF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 228) #define __CMPLS __INVERT_MFLAG( PLSF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 229) #define __CMIND __INVERT_MFLAG( INDF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 230) #define __CMINX __INVERT_MFLAG( INXF )
868b2b66 (kx 2024-12-20 16:11:07 +0300 231) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 232) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 233) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 234) extern __mpu_void_t *__mpu_sbrk( int incr );
868b2b66 (kx 2024-12-20 16:11:07 +0300 235) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 236) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 237) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 238) #ifdef  __cplusplus
868b2b66 (kx 2024-12-20 16:11:07 +0300 239) }   /* ... extern "C" */
868b2b66 (kx 2024-12-20 16:11:07 +0300 240) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 241) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 242) #endif /* __MPU_CONTEXT_H */