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_TETRADE.C
868b2b66 (kx 2024-12-20 16:11:07 +0300     4) 
868b2b66 (kx 2024-12-20 16:11:07 +0300     5)      This file containt source code of of function
868b2b66 (kx 2024-12-20 16:11:07 +0300     6)      for arithmetic & mathematic operations.
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    : NONE .
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) #ifdef HAVE_CONFIG_H
868b2b66 (kx 2024-12-20 16:11:07 +0300    19) #include <config.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    20) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300    21) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    22) #include <errno.h>   /* errno(3)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300    23) #include <string.h>  /* strcpy(3) */
868b2b66 (kx 2024-12-20 16:11:07 +0300    24) #include <strings.h> /* bzero(3)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300    25) #include <stdlib.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    26) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    27) #include <libmpu.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    28) #include <mpu-context.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    29) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    30) #include <mpu-emutype.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    31) #include <mpu-integer.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    32) #include <mpu-real.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    33) #include <mpu-floatp.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    34) #include <mpu-ioreal.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    35) #include <mpu-m-const.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    36) #include <mpu-math.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    37) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    38) #include <mpu-char.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    39) #include <mpu-symbols.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    40) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    41) #include <mpu-math-errno.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    42) #include <mpu-strerror.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    43) #include <mpu-mtherr.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300    44) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    45) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    46) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300    47)                  INTEGER ARITHMETIC OPERATIONS
868b2b66 (kx 2024-12-20 16:11:07 +0300    48)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300    49) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    50) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    51) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300    52)   Операции ложения и вычитания [ c = a + b; c = a - b; ]
868b2b66 (kx 2024-12-20 16:11:07 +0300    53)   Воздействуют на флаги: AF, CF, OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300    54)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300    55) void iadd( mpu_int *c, mpu_int *a, mpu_int *b, int nb )
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)   c = a + b;
868b2b66 (kx 2024-12-20 16:11:07 +0300    59)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300    60) {
868b2b66 (kx 2024-12-20 16:11:07 +0300    61)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300    62) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    63)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300    64)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300    65)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300    66)       iadd_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300    67)               (__mpu_uint8_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300    68)               (__mpu_uint8_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300    69)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300    70) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    71)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300    72)       iadd_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300    73)                (__mpu_uint16_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300    74)                (__mpu_uint16_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300    75)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300    76) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    77)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300    78)       iadd_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300    79)                (__mpu_uint32_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300    80)                (__mpu_uint32_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300    81)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300    82) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    83)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300    84)       iadd_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300    85)                (EMUSHORT *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300    86)                (EMUSHORT *)b,nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300    87)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300    88) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    89)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300    90) 
868b2b66 (kx 2024-12-20 16:11:07 +0300    91) } /* End iadd() */
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) void iadc( mpu_int *c, mpu_int *a, mpu_int *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300    95) /* сложение знаковое и беззнаковое целых всех размеров с переносом */
868b2b66 (kx 2024-12-20 16:11:07 +0300    96) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300    97)   c = a + b with carry;
868b2b66 (kx 2024-12-20 16:11:07 +0300    98)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300    99) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   100)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   101) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   102)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   103)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   104)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   105)       iadc_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   106)               (__mpu_uint8_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   107)               (__mpu_uint8_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   108)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   109) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   110)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   111)       iadc_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   112)                (__mpu_uint16_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   113)                (__mpu_uint16_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   114)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   115) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   116)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   117)       iadc_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   118)                (__mpu_uint32_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   119)                (__mpu_uint32_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   120)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   121) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   122)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   123)       iadc_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   124)                (EMUSHORT *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   125)                (EMUSHORT *)b, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   126)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   127) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   128)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   129) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   130) } /* End iadc() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   131) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   132) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   133) void isub( mpu_int *c, mpu_int *a, mpu_int *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   134) /* вычитание знаковое и беззнаковое целых всех размеров */
868b2b66 (kx 2024-12-20 16:11:07 +0300   135) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   136)   c = a - b;
868b2b66 (kx 2024-12-20 16:11:07 +0300   137)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   138) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   139)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   140) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   141)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   142)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   143)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   144)       isub_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   145)               (__mpu_uint8_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   146)               (__mpu_uint8_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   147)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   148) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   149)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   150)       isub_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   151)                (__mpu_uint16_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   152)                (__mpu_uint16_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   153)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   154) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   155)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   156)       isub_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   157)                (__mpu_uint32_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   158)                (__mpu_uint32_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   159)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   160) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   161)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   162)       isub_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   163)                (EMUSHORT *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   164)                (EMUSHORT *)b, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   165)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   166) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   167)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   168) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   169) } /* End isub() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   170) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   171) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   172) void isbb( mpu_int *c, mpu_int *a, mpu_int *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   173) /* вычитание знаковое и беззнаковое целых всех размеров с переносом */
868b2b66 (kx 2024-12-20 16:11:07 +0300   174) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   175)   c = a - b with carry;
868b2b66 (kx 2024-12-20 16:11:07 +0300   176)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   177) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   178)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   179) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   180)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   181)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   182)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   183)       isbb_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   184)               (__mpu_uint8_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   185)               (__mpu_uint8_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   186)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   187) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   188)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   189)       isbb_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   190)                (__mpu_uint16_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   191)                (__mpu_uint16_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   192)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   193) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   194)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   195)       isbb_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   196)                (__mpu_uint32_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   197)                (__mpu_uint32_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   198)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   199) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   200)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   201)       isbb_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   202)                (EMUSHORT *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   203)                (EMUSHORT *)b, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   204)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   205) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   206)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   207) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   208) } /* End isbb() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   209) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   210) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   211) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300   212)   Операции сдвига на 1 бит [c = <<a; c = >>a;]
868b2b66 (kx 2024-12-20 16:11:07 +0300   213)   Воздействуют на флаги: AF=0, CF, OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300   214)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   215) void ishl( mpu_int *c, mpu_int *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   216) /* Логический беззнаковый сдвиг влево на один бит */
868b2b66 (kx 2024-12-20 16:11:07 +0300   217) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   218)   c = <<a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   219)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   220) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   221)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   222) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   223)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   224)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   225)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   226)       ishl_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   227)               (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   228)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   229) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   230)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   231)       ishl_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   232)                (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   233)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   234) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   235)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   236)       ishl_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   237)                (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   238)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   239) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   240)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   241)       ishl_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   242)                (EMUSHORT *)a, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   243)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   244) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   245)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   246) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   247) } /* End ishl() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   248) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   249) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   250) void ishr( mpu_int *c, mpu_int *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   251) /* Логический беззнаковый сдвиг вправо на один бит */
868b2b66 (kx 2024-12-20 16:11:07 +0300   252) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   253)   c = >>a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   254)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   255) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   256)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   257) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   258)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   259)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   260)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   261)       ishr_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   262)               (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   263)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   264) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   265)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   266)       ishr_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   267)                (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   268)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   269) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   270)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   271)       ishr_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   272)                (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   273)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   274) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   275)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   276)       ishr_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   277)                (EMUSHORT *)a, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   278)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   279) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   280)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   281) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   282) } /* End ishr() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   283) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   284) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   285) void isal( mpu_int *c, mpu_int *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   286) /* Арифметический сдвиг влево на один бит */
868b2b66 (kx 2024-12-20 16:11:07 +0300   287) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   288)   c = <<a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   289)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   290) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   291)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   292) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   293)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   294)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   295)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   296)       isal_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   297)               (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   298)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   299) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   300)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   301)       isal_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   302)                (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   303)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   304) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   305)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   306)       isal_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   307)                (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   308)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   309) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   310)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   311)       isal_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   312)                (EMUSHORT *)a, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   313)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   314) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   315)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   316) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   317) } /* End isal() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   318) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   319) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   320) void isar( mpu_int *c, mpu_int *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   321) /* Арифметический сдвиг вправо на один бит */
868b2b66 (kx 2024-12-20 16:11:07 +0300   322) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   323)   c = >>a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   324)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   325) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   326)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   327) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   328)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   329)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   330)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   331)       isar_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   332)               (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   333)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   334) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   335)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   336)       isar_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   337)                (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   338)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   339) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   340)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   341)       isar_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   342)                (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   343)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   344) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   345)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   346)       isar_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   347)                (EMUSHORT *)a, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   348)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   349) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   350)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   351) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   352) } /* End isar() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   353) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   354) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   355) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300   356)   Операции иклических сдвигов на 1 бит
868b2b66 (kx 2024-12-20 16:11:07 +0300   357)   Воздействуют на флаги: AF=0, CF, OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300   358)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   359) void irol( mpu_int *c, mpu_int *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   360) /* Циклический сдвиг влево на один бит */
868b2b66 (kx 2024-12-20 16:11:07 +0300   361) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   362)   c = >>a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   363)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   364) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   365)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   366) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   367)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   368)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   369)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   370)       irol_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   371)               (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   372)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   373) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   374)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   375)       irol_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   376)                (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   377)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   378) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   379)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   380)       irol_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   381)                (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   382)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   383) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   384)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   385)       irol_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   386)                (EMUSHORT *)a, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   387)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   388) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   389)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   390) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   391) } /* End irol() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   392) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   393) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   394) void iror( mpu_int *c, mpu_int *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   395) /* Циклический сдвиг вправо на один бит */
868b2b66 (kx 2024-12-20 16:11:07 +0300   396) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   397)   c = >>a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   398)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   399) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   400)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   401) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   402)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   403)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   404)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   405)       iror_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   406)               (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   407)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   408) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   409)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   410)       iror_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   411)                (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   412)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   413) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   414)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   415)       iror_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   416)                       (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   417)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   418) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   419)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   420)       iror_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   421)                (EMUSHORT *)a, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   422)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   423) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   424)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   425) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   426) } /* End iror() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   427) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   428) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   429) void ircl( mpu_int *c, mpu_int *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   430) /* Циклический сдвиг влево на один бит с переносом */
868b2b66 (kx 2024-12-20 16:11:07 +0300   431) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   432)   c = <<a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   433)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   434) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   435)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   436) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   437)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   438)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   439)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   440)       ircl_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   441)               (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   442)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   443) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   444)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   445)       ircl_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   446)                (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   447)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   448) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   449)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   450)       ircl_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   451)                (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   452)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   453) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   454)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   455)       ircl_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   456)                (EMUSHORT *)a, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   457)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   458) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   459)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   460) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   461) } /* End ircl() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   462) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   463) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   464) void ircr( mpu_int *c, mpu_int *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   465) /* Циклический сдвиг вправо на один бит с переносом */
868b2b66 (kx 2024-12-20 16:11:07 +0300   466) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   467)   c = >>a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   468)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   469) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   470)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   471) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   472)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   473)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   474)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   475)       ircr_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   476)               (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   477)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   478) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   479)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   480)       ircr_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   481)                (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   482)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   483) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   484)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   485)       ircr_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   486)                (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   487)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   488) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   489)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   490)       ircr_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   491)                (EMUSHORT *)a, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   492)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   493) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   494)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   495) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   496) } /* End ircr() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   497) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   498) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   499) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300   500)   Операции сдвига на (ns) бит
868b2b66 (kx 2024-12-20 16:11:07 +0300   501)   Воздействует на флаги: AF=0, CF, OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300   502)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   503) void ishln( mpu_int *c, mpu_int *a, unsigned int ns, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   504) /* Логический сдвиг влево на (ns) бит */
868b2b66 (kx 2024-12-20 16:11:07 +0300   505) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   506)   c = <<a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   507)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   508) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   509)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   510) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   511)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   512)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   513)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   514)       ishln_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   515)                (__mpu_uint8_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   516)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   517) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   518)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   519)       ishln_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   520)                 (__mpu_uint16_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   521)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   522) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   523)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   524)       ishln_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   525)                 (__mpu_uint32_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   526)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   527) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   528)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   529)       ishln_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   530)                 (EMUSHORT *)a, ns, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   531)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   532) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   533)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   534) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   535) } /* End ishln() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   536) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   537) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   538) void ishrn( mpu_int *c, mpu_int *a, unsigned int ns, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   539) /* Логический сдвиг вправо на (ns) бит */
868b2b66 (kx 2024-12-20 16:11:07 +0300   540) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   541)   c = >>a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   542)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   543) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   544)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   545) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   546)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   547)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   548)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   549)       ishrn_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   550)                (__mpu_uint8_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   551)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   552) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   553)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   554)       ishrn_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   555)                 (__mpu_uint16_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   556)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   557) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   558)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   559)       ishrn_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   560)                 (__mpu_uint32_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   561)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   562) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   563)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   564)       ishrn_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   565)                 (EMUSHORT *)a, ns, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   566)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   567) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   568)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   569) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   570) } /* End ishrn() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   571) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   572) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   573) void isaln( mpu_int *c, mpu_int *a, unsigned int ns, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   574) /* Арифметический сдвиг влево на (ns) бит */
868b2b66 (kx 2024-12-20 16:11:07 +0300   575) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   576)   c = <<a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   577)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   578) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   579)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   580) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   581)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   582)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   583)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   584)       isaln_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   585)                (__mpu_uint8_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   586)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   587) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   588)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   589)       isaln_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   590)                 (__mpu_uint16_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   591)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   592) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   593)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   594)       isaln_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   595)                 (__mpu_uint32_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   596)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   597) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   598)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   599)       isaln_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   600)                 (EMUSHORT *)a, ns, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   601)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   602) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   603)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   604) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   605) } /* End isaln() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   606) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   607) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   608) void isarn( mpu_int *c, mpu_int *a, unsigned int ns, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   609) /* Арифметический сдвиг вправо на (ns) бит */
868b2b66 (kx 2024-12-20 16:11:07 +0300   610) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   611)   c = >>a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   612)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   613) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   614)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   615) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   616)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   617)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   618)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   619)       isarn_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   620)                (__mpu_uint8_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   621)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   622) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   623)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   624)       isarn_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   625)                 (__mpu_uint16_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   626)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   627) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   628)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   629)       isarn_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   630)                 (__mpu_uint32_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   631)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   632) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   633)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   634)       isarn_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   635)                 (EMUSHORT *)a, ns, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   636)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   637) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   638)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   639) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   640) } /* End isarn() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   641) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   642) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   643) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300   644)   Операции иклических сдвигов на (ns) бит.
868b2b66 (kx 2024-12-20 16:11:07 +0300   645)   Воздействует на флаги: AF=0, CF, OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300   646)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   647) void iroln( mpu_int *c, mpu_int *a, unsigned int ns, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   648) /* Циклический сдвиг влево на (ns) бит */
868b2b66 (kx 2024-12-20 16:11:07 +0300   649) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   650)   c = <<a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   651)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   652) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   653)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   654) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   655)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   656)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   657)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   658)       iroln_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   659)                (__mpu_uint8_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   660)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   661) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   662)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   663)       iroln_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   664)                 (__mpu_uint16_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   665)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   666) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   667)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   668)       iroln_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   669)                 (__mpu_uint32_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   670)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   671) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   672)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   673)       iroln_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   674)                 (EMUSHORT *)a, ns, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   675)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   676) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   677)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   678) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   679) } /* End iroln() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   680) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   681) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   682) void irorn( mpu_int *c, mpu_int *a, unsigned int ns, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   683) /* Циклический сдвиг вправо на (ns) бит */
868b2b66 (kx 2024-12-20 16:11:07 +0300   684) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   685)   c = >>a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   686)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   687) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   688)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   689) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   690)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   691)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   692)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   693)       irorn_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   694)                (__mpu_uint8_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   695)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   696) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   697)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   698)       irorn_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   699)                 (__mpu_uint16_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   700)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   701) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   702)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   703)       irorn_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   704)                 (__mpu_uint32_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   705)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   706) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   707)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   708)       irorn_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   709)                 (EMUSHORT *)a, ns, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   710)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   711) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   712)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   713) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   714) } /* End irorn() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   715) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   716) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   717) void ircln( mpu_int *c, mpu_int *a, unsigned int ns, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   718) /* Циклический сдвиг влево на (ns) бит с переносом */
868b2b66 (kx 2024-12-20 16:11:07 +0300   719) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   720)   c = <<a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   721)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   722) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   723)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   724) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   725)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   726)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   727)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   728)       ircln_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   729)                (__mpu_uint8_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   730)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   731) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   732)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   733)       ircln_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   734)                 (__mpu_uint16_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   735)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   736) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   737)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   738)       ircln_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   739)                 (__mpu_uint32_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   740)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   741) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   742)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   743)       ircln_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   744)                 (EMUSHORT *)a, ns, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   745)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   746) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   747)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   748) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   749) } /* End ircln() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   750) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   751) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   752) void ircrn( mpu_int *c, mpu_int *a, unsigned int ns, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   753) /* Циклический сдвиг вправо на (ns) бит с переносом */
868b2b66 (kx 2024-12-20 16:11:07 +0300   754) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   755)   c = >>a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   756)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   757) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   758)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   759) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   760)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   761)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   762)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   763)       ircrn_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   764)                (__mpu_uint8_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   765)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   766) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   767)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   768)       ircrn_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   769)                 (__mpu_uint16_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   770)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   771) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   772)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   773)       ircrn_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   774)                 (__mpu_uint32_t *)a, ns );
868b2b66 (kx 2024-12-20 16:11:07 +0300   775)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   776) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   777)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   778)       ircrn_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   779)                 (EMUSHORT *)a, ns, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   780)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   781) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   782)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   783) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   784) } /* End ircrn() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   785) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   786) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   787) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300   788)   Операция NOT [c = (инверсия всех разрядов)a].
868b2b66 (kx 2024-12-20 16:11:07 +0300   789)   На флаги не воздействует.
868b2b66 (kx 2024-12-20 16:11:07 +0300   790)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   791) void inot( mpu_int *c, mpu_int *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   792) /* поразрядное логическое НЕ */
868b2b66 (kx 2024-12-20 16:11:07 +0300   793) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   794)   c = ~a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   795)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   796) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   797)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   798) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   799)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   800)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   801)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   802)       inot_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   803)               (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   804)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   805) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   806)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   807)       inot_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   808)                (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   809)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   810) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   811)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   812)       inot_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   813)                (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   814)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   815) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   816)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   817)       inot_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   818)                (EMUSHORT *)a, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   819)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   820) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   821)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   822) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   823) } /* End inot() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   824) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   825) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   826) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300   827)   Операция NEG [c = - a].
868b2b66 (kx 2024-12-20 16:11:07 +0300   828)   Воздействует на флаги: AF, CF, OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300   829)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   830) void ineg( mpu_int *c, mpu_int *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   831) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   832)   c = -a;
868b2b66 (kx 2024-12-20 16:11:07 +0300   833)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   834) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   835)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   836) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   837)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   838)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   839)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   840)       ineg_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   841)               (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   842)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   843) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   844)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   845)       ineg_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   846)                (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   847)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   848) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   849)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   850)       ineg_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   851)                (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300   852)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   853) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   854)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   855)       ineg_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   856)                (EMUSHORT *)a, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   857)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   858) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   859)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   860) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   861) } /* End ineg() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   862) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   863) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   864) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300   865)   Операция AND [c = a <AND> b].
868b2b66 (kx 2024-12-20 16:11:07 +0300   866)   Воздействует на флаги: AF=(undefined),
868b2b66 (kx 2024-12-20 16:11:07 +0300   867)                      CF=0, OF=0, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300   868)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   869) void iand( mpu_int *c, mpu_int *a, mpu_int *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   870) /* поразрядное логическое И */
868b2b66 (kx 2024-12-20 16:11:07 +0300   871) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   872)   c = a & b;
868b2b66 (kx 2024-12-20 16:11:07 +0300   873)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   874) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   875)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   876) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   877)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   878)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   879)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   880)       iand_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   881)               (__mpu_uint8_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   882)               (__mpu_uint8_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   883)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   884) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   885)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   886)       iand_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   887)                (__mpu_uint16_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   888)                (__mpu_uint16_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   889)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   890) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   891)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   892)       iand_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   893)                (__mpu_uint32_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   894)                (__mpu_uint32_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   895)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   896) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   897)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   898)       iand_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300   899)                (EMUSHORT *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   900)                (EMUSHORT *)b, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   901)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   902) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   903)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   904) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   905) } /* End iand() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   906) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   907) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   908) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   909) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300   910)   Операция TEST [a <TEST> b]. Не изменяет значения операндов.
868b2b66 (kx 2024-12-20 16:11:07 +0300   911)   Воздействует на флаги: AF=(undefined),
868b2b66 (kx 2024-12-20 16:11:07 +0300   912)                      CF=0, OF=0, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300   913)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   914) void itest( mpu_int *a, mpu_int *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   915) /* поразрядное логическое И */
868b2b66 (kx 2024-12-20 16:11:07 +0300   916) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   917)   a & b;
868b2b66 (kx 2024-12-20 16:11:07 +0300   918)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   919) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   920)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   921) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   922)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   923)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   924)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   925)       itest_8( (__mpu_uint8_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   926)                (__mpu_uint8_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   927)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   928) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   929)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   930)       itest_16( (__mpu_uint16_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   931)                 (__mpu_uint16_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   932)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   933) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   934)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   935)       itest_32( (__mpu_uint32_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   936)                 (__mpu_uint32_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   937)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   938) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   939)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   940)       itest_np( (EMUSHORT *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   941)                 (EMUSHORT *)b, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   942)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   943) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   944)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   945) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   946) } /* End itest() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   947) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   948) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   949) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300   950)   Операция сравнения CMP [<a - b>].
868b2b66 (kx 2024-12-20 16:11:07 +0300   951)   Не изменяет значения операндов.
868b2b66 (kx 2024-12-20 16:11:07 +0300   952)   Выставляет флаги: AF, CF, OF, SF, PF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300   953)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   954) void icmp( mpu_int *a, mpu_int *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   955) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   956)   a - b;
868b2b66 (kx 2024-12-20 16:11:07 +0300   957)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   958) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   959)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300   960) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   961)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300   962)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300   963)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300   964)       icmp_8( (__mpu_uint8_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   965)               (__mpu_uint8_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   966)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   967) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   968)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300   969)       icmp_16( (__mpu_uint16_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   970)                (__mpu_uint16_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   971)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   972) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   973)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300   974)       icmp_32( (__mpu_uint32_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   975)                (__mpu_uint32_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300   976)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   977) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   978)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300   979)       icmp_np( (EMUSHORT *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300   980)                (EMUSHORT *)b, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300   981)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300   982) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   983)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300   984) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   985) } /* End icmp() */
868b2b66 (kx 2024-12-20 16:11:07 +0300   986) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   987) 
868b2b66 (kx 2024-12-20 16:11:07 +0300   988) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300   989)   Операция OR [c = a <OR> b].
868b2b66 (kx 2024-12-20 16:11:07 +0300   990)   Воздействует на флаги: AF=(undefined),
868b2b66 (kx 2024-12-20 16:11:07 +0300   991)   CF=0, OF=0, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300   992)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   993) void ior( mpu_int *c, mpu_int *a, mpu_int *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300   994) /* поразрядное логическое ИЛИ */
868b2b66 (kx 2024-12-20 16:11:07 +0300   995) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300   996)   c = a | b;
868b2b66 (kx 2024-12-20 16:11:07 +0300   997)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300   998) {
868b2b66 (kx 2024-12-20 16:11:07 +0300   999)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1000) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1001)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1002)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1003)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1004)       ior_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1005)              (__mpu_uint8_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1006)              (__mpu_uint8_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1007)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1008) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1009)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1010)       ior_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1011)               (__mpu_uint16_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1012)               (__mpu_uint16_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1013)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1014) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1015)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1016)       ior_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1017)               (__mpu_uint32_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1018)               (__mpu_uint32_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1019)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1020) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1021)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1022)       ior_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1023)               (EMUSHORT *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1024)               (EMUSHORT *)b, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1025)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1026) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1027)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1028) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1029) } /* End ior() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1030) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1031) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1032) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  1033)   Операция XOR [c = a <XOR> b].
868b2b66 (kx 2024-12-20 16:11:07 +0300  1034)   Воздействует на флаги: AF=(undefined),
868b2b66 (kx 2024-12-20 16:11:07 +0300  1035)   CF=0, OF=0, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1036)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1037) void ixor( mpu_int *c, mpu_int *a, mpu_int *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1038) /* поразрядное логическое исключающее ИЛИ */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1039) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  1040)   c = a ^ b;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1041)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1042) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1043)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1044) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1045)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1046)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1047)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1048)       ixor_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1049)               (__mpu_uint8_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1050)               (__mpu_uint8_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1051)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1052) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1053)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1054)       ixor_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1055)                (__mpu_uint16_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1056)                (__mpu_uint16_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1057)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1058) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1059)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1060)       ixor_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1061)                (__mpu_uint32_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1062)                (__mpu_uint32_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1063)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1064) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1065)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1066)       ixor_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1067)                (EMUSHORT *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1068)                (EMUSHORT *)b, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1069)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1070) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1071)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1072) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1073) } /* End ixor() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1074) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1075) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1076) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  1077)   Операция INC (инкремент) [c = a + 1].
868b2b66 (kx 2024-12-20 16:11:07 +0300  1078)   Воздействует на флаги: AF, OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1079)   Флаг CF не изменяется.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1080)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1081) void iinc( mpu_int *c, mpu_int *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1082) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  1083)   c = a + 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1084)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1085) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1086)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1087) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1088)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1089)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1090)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1091)       iinc_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1092)               (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1093)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1094) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1095)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1096)       iinc_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1097)                (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1098)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1099) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1100)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1101)       iinc_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1102)                (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1103)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1104) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1105)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1106)       iinc_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1107)                (EMUSHORT *)a, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1108)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1109) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1110)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1111) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1112) } /* End iinc() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1113) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1114) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1115) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  1116)   Операция DEC (декремент) [c = a - 1].
868b2b66 (kx 2024-12-20 16:11:07 +0300  1117)   Воздействует на флаги: AF, OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1118)   Флаг CF не изменяется.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1119)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1120) void idec(  mpu_int *c, mpu_int *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1121) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  1122)   c = a - 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1123)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1124) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1125)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1126) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1127)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1128)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1129)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1130)       idec_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1131)               (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1132)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1133) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1134)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1135)       idec_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1136)                (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1137)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1138) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1139)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1140)       idec_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1141)                (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1142)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1143) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1144)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1145)       idec_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1146)                (EMUSHORT *)a, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1147)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1148) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1149)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1150) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1151) } /* End idec() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1152) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1153) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1154) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  1155)   Операция XCHG (замена) [a <==> b].
868b2b66 (kx 2024-12-20 16:11:07 +0300  1156)   Не изменяет флаги.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1157)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1158) void ixchg( mpu_int *a, mpu_int *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1159) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  1160)   a <==> b;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1161)  *****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1162) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1163)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1164) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1165)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1166)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1167)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1168)       ixchg_8( (__mpu_uint8_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1169)                (__mpu_uint8_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1170)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1171) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1172)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1173)       ixchg_16( (__mpu_uint16_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1174)                 (__mpu_uint16_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1175)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1176) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1177)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1178)       ixchg_32( (__mpu_uint32_t *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1179)                 (__mpu_uint32_t *)b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1180)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1181) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1182)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1183)       ixchg_np( (EMUSHORT *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1184)                 (EMUSHORT *)b, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1185)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1186) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1187)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1188) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1189) } /* End ixchg() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1190) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1191) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1192) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  1193)   Операция копирования данных CPY.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1194)   Воздействует на флаги: OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1195)   Флаги CF, AF не изменяются.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1196)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1197) void icpy( mpu_int *c, mpu_int *a, int nb_c, int nb_a )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1198) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  1199)   c <-- a;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1200)  **********/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1201) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1202)   int np_c, np_a;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1203) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1204)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1205) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1206)   np_c = nb_c / SIZE_OF_EMUSHORT;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1207)   np_a = nb_a / SIZE_OF_EMUSHORT;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1208) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1209)   if( nb_c == nb_a ) /* копирование равных */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1210)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1211)     switch( nb_a )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1212)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1213)       case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1214)         icpy_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1215)                 (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1216)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1217) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1218)       case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1219)         icpy_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1220)                  (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1221)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1222) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1223)       case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1224)         icpy_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1225)                  (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1226)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1227) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1228)       default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1229)         icpy_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1230)                  (EMUSHORT *)a, np_c, np_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1231)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1232) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1233)     } /* End of switch( nd_c == nb_a ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1234) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1235)   } /* End if( nb_c == nb_a ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1236)   else if( nb_c > nb_a ) /* копирование меньших в большие */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1237)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1238)     switch( nb_a )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1239)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1240)       case 1: /* копирование байта */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1241)         switch( nb_c )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1242)         {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1243)            case 2: /* в два байта */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1244)               icpy_s2l_8to16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1245)                                (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1246)               break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1247) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1248)            case 4: /* в четыре байта */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1249)               icpy_s2l_8to32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1250)                                (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1251)               break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1252) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1253)            default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1254)               icpy_s2l_8to_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1255)                               (__mpu_uint8_t *)a, np_c );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1256)               break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1257)         }
868b2b66 (kx 2024-12-20 16:11:07 +0300  1258)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1259) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1260)       case 2: /* копирование двух байт */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1261)         switch( nb_c )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1262)         {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1263)            case 4: /* в четыре байта */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1264)               icpy_s2l_16to32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1265)                                (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1266)               break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1267) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1268)            default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1269)               icpy_s2l_16to_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1270)                                 (__mpu_uint16_t *)a, np_c );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1271)               break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1272)         }
868b2b66 (kx 2024-12-20 16:11:07 +0300  1273)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1274) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1275) #if BITS_PER_EMUSHORT > 32
868b2b66 (kx 2024-12-20 16:11:07 +0300  1276)       case 4: /* копирование четырех байт */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1277)         icpy_s2l_32to_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1278)                           (__mpu_uint32_t *)a, np_c );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1279)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1280) #endif /* BITS_PER_EMUSHORT > 32 */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1281) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1282)       default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1283)         icpy_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1284)                  (EMUSHORT *)a, np_c, np_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1285)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1286) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1287)     } /* End of switch( nb_a ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1288) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1289)   } /* End if( nb_c >  nb_a ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1290)   else /* копирование больших в меньшие */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1291)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1292)     switch( nb_c )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1293)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1294)       case 1: /* копирование в байт */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1295)         switch( nb_a )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1296)         {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1297)            case 2: /* двух байт */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1298)               icpy_l2s_16to8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1299)                               (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1300)               break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1301) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1302)            case 4: /* четырх байт */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1303)               icpy_l2s_32to8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1304)                               (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1305)               break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1306) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1307)            default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1308)               icpy_l2s_np_to8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1309)                                (EMUSHORT *)a, np_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1310)               break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1311)         }
868b2b66 (kx 2024-12-20 16:11:07 +0300  1312)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1313) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1314)       case 2: /* копирование в два байта */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1315)         switch( nb_a )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1316)         {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1317)            case 4: /* четырех байт */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1318)               icpy_l2s_32to16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1319)                                (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1320)               break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1321) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1322)            default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1323)               icpy_l2s_np_to16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1324)                                 (EMUSHORT *)a, np_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1325)               break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1326)         }
868b2b66 (kx 2024-12-20 16:11:07 +0300  1327)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1328) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1329) #if BITS_PER_EMUSHORT > 32
868b2b66 (kx 2024-12-20 16:11:07 +0300  1330)       case 4: /* копирование в четыре байта */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1331)         icpy_l2s_np_to32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1332)                           (EMUSHORT *)a, np_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1333)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1334) #endif /* BITS_PER_EMUSHORT > 32 */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1335) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1336)       default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1337)         icpy_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1338)                  (EMUSHORT *)a, np_c, np_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1339)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1340) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1341)     } /* End of switch( nb_c ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1342) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1343)   } /* End ( nb_c <  nb_a ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1344) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1345) } /* End of icpy() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1346) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1347) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1348) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  1349)   Операция преобразования (convert) данных CVT.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1350)   Воздействует на флаги: OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1351)   Флаги CF, AF не изменяются.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1352)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1353) void icvt( mpu_int *c, mpu_int *a, int nb_c, int nb_a )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1354) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  1355)   c <-- a;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1356)  **********/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1357) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1358)   int np_c, np_a;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1359) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1360)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1361) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1362)   np_c = nb_c / SIZE_OF_EMUSHORT;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1363)   np_a = nb_a / SIZE_OF_EMUSHORT;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1364) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1365)   if( nb_c == nb_a ) /* конвертирование равных */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1366)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1367)     switch( nb_a )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1368)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1369)       case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1370)         icpy_8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1371)                 (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1372)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1373) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1374)       case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1375)         icpy_16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1376)                  (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1377)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1378) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1379)       case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1380)         icpy_32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1381)                  (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1382)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1383) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1384)       default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1385)         icpy_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1386)                  (EMUSHORT *)a, np_c, np_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1387)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1388) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1389)     } /* End of switch( nd_c == nb_a ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1390) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1391)   } /* End if( nb_c == nb_a ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1392)   else if( nb_c > nb_a ) /* конвертирование меньших в большие */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1393)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1394)     switch( nb_a )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1395)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1396)       case 1: /* конвертирование байта */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1397)         switch( nb_c )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1398)         {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1399)           case 2: /* в два байта */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1400)             icvt_s2l_8to16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1401)                             (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1402)             break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1403) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1404)           case 4: /* в четыре байта */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1405)             icvt_s2l_8to32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1406)                             (__mpu_uint8_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1407)             break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1408) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1409)           default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1410)             icvt_s2l_8to_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1411)                              (__mpu_uint8_t *)a, np_c );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1412)             break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1413)         }
868b2b66 (kx 2024-12-20 16:11:07 +0300  1414)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1415) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1416)       case 2: /* конвертирование двух байт */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1417)         switch( nb_c )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1418)         {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1419)           case 4: /* в четыре байта */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1420)             icvt_s2l_16to32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1421)                              (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1422)             break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1423) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1424)           default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1425)             icvt_s2l_16to_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1426)                               (__mpu_uint16_t *)a, np_c );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1427)             break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1428)         }
868b2b66 (kx 2024-12-20 16:11:07 +0300  1429)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1430) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1431) #if BITS_PER_EMUSHORT > 32
868b2b66 (kx 2024-12-20 16:11:07 +0300  1432)       case 4: /* конвертирование четырех байт */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1433)         icvt_s2l_32to_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1434)                           (__mpu_uint32_t *)a, np_c );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1435)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1436) #endif /* BITS_PER_EMUSHORT > 32 */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1437) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1438)       default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1439)         icvt_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1440)                  (EMUSHORT *)a, np_c, np_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1441)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1442) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1443)     } /* End of switch( nb_a ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1444) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1445)   } /* End if( nb_c >  nb_a ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1446)   else /* конвертирование больших в меньшие */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1447)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1448)     switch( nb_c )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1449)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1450)       case 1: /* конвертирование в байт */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1451)         switch( nb_a )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1452)         {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1453)           case 2: /* двух байт */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1454)             icvt_l2s_16to8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1455)                             (__mpu_uint16_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1456)             break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1457) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1458)           case 4: /* четырх байт */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1459)             icvt_l2s_32to8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1460)                             (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1461)             break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1462) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1463)           default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1464)             icvt_l2s_np_to8( (__mpu_uint8_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1465)                              (EMUSHORT *)a, np_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1466)             break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1467)         }
868b2b66 (kx 2024-12-20 16:11:07 +0300  1468)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1469) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1470)       case 2: /* конвертирование в два байта */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1471)         switch( nb_a )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1472)         {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1473)           case 4: /* четырех байт */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1474)             icvt_l2s_32to16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1475)                              (__mpu_uint32_t *)a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1476)             break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1477) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1478)           default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1479)             icvt_l2s_np_to16( (__mpu_uint16_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1480)                               (EMUSHORT *)a, np_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1481)             break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1482)         }
868b2b66 (kx 2024-12-20 16:11:07 +0300  1483)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1484) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1485) #if BITS_PER_EMUSHORT > 32
868b2b66 (kx 2024-12-20 16:11:07 +0300  1486)       case 4: /* конвертирование в четыре байта */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1487)         icvt_l2s_np_to32( (__mpu_uint32_t *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1488)                           (EMUSHORT *)a, np_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1489)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1490) #endif /* BITS_PER_EMUSHORT > 32 */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1491) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1492)       default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1493)         icvt_np( (EMUSHORT *)c,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1494)                  (EMUSHORT *)a, np_c, np_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1495)         break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1496) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1497)     } /* End of switch( nb_c ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1498) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1499)   } /* End ( nb_c <  nb_a ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1500) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1501) } /* End of icvt() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1502) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1503) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1504) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  1505)   Операции беззнакового и знакового умножения.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1506)   [ prod = num * mul; ]
868b2b66 (kx 2024-12-20 16:11:07 +0300  1507)   Изменяет флаги: CF, AF=0, PF, ZF, SF, OF, RF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1508)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1509) void imul( mpu_int *prod, mpu_int *num, mpu_int *mul, int nb_prod, int nb_num )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1510) /* prod    - произведение               */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1511) /* num     - множимое                   */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1512) /* mul     - множитель                  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1513) /* nb_prod - размер произведения        */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1514) /* nb_num  - размер множимого           */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1515) /* Операция беззнакового умножения MUL  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1516) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  1517)   prod = num * mul; nb_prod == 2*nb_num;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1518)  ****************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1519) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1520)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1521) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1522)   if( nb_prod < 2*nb_num )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1523)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1524)     /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1525)     __integer_invalid_size( (__mpu_char8_t *)"imul" );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1526)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1527)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  1528) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1529)   switch( nb_num ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1530)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1531)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1532)       imul_8( (__mpu_uint16_t *)prod,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1533)               (__mpu_uint8_t *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1534)               (__mpu_uint8_t *)mul );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1535)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1536) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1537)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1538)       imul_16( (__mpu_uint32_t *)prod,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1539)                (__mpu_uint16_t *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1540)                (__mpu_uint16_t *)mul );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1541)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1542) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1543) #if BITS_PER_EMUSHORT > 32
868b2b66 (kx 2024-12-20 16:11:07 +0300  1544)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1545)       imul_32( (__mpu_uint64_t *)prod,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1546)                (__mpu_uint32_t *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1547)                (__mpu_uint32_t *)mul );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1548)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1549) #endif /* BITS_PER_EMUSHORT > 32 */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1550) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1551)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1552)       imul_np( (EMUSHORT *)prod,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1553)                (EMUSHORT *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1554)                (EMUSHORT *)mul, nb_prod/SIZE_OF_EMUSHORT,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1555)                                 nb_num/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1556)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1557) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1558)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1559) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1560) } /* End imul() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1561) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1562) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1563) void ismul( mpu_int *prod, mpu_int *num, mpu_int *mul, int nb_prod, int nb_num )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1564) /* prod    - произведение               */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1565) /* num     - множимое                   */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1566) /* mul     - множитель                  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1567) /* nb_prod - размер произведения        */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1568) /* nb_num  - размер множимого           */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1569) /* Операция знакового умножения SMUL    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1570) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  1571)   prod = num * mul; nb_prod == 2*nb_num;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1572)  ****************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1573) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1574)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1575) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1576)   if( nb_prod < 2*nb_num )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1577)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1578)     /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1579)     __integer_invalid_size( (__mpu_char8_t *)"ismul" );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1580)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1581)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  1582) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1583)   switch( nb_num ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1584)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1585)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1586)       ismul_8( (__mpu_uint16_t *)prod,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1587)                (__mpu_uint8_t *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1588)                (__mpu_uint8_t *)mul );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1589)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1590) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1591)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1592)       ismul_16( (__mpu_uint32_t *)prod,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1593)                 (__mpu_uint16_t *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1594)                 (__mpu_uint16_t *)mul );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1595)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1596) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1597) #if BITS_PER_EMUSHORT > 32
868b2b66 (kx 2024-12-20 16:11:07 +0300  1598)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1599)       ismul_32( (__mpu_uint64_t *)prod,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1600)                 (__mpu_uint32_t *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1601)                 (__mpu_uint32_t *)mul );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1602)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1603) #endif /* BITS_PER_EMUSHORT > 32 */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1604) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1605)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1606)       ismul_np( (EMUSHORT *)prod,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1607)                 (EMUSHORT *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1608)                 (EMUSHORT *)mul, nb_prod/SIZE_OF_EMUSHORT,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1609)                                  nb_num/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1610)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1611) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1612)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1613) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1614) } /* End ismul() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1615) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1616) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1617) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  1618)   Операции беззнакового и знакового деления.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1619)   Изменяет флаги: CF, AF=0, PF, ZF, SF, OF, RF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1620)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1621) void idiv( mpu_int *quot, mpu_int *rem, mpu_int *num, mpu_int *den, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1622) /* quot - частное                    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1623) /* rem  - остаток                    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1624) /* num  - делимое                    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1625) /* den  - делитель                   */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1626) /* nb   - размер в байтах            */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1627) /* Операция беззнакового деления DIV */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1628) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  1629)   quot = num / den; rem = remainder;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1630)  *************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1631) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1632)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1633) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1634)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1635)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1636)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1637)       idiv_8( (__mpu_uint8_t *)quot,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1638)               (__mpu_uint8_t *)rem,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1639)               (__mpu_uint8_t *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1640)               (__mpu_uint8_t *)den );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1641)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1642) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1643)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1644)       idiv_16( (__mpu_uint16_t *)quot,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1645)                (__mpu_uint16_t *)rem,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1646)                (__mpu_uint16_t *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1647)                (__mpu_uint16_t *)den );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1648)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1649) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1650) #if BITS_PER_EMUSHORT > 32
868b2b66 (kx 2024-12-20 16:11:07 +0300  1651)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1652)       idiv_32( (__mpu_uint32_t *)quot,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1653)                (__mpu_uint32_t *)rem,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1654)                (__mpu_uint32_t *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1655)                (__mpu_uint32_t *)den );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1656)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1657) #endif /* BITS_PER_EMUSHORT > 32 */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1658) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1659)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1660)       idiv_np( (EMUSHORT *)quot,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1661)                (EMUSHORT *)rem,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1662)                (EMUSHORT *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1663)                (EMUSHORT *)den, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1664)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1665) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1666)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1667) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1668) } /* End idiv() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1669) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1670) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1671) void isdiv( mpu_int *quot, mpu_int *rem, mpu_int *num, mpu_int *den, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1672) /* quot - частное                   */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1673) /* rem  - остаток                   */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1674) /* num  - делимое                   */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1675) /* den  - делитель                  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1676) /* nb   - размер в байтах           */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1677) /* Операция знакового деления SDIV  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1678) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  1679)   quot = num / den; rem = remainder;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1680)  ************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1681) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1682)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1683) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1684)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1685)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1686)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1687)       isdiv_8( (__mpu_uint8_t *)quot,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1688)                (__mpu_uint8_t *)rem,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1689)                (__mpu_uint8_t *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1690)                (__mpu_uint8_t *)den );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1691)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1692) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1693)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1694)       isdiv_16( (__mpu_uint16_t *)quot,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1695)                 (__mpu_uint16_t *)rem,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1696)                 (__mpu_uint16_t *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1697)                 (__mpu_uint16_t *)den );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1698)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1699) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1700) #if BITS_PER_EMUSHORT > 32
868b2b66 (kx 2024-12-20 16:11:07 +0300  1701)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1702)       isdiv_32( (__mpu_uint32_t *)quot,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1703)                 (__mpu_uint32_t *)rem,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1704)                 (__mpu_uint32_t *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1705)                 (__mpu_uint32_t *)den );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1706)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1707) #endif /* BITS_PER_EMUSHORT > 32 */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1708) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1709)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1710)       isdiv_np( (EMUSHORT *)quot,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1711)                 (EMUSHORT *)rem,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1712)                 (EMUSHORT *)num,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1713)                 (EMUSHORT *)den, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1714)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1715) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1716)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1717) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1718) } /* End isdiv() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1719) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1720) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1721) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  1722)   Операции преобразования символьных строк в целые числа.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1723)   Изменяет флаги: CF=0, AF=0, PF, ZF, SF, OF.  Не изменяет: RF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1724)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1725) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  1726)   signed
868b2b66 (kx 2024-12-20 16:11:07 +0300  1727)  ********/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1728) void iatoi( mpu_int *c, __mpu_char8_t *str, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1729) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1730)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1731) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1732)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1733)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1734)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1735)       iatoi_8( (__mpu_uint8_t *)c, str );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1736)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1737) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1738)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1739)       iatoi_16( (__mpu_uint16_t *)c, str );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1740)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1741) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1742) #if BITS_PER_EMUSHORT > 32
868b2b66 (kx 2024-12-20 16:11:07 +0300  1743)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1744)       iatoi_32( (__mpu_uint32_t *)c, str );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1745)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1746) #endif /* BITS_PER_EMUSHORT > 32 */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1747) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1748)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1749)       iatoi_np( (EMUSHORT *)c, str, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1750)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1751) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1752)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1753) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1754) } /* End iatoi() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1755) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1756) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  1757)   unsigned
868b2b66 (kx 2024-12-20 16:11:07 +0300  1758)  **********/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1759) void iatoui( mpu_int *c, __mpu_char8_t *str, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1760) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1761)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1762) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1763)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1764)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1765)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1766)       iatoui_8( (__mpu_uint8_t *)c, str );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1767)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1768) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1769)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1770)       iatoui_16( (__mpu_uint16_t *)c, str );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1771)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1772) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1773) #if BITS_PER_EMUSHORT > 32
868b2b66 (kx 2024-12-20 16:11:07 +0300  1774)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1775)       iatoui_32( (__mpu_uint32_t *)c, str );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1776)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1777) #endif /* BITS_PER_EMUSHORT > 32 */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1778) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1779)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1780)       iatoui_np( (EMUSHORT *)c, str, nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1781)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1782) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1783)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1784) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1785) } /* End iatoui() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1786) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1787) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1788) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  1789)   Операции преобразования  целых чисел в символьные строки.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1790)   Не изменяет флаги: CF, AF, PF, ZF, SF, OF, RF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1791)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1792) /* radix = 2(bin), 8(oct), 10(dec), or 16(hex). */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1793) /* uf    = 0(lowercase letter) or
868b2b66 (kx 2024-12-20 16:11:07 +0300  1794)            1(uppercase letter) in prefix and hex-digits. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1795) /* sign  = 0(' '), or 1('-'). */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1796) /* see tetrade.h */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1797) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  1798)   signed
868b2b66 (kx 2024-12-20 16:11:07 +0300  1799)  ********/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1800) void iitoa( __mpu_char8_t *str, mpu_int *a, int radix, int uf, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1801) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1802)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1803) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1804)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1805)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1806)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1807)       iitoa_8( str, (__mpu_uint8_t *)a, radix, uf );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1808)       return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1809)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1810) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1811)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1812)       iitoa_16( str, (__mpu_uint16_t *)a, radix, uf );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1813)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1814) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1815) #if BITS_PER_EMUSHORT > 32
868b2b66 (kx 2024-12-20 16:11:07 +0300  1816)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1817)       iitoa_32( str, (__mpu_uint32_t *)a, radix, uf );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1818)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1819) #endif /* BITS_PER_EMUSHORT > 32 */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1820) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1821)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1822)       iitoa_np( str,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1823)                 (EMUSHORT *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1824)                 radix,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1825)                 uf,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1826)                 nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1827)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1828) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1829)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1830) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1831) } /* End iitoa() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1832) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1833) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  1834)   unsigned
868b2b66 (kx 2024-12-20 16:11:07 +0300  1835)  **********/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1836) void iuitoa( __mpu_char8_t *str, mpu_int *a, int radix, int uf, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1837) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1838)   __integer_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1839) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1840)   switch( nb ) /* NB is number of bytes in mpu_int's. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1841)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1842)     case 1:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1843)       iuitoa_8( str, (__mpu_uint8_t *)a, radix, uf );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1844)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1845) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1846)     case 2:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1847)       iuitoa_16( str, (__mpu_uint16_t *)a, radix, uf );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1848)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1849) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1850) #if BITS_PER_EMUSHORT > 32
868b2b66 (kx 2024-12-20 16:11:07 +0300  1851)     case 4:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1852)       iuitoa_32( str, (__mpu_uint32_t *)a, radix, uf );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1853)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1854) #endif /* BITS_PER_EMUSHORT > 32 */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1855) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1856)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1857)       iuitoa_np( str,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1858)                  (EMUSHORT *)a,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1859)                  radix,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1860)                  uf,
868b2b66 (kx 2024-12-20 16:11:07 +0300  1861)                  nb/SIZE_OF_EMUSHORT );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1862)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1863) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1864)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1865) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1866) } /* End iuitoa() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1867) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1868) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1869) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  1870)                    REAL ARITHMETIC OPERATIONS
868b2b66 (kx 2024-12-20 16:11:07 +0300  1871)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1872) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1873) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  1874)   BEGIN: mpu-floatp.h
868b2b66 (kx 2024-12-20 16:11:07 +0300  1875)  */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1876) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1877) int _sizeof_exp( int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1878) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  1879)   возвращает количество байт целого числа, в которое может
868b2b66 (kx 2024-12-20 16:11:07 +0300  1880)   уместится Exponent вещественного числа размером NB байт.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1881)   (See: NB_R32, NB_R64, ... , NB_R_MAX in __TX_TETRADE.H).
868b2b66 (kx 2024-12-20 16:11:07 +0300  1882)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1883) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1884)   int rc = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1885) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1886)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1887) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1888)   switch( nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1889)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1890)     case NB_R32:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1891)       rc = 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1892)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1893)     case NB_R64:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1894)       rc = 2;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1895)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1896) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1897)     case NB_R128:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1898)     case NB_R256:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1899)       rc = 4;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1900)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1901) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1902)     case NB_R512:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1903)     case NB_R1024:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1904)       rc = 8;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1905)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1906) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1907)     case NB_R2048:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1908)     case NB_R4096:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1909)       rc =16;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1910)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1911) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1912)     case NB_R8192:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1913)     case NB_R16384:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1914)       rc =32;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1915)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1916) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1917)     case NB_R32768:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1918)     case NB_R65536:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1919)       rc =64;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1920)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1921) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1922)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1923)       {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1924)         /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1925)         __real_invalid_size( (__mpu_char8_t *)"_sizeof_exp" );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1926)         rc = -1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1927)       }
868b2b66 (kx 2024-12-20 16:11:07 +0300  1928)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1929) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1930)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1931) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1932)   return( rc );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1933) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1934) } /* End of _sizeof_exp() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1935) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1936) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1937) int _real_mant_digs( int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1938) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  1939)   RETURNS: # of bits in mantissa.
868b2b66 (kx 2024-12-20 16:11:07 +0300  1940)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  1941) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1942)   int rc = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1943) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1944)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1945) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1946)   switch( nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  1947)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1948)     case NB_R32:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1949)       rc = 24;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1950)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1951)     case NB_R64:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1952)       rc = 53;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1953)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1954) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1955)     case NB_R128: /* NOTE: +1 sign bit. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1956)       rc = 97;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1957)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1958)     case NB_R256:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1959)       rc = 225;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1960)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1961) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1962)     case NB_R512:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1963)       rc = 449;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1964)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1965)     case NB_R1024:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1966)       rc = 961;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1967)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1968) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1969)     case NB_R2048:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1970)       rc = 1921;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1971)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1972)     case NB_R4096:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1973)       rc = 3969;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1974)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1975) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1976)     case NB_R8192:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1977)       rc = 7937;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1978)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1979)     case NB_R16384:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1980)       rc = 16129;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1981)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1982) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1983)     case NB_R32768:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1984)       rc = 32257;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1985)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1986)     case NB_R65536:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1987)       rc = 65025;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1988)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1989) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1990)     default:
868b2b66 (kx 2024-12-20 16:11:07 +0300  1991)       {
868b2b66 (kx 2024-12-20 16:11:07 +0300  1992)         /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1993)         __real_invalid_size( (__mpu_char8_t *)"_real_mant_digs" );
868b2b66 (kx 2024-12-20 16:11:07 +0300  1994)         rc =-1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1995)       }
868b2b66 (kx 2024-12-20 16:11:07 +0300  1996)       break;
868b2b66 (kx 2024-12-20 16:11:07 +0300  1997) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  1998)   } /* End of switch( nb ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  1999) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2000)   return( rc );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2001) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2002) } /* End of _real_mant_digs() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2003) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2004) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2005) int _real_digs( int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2006) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  2007)   RETURNS: # of decimal digits of precision
868b2b66 (kx 2024-12-20 16:11:07 +0300  2008)  *******************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2009) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2010)   int  ret;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2011)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2012) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2013)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2014) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2015)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2016) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2017)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2018) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2019)   ret = _get_ndec( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2020) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2021)   return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2022) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2023) } /* End of _real_digs() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2024) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2025) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2026) int _real_max_string( int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2027) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  2028)   RETURNS: # of symbols for convert real number to string
868b2b66 (kx 2024-12-20 16:11:07 +0300  2029)  *********************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2030) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2031)   int  ret;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2032)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2033) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2034)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2035) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2036)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2037) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2038)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2039) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2040)   ret = _get_max_string( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2041) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2042)   return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2043) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2044) } /* End of _real_max_string() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2045) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2046) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2047) void _real_epsilon( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2048) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  2049)   smallest such that 1.0+REAL_EPSILON != 1.0
868b2b66 (kx 2024-12-20 16:11:07 +0300  2050)  ********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2051) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2052)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2053)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2054)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2055) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2056)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2057)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2058) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2059)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2060) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2061)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2062) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2063)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2064) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2065)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2066)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2067)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2068)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2069)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2070)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2071)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2072)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2073) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2074)   ei_copy( eic, _get_epsilon_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2075) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2076)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2077) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2078)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2079)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2080)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2081) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2082) } /* End of _real_epsilon() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2083) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2084) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2085) void _real_max_10_exp( mpu_int *e, int nb_e, int nb_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2086) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  2087)   max decimal exponent
868b2b66 (kx 2024-12-20 16:11:07 +0300  2088)  **********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2089) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2090)   EMUSHORT *exp = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2091)   int       ne, n_bits, n_bytes;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2092)   int       l;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2093) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2094)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2095)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2096) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2097)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2098) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2099)   l = _sizeof_exp( nb_r );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2100) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2101)   if( l <= 0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2102)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2103)     /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2104)     __real_invalid_size( (__mpu_char8_t *)"_real_max_10_exp" );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2105)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2106)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2107) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2108)   if( nb_e < l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2109)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2110)     /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2111)     __real_invalid_size( (__mpu_char8_t *)"_real_max_10_exp" );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2112)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2113)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2114) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2115)   n_bits  = nb_r * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2116)   ne      = internal_ne( n_bits ) + 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2117)   n_bytes = ne * SIZE_OF_EMUSHORT;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2118) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2119)   /*** Allocate memory for exp . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2120)   exp = (EMUSHORT *)__mpu_sbrk( (int)(ne*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2121)   if( !exp )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2122)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2123)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2124)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2125)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2126)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2127) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2128)   ei_cpye( exp, _get_max_10_exp_ptr( n_bits ), ne, ne );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2129) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2130)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  2131)     Операция преобразования (convert) данных CVT.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2132)     Воздействует на флаги: OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2133)     Флаги CF, AF не изменяются.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2134)    ***********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2135)   icvt( e, (mpu_int *)exp, nb_e, n_bytes );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2136) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2137)   /* FREE exp ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2138)   __mpu_sbrk( -(int)(ne*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2139)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2140) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2141) } /* End of _real_max_10_exp() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2142) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2143) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2144) void _real_min_10_exp( mpu_int *e, int nb_e, int nb_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2145) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  2146)   min decimal exponent
868b2b66 (kx 2024-12-20 16:11:07 +0300  2147)  **********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2148) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2149)   EMUSHORT  *exp = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2150)   int        ne, n_bits, n_bytes;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2151)   int        l;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2152) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2153)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2154)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2155) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2156)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2157) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2158)   l = _sizeof_exp( nb_r );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2159) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2160)   if( l <= 0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2161)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2162)     /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2163)     __real_invalid_size( (__mpu_char8_t *)"_real_min_10_exp" );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2164)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2165)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2166) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2167)   if( nb_e < l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2168)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2169)     /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2170)     __real_invalid_size( (__mpu_char8_t *)"_real_min_10_exp" );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2171)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2172)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2173) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2174)   n_bits  = nb_r * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2175)   ne      = internal_ne( n_bits ) + 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2176)   n_bytes = ne * SIZE_OF_EMUSHORT;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2177) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2178)   /*** Allocate memory for exp . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2179)   exp = (EMUSHORT *)__mpu_sbrk( (int)(ne*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2180)   if( !exp )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2181)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2182)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2183)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2184)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2185)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2186) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2187)   ei_cpye( exp, _get_min_10_exp_ptr( n_bits ), ne, ne );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2188) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2189)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  2190)     Операция преобразования (convert) данных CVT.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2191)     Воздействует на флаги: OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2192)     Флаги CF, AF не изменяются.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2193)    ***********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2194)   icvt( e, (mpu_int *)exp, nb_e, n_bytes );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2195) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2196)   /* FREE exp ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2197)   __mpu_sbrk( -(int)(ne*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2198)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2199) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2200) } /* End of _real_min_10_exp() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2201) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2202) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2203) void _real_max_max_exp( mpu_int *e, int nb_e, int nb_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2204) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  2205)   max max binary exponent
868b2b66 (kx 2024-12-20 16:11:07 +0300  2206)  *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2207) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2208)   EMUSHORT *exp = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2209)   int       ne, n_bits, n_bytes;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2210)   int       l;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2211) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2212)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2213)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2214) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2215)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2216) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2217)   l = _sizeof_exp( nb_r );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2218) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2219)   if( l <= 0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2220)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2221)     /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2222)     __real_invalid_size( (__mpu_char8_t *)"_real_max_max_exp" );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2223)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2224)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2225) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2226)   if( nb_e < l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2227)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2228)     /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2229)     __real_invalid_size( (__mpu_char8_t *)"_real_max_max_exp" );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2230)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2231)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2232) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2233)   n_bits  = nb_r * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2234)   ne      = internal_ne( n_bits ) + 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2235)   n_bytes = ne * SIZE_OF_EMUSHORT;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2236) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2237)   /*** Allocate memory for exp . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2238)   exp = (EMUSHORT *)__mpu_sbrk( (int)(ne*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2239)   if( !exp )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2240)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2241)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2242)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2243)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2244)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2245) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2246)   ei_cpye( exp, _get_max_max_2_exp_ptr( n_bits ), ne, ne );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2247) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2248)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  2249)     Операция преобразования (convert) данных CVT.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2250)     Воздействует на флаги: OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2251)     Флаги CF, AF не изменяются.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2252)    ***********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2253)   icvt( e, (mpu_int *)exp, nb_e, n_bytes );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2254) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2255)   /* FREE exp ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2256)   __mpu_sbrk( -(int)(ne*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2257)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2258) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2259) } /* End of _real_max_max_exp() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2260) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2261) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2262) void _real_max_exp( mpu_int *e, int nb_e, int nb_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2263) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  2264)   max binary exponent ( EXONE )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2265)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2266) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2267)   EMUSHORT *exp = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2268)   int       ne, n_bits, n_bytes;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2269)   int       l;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2270) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2271)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2272)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2273) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2274)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2275) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2276)   l = _sizeof_exp( nb_r );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2277) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2278)   if( l <= 0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2279)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2280)     /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2281)     __real_invalid_size( (__mpu_char8_t *)"_real_max_exp" );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2282)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2283)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2284) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2285)   if( nb_e < l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2286)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2287)     /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2288)     __real_invalid_size( (__mpu_char8_t *)"_real_max_exp" );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2289)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2290)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2291) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2292)   n_bits  = nb_r * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2293)   ne      = internal_ne( n_bits ) + 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2294)   n_bytes = ne * SIZE_OF_EMUSHORT;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2295) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2296)   /*** Allocate memory for exp . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2297)   exp = (EMUSHORT *)__mpu_sbrk( (int)(ne*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2298)   if( !exp )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2299)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2300)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2301)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2302)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2303)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2304) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2305)   ei_cpye( exp, _get_max_2_exp_ptr( n_bits ), ne, ne );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2306) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2307)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  2308)     Операция преобразования (convert) данных CVT.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2309)     Воздействует на флаги: OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2310)     Флаги CF, AF не изменяются.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2311)    ***********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2312)   icvt( e, (mpu_int *)exp, nb_e, n_bytes );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2313) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2314)   /* FREE exp ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2315)   __mpu_sbrk( -(int)(ne*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2316)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2317) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2318) } /* End of _real_max_exp() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2319) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2320) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2321) void _real_min_exp( mpu_int *e, int nb_e, int nb_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2322) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  2323)   min binary exponent
868b2b66 (kx 2024-12-20 16:11:07 +0300  2324)  *********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2325) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2326)   EMUSHORT *exp = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2327)   int       ne, n_bits, n_bytes;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2328)   int       l;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2329) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2330)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2331)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2332) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2333)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2334) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2335)   l = _sizeof_exp( nb_r );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2336) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2337)   if( l <= 0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2338)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2339)     /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2340)     __real_invalid_size( (__mpu_char8_t *)"_real_min_exp" );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2341)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2342)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2343) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2344)   if( nb_e < l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2345)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2346)     /* error: Invalid size of operand(s) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2347)     __real_invalid_size( (__mpu_char8_t *)"_real_min_exp" );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2348)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2349)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2350) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2351)   n_bits  = nb_r * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2352)   ne      = internal_ne( n_bits ) + 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2353)   n_bytes = ne * SIZE_OF_EMUSHORT;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2354) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2355)   /*** Allocate memory for exp . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2356)   exp = (EMUSHORT *)__mpu_sbrk( (int)(ne*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2357)   if( !exp )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2358)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2359)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2360)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2361)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2362)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2363) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2364)   ei_cpye( exp, _get_min_2_exp_ptr( n_bits ), ne, ne );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2365) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2366)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  2367)     Операция преобразования (convert) данных CVT.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2368)     Воздействует на флаги: OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2369)     Флаги CF, AF не изменяются.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2370)    ***********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2371)   icvt( e, (mpu_int *)exp, nb_e, n_bytes );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2372) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2373)   /* FREE exp ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2374)   __mpu_sbrk( -(int)(ne*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2375)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2376) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2377) } /* End of _real_min_exp() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2378) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2379) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  2380)   END: mpu-floatp.h
868b2b66 (kx 2024-12-20 16:11:07 +0300  2381)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2382) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2383) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2384) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  2385)   ARITHMETIC & MATHEMATIC CONSTANTS.
868b2b66 (kx 2024-12-20 16:11:07 +0300  2386)  **/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2387) void _m_zero( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2388) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2389)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2390)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2391)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2392) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2393)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2394)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2395) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2396)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2397) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2398)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2399) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2400)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2401) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2402)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2403)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2404)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2405)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2406)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2407)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2408)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2409)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2410) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2411)   _gen_zero( eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2412) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2413)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2414) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2415)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2416)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2417)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2418) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2419) } /* End of _m_zero() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2420) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2421) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2422) void _m_half( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2423) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2424)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2425)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2426)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2427) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2428)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2429)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2430) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2431)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2432) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2433)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2434) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2435)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2436) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2437)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2438)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2439)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2440)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2441)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2442)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2443)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2444)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2445) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2446)   _gen_half( eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2447) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2448)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2449) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2450)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2451)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2452)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2453) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2454) } /* End of _m_half() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2455) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2456) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2457) void _m_one( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2458) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2459)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2460)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2461)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2462) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2463)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2464)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2465) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2466)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2467) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2468)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2469) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2470)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2471) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2472)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2473)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2474)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2475)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2476)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2477)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2478)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2479)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2480) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2481)   _gen_one( eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2482) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2483)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2484) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2485)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2486)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2487)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2488) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2489) } /* End of _m_one() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2490) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2491) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2492) void _m_two( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2493) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2494)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2495)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2496)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2497) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2498)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2499)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2500) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2501)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2502) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2503)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2504) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2505)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2506) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2507)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2508)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2509)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2510)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2511)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2512)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2513)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2514)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2515) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2516)   _gen_two( eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2517) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2518)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2519) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2520)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2521)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2522)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2523) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2524) } /* End of _m_two() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2525) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2526) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2527) void _m_ten( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2528) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2529)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2530)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2531)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2532) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2533)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2534)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2535) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2536)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2537) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2538)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2539) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2540)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2541) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2542)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2543)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2544)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2545)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2546)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2547)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2548)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2549)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2550) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2551)   _gen_ten( eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2552) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2553)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2554) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2555)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2556)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2557)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2558) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2559) } /* End of _m_ten() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2560) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2561) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2562) void _m_mten( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2563) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2564)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2565)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2566)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2567) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2568)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2569)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2570) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2571)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2572) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2573)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2574) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2575)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2576) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2577)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2578)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2579)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2580)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2581)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2582)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2583)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2584)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2585) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2586)   _gen_mten( eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2587) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2588)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2589) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2590)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2591)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2592)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2593) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2594) } /* End of _m_mten() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2595) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2596) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2597) void _m_32( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2598) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2599)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2600)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2601)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2602) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2603)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2604)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2605) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2606)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2607) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2608)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2609) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2610)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2611) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2612)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2613)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2614)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2615)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2616)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2617)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2618)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2619)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2620) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2621)   _gen_32( eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2622) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2623)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2624) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2625)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2626)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2627)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2628) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2629) } /* End of _m_32() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2630) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2631) void _m_PI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2632) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2633)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2634)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2635)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2636) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2637)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2638)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2639) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2640)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2641) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2642)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2643) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2644)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2645) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2646)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2647)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2648)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2649)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2650)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2651)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2652)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2653)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2654) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2655)   ei_copy( eic, _get_m_pi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2656) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2657)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2658) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2659)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2660)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2661)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2662) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2663) } /* End of _m_PI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2664) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2665) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2666) void _m_E( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2667) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2668)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2669)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2670)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2671) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2672)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2673)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2674) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2675)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2676) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2677)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2678) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2679)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2680) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2681)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2682)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2683)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2684)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2685)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2686)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2687)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2688)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2689) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2690)   ei_copy( eic, _get_m_e_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2691) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2692)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2693) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2694)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2695)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2696)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2697) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2698) } /* End of _m_E() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2699) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2700) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2701) void _m_1_ln2( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2702) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2703)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2704)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2705)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2706) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2707)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2708)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2709) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2710)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2711) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2712)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2713) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2714)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2715) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2716)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2717)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2718)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2719)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2720)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2721)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2722)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2723)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2724) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2725)   ei_copy( eic, _get_m_1_ln2_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2726) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2727)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2728) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2729)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2730)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2731)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2732) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2733) } /* End of _m_1_ln2() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2734) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2735) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2736) void _m_ln2( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2737) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2738)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2739)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2740)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2741) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2742)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2743)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2744) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2745)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2746) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2747)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2748) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2749)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2750) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2751)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2752)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2753)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2754)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2755)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2756)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2757)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2758)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2759) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2760)   ei_copy( eic, _get_m_ln2_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2761) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2762)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2763) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2764)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2765)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2766)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2767) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2768) } /* End of _m_ln2() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2769) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2770) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2771) void _m_1_ln10( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2772) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2773)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2774)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2775)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2776) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2777)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2778)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2779) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2780)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2781) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2782)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2783) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2784)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2785) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2786)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2787)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2788)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2789)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2790)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2791)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2792)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2793)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2794) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2795)   ei_copy( eic, _get_m_1_ln10_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2796) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2797)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2798) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2799)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2800)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2801)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2802) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2803) } /* End of _m_1_ln10() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2804) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2805) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2806) void _m_ln10( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2807) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2808)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2809)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2810)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2811) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2812)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2813)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2814) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2815)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2816) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2817)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2818) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2819)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2820) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2821)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2822)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2823)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2824)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2825)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2826)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2827)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2828)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2829) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2830)   ei_copy( eic, _get_m_ln10_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2831) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2832)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2833) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2834)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2835)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2836)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2837) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2838) } /* End of _m_ln10() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2839) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2840) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2841) void _m_1_lg2( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2842) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2843)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2844)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2845)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2846) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2847)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2848)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2849) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2850)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2851) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2852)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2853) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2854)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2855) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2856)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2857)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2858)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2859)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2860)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2861)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2862)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2863)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2864) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2865)   ei_copy( eic, _get_m_1_lg2_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2866) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2867)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2868) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2869)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2870)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2871)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2872) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2873) } /* End of _m_1_lg2() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2874) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2875) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2876) void _m_lg2( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2877) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2878)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2879)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2880)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2881) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2882)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2883)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2884) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2885)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2886) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2887)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2888) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2889)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2890) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2891)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2892)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2893)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2894)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2895)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2896)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2897)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2898)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2899) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2900)   ei_copy( eic, _get_m_lg2_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2901) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2902)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2903) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2904)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2905)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2906)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2907) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2908) } /* End of _m_lg2() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2909) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2910) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2911) void _m_PI_2( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2912) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2913)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2914)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2915)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2916) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2917)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2918)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2919) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2920)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2921) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2922)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2923) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2924)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2925) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2926)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2927)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2928)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2929)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2930)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2931)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2932)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2933)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2934) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2935)   ei_copy( eic, _get_m_pi_2_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2936) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2937)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2938) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2939)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2940)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2941)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2942) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2943) } /* End of _m_PI_2() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2944) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2945) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2946) void _m_PI_3( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2947) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2948)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2949)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2950)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2951) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2952)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2953)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2954) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2955)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2956) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2957)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2958) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2959)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2960) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2961)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2962)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2963)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2964)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2965)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2966)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2967)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  2968)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2969) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2970)   ei_copy( eic, _get_m_pi_3_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2971) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2972)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2973) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2974)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2975)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2976)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2977) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2978) } /* End of _m_PI_3() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  2979) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2980) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2981) void _m_PI_4( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2982) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  2983)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2984)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2985)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2986) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2987)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2988)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2989) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2990)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2991) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2992)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  2993) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2994)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2995) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  2996)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  2997)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  2998)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  2999)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3000)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3001)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3002)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3003)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3004) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3005)   ei_copy( eic, _get_m_pi_4_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3006) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3007)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3008) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3009)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3010)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3011)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3012) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3013) } /* End of _m_PI_4() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3014) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3015) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3016) void _m_PI_5( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3017) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3018)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3019)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3020)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3021) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3022)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3023)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3024) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3025)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3026) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3027)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3028) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3029)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3030) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3031)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3032)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3033)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3034)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3035)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3036)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3037)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3038)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3039) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3040)   ei_copy( eic, _get_m_pi_5_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3041) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3042)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3043) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3044)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3045)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3046)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3047) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3048) } /* End of _m_PI_5() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3049) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3050) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3051) void _m_PI_6( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3052) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3053)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3054)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3055)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3056) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3057)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3058)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3059) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3060)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3061) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3062)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3063) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3064)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3065) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3066)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3067)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3068)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3069)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3070)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3071)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3072)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3073)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3074) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3075)   ei_copy( eic, _get_m_pi_6_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3076) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3077)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3078) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3079)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3080)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3081)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3082) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3083) } /* End of _m_PI_6() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3084) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3085) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3086) void _m_1_PI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3087) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3088)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3089)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3090)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3091) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3092)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3093)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3094) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3095)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3096) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3097)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3098) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3099)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3100) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3101)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3102)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3103)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3104)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3105)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3106)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3107)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3108)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3109) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3110)   ei_copy( eic, _get_m_1_pi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3111) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3112)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3113) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3114)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3115)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3116)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3117) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3118) } /* End of _m_1_PI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3119) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3120) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3121) void _m_2_PI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3122) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3123)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3124)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3125)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3126) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3127)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3128)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3129) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3130)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3131) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3132)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3133) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3134)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3135) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3136)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3137)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3138)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3139)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3140)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3141)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3142)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3143)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3144) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3145)   ei_copy( eic, _get_m_2_pi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3146) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3147)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3148) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3149)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3150)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3151)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3152) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3153) } /* End of _m_2_PI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3154) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3155) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3156) void _m_3_PI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3157) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3158)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3159)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3160)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3161) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3162)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3163)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3164) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3165)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3166) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3167)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3168) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3169)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3170) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3171)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3172)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3173)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3174)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3175)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3176)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3177)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3178)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3179) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3180)   ei_copy( eic, _get_m_3_pi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3181) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3182)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3183) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3184)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3185)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3186)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3187) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3188) } /* End of _m_3_PI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3189) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3190) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3191) void _m_4_PI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3192) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3193)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3194)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3195)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3196) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3197)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3198)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3199) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3200)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3201) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3202)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3203) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3204)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3205) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3206)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3207)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3208)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3209)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3210)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3211)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3212)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3213)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3214) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3215)   ei_copy( eic, _get_m_4_pi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3216) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3217)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3218) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3219)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3220)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3221)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3222) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3223) } /* End of _m_4_PI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3224) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3225) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3226) void _m_5_PI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3227) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3228)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3229)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3230)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3231) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3232)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3233)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3234) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3235)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3236) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3237)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3238) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3239)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3240) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3241)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3242)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3243)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3244)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3245)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3246)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3247)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3248)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3249) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3250)   ei_copy( eic, _get_m_5_pi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3251) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3252)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3253) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3254)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3255)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3256)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3257) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3258) } /* End of _m_5_PI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3259) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3260) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3261) void _m_2PI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3262) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3263)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3264)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3265)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3266) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3267)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3268)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3269) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3270)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3271) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3272)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3273) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3274)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3275) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3276)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3277)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3278)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3279)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3280)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3281)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3282)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3283)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3284) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3285)   ei_copy( eic, _get_m_2pi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3286) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3287)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3288) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3289)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3290)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3291)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3292) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3293) } /* End of _m_2PI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3294) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3295) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3296) void _m_3PI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3297) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3298)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3299)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3300)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3301) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3302)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3303)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3304) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3305)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3306) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3307)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3308) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3309)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3310) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3311)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3312)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3313)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3314)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3315)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3316)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3317)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3318)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3319) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3320)   ei_copy( eic, _get_m_3pi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3321) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3322)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3323) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3324)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3325)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3326)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3327) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3328) } /* End of _m_3PI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3329) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3330) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3331) void _m_1_2PI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3332) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3333)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3334)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3335)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3336) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3337)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3338)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3339) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3340)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3341) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3342)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3343) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3344)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3345) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3346)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3347)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3348)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3349)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3350)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3351)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3352)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3353)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3354) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3355)   ei_copy( eic, _get_m_1_2pi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3356) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3357)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3358) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3359)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3360)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3361)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3362) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3363) } /* End of _m_1_2PI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3364) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3365) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3366) void _m_1_3PI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3367) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3368)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3369)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3370)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3371) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3372)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3373)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3374) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3375)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3376) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3377)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3378) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3379)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3380) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3381)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3382)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3383)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3384)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3385)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3386)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3387)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3388)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3389) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3390)   ei_copy( eic, _get_m_1_3pi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3391) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3392)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3393) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3394)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3395)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3396)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3397) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3398) } /* End of _m_1_3PI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3399) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3400) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3401) void _m_1_4PI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3402) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3403)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3404)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3405)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3406) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3407)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3408)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3409) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3410)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3411) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3412)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3413) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3414)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3415) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3416)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3417)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3418)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3419)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3420)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3421)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3422)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3423)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3424) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3425)   ei_copy( eic, _get_m_1_4pi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3426) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3427)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3428) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3429)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3430)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3431)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3432) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3433) } /* End of _m_1_4PI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3434) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3435) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3436) void _m_1_5PI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3437) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3438)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3439)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3440)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3441) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3442)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3443)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3444) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3445)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3446) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3447)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3448) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3449)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3450) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3451)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3452)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3453)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3454)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3455)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3456)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3457)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3458)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3459) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3460)   ei_copy( eic, _get_m_1_5pi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3461) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3462)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3463) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3464)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3465)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3466)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3467) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3468) } /* End of _m_1_5PI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3469) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3470) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3471) void _m_1_6PI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3472) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3473)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3474)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3475)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3476) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3477)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3478)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3479) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3480)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3481) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3482)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3483) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3484)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3485) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3486)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3487)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3488)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3489)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3490)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3491)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3492)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3493)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3494) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3495)   ei_copy( eic, _get_m_1_6pi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3496) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3497)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3498) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3499)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3500)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3501)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3502) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3503) } /* End of _m_1_6PI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3504) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3505) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3506) void _m_3PI_4( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3507) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3508)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3509)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3510)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3511) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3512)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3513)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3514) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3515)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3516) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3517)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3518) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3519)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3520) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3521)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3522)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3523)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3524)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3525)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3526)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3527)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3528)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3529) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3530)   ei_copy( eic, _get_m_3pi_4_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3531) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3532)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3533) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3534)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3535)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3536)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3537) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3538) } /* End of _m_3PI_4() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3539) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3540) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3541) void _m_SQRTPI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3542) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3543)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3544)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3545)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3546) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3547)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3548)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3549) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3550)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3551) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3552)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3553) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3554)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3555) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3556)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3557)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3558)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3559)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3560)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3561)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3562)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3563)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3564) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3565)   ei_copy( eic, _get_m_sqrtpi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3566) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3567)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3568) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3569)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3570)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3571)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3572) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3573) } /* End of _m_SQRTPI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3574) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3575) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3576) void _m_1_SQRTPI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3577) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3578)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3579)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3580)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3581) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3582)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3583)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3584) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3585)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3586) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3587)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3588) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3589)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3590) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3591)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3592)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3593)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3594)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3595)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3596)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3597)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3598)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3599) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3600)   ei_copy( eic, _get_m_1_sqrtpi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3601) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3602)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3603) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3604)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3605)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3606)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3607) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3608) } /* End of _m_1_SQRTPI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3609) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3610) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3611) void _m_2_SQRTPI( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3612) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3613)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3614)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3615)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3616) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3617)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3618)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3619) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3620)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3621) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3622)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3623) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3624)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3625) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3626)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3627)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3628)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3629)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3630)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3631)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3632)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3633)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3634) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3635)   ei_copy( eic, _get_m_2_sqrtpi_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3636) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3637)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3638) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3639)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3640)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3641)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3642) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3643) } /* End of _m_2_SQRTPI() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3644) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3645) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3646) void _m_SQRT2( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3647) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3648)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3649)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3650)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3651) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3652)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3653)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3654) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3655)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3656) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3657)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3658) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3659)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3660) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3661)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3662)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3663)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3664)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3665)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3666)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3667)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3668)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3669) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3670)   ei_copy( eic, _get_m_sqrt2_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3671) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3672)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3673) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3674)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3675)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3676)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3677) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3678) } /* End of _m_SQRT2() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3679) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3680) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3681) void _m_1_SQRT2( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3682) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3683)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3684)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3685)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3686) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3687)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3688)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3689) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3690)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3691) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3692)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3693) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3694)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3695) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3696)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3697)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3698)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3699)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3700)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3701)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3702)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3703)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3704) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3705)   ei_copy( eic, _get_m_1_sqrt2_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3706) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3707)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3708) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3709)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3710)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3711)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3712) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3713) } /* End of _m_1_SQRT2() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3714) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3715) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3716) void _m_SQRT3( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3717) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3718)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3719)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3720)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3721) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3722)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3723)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3724) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3725)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3726) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3727)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3728) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3729)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3730) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3731)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3732)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3733)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3734)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3735)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3736)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3737)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3738)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3739) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3740)   ei_copy( eic, _get_m_sqrt3_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3741) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3742)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3743) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3744)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3745)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3746)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3747) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3748) } /* End of _m_SQRT3() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3749) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3750) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3751) void _m_1_SQRT3( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3752) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3753)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3754)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3755)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3756) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3757)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3758)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3759) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3760)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3761) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3762)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3763) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3764)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3765) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3766)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3767)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3768)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3769)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3770)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3771)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3772)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3773)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3774) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3775)   ei_copy( eic, _get_m_1_sqrt3_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3776) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3777)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3778) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3779)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3780)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3781)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3782) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3783) } /* End of _m_1_SQRT3() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3784) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3785) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3786) void _m_DEGREE( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3787) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3788)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3789)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3790)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3791) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3792)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3793)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3794) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3795)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3796) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3797)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3798) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3799)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3800) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3801)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3802)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3803)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3804)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3805)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3806)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3807)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3808)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3809) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3810)   ei_copy( eic, _get_m_degree_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3811) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3812)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3813) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3814)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3815)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3816)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3817) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3818) } /* End of _m_DEGREE() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3819) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3820) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3821) void _m_1_DEGREE( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3822) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3823)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3824)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3825)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3826) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3827)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3828)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3829) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3830)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3831) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3832)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3833) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3834)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3835) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3836)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3837)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3838)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3839)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3840)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3841)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3842)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3843)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3844) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3845)   ei_copy( eic, _get_m_1_degree_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3846) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3847)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3848) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3849)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3850)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3851)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3852) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3853) } /* End of _m_1_DEGREE() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3854) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3855) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3856) void _m_GOLDENRATIO( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3857) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3858)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3859)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3860)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3861) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3862)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3863)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3864) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3865)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3866) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3867)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3868) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3869)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3870) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3871)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3872)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3873)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3874)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3875)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3876)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3877)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3878)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3879) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3880)   ei_copy( eic, _get_m_goldenratio_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3881) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3882)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3883) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3884)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3885)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3886)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3887) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3888) } /* End of _m_GOLDENRATIO() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3889) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3890) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3891) void _m_EULERGAMMA( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3892) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3893)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3894)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3895)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3896) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3897)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3898)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3899) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3900)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3901) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3902)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3903) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3904)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3905) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3906)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3907)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3908)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3909)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3910)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3911)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3912)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3913)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3914) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3915)   ei_copy( eic, _get_m_eulergamma_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3916) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3917)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3918) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3919)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3920)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3921)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3922) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3923) } /* End of _m_EULERGAMMA() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3924) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3925) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3926) void _m_CATALAN( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3927) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3928)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3929)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3930)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3931) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3932)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3933)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3934) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3935)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3936) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3937)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3938) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3939)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3940) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3941)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3942)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3943)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3944)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3945)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3946)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3947)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  3948)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3949) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3950)   ei_copy( eic, _get_m_catalan_ptr( n_bits ), n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3951) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3952)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3953) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3954)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3955)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3956)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3957) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3958) } /* End of _m_CATALAN() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3959) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3960) /**
868b2b66 (kx 2024-12-20 16:11:07 +0300  3961)   END OF ARITHMETIC & MATHEMATIC CONSTANTS.
868b2b66 (kx 2024-12-20 16:11:07 +0300  3962)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3963) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3964) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3965) void _ind( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3966) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  3967)   формирует `неопределенность' (- 1.IND)
868b2b66 (kx 2024-12-20 16:11:07 +0300  3968)  ****************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3969) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3970)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3971) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3972)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3973) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3974)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3975) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3976)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3977) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3978)   e_ind( (EMUSHORT *)c, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3979) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3980) } /* End of rind() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  3981) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3982) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3983) int _is_ind( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  3984) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  3985)   проверка на `неопределенность' (- 1.IND)
868b2b66 (kx 2024-12-20 16:11:07 +0300  3986)  ******************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  3987) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  3988)   int  ret;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3989)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3990) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3991)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3992) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3993)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3994) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3995)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  3996) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3997)   ret = e_isind( (EMUSHORT *)c, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  3998) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  3999)   return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4000) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4001) } /* End of _is_ind() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4002) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4003) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4004) void _nan( mpu_real *c, unsigned int sign, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4005) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4006)   формирует `не число' (+/- 1.NAN)
868b2b66 (kx 2024-12-20 16:11:07 +0300  4007)   которое не равно nan_max, nan_min и ind.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4008)  ******************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4009) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4010)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4011) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4012)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4013) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4014)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4015) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4016)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4017) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4018)   e_nan( (EMUSHORT *)c, sign, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4019) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4020) } /* End of _nan() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4021) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4022) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4023) int _is_nans( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4024) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4025)   проверка на `не число' (+/- 1.NAN)
868b2b66 (kx 2024-12-20 16:11:07 +0300  4026)   которое не равно              InD.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4027)  ******************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4028) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4029)   int  ret;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4030)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4031) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4032)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4033) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4034)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4035) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4036)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4037) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4038)   ret = e_isnans( (EMUSHORT *)c, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4039) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4040)   return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4041) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4042) } /* End of _is_nans() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4043) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4044) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4045) void _nan_max( mpu_real *c, unsigned int sign, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4046) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4047)   формирует максимальное `не число' (+/- 1.NAN)
868b2b66 (kx 2024-12-20 16:11:07 +0300  4048)   которое не равно nan_min и ind.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4049)  ***********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4050) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4051)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4052) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4053)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4054) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4055)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4056) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4057)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4058) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4059)   e_nanmax( (EMUSHORT *)c, sign, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4060) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4061) } /* End of _nan_max() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4062) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4063) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4064) int _is_nan_max( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4065) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4066)   проверка на максимальное `не число' (+/- 1.NAN)
868b2b66 (kx 2024-12-20 16:11:07 +0300  4067)   которое не равно nan_min и ind.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4068)  *************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4069) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4070)   int  ret;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4071)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4072) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4073)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4074) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4075)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4076) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4077)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4078) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4079)   ret = e_isnanmax( (EMUSHORT *)c, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4080) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4081)   return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4082) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4083) } /* End of _is_nan_max() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4084) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4085) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4086) void _nan_min( mpu_real *c, unsigned int sign, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4087) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4088)   формирует минимальное `не число' (+/- 1.NAN)
868b2b66 (kx 2024-12-20 16:11:07 +0300  4089)   которое не равно nan_max и ind.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4090)  **********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4091) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4092)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4093) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4094)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4095) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4096)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4097) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4098)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4099) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4100)   e_nanmin( (EMUSHORT *)c, sign, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4101) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4102) } /* End of _nan_min() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4103) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4104) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4105) int _is_nan_min( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4106) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4107)   проверка на минимальное `не число' (+/- 1.NAN)
868b2b66 (kx 2024-12-20 16:11:07 +0300  4108)   которое не равно nan_max и ind.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4109)  ************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4110) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4111)   int  ret;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4112)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4113) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4114)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4115) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4116)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4117) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4118)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4119) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4120)   ret = e_isnanmin( (EMUSHORT *)c, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4121) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4122)   return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4123) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4124) } /* End of _is_nan_min() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4125) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4126) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4127) void _inf( mpu_real *c, unsigned int sign, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4128) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4129)   формирует `бесконечность' (+/- 1.INF)
868b2b66 (kx 2024-12-20 16:11:07 +0300  4130)  ***************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4131) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4132)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4133) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4134)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4135) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4136)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4137) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4138)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4139) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4140)   e_infin( (EMUSHORT *)c, sign, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4141) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4142) } /* End of _inf() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4143) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4144) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4145) int _is_inf( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4146) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4147)   проверка на `бесконечность' (+/- 1.INF)
868b2b66 (kx 2024-12-20 16:11:07 +0300  4148)  *****************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4149) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4150)   int  ret;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4151)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4152) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4153)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4154) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4155)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4156) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4157)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4158) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4159)   ret = e_isinfin( (EMUSHORT *)c, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4160) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4161)   return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4162) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4163) } /* End of _is_inf() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4164) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4165) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4166) void _real_min( mpu_real *c, unsigned int sign, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4167) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4168)   формирует `минимальное число'.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4169)  ********************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4170) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4171)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4172) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4173)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4174) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4175)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4176) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4177)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4178) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4179)   e_realmin( (EMUSHORT *)c, sign, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4180) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4181) } /* End of _real_min() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4182) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4183) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4184) void _real_max( mpu_real *c, unsigned int sign, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4185) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4186)   формирует `максимальное число'.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4187)  *********************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4188) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4189)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4190) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4191)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4192) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4193)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4194) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4195)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4196) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4197)   e_realmax( (EMUSHORT *)c, sign, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4198) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4199) } /* End of _real_max() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4200) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4201) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4202) void _signull( mpu_real *c, unsigned int sign, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4203) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4204)   формирует `знаковый нуль'.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4205)  ****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4206) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4207)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4208) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4209)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4210) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4211)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4212) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4213)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4214) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4215)   e_signull( (EMUSHORT *)c, sign, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4216) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4217) } /* End of _signull() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4218) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4219) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4220) int _is_signull( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4221) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4222)   проверка на `знаковый нуль'.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4223)  ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4224) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4225)   int  ret;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4226)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4227) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4228)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4229) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4230)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4231) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4232)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4233) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4234)   ret = e_issignull( (EMUSHORT *)c, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4235) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4236)   return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4237) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4238) } /* End of _is_signull() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4239) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4240) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4241) void r_neg( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4242) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4243)   negate real number.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4244)  *********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4245) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4246)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4247) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4248)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4249) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4250)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4251) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4252)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4253) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4254)   e_neg( (EMUSHORT *)c, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4255) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4256) } /* End of r_neg() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4257) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4258) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4259) int r_is_neg( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4260) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4261)   проверка на отрицательное число
868b2b66 (kx 2024-12-20 16:11:07 +0300  4262)   (-0.0 здесь отрицательное число).
868b2b66 (kx 2024-12-20 16:11:07 +0300  4263)  **********************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4264) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4265)   int  ret;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4266)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4267) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4268)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4269) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4270)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4271) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4272)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4273) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4274)   ret = e_isneg( (EMUSHORT *)c, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4275) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4276)   return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4277) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4278) } /* End of r_is_neg() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4279) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4280) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4281) void r_abs( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4282) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4283)   сбрасывает знак числа.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4284)  ************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4285) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4286)   int  n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4287) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4288)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4289) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4290)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4291) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4292)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4293) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4294)   e_abs( (EMUSHORT *)c, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4295) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4296) } /* End of r_abs() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4297) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4298) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4299) int r_sign( mpu_real *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4300) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4301)   if( c  >   0.0 ) return +1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4302)   if( c  <   0.0 ) return -1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4303)   if( c == +-0.0 ) return  0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4304) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4305)   if( c == NaNs || c == InD )    return -2;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4306)  ********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4307) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4308)   EMUSHORT  *eic = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4309)            *zero = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4310) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4311)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4312)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4313)   int       ret = -3;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4314) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4315)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4316)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4317) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4318)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4319) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4320)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4321) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4322)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4323) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4324)   /*** Allocate memory for eic, zero . ************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4325)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4326)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4327)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4328)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4329)     return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4330)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4331) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4332)   zero = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4333)   if( !zero )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4334)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4335)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4336) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4337)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4338)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4339)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4340) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4341)     return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4342)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4343)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4344) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4345)   unpack( eic, (EMUSHORT *)c, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4346)   _gen_zero( zero, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4347) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4348)   ret = ei_cmp( eic, zero, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4349) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4350)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4351)   /* FREE zero **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4352)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4353)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4354) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4355)   return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4356) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4357) } /* End of r_sign() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4358) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4359) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4360) int r_cmp( mpu_real *a, mpu_real *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4361) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4362)   if( a  > b ) return +1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4363)   if( a  < b ) return -1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4364)   if( a == b ) return  0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4365) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4366)   if( (a || b) is NaNs || InD )  return -2;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4367)  ********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4368) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4369)   EMUSHORT *eia = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4370)            *eib = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4371) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4372)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4373)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4374)   int       ret = -3;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4375) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4376)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4377)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4378) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4379)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4380) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4381)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4382) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4383)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4384) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4385)   /*** Allocate memory for eia, eib . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4386)   eia = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4387)   if( !eia )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4388)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4389)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4390)     return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4391)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4392) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4393)   eib = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4394)   if( !eib )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4395)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4396)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4397) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4398)     /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4399)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4400)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4401) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4402)     return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4403)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4404)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4405) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4406) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4407)   unpack( eia, (EMUSHORT *)a, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4408)   unpack( eib, (EMUSHORT *)b, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4409) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4410)   ret = ei_cmp( eia, eib, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4411) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4412)   /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4413)   /* FREE eib ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4414)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4415)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4416) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4417)   return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4418) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4419) } /* End of r_cmp() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4420) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4421) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4422) void r_cpy( mpu_real *a, mpu_real *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4423) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4424)   int  i;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4425) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4426)   for( i = 0; i < nb; i++ ) *a++ = *b++;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4427) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4428) } /* End of r_cpy() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4429) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4430) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4431) void r_cvt( mpu_real *a, mpu_real *b, int nb_a, int nb_b )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4432) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4433)   Convert (size type) of real number B to A.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4434)  ********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4435) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4436)   EMUSHORT *eia = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4437)            *eib = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4438)   int       n_bits_a, n_bits_b;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4439)   int       np_a, np_b;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4440) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4441)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4442)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4443) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4444)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4445) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4446)   n_bits_a = nb_a * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4447)   n_bits_b = nb_b * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4448) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4449)   np_a = internal_np( n_bits_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4450)   np_b = internal_np( n_bits_b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4451) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4452)   /*** Allocate memory for eia, eib . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4453)   eia = (EMUSHORT *)__mpu_sbrk( (int)(np_a*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4454)   if( !eia )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4455)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4456)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4457)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4458)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4459) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4460)   eib = (EMUSHORT *)__mpu_sbrk( (int)(np_b*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4461)   if( !eib )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4462)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4463)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4464) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4465)     /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4466)     __mpu_sbrk( -(int)(np_a*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4467)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4468) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4469)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4470)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4471)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4472) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4473)   unpack( eib, (EMUSHORT *)b, n_bits_b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4474) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4475)   ei_convert( (EMUSHORT *)eia, (EMUSHORT *)eib, n_bits_a, n_bits_b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4476) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4477)   pack( (EMUSHORT *)a, eia, n_bits_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4478) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4479)   /* FREE eib ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4480)   __mpu_sbrk( -(int)(np_b*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4481)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4482)   /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4483)   __mpu_sbrk( -(int)(np_a*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4484)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4485) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4486) } /* End of r_cvt() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4487) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4488) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4489) void r_add( mpu_real *c, mpu_real *a, mpu_real *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4490) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4491)   EMUSHORT *eic = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4492)            *eia = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4493)            *eib = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4494)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4495)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4496) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4497)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4498)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4499) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4500)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4501) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4502)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4503) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4504)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4505) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4506)   /*** Allocate memory for eic, eia, eib . ********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4507)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4508)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4509)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4510)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4511)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4512)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4513) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4514)   eia = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4515)   if( !eia )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4516)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4517)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4518) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4519)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4520)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4521)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4522) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4523)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4524)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4525) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4526)   eib = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4527)   if( !eib )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4528)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4529)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4530) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4531)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4532)     /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4533)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4534)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4535) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4536)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4537)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4538)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4539) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4540)   unpack( eia, (EMUSHORT *)a, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4541)   unpack( eib, (EMUSHORT *)b, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4542) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4543)   ei_add( eic, eia, eib, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4544) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4545)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4546) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4547)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4548)   /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4549)   /* FREE eib ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4550)   __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4551)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4552) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4553) } /* End of r_add() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4554) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4555) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4556) void r_sub( mpu_real *c, mpu_real *a, mpu_real *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4557) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4558)   EMUSHORT *eic = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4559)            *eia = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4560)            *eib = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4561)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4562)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4563) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4564)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4565)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4566) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4567)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4568) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4569)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4570) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4571)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4572) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4573)   /*** Allocate memory for eic, eia, eib . ********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4574)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4575)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4576)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4577)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4578)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4579)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4580) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4581)   eia = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4582)   if( !eia )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4583)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4584)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4585) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4586)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4587)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4588)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4589) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4590)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4591)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4592) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4593)   eib = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4594)   if( !eib )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4595)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4596)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4597) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4598)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4599)     /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4600)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4601)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4602) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4603)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4604)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4605)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4606) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4607)   unpack( eia, (EMUSHORT *)a, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4608)   unpack( eib, (EMUSHORT *)b, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4609) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4610)   ei_sub( eic, eia, eib, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4611) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4612)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4613) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4614)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4615)   /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4616)   /* FREE eib ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4617)   __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4618)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4619) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4620) } /* End of r_sub() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4621) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4622) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4623) void r_mul( mpu_real *c, mpu_real *a, mpu_real *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4624) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4625)   EMUSHORT *eic = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4626)            *eia = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4627)            *eib = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4628)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4629)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4630) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4631)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4632)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4633) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4634)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4635) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4636)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4637) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4638)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4639) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4640)   /*** Allocate memory for eic, eia, eib . ********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4641)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4642)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4643)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4644)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4645)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4646)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4647) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4648)   eia = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4649)   if( !eia )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4650)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4651)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4652) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4653)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4654)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4655)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4656) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4657)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4658)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4659) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4660)   eib = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4661)   if( !eib )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4662)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4663)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4664) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4665)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4666)     /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4667)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4668)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4669) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4670)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4671)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4672)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4673) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4674)   unpack( eia, (EMUSHORT *)a, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4675)   unpack( eib, (EMUSHORT *)b, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4676) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4677)   ei_mul( eic, eia, eib, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4678) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4679)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4680) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4681)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4682)   /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4683)   /* FREE eib ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4684)   __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4685)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4686) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4687) } /* End of r_mul() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4688) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4689) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4690) void r_div( mpu_real *c, mpu_real *a, mpu_real *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4691) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4692)   EMUSHORT *eic = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4693)            *eia = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4694)            *eib = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4695)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4696)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4697) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4698)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4699)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4700) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4701)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4702) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4703)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4704) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4705)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4706) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4707)   /*** Allocate memory for eic, eia, eib . ********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4708)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4709)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4710)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4711)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4712)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4713)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4714) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4715)   eia = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4716)   if( !eia )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4717)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4718)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4719) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4720)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4721)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4722)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4723) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4724)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4725)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4726) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4727)   eib = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4728)   if( !eib )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4729)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4730)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4731) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4732)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4733)     /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4734)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4735)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4736) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4737)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4738)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4739)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4740) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4741) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4742)   unpack( eia, (EMUSHORT *)a, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4743)   unpack( eib, (EMUSHORT *)b, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4744) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4745)   ei_div( eic, eia, eib, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4746) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4747)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4748) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4749)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4750)   /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4751)   /* FREE eib ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4752)   __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4753)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4754) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4755) } /* End of r_div() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4756) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4757) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4758) void ltor( mpu_real *r, mpu_int *l, int nb_r, int nb_l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4759) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4760)   Convert long integer number L to real number R.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4761)  *************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4762) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4763)   EMUSHORT *eir = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4764)            *p_l = NULL; /* save *l */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4765)   int       n_bits, n_parts, bytes_in_emushort;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4766)   int       n_bits_target;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4767)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4768) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4769) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4770)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4771)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4772) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4773)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4774) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4775)   bytes_in_emushort = (SIZE_OF_EMUSHORT);
868b2b66 (kx 2024-12-20 16:11:07 +0300  4776)   n_parts           = nb_l / bytes_in_emushort + 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4777)   n_bits_target     = nb_r * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4778)   /******************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  4779)     Берем размер в 2 раза больший, так как для ei_ltor()
868b2b66 (kx 2024-12-20 16:11:07 +0300  4780)     необходимо, чтобы размер целого был меньше мантиссы
868b2b66 (kx 2024-12-20 16:11:07 +0300  4781)     вещественного.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4782)    ******************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4783)   if( nb_r == nb_l ) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4784)     n_bits = nb_r * BITS_PER_BYTE * 2;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4785)   else if( nb_r < nb_l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4786)     n_bits = nb_l * BITS_PER_BYTE * 2;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4787)   else
868b2b66 (kx 2024-12-20 16:11:07 +0300  4788)     n_bits = n_bits_target;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4789) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4790)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4791) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4792)   /*** Allocate memory for eir, p_l . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4793)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4794)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4795)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4796)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4797)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4798)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4799) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4800)   p_l = (EMUSHORT *)__mpu_sbrk( (int)(n_parts*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4801)   if( !p_l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4802)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4803)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4804) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4805)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4806)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4807)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4808) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4809)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4810)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4811)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4812) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4813)   /***********************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  4814)     Операция преобразования (convert) данных CVT.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4815)     Воздействует на флаги: OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4816)     Флаги CF, AF не изменяются.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4817)    ***********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4818)   icvt( (mpu_int *)p_l, l, n_parts*bytes_in_emushort, nb_l );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4819) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4820)   ei_ltor( eir, p_l, n_bits, n_parts );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4821) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4822)   /******************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  4823)     Возвращаем оригинальный размер цели
868b2b66 (kx 2024-12-20 16:11:07 +0300  4824)    ******************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4825)   if( n_bits != n_bits_target )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4826)     ei_convert( eir, eir, n_bits_target, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4827) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4828)   pack( (EMUSHORT *)r, eir, n_bits_target );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4829) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4830)   /* FREE p_l ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4831)   __mpu_sbrk( -(int)(n_parts*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4832)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4833)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4834)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4835)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4836) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4837) } /* End of ltor() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4838) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4839) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4840) void ultor( mpu_real *r, mpu_int *l, int nb_r, int nb_l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4841) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4842)   Convert long integer number L to real number R.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4843)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4844) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4845)   EMUSHORT *eir = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4846)            *p_l = NULL; /* save *l */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4847)   int       n_bits, n_parts, bytes_in_emushort;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4848)   int       n_bits_target;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4849)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4850) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4851)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4852)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4853) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4854)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4855) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4856)   bytes_in_emushort = (SIZE_OF_EMUSHORT);
868b2b66 (kx 2024-12-20 16:11:07 +0300  4857)   n_parts           = nb_l / bytes_in_emushort + 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4858)   n_bits_target     = nb_r * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4859)   /******************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  4860)     Берем размер в 2 раза больший, так как для ei_ltor()
868b2b66 (kx 2024-12-20 16:11:07 +0300  4861)     необходимо, чтобы размер целого был меньше мантиссы
868b2b66 (kx 2024-12-20 16:11:07 +0300  4862)     вещественного.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4863)    ******************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4864)   if( nb_r == nb_l ) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4865)     n_bits = nb_r * BITS_PER_BYTE * 2;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4866)   else if( nb_r < nb_l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4867)     n_bits = nb_l * BITS_PER_BYTE * 2;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4868)   else
868b2b66 (kx 2024-12-20 16:11:07 +0300  4869)     n_bits = n_bits_target;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4870) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4871)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4872) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4873)   /*** Allocate memory for eir, p_l . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4874)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4875)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4876)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4877)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4878)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4879)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4880) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4881)   p_l = (EMUSHORT *)__mpu_sbrk( (int)(n_parts*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4882)   if( !p_l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4883)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4884)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4885) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4886)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4887)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4888)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4889) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4890)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4891)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4892)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4893) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4894)   /***********************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  4895)     Операция преобразования (convert) данных CVT.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4896)     Воздействует на флаги: OF, PF, SF, ZF.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4897)     Флаги CF, AF не изменяются.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4898)    ***********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4899)   icvt( (mpu_int *)p_l, l, n_parts*bytes_in_emushort, nb_l );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4900) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4901)   ei_ultor( eir, p_l, n_bits, n_parts );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4902) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4903)   /******************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  4904)     Возвращаем оригинальный размер цели
868b2b66 (kx 2024-12-20 16:11:07 +0300  4905)    ******************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4906)   if( n_bits != n_bits_target )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4907)     ei_convert( eir, eir, n_bits_target, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4908) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4909)   pack( (EMUSHORT *)r, eir, n_bits_target );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4910) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4911)   /* FREE p_l ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4912)   __mpu_sbrk( -(int)(n_parts*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4913)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4914)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4915)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4916)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4917) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4918) } /* End of ultor() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4919) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4920) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4921) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4922) void rtol_frac( mpu_int *l, mpu_real *frac, mpu_real *r, int nb_l, int nb_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4923) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  4924)   Convert real number R to long integer number L
868b2b66 (kx 2024-12-20 16:11:07 +0300  4925)   and find floating point fractional part *FRAC.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4926)   FRAC my be NULL.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4927)  ************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4928) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4929)   EMUSHORT *eir = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4930)            *p_f = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  4931)            *p_l = NULL; /* save *l */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4932)   int       n_bits, n_parts, bytes_in_emushort;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4933)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4934) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4935)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4936)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4937) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4938)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4939) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4940)   bytes_in_emushort = (SIZE_OF_EMUSHORT);
868b2b66 (kx 2024-12-20 16:11:07 +0300  4941)   n_parts           = nb_l / bytes_in_emushort + 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4942)   n_bits            = nb_r * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4943) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4944)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4945) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4946)   /*** Allocate memory for eir, p_f, p_l . ********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4947)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4948)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4949)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4950)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4951)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4952)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4953) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4954)   p_f = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4955)   if( !p_f )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4956)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4957)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4958) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4959)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4960)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4961)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4962) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4963)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4964)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4965) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4966)   p_l = (EMUSHORT *)__mpu_sbrk( (int)(n_parts*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4967)   if( !p_l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4968)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  4969)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  4970) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4971)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4972)     /* FREE p_f ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4973)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4974)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4975) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4976)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  4977)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  4978)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4979) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4980)   unpack( eir, (EMUSHORT *)r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4981) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4982)   if( frac )
868b2b66 (kx 2024-12-20 16:11:07 +0300  4983)     ei_rtol_frac( p_l, p_f, eir, n_parts, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4984)   else
868b2b66 (kx 2024-12-20 16:11:07 +0300  4985)     ei_rtol_frac( p_l, (EMUSHORT *)0, eir, n_parts, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4986) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4987)   /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  4988)     Операция преобразования (convert) данных CVT.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4989)     Воздействует на флаги: OF, PF, SF, ZF.  Флаги CF, AF не изменяются.
868b2b66 (kx 2024-12-20 16:11:07 +0300  4990)    ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4991)   icvt( l, (mpu_int *)p_l, nb_l, n_parts*bytes_in_emushort );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4992) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4993)   if( frac ) pack( (EMUSHORT *)frac, p_f, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4994) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4995)   /* FREE p_l ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4996)   __mpu_sbrk( -(int)(n_parts*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  4997)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  4998) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  4999)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5000)   /* FREE p_f ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5001)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5002)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5003) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5004) } /* End of rtol_frac() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5005) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5006) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5007) void rtoul_frac( mpu_int *l, mpu_real *frac, mpu_real *r, int nb_l, int nb_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5008) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5009)   Convert real number R to UNSIGNED long integer number L
868b2b66 (kx 2024-12-20 16:11:07 +0300  5010)   and find floating point fractional part *FRAC.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5011)   FRAC my be NULL.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5012)  *********************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5013) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5014)   EMUSHORT *eir = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5015)            *p_f = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5016)            *p_l = NULL; /* save *l */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5017)   int       n_bits, n_parts, bytes_in_emushort;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5018)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5019) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5020)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5021)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5022) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5023)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5024) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5025)   bytes_in_emushort = (SIZE_OF_EMUSHORT);
868b2b66 (kx 2024-12-20 16:11:07 +0300  5026)   n_parts           = nb_l / bytes_in_emushort + 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5027)   n_bits            = nb_r * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5028) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5029)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5030) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5031)   /*** Allocate memory for eir, p_f, p_l . ********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5032)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5033)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5034)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5035)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5036)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5037)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5038) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5039)   p_f = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5040)   if( !p_f )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5041)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5042)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5043) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5044)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5045)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5046)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5047) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5048)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5049)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5050) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5051)   p_l = (EMUSHORT *)__mpu_sbrk( (int)(n_parts*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5052)   if( !p_l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5053)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5054)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5055) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5056)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5057)     /* FREE p_f ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5058)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5059)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5060) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5061)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5062)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5063)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5064) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5065)   unpack( eir, (EMUSHORT *)r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5066) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5067)   if( frac )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5068)     ei_rtoul_frac( p_l, p_f, eir, n_parts, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5069)   else
868b2b66 (kx 2024-12-20 16:11:07 +0300  5070)     ei_rtoul_frac( p_l, (EMUSHORT *)0, eir, n_parts, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5071) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5072)   /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  5073)     Операция преобразования (convert) данных CVT.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5074)     Воздействует на флаги: OF, PF, SF, ZF.  Флаги CF, AF не изменяются.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5075)    ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5076)   icvt( l, (mpu_int *)p_l, nb_l, n_parts*bytes_in_emushort );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5077) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5078)   if( frac ) pack( (EMUSHORT *)frac, p_f, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5079) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5080)   /* FREE p_l ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5081)   __mpu_sbrk( -(int)(n_parts*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5082)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5083) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5084)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5085)   /* FREE p_f ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5086)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5087)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5088) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5089) } /* End of rtoul_frac() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5090) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5091) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5092) void r_remain( mpu_real *r, mpu_real *a, mpu_real *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5093) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5094)   R = remainder after dividing A by B.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5095)   Sign of remainder == Sign of quotient.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5096)  *****************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5097) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5098)   EMUSHORT *eir = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5099)            *eia = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5100)            *eib = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5101)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5102)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5103) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5104)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5105)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5106) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5107)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5108) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5109)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5110) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5111)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5112) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5113)   /*** Allocate memory for eir, eia, eib . ********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5114)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5115)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5116)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5117)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5118)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5119)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5120) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5121)   eia = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5122)   if( !eia )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5123)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5124)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5125) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5126)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5127)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5128)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5129) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5130)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5131)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5132) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5133)   eib = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5134)   if( !eib )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5135)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5136)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5137) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5138)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5139)     /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5140)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5141)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5142) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5143)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5144)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5145)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5146) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5147)   unpack( eia, (EMUSHORT *)a, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5148)   unpack( eib, (EMUSHORT *)b, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5149) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5150)   ei_remain( eir, (EMUSHORT *)0, eia, eib, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5151) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5152)   pack( (EMUSHORT *)r, eir, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5153) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5154)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5155)   /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5156)   /* FREE eib ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5157)   __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5158)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5159) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5160) } /* End of r_remain() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5161) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5162) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5163) void r_floor( mpu_real *c, mpu_real *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5164) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5165)   Return C = largest integer not greater
868b2b66 (kx 2024-12-20 16:11:07 +0300  5166)   than A (truncated toward minus infinity).
868b2b66 (kx 2024-12-20 16:11:07 +0300  5167)   Возвращает C = наиболшее (ближайшее) целое
868b2b66 (kx 2024-12-20 16:11:07 +0300  5168)   не большее чем A (срезает в сторону
868b2b66 (kx 2024-12-20 16:11:07 +0300  5169)   минус бесконечности).
868b2b66 (kx 2024-12-20 16:11:07 +0300  5170)  ********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5171) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5172)   EMUSHORT *eic = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5173)            *eia = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5174)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5175)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5176) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5177)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5178)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5179) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5180)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5181) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5182)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5183) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5184)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5185) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5186)   /*** Allocate memory for eic, eia . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5187)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5188)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5189)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5190)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5191)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5192)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5193) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5194)   eia = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5195)   if( !eia )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5196)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5197)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5198) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5199)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5200)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5201)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5202) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5203)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5204)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5205)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5206) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5207)   unpack( eia, (EMUSHORT *)a, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5208) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5209)   ei_floor( eic, eia, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5210) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5211)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5212) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5213)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5214)   /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5215)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5216)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5217) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5218) } /* End of r_floor() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5219) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5220) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5221) void r_ceil( mpu_real *c, mpu_real *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5222) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5223)   Return C = neargest integer not smaller
868b2b66 (kx 2024-12-20 16:11:07 +0300  5224)   than A (truncated toward plus infinity).
868b2b66 (kx 2024-12-20 16:11:07 +0300  5225)   Возвращает C = наименьшее (ближайшее) целое
868b2b66 (kx 2024-12-20 16:11:07 +0300  5226)   не меньшее чем A (срезает в сторону
868b2b66 (kx 2024-12-20 16:11:07 +0300  5227)   плюс бесконечности).
868b2b66 (kx 2024-12-20 16:11:07 +0300  5228)  **********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5229) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5230)   EMUSHORT *eic = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5231)            *eia = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5232)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5233)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5234) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5235)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5236)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5237) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5238)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5239) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5240)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5241) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5242)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5243) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5244)   /*** Allocate memory for eic, eia . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5245)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5246)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5247)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5248)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5249)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5250)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5251) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5252)   eia = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5253)   if( !eia )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5254)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5255)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5256) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5257)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5258)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5259)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5260) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5261)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5262)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5263)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5264) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5265)   unpack( eia, (EMUSHORT *)a, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5266) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5267)   ei_ceil( eic, eia, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5268) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5269)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5270) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5271)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5272)   /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5273)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5274)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5275) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5276) } /* End of r_ceil() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5277) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5278) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5279) void r_round( mpu_real *c, mpu_real *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5280) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5281)   Return C = nearest integer to A, as FLOOR( A + 0.5 ).
868b2b66 (kx 2024-12-20 16:11:07 +0300  5282)  *******************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5283) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5284)   EMUSHORT *eic = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5285)            *eia = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5286)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5287)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5288) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5289)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5290)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5291) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5292)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5293) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5294)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5295) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5296)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5297) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5298)   /*** Allocate memory for eic, eia . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5299)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5300)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5301)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5302)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5303)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5304)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5305) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5306)   eia = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5307)   if( !eia )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5308)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5309)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5310) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5311)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5312)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5313)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5314) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5315)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5316)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5317)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5318) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5319)   unpack( eia, (EMUSHORT *)a, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5320) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5321)   ei_round( eic, eia, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5322) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5323)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5324) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5325)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5326)   /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5327)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5328)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5329) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5330) } /* End of r_round() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5331) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5332) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5333) void r_frexp( mpu_real *s, mpu_int *lexp, mpu_real *r, int nb_l, int nb_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5334) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5335)   Return S and LEXP such that
868b2b66 (kx 2024-12-20 16:11:07 +0300  5336)   S * 2^LEXP = R and 0.5 <= S < 1.0.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5337)   For example, 1.1 = 0.55 * 2^1.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5338)   ================================================
868b2b66 (kx 2024-12-20 16:11:07 +0300  5339)   Функция разбивает число R на мантиссу S и
868b2b66 (kx 2024-12-20 16:11:07 +0300  5340)   експоненту LEXP таким образом, что абсолютное
868b2b66 (kx 2024-12-20 16:11:07 +0300  5341)   значение S больше или равно 0.5 и меньше 1.0
868b2b66 (kx 2024-12-20 16:11:07 +0300  5342)   и R == S * 2^LEXP.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5343)   Например, 1.1 = 0.55 * 2^1.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5344)   ================================================
868b2b66 (kx 2024-12-20 16:11:07 +0300  5345)   NOTE:
868b2b66 (kx 2024-12-20 16:11:07 +0300  5346)   sizeof( lexp ) >= _sizeof_exp( unsigned nb_r ).
868b2b66 (kx 2024-12-20 16:11:07 +0300  5347)  **************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5348) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5349)   EMUSHORT *eir = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5350)            *p_s = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5351)            *p_l = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5352)   int       n_bits, n_parts, bytes_in_emushort;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5353)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5354) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5355)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5356)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5357) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5358)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5359) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5360)   bytes_in_emushort = (SIZE_OF_EMUSHORT);
868b2b66 (kx 2024-12-20 16:11:07 +0300  5361)   n_parts           = nb_l / bytes_in_emushort + 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5362)   n_bits            = nb_r * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5363) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5364)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5365) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5366)   /*** Allocate memory for eir, p_s, p_l . ********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5367)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5368)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5369)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5370)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5371)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5372)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5373) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5374)   p_s = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5375)   if( !p_s )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5376)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5377)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5378) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5379)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5380)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5381)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5382) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5383)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5384)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5385) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5386)   p_l = (EMUSHORT *)__mpu_sbrk( (int)(n_parts*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5387)   if( !p_l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5388)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5389)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5390) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5391)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5392)     /* FREE p_s ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5393)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5394)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5395) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5396)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5397)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5398)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5399) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5400)   unpack( eir, (EMUSHORT *)r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5401) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5402)   ei_frexp( p_s, p_l, eir, n_parts, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5403) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5404)   /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  5405)     Операция преобразования (convert) данных CVT.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5406)     Воздействует на флаги: OF, PF, SF, ZF.  Флаги CF, AF не изменяются.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5407)    ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5408)   icvt( lexp, (mpu_int *)p_l, nb_l, n_parts*bytes_in_emushort );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5409) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5410)   pack( (EMUSHORT *)s, p_s, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5411) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5412)   /* FREE p_l ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5413)   __mpu_sbrk( -(int)(n_parts*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5414)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5415) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5416)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5417)   /* FREE p_s ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5418)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5419)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5420) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5421) } /* End of r_frexp() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5422) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5423) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5424) void r_ldexp( mpu_real *c, mpu_real *r, mpu_int *lpwr2, int nb_r, int nb_l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5425) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5426)   Return C = R * 2^PWR2.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5427)   =====================================================
868b2b66 (kx 2024-12-20 16:11:07 +0300  5428)   Функция вычисляет значение C как
868b2b66 (kx 2024-12-20 16:11:07 +0300  5429)   R умноженное на 2 в степени LPWR2.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5430)   =====================================================
868b2b66 (kx 2024-12-20 16:11:07 +0300  5431)   NOTE:
868b2b66 (kx 2024-12-20 16:11:07 +0300  5432)   sizeof( lpwr2 ) <= _sizeof_exp( unsigned nb_r ) + 1.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5433)  *******************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5434) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5435)   EMUSHORT *eir = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5436)            *p_c = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5437)            *p_l = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5438)   int       n_bits, n_parts, bytes_in_emushort;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5439)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5440) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5441)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5442)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5443) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5444)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5445) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5446)   bytes_in_emushort = (SIZE_OF_EMUSHORT);
868b2b66 (kx 2024-12-20 16:11:07 +0300  5447)   n_parts           = nb_l / bytes_in_emushort + 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5448)   n_bits            = nb_r * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5449) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5450)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5451) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5452)   /*** Allocate memory for eir, p_c, p_l . ********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5453)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5454)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5455)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5456)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5457)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5458)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5459) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5460)   p_c = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5461)   if( !p_c )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5462)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5463)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5464) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5465)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5466)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5467)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5468) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5469)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5470)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5471) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5472)   p_l = (EMUSHORT *)__mpu_sbrk( (int)(n_parts*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5473)   if( !p_l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5474)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5475)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5476) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5477)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5478)     /* FREE p_c ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5479)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5480)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5481) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5482)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5483)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5484)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5485) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5486)   unpack( eir, (EMUSHORT *)r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5487)   /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  5488)     Операция преобразования (convert) данных CVT.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5489)     Воздействует на флаги: OF, PF, SF, ZF.  Флаги CF, AF не изменяются.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5490)    ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5491)   icvt( (mpu_int *)p_l, lpwr2, n_parts*bytes_in_emushort, nb_l );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5492) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5493)   ei_ldexp( p_c, p_l, eir, n_parts, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5494) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5495)   pack( (EMUSHORT *)c, p_c, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5496) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5497)   /* FREE p_l ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5498)   __mpu_sbrk( -(int)(n_parts*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5499)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5500) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5501)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5502)   /* FREE p_c ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5503)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5504)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5505) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5506) } /* End of r_ldexp() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5507) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5508) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5509) void r_logb( mpu_int *lbase2, mpu_real *r, int nb_l, int nb_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5510) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5511)   Return Lbase2 = the base 2 signed integral
868b2b66 (kx 2024-12-20 16:11:07 +0300  5512)   Exponent of R.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5513)   ================================================
868b2b66 (kx 2024-12-20 16:11:07 +0300  5514)   Функция вычисляет значение Lbase2 как
868b2b66 (kx 2024-12-20 16:11:07 +0300  5515)   знаковую интегральную экспоненту по основанию 2
868b2b66 (kx 2024-12-20 16:11:07 +0300  5516)   вещественного числа R.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5517)   ================================================
868b2b66 (kx 2024-12-20 16:11:07 +0300  5518)   NOTE:
868b2b66 (kx 2024-12-20 16:11:07 +0300  5519)    sizeof( lexp ) >= _sizeof_exp( unsigned nb_r ).
868b2b66 (kx 2024-12-20 16:11:07 +0300  5520)  **************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5521) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5522)   EMUSHORT *eir = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5523)            *p_l = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5524)   int       n_bits, n_parts, bytes_in_emushort;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5525)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5526) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5527)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5528)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5529) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5530)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5531) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5532)   bytes_in_emushort = (SIZE_OF_EMUSHORT);
868b2b66 (kx 2024-12-20 16:11:07 +0300  5533)   n_parts           = nb_l / bytes_in_emushort + 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5534)   n_bits            = nb_r * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5535) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5536)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5537) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5538)   /*** Allocate memory for eir, p_l . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5539)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5540)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5541)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5542)      /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5543)      return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5544)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5545) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5546)   p_l = (EMUSHORT *)__mpu_sbrk( (int)(n_parts*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5547)   if( !p_l )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5548)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5549)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5550) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5551)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5552)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5553)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5554) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5555)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5556)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5557)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5558) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5559)   unpack( eir, (EMUSHORT *)r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5560) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5561)   ei_logb( p_l, eir, n_parts, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5562) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5563)   /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  5564)     Операция преобразования (convert) данных CVT.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5565)     Воздействует на флаги: OF, PF, SF, ZF.  Флаги CF, AF не изменяются.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5566)    ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5567)   icvt( lbase2, (mpu_int *)p_l, nb_l, n_parts*bytes_in_emushort );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5568) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5569)   /* FREE p_l ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5570)   __mpu_sbrk( -(int)(n_parts*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5571)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5572)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5573)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5574)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5575) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5576) } /* End of r_logb() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5577) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5578) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5579) void r_modf( mpu_real *fract, mpu_real *integer, mpu_real *r, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5580) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5581)   Returns fractional part of R (in *FRACT) (with sign of R),
868b2b66 (kx 2024-12-20 16:11:07 +0300  5582)   stores integer part in *INTEGER (as real number).
868b2b66 (kx 2024-12-20 16:11:07 +0300  5583)   ===============================================================
868b2b66 (kx 2024-12-20 16:11:07 +0300  5584)   Функция вычисляет дробную и целую части числа R.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5585)   ===============================================================
868b2b66 (kx 2024-12-20 16:11:07 +0300  5586)  *****************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5587) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5588)   EMUSHORT  *eir = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5589)             *eif = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5590)             *eii = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5591)            *zero = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5592)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5593)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5594) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5595)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5596)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5597) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5598)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5599) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5600)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5601) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5602)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5603) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5604)   /*** Allocate memory for eir, eif, eii, zero . **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5605)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5606)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5607)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5608)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5609)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5610)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5611) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5612)   eif = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5613)   if( !eif )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5614)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5615)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5616) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5617)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5618)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5619)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5620) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5621)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5622)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5623) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5624)   eii = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5625)   if( !eii )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5626)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5627)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5628) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5629)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5630)     /* FREE eif ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5631)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5632)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5633) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5634)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5635)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5636) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5637)   zero = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5638)   if( !zero )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5639)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5640)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5641) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5642)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5643)     /* FREE eif ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5644)     /* FREE eii ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5645)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5646)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5647) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5648)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5649)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5650)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5651) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5652)   _gen_zero( zero, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5653) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5654)   unpack( eir, (EMUSHORT *)r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5655) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5656)   ei_copy( eif, eir, n_bits ); 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5657)   ei_abs( eif, n_bits );           /* eif = abs( eir );   */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5658) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5659)   ei_floor( eii, eif, n_bits );    /* eii = floor( eif ); */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5660) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5661)   ei_sub( eif, eif, eii, n_bits ); /* eif -= eii;         */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5662) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5663)   if( ei_cmp( eir, zero, n_bits ) < 0 )  /* if( eir < 0 ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5664)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5665)     ei_neg( eii, n_bits ); /* eii = -eii; */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5666)     ei_neg( eif, n_bits ); /* eif = -eif; */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5667)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5668) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5669)   pack( (EMUSHORT *)fract,   eif, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5670)   pack( (EMUSHORT *)integer, eii, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5671) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5672)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5673)   /* FREE eif ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5674)   /* FREE eii ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5675)   /* FREE zero **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5676)   __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5677)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5678) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5679) } /* End of r_modf() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5680) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5681) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5682) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  5683)                    REAL MATHEMATIC OPERATIONS
868b2b66 (kx 2024-12-20 16:11:07 +0300  5684)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5685) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5686) void r_sqrt( mpu_real *c, mpu_real *a, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5687) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5688)   Longhand SQUARE ROOT routine.
868b2b66 (kx 2024-12-20 16:11:07 +0300  5689)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5690) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5691)   EMUSHORT *eic = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5692)            *eia = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5693)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5694)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5695) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5696)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5697)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5698) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5699)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5700) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5701)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5702) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5703)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5704) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5705)   /*** Allocate memory for eic, eia . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5706)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5707)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5708)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5709)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5710)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5711)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5712) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5713)   eia = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5714)   if( !eia )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5715)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5716)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5717) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5718)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5719)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5720)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5721) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5722)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5723)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5724)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5725) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5726)   unpack( eia, (EMUSHORT *)a, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5727) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5728)   ei_sqrt( eic, eia, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5729) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5730)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5731) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5732)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5733)   /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5734)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5735)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5736) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5737) } /* End of r_sqrt() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5738) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5739) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5740) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  5741)   BEGIN: __MPU_MATH.H
868b2b66 (kx 2024-12-20 16:11:07 +0300  5742)  **/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5743) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5744) void r_sin( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5745) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5746)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5747) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5748)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5749)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5750)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5751)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5752) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5753)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5754)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5755) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5756)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5757) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5758)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5759) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5760)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5761) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5762)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5763)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5764)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5765)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5766)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5767)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5768)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5769) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5770)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5771)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5772)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5773)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5774) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5775)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5776)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5777)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5778) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5779)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5780)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5781)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5782) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5783)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5784) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5785)   ei_sin( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5786) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5787)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5788) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5789)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5790)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5791)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5792)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5793) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5794) } /* End of r_sin() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5795) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5796) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5797) void r_cos( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5798) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5799)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5800) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5801)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5802)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5803)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5804)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5805) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5806)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5807)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5808) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5809)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5810) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5811)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5812) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5813)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5814) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5815)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5816)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5817)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5818)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5819)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5820)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5821)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5822) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5823)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5824)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5825)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5826)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5827) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5828)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5829)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5830)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5831) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5832)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5833)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5834)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5835) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5836)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5837) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5838)   ei_cos( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5839) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5840)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5841) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5842)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5843)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5844)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5845)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5846) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5847) } /* End of r_cos() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5848) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5849) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5850) void r_tan( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5851) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5852)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5853) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5854)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5855)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5856)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5857)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5858) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5859)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5860)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5861) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5862)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5863) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5864)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5865) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5866)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5867) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5868)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5869)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5870)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5871)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5872)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5873)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5874)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5875) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5876)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5877)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5878)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5879)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5880) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5881)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5882)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5883)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5884) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5885)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5886)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5887)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5888) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5889)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5890) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5891)   ei_tan( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5892) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5893)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5894) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5895)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5896)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5897)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5898)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5899) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5900) } /* End of r_tan() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5901) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5902) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5903) void r_log1p( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5904) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5905)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5906) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5907)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5908)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5909)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5910)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5911) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5912)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5913)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5914) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5915)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5916) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5917)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5918) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5919)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5920) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5921)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5922)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5923)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5924)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5925)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5926)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5927)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5928) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5929)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5930)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5931)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5932)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5933) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5934)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5935)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5936)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5937) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5938)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5939)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5940)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5941) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5942)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5943) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5944)   ei_log1p( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5945) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5946)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5947) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5948)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5949)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5950)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5951)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5952) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5953) } /* End of r_log1p() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5954) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5955) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5956) void r_log( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5957) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  5958)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5959) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5960)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  5961)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5962)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5963)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5964) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5965)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5966)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5967) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5968)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5969) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5970)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5971) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5972)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5973) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5974)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5975)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5976)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5977)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5978)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5979)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5980)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5981) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5982)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5983)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  5984)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  5985)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  5986) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5987)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5988)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5989)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5990) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5991)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  5992)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  5993)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  5994) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5995)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5996) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5997)   ei_log( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  5998) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  5999)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6000) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6001)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6002)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6003)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6004)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6005) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6006) } /* End of r_log() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6007) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6008) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6009) void r_log10( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6010) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6011)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6012) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6013)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6014)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6015)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6016)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6017) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6018)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6019)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6020) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6021)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6022) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6023)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6024) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6025)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6026) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6027)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6028)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6029)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6030)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6031)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6032)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6033)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6034) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6035)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6036)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6037)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6038)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6039) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6040)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6041)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6042)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6043) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6044)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6045)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6046)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6047) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6048)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6049) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6050)   ei_log10( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6051) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6052)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6053) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6054)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6055)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6056)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6057)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6058) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6059) } /* End of r_log10() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6060) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6061) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6062) void r_log2( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6063) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6064)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6065) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6066)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6067)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6068)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6069)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6070) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6071)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6072)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6073) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6074)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6075) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6076)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6077) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6078)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6079) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6080)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6081)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6082)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6083)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6084)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6085)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6086)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6087) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6088)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6089)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6090)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6091)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6092) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6093)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6094)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6095)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6096) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6097)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6098)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6099)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6100) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6101)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6102) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6103)   ei_log2( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6104) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6105)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6106) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6107)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6108)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6109)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6110)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6111) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6112) } /* End of r_log2() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6113) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6114) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6115) void r_expm1( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6116) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6117)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6118) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6119)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6120)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6121)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6122)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6123) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6124)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6125)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6126) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6127)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6128) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6129)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6130) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6131)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6132) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6133)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6134)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6135)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6136)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6137)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6138)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6139)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6140) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6141)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6142)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6143)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6144)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6145) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6146)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6147)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6148)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6149) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6150)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6151)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6152)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6153) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6154)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6155) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6156)   ei_expm1( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6157) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6158)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6159) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6160)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6161)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6162)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6163)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6164) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6165) } /* End of r_expm1() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6166) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6167) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6168) void r_exp( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6169) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6170)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6171) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6172)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6173)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6174)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6175)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6176) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6177)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6178)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6179) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6180)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6181) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6182)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6183) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6184)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6185) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6186)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6187)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6188)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6189)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6190)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6191)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6192)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6193) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6194)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6195)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6196)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6197)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6198) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6199)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6200)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6201)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6202) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6203)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6204)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6205)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6206) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6207)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6208) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6209)   ei_exp( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6210) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6211)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6212) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6213)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6214)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6215)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6216)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6217) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6218) } /* End of r_exp() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6219) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6220) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6221) void r_atan2( mpu_real *c, mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6222) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6223)   rATAN2( Y,X ) RETURN ARG(EIX+iEIY); ARG(x+iy) = arctan(y/x).
868b2b66 (kx 2024-12-20 16:11:07 +0300  6224)  ****************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6225) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6226)   EMUSHORT *eic = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6227)            *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6228)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6229)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6230)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6231) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6232)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6233)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6234) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6235)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6236) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6237)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6238) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6239)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6240) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6241)   /*** Allocate memory for eic, eiy, eix . ********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6242)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6243)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6244)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6245)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6246)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6247)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6248) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6249)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6250)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6251)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6252)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6253) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6254)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6255)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6256)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6257) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6258)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6259)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6260) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6261)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6262)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6263)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6264)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6265) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6266)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6267)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6268)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6269)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6270) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6271)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6272)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6273)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6274) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6275)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6276)   unpack( eiy, (EMUSHORT *)y, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6277) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6278)   ei_atan2( eic, eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6279) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6280)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6281) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6282)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6283)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6284)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6285)   __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6286)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6287) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6288) } /* End of r_atan2() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6289) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6290) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6291) void r_sinh( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6292) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6293)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6294) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6295)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6296)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6297)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6298)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6299) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6300)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6301)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6302) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6303)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6304) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6305)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6306) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6307)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6308) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6309)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6310)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6311)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6312)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6313)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6314)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6315)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6316) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6317)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6318)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6319)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6320)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6321) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6322)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6323)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6324)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6325) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6326)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6327)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6328)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6329) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6330)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6331) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6332)   ei_sinh( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6333) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6334)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6335) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6336)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6337)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6338)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6339)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6340) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6341) } /* End of r_sinh() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6342) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6343) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6344) void r_cosh( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6345) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6346)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6347) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6348)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6349)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6350)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6351)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6352) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6353)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6354)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6355) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6356)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6357) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6358)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6359) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6360)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6361) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6362)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6363)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6364)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6365)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6366)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6367)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6368)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6369) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6370)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6371)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6372)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6373)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6374) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6375)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6376)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6377)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6378) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6379)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6380)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6381)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6382) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6383)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6384) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6385)   ei_cosh( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6386) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6387)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6388) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6389)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6390)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6391)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6392)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6393) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6394) } /* End of r_cosh() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6395) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6396) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6397) void r_tanh( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6398) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6399)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6400) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6401)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6402)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6403)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6404)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6405) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6406)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6407)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6408) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6409)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6410) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6411)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6412) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6413)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6414) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6415)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6416)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6417)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6418)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6419)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6420)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6421)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6422) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6423)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6424)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6425)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6426)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6427) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6428)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6429)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6430)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6431) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6432)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6433)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6434)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6435) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6436)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6437) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6438)   ei_tanh( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6439) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6440)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6441) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6442)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6443)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6444)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6445)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6446) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6447) } /* End of r_tanh() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6448) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6449) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6450) void r_asinh( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6451) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6452)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6453) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6454)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6455)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6456)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6457)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6458) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6459)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6460)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6461) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6462)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6463) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6464)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6465) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6466)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6467) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6468)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6469)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6470)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6471)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6472)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6473)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6474)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6475) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6476)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6477)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6478)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6479)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6480) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6481)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6482)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6483)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6484) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6485)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6486)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6487)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6488) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6489)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6490) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6491)   ei_asinh( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6492) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6493)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6494) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6495)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6496)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6497)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6498)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6499) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6500) } /* End of r_asinh() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6501) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6502) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6503) void r_acosh( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6504) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6505)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6506) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6507)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6508)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6509)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6510)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6511) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6512)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6513)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6514) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6515)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6516) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6517)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6518) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6519)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6520) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6521)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6522)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6523)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6524)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6525)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6526)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6527)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6528) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6529)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6530)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6531)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6532)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6533) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6534)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6535)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6536)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6537) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6538)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6539)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6540)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6541) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6542)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6543) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6544)   ei_acosh( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6545) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6546)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6547) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6548)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6549)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6550)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6551)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6552) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6553) } /* End of r_acosh() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6554) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6555) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6556) void r_atanh( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6557) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6558)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6559) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6560)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6561)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6562)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6563)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6564) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6565)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6566)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6567) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6568)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6569) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6570)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6571) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6572)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6573) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6574)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6575)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6576)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6577)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6578)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6579)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6580)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6581) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6582)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6583)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6584)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6585)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6586) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6587)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6588)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6589)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6590) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6591)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6592)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6593)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6594) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6595)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6596) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6597)   ei_atanh( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6598) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6599)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6600) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6601)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6602)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6603)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6604)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6605) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6606) } /* End of r_atanh() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6607) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6608) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6609) void r_asin( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6610) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6611)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6612) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6613)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6614)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6615)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6616)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6617) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6618)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6619)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6620) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6621)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6622) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6623)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6624) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6625)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6626) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6627)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6628)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6629)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6630)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6631)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6632)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6633)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6634) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6635)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6636)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6637)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6638)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6639) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6640)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6641)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6642)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6643) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6644)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6645)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6646)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6647) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6648)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6649) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6650)   ei_asin( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6651) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6652)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6653) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6654)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6655)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6656)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6657)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6658) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6659) } /* End of r_asin() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6660) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6661) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6662) void r_acos( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6663) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6664)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6665) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6666)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6667)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6668)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6669)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6670) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6671)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6672)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6673) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6674)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6675) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6676)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6677) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6678)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6679) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6680)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6681)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6682)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6683)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6684)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6685)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6686)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6687) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6688)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6689)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6690)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6691)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6692) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6693)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6694)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6695)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6696) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6697)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6698)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6699)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6700) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6701)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6702) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6703)   ei_acos( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6704) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6705)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6706) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6707)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6708)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6709)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6710)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6711) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6712) } /* End of r_acos() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6713) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6714) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6715) void r_atan( mpu_real *y, mpu_real *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6716) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6717)  *******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6718) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6719)   EMUSHORT *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6720)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6721)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6722)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6723) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6724)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6725)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6726) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6727)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6728) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6729)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6730) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6731)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6732) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6733)   /*** Allocate memory for eiy, eix . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6734)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6735)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6736)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6737)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6738)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6739)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6740) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6741)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6742)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6743)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6744)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6745) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6746)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6747)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6748)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6749) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6750)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6751)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6752)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6753) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6754)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6755) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6756)   ei_atan( eiy, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6757) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6758)   pack( (EMUSHORT *)y, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6759) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6760)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6761)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6762)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6763)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6764) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6765) } /* End of r_atan() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6766) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6767) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6768) void r_pow( mpu_real *c, mpu_real *x, mpu_real *y, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6769) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6770)   rPOW( C, X, Y) RETURN C = X^Y.
868b2b66 (kx 2024-12-20 16:11:07 +0300  6771)  ********************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6772) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6773)   EMUSHORT *eic = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6774)            *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6775)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6776)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6777)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6778) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6779)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6780)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6781) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6782)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6783) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6784)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6785) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6786)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6787) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6788)   /*** Allocate memory for eic, eiy, eix . ********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6789)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6790)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6791)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6792)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6793)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6794)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6795) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6796)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6797)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6798)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6799)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6800) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6801)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6802)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6803)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6804) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6805)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6806)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6807) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6808)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6809)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6810)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6811)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6812) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6813)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6814)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6815)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6816)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6817) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6818)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6819)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6820)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6821) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6822)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6823)   unpack( eiy, (EMUSHORT *)y, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6824) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6825)   ei_pow( eic, eix, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6826) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6827)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6828) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6829)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6830)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6831)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6832)   __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6833)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6834) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6835) } /* End of r_pow() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6836) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6837) /**
868b2b66 (kx 2024-12-20 16:11:07 +0300  6838)   END: __MPU_MATH.H
868b2b66 (kx 2024-12-20 16:11:07 +0300  6839)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6840) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6841) void r_hypot( mpu_real *c, mpu_real *x, mpu_real *y, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6842) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  6843)   rHYPOT( C, X, Y ) RETURN C = sqrt(X*X + Y*Y).
868b2b66 (kx 2024-12-20 16:11:07 +0300  6844)  ***********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6845) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6846)   EMUSHORT *eic = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6847)            *eiy = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6848)            *eix = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6849)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6850)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6851) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6852)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6853)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6854) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6855)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6856) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6857)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6858) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6859)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6860) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6861)   /*** Allocate memory for eic, eiy, eix . ********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6862)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6863)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6864)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6865)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6866)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6867)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6868) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6869)   eiy = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6870)   if( !eiy )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6871)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6872)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6873) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6874)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6875)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6876)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6877) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6878)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6879)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6880) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6881)   eix = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6882)   if( !eix )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6883)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6884)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6885) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6886)     /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6887)     /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6888)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6889)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6890) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6891)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6892)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6893)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6894) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6895)   unpack( eix, (EMUSHORT *)x, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6896)   unpack( eiy, (EMUSHORT *)y, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6897) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6898)   ei_mul( eix, eix, eix, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6899)   ei_mul( eiy, eiy, eiy, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6900)   ei_add( eic, eix, eiy, n_bits ); 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6901)   ei_sqrt( eic, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6902) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6903)   pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6904) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6905)   /* FREE eix ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6906)   /* FREE eiy ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6907)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6908)   __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6909)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6910) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6911) } /* End of r_hypot() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6912) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6913) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6914) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  6915)   BEGIN: __MPU_IOREAL.H
868b2b66 (kx 2024-12-20 16:11:07 +0300  6916)  **/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6917) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6918) /*************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  6919)   ПРИМЕРЫ числовых констант для ascii_to_real():
868b2b66 (kx 2024-12-20 16:11:07 +0300  6920)     real:
868b2b66 (kx 2024-12-20 16:11:07 +0300  6921)       +NaN; nan; nAn; naN; Nan; и т.д.          ==  NaN;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6922)       -i; +inf; inf;                            ==  inf;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6923)       ind; -ind;                любыми буквами; == -ind;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6924)       -3.14e+17;  + 3.14e-17;  +.e;  .e;   e;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6925)       -3.14E+17;  + 3.14E-17;  +.E;  .E;  +E;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6926)       .;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6927)     ПО ПОВОДУ inf:
868b2b66 (kx 2024-12-20 16:11:07 +0300  6928)       можно писать и infinity но функция
868b2b66 (kx 2024-12-20 16:11:07 +0300  6929)       rASCII_TO_REAL() будет проверять только
868b2b66 (kx 2024-12-20 16:11:07 +0300  6930)       первые три буквы, => все равно что писать
868b2b66 (kx 2024-12-20 16:11:07 +0300  6931)       infinity или information (NOTE: отбрасывание 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6932)       ненужных символов будет возложено на
868b2b66 (kx 2024-12-20 16:11:07 +0300  6933)       функции более высокого уровня).
868b2b66 (kx 2024-12-20 16:11:07 +0300  6934)     real_part only:
868b2b66 (kx 2024-12-20 16:11:07 +0300  6935)       -3.14r+17;  + 3.14r-17;  +.r;  .r;  -r;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6936)       -3.14R+17;  + 3.14R-17;  +.R;  .R;   R;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6937)     imaginary only:
868b2b66 (kx 2024-12-20 16:11:07 +0300  6938)       -3.14j+17;  + 3.14j-17;  +.j;  .j;   j;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6939)       -3.14J+17;  + 3.14J-17;  +.J;  .J;  -J;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6940) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6941)     ВЕЩЕСТВЕННЫЕ И МНИМЫЕ БЕСКОНЕЧНОСТИ
868b2b66 (kx 2024-12-20 16:11:07 +0300  6942)     И НЕЧИСЛА:
868b2b66 (kx 2024-12-20 16:11:07 +0300  6943) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6944)      infinity, inf, NaN, nan, ind, -ind,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6945)      inf_e, NaN_e, -ind_e,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6946)      inf_E, NaN_E, -ind_E, и т.д.
868b2b66 (kx 2024-12-20 16:11:07 +0300  6947)      ВСЕ СУТЬ:             _LONGHAND_REAL_NUMBER
868b2b66 (kx 2024-12-20 16:11:07 +0300  6948) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6949)      inf_r, NaN_r, -ind_r,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6950)      inf_R, NaN_R, -ind_R, и т.д.
868b2b66 (kx 2024-12-20 16:11:07 +0300  6951)      ВСЕ СУТЬ:             _REAL_PART_OF_COMPLEX
868b2b66 (kx 2024-12-20 16:11:07 +0300  6952) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6953)      inf_j, NaN_j, -ind_j,
868b2b66 (kx 2024-12-20 16:11:07 +0300  6954)      inf_J, NaN_J, -ind_J, и т.д.
868b2b66 (kx 2024-12-20 16:11:07 +0300  6955)      ВСЕ СУТЬ:             _IMAGINARY_OF_COMPLEX
868b2b66 (kx 2024-12-20 16:11:07 +0300  6956)  *************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6957) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6958) int ascii_to_real( mpu_real *c, __mpu_char8_t *s, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6959) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6960)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6961)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6962)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6963)   int       ret = _ASCII_TO_REAL_ERROR;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6964) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6965)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6966)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6967) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6968)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6969) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6970)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  6971) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6972)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6973) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6974)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6975)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6976)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6977)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6978)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6979)     return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6980)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6981)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6982) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6983)   ret = ei_ascii_to_real( eic, s, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6984) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6985)   /* В случае ошибки не портить ПРИЕМНИК! */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6986)   /* Если производить упаковку без проверки на ошибку
868b2b66 (kx 2024-12-20 16:11:07 +0300  6987)     [ if( ret != _ASCII_TO_REAL_ERROR ) {} ], то в
868b2b66 (kx 2024-12-20 16:11:07 +0300  6988)     случае ошибки в ПРИЕМНИК будет записан NaN и RET
868b2b66 (kx 2024-12-20 16:11:07 +0300  6989)     будет равно RET = -1.
868b2b66 (kx 2024-12-20 16:11:07 +0300  6990)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  6991)   if( ret != _ASCII_TO_REAL_ERROR )
868b2b66 (kx 2024-12-20 16:11:07 +0300  6992)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  6993)     pack( (EMUSHORT *)c, eic, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6994)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  6995) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  6996)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6997)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  6998)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  6999) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7000)   return( ret );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7001) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7002) } /* End of ascii_to_real() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7003) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7004) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7005) /*************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7006)   МОЖЕТ ВЫВЕСТИ:
868b2b66 (kx 2024-12-20 16:11:07 +0300  7007)                  NaN;  -NaN;  inf;  -inf;  -ind;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7008)   if( gen_plus )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7009)                 +NaN;        +inf;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7010) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7011)   Если exp_delim == 'r' || 'R' то к обозначениям
868b2b66 (kx 2024-12-20 16:11:07 +0300  7012)         NaN;  -NaN;  inf;  -inf;  -ind;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7013)        +NaN;        +inf;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7014)   приписывается "_r" (например, inf_r).
868b2b66 (kx 2024-12-20 16:11:07 +0300  7015) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7016)   Если exp_delim == 'j' || 'J' то к обозначениям
868b2b66 (kx 2024-12-20 16:11:07 +0300  7017)         NaN;  -NaN;  inf;  -inf;  -ind;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7018)        +NaN;        +inf;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7019)   приписывается "_j" (например, inf_j).
868b2b66 (kx 2024-12-20 16:11:07 +0300  7020) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7021)   Если exp_delim == 'e' || 'E' || (любой другой)
868b2b66 (kx 2024-12-20 16:11:07 +0300  7022)   то к обозначениям
868b2b66 (kx 2024-12-20 16:11:07 +0300  7023)         NaN;  -NaN;  inf;  -inf;  -ind;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7024)        +NaN;        +inf;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7025)   ничего не приписывается.
868b2b66 (kx 2024-12-20 16:11:07 +0300  7026)  *************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7027) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7028) void real_to_ascii( __mpu_char8_t *s, mpu_real *c, int ndigs, int exp_delim, int exp_digs, int gen_plus, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7029) /* ndigs     - количество выводимых разрядов мантиссы */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7030) /* exp_delim - символ ЭКСПОНЕНТЫ                      */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7031) /* exp_digs  - количество цифр ЭКСПОНЕНТЫ             */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7032) /* gen_plus  - ПРИНУДИТЕЛЬНАЯ ЗАПИСЬ символа '+'
868b2b66 (kx 2024-12-20 16:11:07 +0300  7033)                перед положительной экспонентой        */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7034) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7035)   EMUSHORT *eic = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7036)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7037)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7038) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7039)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7040)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7041) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7042)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7043) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7044)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7045) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7046)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7047) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7048)   /*** Allocate memory for eic . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7049)   eic = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7050)   if( !eic )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7051)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7052)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7053)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7054)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7055)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7056) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7057)   unpack( eic, (EMUSHORT *)c, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7058) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7059)   ei_real_to_ascii( s, eic, ndigs, exp_delim, exp_digs, gen_plus, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7060) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7061)   /* FREE eic ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7062)   __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7063)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7064) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7065) } /* End of real_to_ascii() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7066) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7067) /**
868b2b66 (kx 2024-12-20 16:11:07 +0300  7068)   END: __MPU_IOREAL.H
868b2b66 (kx 2024-12-20 16:11:07 +0300  7069)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7070) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7071) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7072) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7073)                  COMPLEX ARITHMETIC OPERATIONS
868b2b66 (kx 2024-12-20 16:11:07 +0300  7074)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7075) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7076) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7077) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7078)   complex data struct:
868b2b66 (kx 2024-12-20 16:11:07 +0300  7079) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7080)  =====================================================================
868b2b66 (kx 2024-12-20 16:11:07 +0300  7081)   index:
868b2b66 (kx 2024-12-20 16:11:07 +0300  7082)   WORDS_BIG_ENDIAN == 0
868b2b66 (kx 2024-12-20 16:11:07 +0300  7083)   [nRx+nIx-1],  . . . ,       [nIx]|[nIx-1],      . . .,          [0].
868b2b66 (kx 2024-12-20 16:11:07 +0300  7084)   WORDS_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7085)   [0],          . . . ,     [nRx-1]|[nRx],        . . .,  [nRx+nIx-1].
868b2b66 (kx 2024-12-20 16:11:07 +0300  7086)  |--------------. . .--------------|--------------. . .--------------|
868b2b66 (kx 2024-12-20 16:11:07 +0300  7087)  |            Real part            |            Imaginary            |
868b2b66 (kx 2024-12-20 16:11:07 +0300  7088)  |--------------. . .--------------|--------------. . .--------------|
868b2b66 (kx 2024-12-20 16:11:07 +0300  7089)   size:                         nRx                               nIx.
868b2b66 (kx 2024-12-20 16:11:07 +0300  7090) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7091)  =====================================================================
868b2b66 (kx 2024-12-20 16:11:07 +0300  7092) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7093)   For alternative byte,Word ordering my by typedef the complex
868b2b66 (kx 2024-12-20 16:11:07 +0300  7094)   number data struct:
868b2b66 (kx 2024-12-20 16:11:07 +0300  7095) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7096)     typedef struct {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7097)     #if WORDS_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7098)       // SEE: t_machine.h ->, for example, -> (i386.h).
868b2b66 (kx 2024-12-20 16:11:07 +0300  7099)       mpu_real re[X];
868b2b66 (kx 2024-12-20 16:11:07 +0300  7100)     #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7101)       mpu_real im[X];
868b2b66 (kx 2024-12-20 16:11:07 +0300  7102)     #if WORDS_BIG_ENDIAN == 0
868b2b66 (kx 2024-12-20 16:11:07 +0300  7103)       mpu_real re[X];
868b2b66 (kx 2024-12-20 16:11:07 +0300  7104)     #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7105)     } complex_Xbytes;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7106) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7107)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7108) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7109) void c_real_part( mpu_real *r, mpu_complex *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7110) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7111)   mpu_real *pc;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7112) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7113)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7114) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7115)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7116) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7117)   pc = c;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7118) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7119)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7120)     mov REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  7121)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7122) #if MPU_WORD_ORDER_BIG_ENDIAN == 0
868b2b66 (kx 2024-12-20 16:11:07 +0300  7123)   pc += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7124) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7125)   r_cpy( r, pc, nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7126) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7127) } /* End of c_real_part() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7128) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7129) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7130) void c_imaginary( mpu_real *r, mpu_complex *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7131) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7132)   mpu_real *pc;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7133) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7134)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7135) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7136)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7137) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7138)   pc = c;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7139) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7140)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7141)     mov REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  7142)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7143) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7144)   pc += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7145) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7146)   r_cpy( r, pc, nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7147) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7148) } /* End of c_imaginary() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7149) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7150) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7151) void c_real_to_complex( mpu_complex *c, mpu_real *r, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7152) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7153)   mpu_real *pc;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7154)   int       i;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7155) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7156)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7157) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7158)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7159) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7160)   pc = c;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7161)   for( i = 0; i < nb*2; i++ ) *pc++ = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7162) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7163)   pc = c;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7164) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7165)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7166)     mov REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  7167)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7168) #if MPU_WORD_ORDER_BIG_ENDIAN == 0
868b2b66 (kx 2024-12-20 16:11:07 +0300  7169)   pc += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7170) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7171)   r_cpy( pc, r, nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7172) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7173) } /* End of c_real_to_complex() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7174) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7175) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7176) void c_gen_complex( mpu_complex *c, mpu_real *r, mpu_real *j, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7177) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7178)   mpu_real *pc;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7179) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7180)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7181) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7182)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7183) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7184)   pc = c;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7185) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7186)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7187)     mov IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  7188)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7189) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7190)   pc += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7191) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7192)   r_cpy( pc, j, nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7193) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7194)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7195)     mov REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  7196)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7197) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7198)   pc -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7199) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  7200)   pc += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7201) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7202)   r_cpy( pc, r, nb );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7203) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7204) } /* End of c_gen_complex() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7205) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7206) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7207) void c_polar( mpu_complex *c, mpu_real *rho, mpu_real *theta, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7208) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  7209)   The function returns the complex value C
868b2b66 (kx 2024-12-20 16:11:07 +0300  7210)   whose magnitude is rho and whose phase angle is theta.
868b2b66 (kx 2024-12-20 16:11:07 +0300  7211)  ********************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7212) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7213)   EMUSHORT *eic_r = NULL, *eic_j   = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  7214)            *eirho = NULL, *eitheta = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7215)   mpu_real *pc;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7216)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7217)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7218) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7219)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7220)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7221) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7222)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7223) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7224)   pc = c;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7225) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7226)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7227) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7228)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7229) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7230)   /*** Allocate memory for eic_r, eic_j, eirho, eitheta . *****/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7231)   eic_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7232)   if( !eic_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7233)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7234)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7235)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7236)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7237) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7238)   eic_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7239)   if( !eic_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7240)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7241)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7242) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7243)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7244)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7245)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7246) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7247)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7248)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7249) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7250)   eirho = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7251)   if( !eirho )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7252)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7253)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7254) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7255)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7256)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7257)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7258)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7259) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7260)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7261)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7262) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7263)   eitheta = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7264)   if( !eitheta )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7265)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7266)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7267) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7268)     /* FREE eirho *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7269)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7270)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7271)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7272)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7273) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7274)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7275)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7276)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7277) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7278)   /**********************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7279)     unpack MODUL & ANGLE
868b2b66 (kx 2024-12-20 16:11:07 +0300  7280)    **********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7281)   unpack( eirho,   (EMUSHORT *)rho,   n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7282)   unpack( eitheta, (EMUSHORT *)theta, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7283) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7284)   /* Find the complex value whose magnitude is rho
868b2b66 (kx 2024-12-20 16:11:07 +0300  7285)     and whose phase angle is theta. */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7286)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  7287)     eic_r = rho * cos( theta );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7288)     eic_j = rho * sin( theta );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7289)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7290)   ei_cos( eic_r, eitheta, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7291)   ei_mul( eic_r, eirho, eic_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7292) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7293)   ei_sin( eic_j, eitheta, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7294)   ei_mul( eic_j, eirho, eic_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7295) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7296)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7297)     pack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  7298)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7299) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7300)   pc += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7301) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7302)   pack( (EMUSHORT *)pc, eic_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7303) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7304)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7305)     pack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  7306)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7307) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7308)   pc -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7309) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  7310)   pc += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7311) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7312)   pack( (EMUSHORT *)pc, eic_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7313) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7314)   /* FREE eitheta ***********/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7315)   /* FREE eirho *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7316)   /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7317)   /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7318)   __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7319)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7320) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7321) } /* End of c_polar() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7322) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7323) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7324) void c_conj( mpu_complex *c, mpu_complex *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7325) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  7326)   The function returns the conjugate of x.
868b2b66 (kx 2024-12-20 16:11:07 +0300  7327)  ******************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7328) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7329)   mpu_real *pc;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7330)   int       i, n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7331) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7332)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7333) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7334)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7335) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7336)   /* copy the complex number */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7337)   pc = c;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7338)   for( i = 0; i < nb*2; i++ ) *pc++ = *x++;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7339) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7340)   pc = c; /* return to C */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7341) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7342)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7343) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7344) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7345)   pc += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7346) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7347) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7348)   /* Negate IMAGINARY in External format */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7349)   e_neg( (EMUSHORT *)pc, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7350) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7351) } /* End of c_conj() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7352) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7353) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7354) void c_abs( mpu_real *r, mpu_complex *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7355) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  7356)   The function returns the magnitude of C.
868b2b66 (kx 2024-12-20 16:11:07 +0300  7357)  ******************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7358) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7359)   EMUSHORT *eic_r = NULL, *eic_j = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7360)   mpu_real *pc;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7361)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7362)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7363) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7364)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7365)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7366) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7367)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7368) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7369)   pc = c;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7370) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7371)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7372) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7373)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7374) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7375)   /*** Allocate memory for eic_r, eic_j . *********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7376)   eic_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7377)   if( !eic_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7378)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7379)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7380)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7381)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7382) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7383)   eic_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7384)   if( !eic_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7385)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7386)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7387) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7388)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7389)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7390)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7391) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7392)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7393)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7394)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7395) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7396)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7397)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  7398)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7399) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7400)   pc += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7401) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7402)   unpack( eic_j, (EMUSHORT *)pc, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7403) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7404)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7405)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  7406)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7407) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7408)   pc -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7409) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  7410)   pc += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7411) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7412)   unpack( eic_r, (EMUSHORT *)pc, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7413) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7414)   /* find the MODUL of a complex number */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7415)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  7416)      MOD(a+bi) = sqrt(a*a + b*b); 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7417)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7418)   ei_mul( eic_r, eic_r, eic_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7419)   ei_mul( eic_j, eic_j, eic_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7420)   ei_add( eic_r, eic_r, eic_j, n_bits ); 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7421)   ei_sqrt( eic_r, eic_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7422) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7423)   pack( (EMUSHORT *)r, eic_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7424) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7425)   /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7426)   /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7427)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7428)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7429) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7430) } /* End of c_abs() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7431) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7432) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7433) void c_norm( mpu_real *r, mpu_complex *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7434) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  7435)   The function returns the squared magnitude of C.
868b2b66 (kx 2024-12-20 16:11:07 +0300  7436)  **************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7437) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7438)   EMUSHORT *eic_r = NULL, *eic_j = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7439)   mpu_real *pc;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7440)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7441)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7442) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7443)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7444)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7445) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7446)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7447) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7448)   pc = c;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7449) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7450)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7451) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7452)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7453) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7454)   /*** Allocate memory for eic_r, eic_j . *********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7455)   eic_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7456)   if( !eic_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7457)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7458)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7459)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7460)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7461) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7462)   eic_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7463)   if( !eic_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7464)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7465)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7466) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7467)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7468)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7469)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7470) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7471)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7472)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7473)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7474) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7475)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7476)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  7477)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7478) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7479)   pc += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7480) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7481)   unpack( eic_j, (EMUSHORT *)pc, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7482) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7483)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7484)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  7485)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7486) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7487)   pc -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7488) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  7489)   pc += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7490) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7491)   unpack( eic_r, (EMUSHORT *)pc, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7492) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7493)   /* find the MODUL of a complex number */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7494)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  7495)      MOD(a+bi) = sqrt(a*a + b*b); 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7496)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7497)   ei_mul( eic_r, eic_r, eic_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7498)   ei_mul( eic_j, eic_j, eic_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7499)   ei_add( eic_r, eic_r, eic_j, n_bits ); 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7500) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7501)   pack( (EMUSHORT *)r, eic_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7502) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7503)   /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7504)   /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7505)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7506)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7507) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7508) } /* End of c_norm() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7509) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7510) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7511) void c_arg( mpu_real *r, mpu_complex *c, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7512) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  7513)   The function returns the phase angle of C.
868b2b66 (kx 2024-12-20 16:11:07 +0300  7514)  ********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7515) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7516)   EMUSHORT *eic_r = NULL, *eic_j = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7517)   mpu_real *pc;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7518)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7519)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7520) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7521)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7522)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7523) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7524)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7525) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7526)   pc = c;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7527) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7528)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7529) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7530)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7531) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7532)   /*** Allocate memory for eic_r, eic_j . *********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7533)   eic_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7534)   if( !eic_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7535)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7536)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7537)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7538)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7539) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7540)   eic_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7541)   if( !eic_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7542)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7543)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7544) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7545)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7546)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7547)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7548) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7549)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7550)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7551)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7552) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7553)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7554)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  7555)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7556) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7557)   pc += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7558) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7559)   unpack( eic_j, (EMUSHORT *)pc, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7560) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7561)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7562)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  7563)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7564) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7565)   pc -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7566) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  7567)   pc += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7568) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7569)   unpack( eic_r, (EMUSHORT *)pc, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7570) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7571)   /* find the ARGUMENT of a complex number */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7572)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  7573)      ARG(a+bi) = atan2(b/a); 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7574)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7575)   ei_atan2( eic_r, eic_j, eic_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7576) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7577)   pack( (EMUSHORT *)r, eic_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7578) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7579)   /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7580)   /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7581)   __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7582)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7583) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7584) } /* End of c_arg() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7585) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7586) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7587) int c_is_equal( mpu_complex *a, mpu_complex *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7588) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7589)   EMUSHORT *eia_r = NULL, *eia_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  7590)            *eib_r = NULL, *eib_j = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7591)   mpu_real *pa, *pb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7592)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7593)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7594) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7595)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7596)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7597) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7598)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7599) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7600)   pa = a;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7601)   pb = b;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7602) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7603)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7604) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7605)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7606) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7607)   /*** Allocate memory for eia_r, eia_j, eib_r, eib_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7608)   eia_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7609)   if( !eia_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7610)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7611)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7612)     return( -1 );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7613)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7614) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7615)   eia_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7616)   if( !eia_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7617)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7618)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7619) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7620)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7621)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7622)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7623) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7624)     return( -1 );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7625)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7626) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7627)   eib_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7628)   if( !eib_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7629)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7630)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7631) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7632)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7633)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7634)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7635)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7636) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7637)     return( -1 );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7638)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7639) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7640)   eib_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7641)   if( !eib_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7642)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7643)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7644) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7645)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7646)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7647)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7648)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7649)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7650) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7651)     return( -1 );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7652)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7653)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7654) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7655)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7656)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  7657)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7658) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7659)   pa += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7660)   pb += nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7661) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7662)   unpack( eia_j, (EMUSHORT *)pa, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7663)   unpack( eib_j, (EMUSHORT *)pb, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7664) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7665)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7666)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  7667)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7668) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7669)   pa -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7670)   pb -= nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7671) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  7672)   pa += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7673)   pb += nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7674) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7675)   unpack( eia_r, (EMUSHORT *)pa, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7676)   unpack( eib_r, (EMUSHORT *)pb, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7677) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7678)   /* IS_EQUAL ? complex numbers */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7679)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  7680)      if( (a+bi) == (c+di) ) return 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7681)      else                   return 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7682)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7683)   if( (ei_cmp( eia_r, eib_r, n_bits ) == 0) &&
868b2b66 (kx 2024-12-20 16:11:07 +0300  7684)       (ei_cmp( eia_j, eib_j, n_bits ) == 0)    )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7685)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7686)     /* FREE eib_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7687)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7688)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7689)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7690)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7691)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7692) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7693)     return( 1 );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7694)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7695)   else
868b2b66 (kx 2024-12-20 16:11:07 +0300  7696)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7697)     /* FREE eib_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7698)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7699)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7700)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7701)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7702)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7703) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7704)     return( 0 );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7705)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7706) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7707) } /* End of c_is_equal() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7708) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7709) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7710) int c_is_nequal( mpu_complex *a, mpu_complex *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7711) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7712)   EMUSHORT *eia_r = NULL, *eia_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  7713)            *eib_r = NULL, *eib_j = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7714)   mpu_real *pa, *pb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7715)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7716)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7717) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7718)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7719)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7720) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7721)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7722) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7723)   pa = a;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7724)   pb = b;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7725) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7726)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7727) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7728)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7729) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7730)   /*** Allocate memory for eia_r, eia_j, eib_r, eib_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7731)   eia_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7732)   if( !eia_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7733)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7734)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7735)     return( -1 );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7736)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7737) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7738)   eia_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7739)   if( !eia_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7740)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7741)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7742) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7743)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7744)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7745)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7746) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7747)     return( -1 );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7748)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7749) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7750)   eib_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7751)   if( !eib_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7752)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7753)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7754) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7755)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7756)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7757)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7758)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7759) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7760)     return( -1 );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7761)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7762) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7763)   eib_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7764)   if( !eib_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7765)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7766)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7767) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7768)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7769)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7770)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7771)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7772)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7773) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7774)     return( -1 );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7775)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7776)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7777) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7778)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7779)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  7780)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7781) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7782)   pa += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7783)   pb += nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7784) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7785)   unpack( eia_j, (EMUSHORT *)pa, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7786)   unpack( eib_j, (EMUSHORT *)pb, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7787) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7788)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7789)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  7790)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7791) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7792)   pa -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7793)   pb -= nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7794) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  7795)   pa += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7796)   pb += nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7797) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7798)   unpack( eia_r, (EMUSHORT *)pa, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7799)   unpack( eib_r, (EMUSHORT *)pb, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7800) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7801)   /* IS_NEQUAL ? complex numbers */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7802)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  7803)      if( (a+bi) != (c+di) ) return 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7804)      else                   return 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7805)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7806)   if( (ei_cmp( eia_r, eib_r, n_bits ) != 0) ||
868b2b66 (kx 2024-12-20 16:11:07 +0300  7807)       (ei_cmp( eia_j, eib_j, n_bits ) != 0)    )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7808)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7809)     /* FREE eib_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7810)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7811)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7812)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7813)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7814)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7815) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7816)     return( 1 );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7817)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7818)   else
868b2b66 (kx 2024-12-20 16:11:07 +0300  7819)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7820)     /* FREE eib_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7821)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7822)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7823)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7824)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7825)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7826) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7827)     return( 0 );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7828)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7829) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7830) } /* End of c_is_nequal() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7831) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7832) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7833) void c_cpy( mpu_complex *a, mpu_complex *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7834) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7835)   int  i;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7836) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7837)   for( i = 0; i < nb*2; i++ ) *a++ = *b++;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7838) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7839) } /* End of c_cpy() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7840) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7841) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7842) void c_cvt( mpu_complex *a, mpu_complex *b, int nb_a, int nb_b )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7843) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7844)   EMUSHORT *eia_r = NULL, *eia_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  7845)            *eib_r = NULL, *eib_j = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7846)   mpu_real *pa, *pb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7847)   int       n_bits_a, n_bits_b;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7848)   int       np_a, np_b;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7849) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7850)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7851)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7852) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7853)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7854) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7855)   pa = a;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7856)   pb = b;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7857) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7858)   n_bits_a = nb_a * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7859)   n_bits_b = nb_b * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7860) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7861)   np_a = internal_np( n_bits_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7862)   np_b = internal_np( n_bits_b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7863) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7864)   /*** Allocate memory for eia_r, eia_j, eib_r, eib_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7865)   eia_r = (EMUSHORT *)__mpu_sbrk( (int)(np_a*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7866)   if( !eia_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7867)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7868)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7869)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7870)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7871) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7872)   eia_j = (EMUSHORT *)__mpu_sbrk( (int)(np_a*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7873)   if( !eia_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7874)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7875)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7876) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7877)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7878)     __mpu_sbrk( -(int)(np_a*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7879)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7880) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7881)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7882)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7883) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7884)   eib_r = (EMUSHORT *)__mpu_sbrk( (int)(np_b*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7885)   if( !eib_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7886)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7887)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7888) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7889)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7890)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7891)     __mpu_sbrk( -(int)(2*np_a*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7892)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7893) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7894)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7895)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7896) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7897)   eib_j = (EMUSHORT *)__mpu_sbrk( (int)(np_b*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7898)   if( !eib_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7899)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7900)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7901) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7902)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7903)     __mpu_sbrk( -(int)(np_b*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7904)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7905) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7906)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7907)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7908)     __mpu_sbrk( -(int)(2*np_a*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7909)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7910) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7911)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7912)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7913)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7914) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7915)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7916)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  7917)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7918) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7919)   pb += nb_b; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7920) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7921)   unpack( eib_j, (EMUSHORT *)pb, n_bits_b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7922) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7923)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7924)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  7925)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7926) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7927)   pb -= nb_b; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7928) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  7929)   pb += nb_b; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7930) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7931)   unpack( eib_r, (EMUSHORT *)pb, n_bits_b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7932) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7933)   /* CONVERT complex number */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7934)   ei_convert( (EMUSHORT *)eia_r, (EMUSHORT *)eib_r, n_bits_a, n_bits_b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7935)   ei_convert( (EMUSHORT *)eia_j, (EMUSHORT *)eib_j, n_bits_a, n_bits_b );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7936) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7937)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7938)     pack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  7939)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7940) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7941)   pa += nb_a; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7942) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7943)   pack( (EMUSHORT *)pa, eia_j, n_bits_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7944) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7945)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  7946)     pack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  7947)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7948) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  7949)   pa -= nb_a; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7950) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  7951)   pa += nb_a; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7952) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  7953)   pack( (EMUSHORT *)pa, eia_r, n_bits_a );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7954) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7955)   /* FREE eib_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7956)   /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7957)   __mpu_sbrk( -(int)(2*np_b*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7958)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7959) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7960)   /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7961)   /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7962)   __mpu_sbrk( -(int)(2*np_a*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7963)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7964) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7965) } /* End of c_cvt() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7966) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7967) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7968) void c_add( mpu_complex *c, mpu_complex *a, mpu_complex *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7969) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7970)   EMUSHORT *eic_r = NULL, *eic_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  7971)            *eia_r = NULL, *eia_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  7972)            *eib_r = NULL, *eib_j = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7973)   mpu_real *pc, *pa, *pb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7974)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7975)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7976) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7977)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7978)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7979) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7980)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7981) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7982)   pa = a;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7983)   pb = b;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7984)   pc = c;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7985) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7986)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7987) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7988)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7989) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7990)   /*** Allocate memory for eic_r, eic_j . *********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  7991)   eic_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7992)   if( !eic_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  7993)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  7994)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  7995)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  7996)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  7997) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  7998)   eic_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  7999)   if( !eic_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8000)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8001)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8002) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8003)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8004)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8005)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8006) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8007)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8008)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8009)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8010) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8011)   /*** Allocate memory for eia_r, eia_j, eib_r, eib_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8012)   eia_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8013)   if( !eia_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8014)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8015)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8016) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8017)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8018)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8019)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8020)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8021) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8022)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8023)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8024) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8025)   eia_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8026)   if( !eia_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8027)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8028)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8029) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8030)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8031)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8032)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8033)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8034)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8035) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8036)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8037)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8038) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8039)   eib_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8040)   if( !eib_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8041)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8042)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8043) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8044)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8045)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8046)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8047)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8048)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8049)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8050) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8051)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8052)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8053) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8054)   eib_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8055)   if( !eib_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8056)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8057)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8058) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8059)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8060)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8061)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8062)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8063)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8064)     __mpu_sbrk( -(int)(5*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8065)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8066) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8067)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8068)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8069)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8070) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8071)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8072)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  8073)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8074) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8075)   pa += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8076)   pb += nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8077) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8078)   unpack( eia_j, (EMUSHORT *)pa, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8079)   unpack( eib_j, (EMUSHORT *)pb, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8080) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8081)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8082)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  8083)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8084) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8085)   pa -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8086)   pb -= nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8087) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  8088)   pa += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8089)   pb += nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8090) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8091)   unpack( eia_r, (EMUSHORT *)pa, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8092)   unpack( eib_r, (EMUSHORT *)pb, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8093) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8094)   /* ADD complex numbers */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8095)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  8096)      (a+bi) + (c+di) = (a + c) + (b + d)i; 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8097)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8098)   ei_add( eic_r, eia_r, eib_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8099)   ei_add( eic_j, eia_j, eib_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8100) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8101)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8102)     pack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  8103)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8104) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8105)   pc += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8106) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8107)   pack( (EMUSHORT *)pc, eic_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8108) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8109)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8110)     pack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  8111)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8112) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8113)   pc -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8114) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  8115)   pc += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8116) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8117)   pack( (EMUSHORT *)pc, eic_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8118) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8119)   /* FREE eib_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8120)   /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8121)   /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8122)   /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8123)   /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8124)   /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8125)   __mpu_sbrk( -(int)(6*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8126)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8127) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8128) } /* End of c_add() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8129) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8130) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8131) void c_sub( mpu_complex *c, mpu_complex *a, mpu_complex *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8132) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8133)   EMUSHORT *eic_r = NULL, *eic_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  8134)            *eia_r = NULL, *eia_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  8135)            *eib_r = NULL, *eib_j = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8136)   mpu_real *pc, *pa, *pb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8137)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8138)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8139) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8140)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8141)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8142) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8143)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8144) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8145)   pa = a;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8146)   pb = b;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8147)   pc = c;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8148) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8149)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8150) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8151)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8152) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8153)   /*** Allocate memory for eic_r, eic_j . *********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8154)   eic_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8155)   if( !eic_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8156)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8157)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8158)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8159)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8160) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8161)   eic_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8162)   if( !eic_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8163)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8164)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8165) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8166)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8167)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8168)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8169) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8170)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8171)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8172)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8173) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8174)   /*** Allocate memory for eia_r, eia_j, eib_r, eib_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8175)   eia_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8176)   if( !eia_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8177)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8178)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8179) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8180)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8181)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8182)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8183)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8184) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8185)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8186)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8187) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8188)   eia_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8189)   if( !eia_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8190)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8191)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8192) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8193)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8194)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8195)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8196)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8197)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8198) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8199)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8200)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8201) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8202)   eib_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8203)   if( !eib_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8204)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8205)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8206) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8207)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8208)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8209)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8210)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8211)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8212)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8213) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8214)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8215)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8216) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8217)   eib_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8218)   if( !eib_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8219)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8220)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8221) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8222)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8223)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8224)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8225)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8226)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8227)     __mpu_sbrk( -(int)(5*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8228)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8229) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8230)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8231)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8232)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8233) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8234)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8235)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  8236)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8237) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8238)   pa += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8239)   pb += nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8240) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8241)   unpack( eia_j, (EMUSHORT *)pa, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8242)   unpack( eib_j, (EMUSHORT *)pb, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8243) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8244)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8245)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  8246)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8247) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8248)   pa -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8249)   pb -= nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8250) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  8251)   pa += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8252)   pb += nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8253) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8254)   unpack( eia_r, (EMUSHORT *)pa, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8255)   unpack( eib_r, (EMUSHORT *)pb, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8256) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8257)   /* SUB complex numbers */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8258)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  8259)      (a+bi) - (c+di) = (a - c) + (b - d)i; 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8260)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8261)   ei_sub( eic_r, eia_r, eib_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8262)   ei_sub( eic_j, eia_j, eib_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8263) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8264)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8265)     pack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  8266)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8267) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8268)   pc += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8269) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8270)   pack( (EMUSHORT *)pc, eic_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8271) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8272)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8273)     pack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  8274)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8275) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8276)   pc -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8277) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  8278)   pc += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8279) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8280)   pack( (EMUSHORT *)pc, eic_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8281) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8282)   /* FREE eib_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8283)   /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8284)   /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8285)   /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8286)   /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8287)   /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8288)   __mpu_sbrk( -(int)(6*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8289)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8290) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8291) } /* End of c_sub() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8292) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8293) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8294) void c_mul( mpu_complex *c, mpu_complex *a, mpu_complex *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8295) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8296)   EMUSHORT *eic_r = NULL, *eic_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  8297)            *eia_r = NULL, *eia_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  8298)            *eib_r = NULL, *eib_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  8299)            *eitmp = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8300)   mpu_real *pc, *pa, *pb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8301)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8302)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8303) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8304)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8305)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8306) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8307)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8308) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8309)   pa = a;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8310)   pb = b;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8311)   pc = c;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8312) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8313)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8314) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8315)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8316) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8317)   /*** Allocate memory for eic_r, eic_j . *********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8318)   eic_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8319)   if( !eic_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8320)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8321)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8322)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8323)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8324) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8325)   eic_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8326)   if( !eic_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8327)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8328)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8329) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8330)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8331)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8332)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8333) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8334)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8335)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8336)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8337) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8338)   /*** Allocate memory for eia_r, eia_j, eib_r, eib_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8339)   eia_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8340)   if( !eia_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8341)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8342)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8343) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8344)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8345)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8346)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8347)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8348) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8349)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8350)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8351) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8352)   eia_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8353)   if( !eia_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8354)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8355)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8356) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8357)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8358)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8359)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8360)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8361)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8362) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8363)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8364)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8365) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8366)   eib_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8367)   if( !eib_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8368)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8369)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8370) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8371)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8372)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8373)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8374)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8375)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8376)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8377) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8378)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8379)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8380) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8381)   eib_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8382)   if( !eib_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8383)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8384)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8385) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8386)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8387)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8388)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8389)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8390)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8391)     __mpu_sbrk( -(int)(5*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8392)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8393) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8394)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8395)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8396)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8397) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8398)   /*** Allocate memory for eitmp . ****************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8399)   eitmp = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8400)   if( !eitmp )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8401)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8402)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8403) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8404)     /* FREE eib_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8405)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8406)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8407)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8408)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8409)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8410)     __mpu_sbrk( -(int)(6*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8411)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8412) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8413)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8414)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8415)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8416) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8417)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8418)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  8419)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8420) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8421)   pa += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8422)   pb += nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8423) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8424)   unpack( eia_j, (EMUSHORT *)pa, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8425)   unpack( eib_j, (EMUSHORT *)pb, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8426) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8427)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8428)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  8429)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8430) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8431)   pa -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8432)   pb -= nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8433) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  8434)   pa += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8435)   pb += nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8436) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8437)   unpack( eia_r, (EMUSHORT *)pa, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8438)   unpack( eib_r, (EMUSHORT *)pb, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8439) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8440)   /* MUL complex numbers */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8441)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  8442)      (a+bi) * (c+di) = (a*c - b*d) + (a*d + b*c)i; 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8443)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8444)   ei_mul( eic_r, eia_r, eib_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8445)   ei_mul( eitmp, eia_j, eib_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8446)   ei_sub( eic_r, eic_r, eitmp, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8447) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8448)   ei_mul( eic_j, eia_r, eib_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8449)   ei_mul( eitmp, eia_j, eib_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8450)   ei_add( eic_j, eic_j, eitmp, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8451) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8452)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8453)     pack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  8454)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8455) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8456)   pc += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8457) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8458)   pack( (EMUSHORT *)pc, eic_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8459) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8460)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8461)     pack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  8462)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8463) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8464)   pc -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8465) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  8466)   pc += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8467) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8468)   pack( (EMUSHORT *)pc, eic_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8469) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8470)   /* FREE eitmp *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8471)   /* FREE eib_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8472)   /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8473)   /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8474)   /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8475)   /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8476)   /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8477)   __mpu_sbrk( -(int)(7*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8478)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8479) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8480) } /* End of c_mul() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8481) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8482) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8483) static void __complex_divide_by_zero( void )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8484) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8485)   /* error: Complex attempted division by zero */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8486)   struct __exception  e;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8487) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8488)   __complex_error_no = __C_EDIVZEROBYZERO__;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8489) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8490)   e.who          = _COMPLEX_;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8491)   e.type         = __complex_error_no;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8492)   e.name         = (__mpu_char8_t *)"c_div";
868b2b66 (kx 2024-12-20 16:11:07 +0300  8493)   e.msg          = __mpu_utf8mpu_error( _COMPLEX_, __complex_error_no );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8494)   e.msg_type     = _ERROR_MSG_;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8495)   e.nb_a1        = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8496)   e.nb_a2        = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8497)   e.nb_rv        = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8498)   e.arg_1        = (unsigned char *)0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8499)   e.arg_2        = (unsigned char *)0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8500)   e.return_value = (unsigned char *)0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8501) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8502)   if( __extra_warnings )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8503)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8504)     __mpu_warning( &e );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8505)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8506) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8507)   if( e.msg ) free( e.msg );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8508) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8509)   return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8510) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8511) } /* End of __complex_divide_by_zero( void ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8512) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8513) void c_div( mpu_complex *c, mpu_complex *a, mpu_complex *b, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8514) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8515)   EMUSHORT *eic_r = NULL, *eic_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  8516)            *eia_r = NULL, *eia_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  8517)            *eib_r = NULL, *eib_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  8518)            *eitmp = NULL, *eiden = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  8519)            *zero  = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8520)   mpu_real *pc, *pa, *pb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8521)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8522)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8523) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8524)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8525)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8526) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8527)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8528) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8529)   pa = a;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8530)   pb = b;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8531)   pc = c;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8532) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8533)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8534) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8535)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8536) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8537)   /*** Allocate memory for eic_r, eic_j . *********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8538)   eic_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8539)   if( !eic_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8540)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8541)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8542)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8543)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8544) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8545)   eic_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8546)   if( !eic_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8547)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8548)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8549) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8550)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8551)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8552)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8553) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8554)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8555)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8556)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8557) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8558)   /*** Allocate memory for eia_r, eia_j, eib_r, eib_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8559)   eia_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8560)   if( !eia_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8561)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8562)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8563) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8564)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8565)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8566)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8567)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8568) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8569)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8570)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8571) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8572)   eia_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8573)   if( !eia_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8574)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8575)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8576) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8577)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8578)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8579)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8580)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8581)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8582) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8583)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8584)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8585) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8586)   eib_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8587)   if( !eib_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8588)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8589)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8590) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8591)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8592)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8593)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8594)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8595)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8596)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8597) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8598)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8599)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8600) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8601)   eib_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8602)   if( !eib_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8603)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8604)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8605) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8606)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8607)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8608)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8609)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8610)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8611)     __mpu_sbrk( -(int)(5*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8612)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8613) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8614)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8615)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8616)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8617) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8618)   /*** Allocate memory for eitmp, eiden, zero . ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8619)   eitmp = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8620)   if( !eitmp )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8621)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8622)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8623) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8624)     /* FREE eib_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8625)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8626)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8627)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8628)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8629)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8630)     __mpu_sbrk( -(int)(6*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8631)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8632) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8633)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8634)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8635) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8636)   eiden = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8637)   if( !eiden )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8638)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8639)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8640) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8641)     /* FREE eitmp *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8642)     /* FREE eib_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8643)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8644)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8645)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8646)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8647)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8648)     __mpu_sbrk( -(int)(7*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8649)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8650) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8651)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8652)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8653) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8654)   zero = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8655)   if( !zero )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8656)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8657)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8658) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8659)     /* FREE eiden *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8660)     /* FREE eitmp *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8661)     /* FREE eib_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8662)     /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8663)     /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8664)     /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8665)     /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8666)     /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8667)     __mpu_sbrk( -(int)(8*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8668)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8669) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8670)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8671)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8672)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8673) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8674)   _gen_zero( zero, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8675) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8676)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8677)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  8678)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8679) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8680)   pa += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8681)   pb += nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8682) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8683)   unpack( eia_j, (EMUSHORT *)pa, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8684)   unpack( eib_j, (EMUSHORT *)pb, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8685) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8686)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8687)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  8688)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8689) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8690)   pa -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8691)   pb -= nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8692) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  8693)   pa += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8694)   pb += nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8695) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8696)   unpack( eia_r, (EMUSHORT *)pa, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8697)   unpack( eib_r, (EMUSHORT *)pb, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8698) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8699)   /* DIVIDE complex numbers */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8700)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  8701)      hyp = c^2 + d^2;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8702)      (a+bi) / (c+di) = (a*c + b*d)/hyp + (c*b - d*a)i; 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8703)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8704)   ei_mul( eiden, eib_r, eib_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8705)   ei_mul( eitmp, eib_j, eib_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8706)   ei_add( eiden, eiden, eitmp, n_bits ); /* den */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8707) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8708)   /*****************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8709)     Если EIDEN == 0, результат будет неопределен (InD).
868b2b66 (kx 2024-12-20 16:11:07 +0300  8710)    *****************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8711)   if( ei_cmp( eiden, zero, n_bits ) == 0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8712)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8713)     /*****************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8714)       Выставление  InD  произойдет и без этих
868b2b66 (kx 2024-12-20 16:11:07 +0300  8715)       операторов, но переход сразу на packing
868b2b66 (kx 2024-12-20 16:11:07 +0300  8716)       сократит время работы этой функции.
868b2b66 (kx 2024-12-20 16:11:07 +0300  8717)      *****************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8718)     ei_ind( eic_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8719)     ei_ind( eic_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8720)     __complex_divide_by_zero();
868b2b66 (kx 2024-12-20 16:11:07 +0300  8721)     goto packing;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8722) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8723)   } /* End if( ZERO/ZERO ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8724) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8725)   ei_mul( eic_r, eia_r, eib_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8726)   ei_mul( eitmp, eia_j, eib_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8727)   ei_add( eic_r, eic_r, eitmp, n_bits ); /* (a*c + b*d) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8728)   ei_div( eic_r, eic_r, eiden, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8729) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8730)   ei_mul( eic_j, eib_r, eia_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8731)   ei_mul( eitmp, eib_j, eia_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8732)   ei_sub( eic_j, eic_j, eitmp, n_bits ); /* (c*b - d*a) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8733)   ei_div( eic_j, eic_j, eiden, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8734) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8735) packing:
868b2b66 (kx 2024-12-20 16:11:07 +0300  8736) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8737)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8738)     pack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  8739)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8740) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8741)   pc += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8742) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8743)   pack( (EMUSHORT *)pc, eic_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8744) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8745)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8746)     pack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  8747)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8748) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8749)   pc -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8750) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  8751)   pc += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8752) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8753)   pack( (EMUSHORT *)pc, eic_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8754) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8755)   /* FREE zero **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8756)   /* FREE eiden *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8757)   /* FREE eitmp *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8758)   /* FREE eib_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8759)   /* FREE eib_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8760)   /* FREE eia_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8761)   /* FREE eia_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8762)   /* FREE eic_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8763)   /* FREE eic_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8764)   __mpu_sbrk( -(int)(9*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8765)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8766) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8767) } /* End of c_div() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8768) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8769) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8770) /***************************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8771)                  COMPLEX MATHEMATIC OPERATIONS
868b2b66 (kx 2024-12-20 16:11:07 +0300  8772)  ***************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8773) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8774) void c_exp( mpu_complex *y, mpu_complex *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8775) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  8776)   The function returns the exponential of X.
868b2b66 (kx 2024-12-20 16:11:07 +0300  8777)  ********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8778) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8779)   EMUSHORT *eiy_r = NULL, *eiy_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  8780)            *eix_r = NULL, *eix_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  8781)              *eir = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8782)   mpu_real *py, *px;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8783)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8784)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8785) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8786)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8787)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8788) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8789)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8790) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8791)   px = x;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8792)   py = y;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8793) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8794)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8795) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8796)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8797) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8798)   /*** Allocate memory for eiy_r, eiy_j, eix_r, eix_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8799)   eiy_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8800)   if( !eiy_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8801)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8802)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8803)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8804)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8805) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8806)   eiy_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8807)   if( !eiy_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8808)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8809)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8810) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8811)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8812)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8813)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8814) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8815)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8816)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8817) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8818)   eix_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8819)   if( !eix_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8820)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8821)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8822) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8823)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8824)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8825)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8826)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8827) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8828)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8829)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8830) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8831)   eix_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8832)   if( !eix_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8833)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8834)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8835) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8836)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8837)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8838)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8839)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8840)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8841) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8842)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8843)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8844)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8845) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8846)   /*** Allocate memory for eir . ******************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8847)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8848)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8849)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8850)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8851) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8852)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8853)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8854)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8855)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8856)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8857)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8858) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8859)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8860)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8861)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8862) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8863)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8864)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  8865)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8866) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8867)   px += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8868) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8869)   unpack( eix_j, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8870) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8871)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8872)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  8873)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8874) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8875)   px -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8876) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  8877)   px += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8878) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8879)   unpack( eix_r, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8880) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8881)   /* EXP of a complex number */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8882)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  8883)     real r = exp( x.real );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8884) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8885)     y.real = r * cos( x.imag );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8886)     y.imag = r * sin( x.imag );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8887)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8888)   ei_exp( eir, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8889)   ei_cos( eiy_r, eix_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8890)   ei_mul( eiy_r, eir, eiy_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8891)   ei_sin( eiy_j, eix_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8892)   ei_mul( eiy_j, eir, eiy_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8893) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8894)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8895)     pack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  8896)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8897) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8898)   py += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8899) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8900)   pack( (EMUSHORT *)py, eiy_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8901) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8902)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  8903)     pack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  8904)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8905) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  8906)   py -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8907) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  8908)   py += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8909) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  8910)   pack( (EMUSHORT *)py, eiy_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8911) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8912)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8913)   /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8914)   /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8915)   /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8916)   /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8917)   __mpu_sbrk( -(int)(5*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8918)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8919) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8920) } /* End of c_exp() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8921) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8922) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8923) void c_sin( mpu_complex *y, mpu_complex *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8924) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  8925)   The function returns the imaginary sine of X.
868b2b66 (kx 2024-12-20 16:11:07 +0300  8926)  ***********************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8927) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8928)   EMUSHORT *eiy_r = NULL, *eiy_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  8929)            *eix_r = NULL, *eix_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  8930)              *eir = NULL,   *eij = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8931)   mpu_real *py, *px;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8932)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8933)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8934) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8935)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8936)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8937) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8938)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8939) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8940)   px = x;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8941)   py = y;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8942) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8943)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8944) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8945)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8946) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8947)   /*** Allocate memory for eiy_r, eiy_j, eix_r, eix_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8948)   eiy_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8949)   if( !eiy_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8950)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8951)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8952)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8953)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8954) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8955)   eiy_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8956)   if( !eiy_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8957)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8958)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8959) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8960)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8961)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8962)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8963) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8964)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8965)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8966) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8967)   eix_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8968)   if( !eix_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8969)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8970)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8971) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8972)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8973)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8974)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8975)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8976) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8977)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8978)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8979) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8980)   eix_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8981)   if( !eix_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8982)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8983)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  8984) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8985)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8986)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8987)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8988)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8989)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8990) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8991)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  8992)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  8993)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8994) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  8995)   /*** Allocate memory for eir, eij . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  8996)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  8997)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  8998)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  8999)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9000) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9001)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9002)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9003)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9004)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9005)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9006)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9007) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9008)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9009)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9010) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9011)   eij = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9012)   if( !eij )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9013)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9014)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9015) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9016)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9017)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9018)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9019)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9020)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9021)     __mpu_sbrk( -(int)(5*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9022)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9023) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9024)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9025)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9026)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9027) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9028)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9029)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  9030)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9031) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9032)   px += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9033) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9034)   unpack( eix_j, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9035) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9036)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9037)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  9038)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9039) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9040)   px -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9041) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  9042)   px += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9043) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9044)   unpack( eix_r, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9045) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9046)   /* SIN of a complex number */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9047)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  9048)     y.real = sin( x.real ) * cosh( x.imag );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9049)     y.imag = cos( x.real ) * sinh( x.imag );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9050)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9051)   ei_sin( eir, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9052)   ei_cosh( eij, eix_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9053)   ei_mul( eiy_r, eir, eij, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9054)   ei_cos( eir, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9055)   ei_sinh( eij, eix_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9056)   ei_mul( eiy_j, eir, eij, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9057) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9058)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9059)     pack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  9060)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9061) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9062)   py += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9063) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9064)   pack( (EMUSHORT *)py, eiy_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9065) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9066)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9067)     pack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  9068)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9069) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9070)   py -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9071) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  9072)   py += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9073) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9074)   pack( (EMUSHORT *)py, eiy_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9075) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9076)   /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9077)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9078)   /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9079)   /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9080)   /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9081)   /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9082)   __mpu_sbrk( -(int)(6*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9083)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9084) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9085) } /* End of c_sin() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9086) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9087) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9088) void c_cos( mpu_complex *y, mpu_complex *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9089) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  9090)   The function returns the cosine of X.
868b2b66 (kx 2024-12-20 16:11:07 +0300  9091)  *******************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9092) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9093)   EMUSHORT *eiy_r = NULL, *eiy_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9094)            *eix_r = NULL, *eix_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9095)              *eir = NULL,   *eij = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9096)   mpu_real *py, *px;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9097)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9098)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9099) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9100)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9101)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9102) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9103)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9104) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9105)   px = x;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9106)   py = y;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9107) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9108)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9109) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9110)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9111) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9112)   /*** Allocate memory for eiy_r, eiy_j, eix_r, eix_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9113)   eiy_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9114)   if( !eiy_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9115)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9116)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9117)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9118)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9119) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9120)   eiy_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9121)   if( !eiy_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9122)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9123)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9124) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9125)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9126)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9127)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9128) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9129)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9130)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9131) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9132)   eix_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9133)   if( !eix_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9134)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9135)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9136) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9137)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9138)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9139)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9140)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9141) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9142)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9143)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9144) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9145)   eix_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9146)   if( !eix_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9147)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9148)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9149) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9150)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9151)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9152)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9153)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9154)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9155) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9156)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9157)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9158)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9159) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9160)   /*** Allocate memory for eir, eij . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9161)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9162)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9163)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9164)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9165) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9166)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9167)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9168)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9169)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9170)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9171)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9172) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9173)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9174)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9175) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9176)   eij = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9177)   if( !eij )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9178)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9179)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9180) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9181)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9182)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9183)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9184)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9185)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9186)     __mpu_sbrk( -(int)(5*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9187)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9188) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9189)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9190)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9191)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9192) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9193)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9194)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  9195)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9196) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9197)   px += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9198) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9199)   unpack( eix_j, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9200) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9201)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9202)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  9203)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9204) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9205)   px -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9206) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  9207)   px += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9208) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9209)   unpack( eix_r, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9210) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9211)   /* COS of a complex number */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9212)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  9213)     y.real =  cos( x.real ) * cosh( x.imag );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9214)     y.imag = -sin( x.real ) * sinh( x.imag );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9215)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9216)   ei_cos( eir, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9217)   ei_cosh( eij, eix_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9218)   ei_mul( eiy_r, eir, eij, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9219)   ei_sin( eir, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9220)   ei_neg( eir, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9221)   ei_sinh( eij, eix_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9222)   ei_mul( eiy_j, eir, eij, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9223) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9224)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9225)     pack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  9226)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9227) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9228)   py += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9229) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9230)   pack( (EMUSHORT *)py, eiy_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9231) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9232)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9233)     pack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  9234)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9235) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9236)   py -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9237) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  9238)   py += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9239) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9240)   pack( (EMUSHORT *)py, eiy_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9241) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9242)   /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9243)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9244)   /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9245)   /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9246)   /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9247)   /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9248)   __mpu_sbrk( -(int)(6*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9249)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9250) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9251) } /* End of c_cos() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9252) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9253) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9254) void c_sinh( mpu_complex *y, mpu_complex *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9255) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  9256)   The function returns the hyperbolic sine of X.  
868b2b66 (kx 2024-12-20 16:11:07 +0300  9257)  ************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9258) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9259)   EMUSHORT *eiy_r = NULL, *eiy_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9260)            *eix_r = NULL, *eix_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9261)              *eir = NULL,   *eij = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9262)   mpu_real *py, *px;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9263)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9264)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9265) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9266)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9267)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9268) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9269)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9270) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9271)   px = x;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9272)   py = y;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9273) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9274)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9275) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9276)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9277) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9278)   /*** Allocate memory for eiy_r, eiy_j, eix_r, eix_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9279)   eiy_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9280)   if( !eiy_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9281)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9282)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9283)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9284)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9285) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9286)   eiy_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9287)   if( !eiy_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9288)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9289)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9290) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9291)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9292)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9293)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9294) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9295)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9296)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9297) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9298)   eix_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9299)   if( !eix_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9300)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9301)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9302) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9303)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9304)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9305)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9306)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9307) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9308)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9309)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9310) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9311)   eix_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9312)   if( !eix_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9313)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9314)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9315) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9316)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9317)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9318)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9319)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9320)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9321) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9322)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9323)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9324)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9325) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9326)   /*** Allocate memory for eir, eij . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9327)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9328)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9329)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9330)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9331) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9332)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9333)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9334)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9335)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9336)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9337)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9338) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9339)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9340)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9341) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9342)   eij = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9343)   if( !eij )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9344)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9345)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9346) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9347)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9348)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9349)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9350)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9351)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9352)     __mpu_sbrk( -(int)(5*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9353)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9354) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9355)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9356)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9357)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9358) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9359)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9360)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  9361)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9362) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9363)   px += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9364) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9365)   unpack( eix_j, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9366) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9367)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9368)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  9369)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9370) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9371)   px -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9372) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  9373)   px += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9374) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9375)   unpack( eix_r, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9376) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9377)   /* SINH of a complex number */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9378)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  9379)     y.real = cos( x.imag ) * sinh( x.real );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9380)     y.imag = sin( x.imag ) * cosh( x.real );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9381)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9382)   ei_cos( eij, eix_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9383)   ei_sinh( eir, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9384)   ei_mul( eiy_r, eij, eir, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9385)   ei_sin( eij, eix_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9386)   ei_cosh( eir, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9387)   ei_mul( eiy_j, eij, eir, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9388) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9389)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9390)     pack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  9391)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9392) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9393)   py += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9394) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9395)   pack( (EMUSHORT *)py, eiy_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9396) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9397)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9398)     pack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  9399)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9400) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9401)   py -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9402) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  9403)   py += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9404) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9405)   pack( (EMUSHORT *)py, eiy_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9406) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9407)   /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9408)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9409)   /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9410)   /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9411)   /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9412)   /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9413)   __mpu_sbrk( -(int)(6*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9414)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9415) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9416) } /* End of c_sinh() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9417) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9418) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9419) void c_cosh( mpu_complex *y, mpu_complex *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9420) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  9421)   The function returns the hyperbolic cosine of X.
868b2b66 (kx 2024-12-20 16:11:07 +0300  9422)  **************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9423) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9424)   EMUSHORT *eiy_r = NULL, *eiy_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9425)            *eix_r = NULL, *eix_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9426)              *eir = NULL,   *eij = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9427)   mpu_real *py, *px;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9428)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9429)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9430) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9431)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9432)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9433) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9434)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9435) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9436)   px = x;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9437)   py = y;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9438) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9439)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9440) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9441)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9442) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9443)   /*** Allocate memory for eiy_r, eiy_j, eix_r, eix_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9444)   eiy_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9445)   if( !eiy_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9446)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9447)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9448)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9449)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9450) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9451)   eiy_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9452)   if( !eiy_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9453)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9454)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9455) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9456)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9457)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9458)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9459) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9460)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9461)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9462) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9463)   eix_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9464)   if( !eix_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9465)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9466)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9467) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9468)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9469)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9470)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9471)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9472) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9473)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9474)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9475) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9476)   eix_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9477)   if( !eix_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9478)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9479)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9480) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9481)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9482)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9483)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9484)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9485)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9486) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9487)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9488)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9489)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9490) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9491)   /*** Allocate memory for eir, eij . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9492)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9493)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9494)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9495)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9496) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9497)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9498)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9499)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9500)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9501)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9502)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9503) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9504)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9505)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9506) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9507)   eij = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9508)   if( !eij )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9509)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9510)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9511) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9512)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9513)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9514)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9515)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9516)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9517)     __mpu_sbrk( -(int)(5*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9518)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9519) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9520)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9521)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9522)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9523) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9524)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9525)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  9526)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9527) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9528)   px += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9529) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9530)   unpack( eix_j, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9531) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9532)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9533)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  9534)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9535) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9536)   px -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9537) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  9538)   px += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9539) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9540)   unpack( eix_r, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9541) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9542)   /* COSH of a complex number */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9543)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  9544)     y.real = cos( x.imag ) * cosh( x.real );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9545)     y.imag = sin( x.imag ) * sinh( x.real );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9546)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9547)   ei_cos( eij, eix_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9548)   ei_cosh( eir, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9549)   ei_mul( eiy_r, eij, eir, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9550)   ei_sin( eij, eix_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9551)   ei_sinh( eir, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9552)   ei_mul( eiy_j, eij, eir, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9553) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9554)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9555)     pack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  9556)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9557) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9558)   py += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9559) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9560)   pack( (EMUSHORT *)py, eiy_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9561) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9562)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9563)     pack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  9564)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9565) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9566)   py -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9567) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  9568)   py += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9569) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9570)   pack( (EMUSHORT *)py, eiy_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9571) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9572)   /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9573)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9574)   /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9575)   /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9576)   /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9577)   /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9578)   __mpu_sbrk( -(int)(6*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9579)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9580) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9581) } /* End of c_cosh() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9582) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9583) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9584) static void __complex_LOG_of_zero( void )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9585) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9586)   /* error: Complex attempted LOG of zero magnitude number */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9587)   struct __exception  e;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9588) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9589)   __complex_error_no = __C_ELOGOFZERO__;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9590) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9591)   e.who          = _COMPLEX_;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9592)   e.type         = __complex_error_no;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9593)   e.name         = (__mpu_char8_t *)"c_log";
868b2b66 (kx 2024-12-20 16:11:07 +0300  9594)   e.msg          = __mpu_utf8mpu_error( _COMPLEX_, __complex_error_no );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9595)   e.msg_type     = _ERROR_MSG_;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9596)   e.nb_a1        = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9597)   e.nb_a2        = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9598)   e.nb_rv        = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9599)   e.arg_1        = (unsigned char *)0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9600)   e.arg_2        = (unsigned char *)0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9601)   e.return_value = (unsigned char *)0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9602) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9603)   if( __extra_warnings )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9604)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9605)     __mpu_warning( &e );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9606)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9607) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9608)   if( e.msg ) free( e.msg );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9609) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9610)   return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9611) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9612) } /* End of __complex_LOG_of_zero( void ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9613) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9614) void c_log( mpu_complex *y, mpu_complex *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9615) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  9616)   The function returns the logarithm of X.
868b2b66 (kx 2024-12-20 16:11:07 +0300  9617)   The branch cuts are along the negative real axis.
868b2b66 (kx 2024-12-20 16:11:07 +0300  9618)  ***************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9619) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9620)   EMUSHORT *eiy_r = NULL, *eiy_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9621)            *eix_r = NULL, *eix_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9622)              *eir = NULL,   *eij = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9623)             *zero = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9624)              *eih = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9625)   mpu_real *py, *px;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9626)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9627)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9628) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9629)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9630)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9631) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9632)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9633) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9634)   px = x;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9635)   py = y;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9636) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9637)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9638) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9639)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9640) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9641)   /*** Allocate memory for eiy_r, eiy_j, eix_r, eix_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9642)   eiy_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9643)   if( !eiy_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9644)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9645)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9646)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9647)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9648) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9649)   eiy_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9650)   if( !eiy_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9651)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9652)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9653) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9654)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9655)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9656)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9657) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9658)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9659)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9660) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9661)   eix_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9662)   if( !eix_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9663)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9664)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9665) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9666)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9667)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9668)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9669)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9670) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9671)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9672)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9673) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9674)   eix_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9675)   if( !eix_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9676)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9677)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9678) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9679)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9680)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9681)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9682)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9683)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9684) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9685)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9686)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9687)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9688) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9689)   /*** Allocate memory for eir, eij . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9690)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9691)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9692)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9693)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9694) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9695)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9696)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9697)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9698)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9699)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9700)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9701) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9702)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9703)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9704) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9705)   eij = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9706)   if( !eij )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9707)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9708)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9709) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9710)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9711)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9712)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9713)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9714)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9715)     __mpu_sbrk( -(int)(5*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9716)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9717) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9718)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9719)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9720)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9721) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9722)   /*** Allocate memory for zero, eih . ************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9723)   zero = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9724)   if( !zero )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9725)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9726)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9727) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9728)     /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9729)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9730)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9731)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9732)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9733)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9734)     __mpu_sbrk( -(int)(6*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9735)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9736) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9737)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9738)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9739) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9740)   eih = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9741)   if( !eih )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9742)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9743)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9744) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9745)     /* FREE zero **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9746)     /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9747)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9748)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9749)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9750)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9751)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9752)     __mpu_sbrk( -(int)(7*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9753)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9754) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9755)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9756)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9757)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9758) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9759)   _gen_zero( zero, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9760) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9761)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9762)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  9763)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9764) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9765)   px += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9766) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9767)   unpack( eix_j, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9768) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9769)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9770)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  9771)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9772) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9773)   px -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9774) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  9775)   px += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9776) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9777)   unpack( eix_r, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9778) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9779)   /* LOG of a complex number */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9780)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  9781)     real h = hypot( x.real, x.imag );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9782) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9783)     if( h <= 0.0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9784)       x.error("attempted LOG of zero magnitude number.");
868b2b66 (kx 2024-12-20 16:11:07 +0300  9785) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9786)     y.real = log( h );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9787)     y.imag = atan2( x.imag, x.real );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9788)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9789)   ei_mul( eir, eix_r, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9790)   ei_mul( eij, eix_j, eix_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9791)   ei_add( eih, eir, eij, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9792)   ei_sqrt( eih, eih, n_bits );         /* eih = hypot( eix_r, eix_j ); */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9793) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9794)   if( ei_cmp( eih, zero, n_bits ) <= 0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9795)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9796)     /*****************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9797)       Выставление -InF  произойдет и без этих
868b2b66 (kx 2024-12-20 16:11:07 +0300  9798)       операторов, но переход сразу на packing
868b2b66 (kx 2024-12-20 16:11:07 +0300  9799)       сократит время работы этой функции.
868b2b66 (kx 2024-12-20 16:11:07 +0300  9800)      *****************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9801)     ei_infin( eiy_r, (unsigned)1, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9802)     _gen_zero( eiy_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9803)     __complex_LOG_of_zero();
868b2b66 (kx 2024-12-20 16:11:07 +0300  9804)     goto packing;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9805)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9806) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9807)   ei_log( eiy_r, eih, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9808)   ei_atan2( eiy_j, eix_j, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9809) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9810) packing:
868b2b66 (kx 2024-12-20 16:11:07 +0300  9811) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9812)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9813)     pack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300  9814)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9815) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9816)   py += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9817) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9818)   pack( (EMUSHORT *)py, eiy_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9819) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9820)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300  9821)     pack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300  9822)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9823) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300  9824)   py -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9825) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300  9826)   py += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9827) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300  9828)   pack( (EMUSHORT *)py, eiy_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9829) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9830)   /* FREE eih ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9831)   /* FREE zero **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9832)   /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9833)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9834)   /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9835)   /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9836)   /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9837)   /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9838)   __mpu_sbrk( -(int)(8*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9839)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9840) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9841) } /* End of c_log() */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9842) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9843) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9844) static void __complex_POW_of_zero( void )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9845) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9846)   /* error: Complex attempted POW of zero magnitude number */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9847)   struct __exception  e;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9848) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9849)   __complex_error_no = __C_EPOWOFZERO__;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9850) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9851)   e.who          = _COMPLEX_;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9852)   e.type         = __complex_error_no;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9853)   e.name         = (__mpu_char8_t *)"c_pow";
868b2b66 (kx 2024-12-20 16:11:07 +0300  9854)   e.msg          = __mpu_utf8mpu_error( _COMPLEX_, __complex_error_no );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9855)   e.msg_type     = _ERROR_MSG_;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9856)   e.nb_a1        = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9857)   e.nb_a2        = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9858)   e.nb_rv        = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9859)   e.arg_1        = (unsigned char *)0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9860)   e.arg_2        = (unsigned char *)0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9861)   e.return_value = (unsigned char *)0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9862) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9863)   if( __extra_warnings )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9864)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9865)     __mpu_warning( &e );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9866)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9867) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9868)   if( e.msg ) free( e.msg );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9869) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9870)   return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9871) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9872) } /* End of __complex_POW_of_zero( void ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9873) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9874) void c_pow( mpu_complex *y, mpu_complex *x, mpu_complex *p, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9875) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300  9876)   The functions return the Y = X^P.
868b2b66 (kx 2024-12-20 16:11:07 +0300  9877)   The branch cut for x is along the negative real axis.
868b2b66 (kx 2024-12-20 16:11:07 +0300  9878)  *******************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9879) {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9880)   EMUSHORT *eiy_r = NULL, *eiy_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9881)            *eix_r = NULL, *eix_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9882)            *eip_r = NULL, *eip_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9883)              *eir = NULL,   *eij = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9884)             *eilr = NULL,  *eilj = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9885)             *zero = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300  9886)              *eih = NULL,   *eia = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9887)   mpu_real *py, *px, *pp;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9888)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9889)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9890) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9891)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9892)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9893) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9894)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9895) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9896)   pp = p;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9897)   px = x;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9898)   py = y;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9899) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9900)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9901) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9902)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9903) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9904)   /*** Allocate memory for eiy_r, eiy_j, eix_r, eix_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9905)   eiy_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9906)   if( !eiy_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9907)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9908)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9909)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9910)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9911) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9912)   eiy_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9913)   if( !eiy_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9914)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9915)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9916) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9917)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9918)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9919)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9920) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9921)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9922)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9923) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9924)   eix_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9925)   if( !eix_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9926)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9927)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9928) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9929)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9930)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9931)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9932)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9933) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9934)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9935)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9936) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9937)   eix_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9938)   if( !eix_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9939)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9940)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9941) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9942)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9943)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9944)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9945)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9946)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9947) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9948)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9949)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9950)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9951) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9952)   /*** Allocate memory for eip_r, eip_j . *********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9953)   eip_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9954)   if( !eip_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9955)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9956)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9957) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9958)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9959)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9960)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9961)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9962)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9963)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9964) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9965)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9966)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9967) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9968)   eip_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9969)   if( !eip_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9970)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9971)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9972) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9973)     /* FREE eip_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9974)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9975)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9976)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9977)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9978)     __mpu_sbrk( -(int)(5*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9979)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9980) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9981)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300  9982)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300  9983)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9984) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9985)   /*** Allocate memory for eir, eij . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9986)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9987)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300  9988)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300  9989)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300  9990) 
868b2b66 (kx 2024-12-20 16:11:07 +0300  9991)     /* FREE eip_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9992)     /* FREE eip_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9993)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9994)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9995)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9996)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9997)     __mpu_sbrk( -(int)(6*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300  9998)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300  9999) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10000)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10001)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10002) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10003)   eij = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10004)   if( !eij )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10005)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10006)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10007) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10008)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10009)     /* FREE eip_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10010)     /* FREE eip_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10011)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10012)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10013)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10014)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10015)     __mpu_sbrk( -(int)(7*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10016)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10017) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10018)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10019)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10020)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10021) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10022)   /*** Allocate memory for eilr, eilj . ***********************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10023)   eilr = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10024)   if( !eilr )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10025)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10026)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10027) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10028)     /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10029)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10030)     /* FREE eip_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10031)     /* FREE eip_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10032)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10033)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10034)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10035)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10036)     __mpu_sbrk( -(int)(8*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10037)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10038) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10039)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10040)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10041) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10042)   eilj = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10043)   if( !eilj )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10044)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10045)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10046) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10047)     /* FREE eilr **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10048)     /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10049)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10050)     /* FREE eip_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10051)     /* FREE eip_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10052)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10053)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10054)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10055)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10056)     __mpu_sbrk( -(int)(9*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10057)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10058) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10059)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10060)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10061)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10062) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10063)   /*** Allocate memory for zero, eih, eia . *******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10064)   zero = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10065)   if( !zero )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10066)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10067)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10068) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10069)     /* FREE eilj **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10070)     /* FREE eilr **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10071)     /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10072)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10073)     /* FREE eip_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10074)     /* FREE eip_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10075)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10076)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10077)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10078)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10079)     __mpu_sbrk( -(int)(10*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10080)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10081) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10082)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10083)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10084) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10085)   eih = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10086)   if( !eih )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10087)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10088)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10089) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10090)     /* FREE zero **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10091)     /* FREE eilj **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10092)     /* FREE eilr **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10093)     /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10094)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10095)     /* FREE eip_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10096)     /* FREE eip_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10097)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10098)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10099)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10100)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10101)     __mpu_sbrk( -(int)(11*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10102)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10103) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10104)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10105)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10106) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10107)   eia = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10108)   if( !eia )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10109)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10110)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10111) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10112)     /* FREE eih ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10113)     /* FREE zero **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10114)     /* FREE eilj **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10115)     /* FREE eilr **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10116)     /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10117)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10118)     /* FREE eip_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10119)     /* FREE eip_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10120)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10121)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10122)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10123)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10124)     __mpu_sbrk( -(int)(12*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10125)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10126) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10127)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10128)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10129)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10130) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10131)   _gen_zero( zero, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10132) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10133)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300 10134)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300 10135)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10136) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300 10137)   px += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10138)   pp += nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10139) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 10140)   unpack( eix_j, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10141)   unpack( eip_j, (EMUSHORT *)pp, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10142) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10143)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300 10144)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300 10145)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10146) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300 10147)   px -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10148)   pp -= nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10149) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300 10150)   px += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10151)   pp += nb;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10152) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 10153)   unpack( eix_r, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10154)   unpack( eip_r, (EMUSHORT *)pp, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10155) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10156)   /* POW of a complex number */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10157)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300 10158)     real h = hypot( x.real, x.imag );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10159) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10160)     if( h <= 0.0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10161)       x.error("attempted POWER of zero magnitude number.");
868b2b66 (kx 2024-12-20 16:11:07 +0300 10162) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10163)     real a  = atan2( x.imag, x.real );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10164)     real lr = pow( h, p.real );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10165)     real lj = p.real * a;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10166) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10167)     if( p.imag != 0.0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10168)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10169)       lr /= exp( p.imag * a );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10170)       lj += p.imag * log( h );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10171)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10172) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10173)     y.real = lr * cos( lj );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10174)     y.imag = lr * sin( lj );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10175)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10176)   ei_mul( eir, eix_r, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10177)   ei_mul( eij, eix_j, eix_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10178)   ei_add( eih, eir, eij, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10179)   ei_sqrt( eih, eih, n_bits );         /* eih = hypot( eix_r, eix_j ); */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10180) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10181)   if( ei_cmp( eih, zero, n_bits ) <= 0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10182)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10183)     /*********************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 10184)       В принципе выражение 0^0, как и выражение 0/0, неопределено.
868b2b66 (kx 2024-12-20 16:11:07 +0300 10185)       Но функции POW, в этом случае, возвращают 1.0 и мы не будем
868b2b66 (kx 2024-12-20 16:11:07 +0300 10186)       здесь принудительно выставлять значения
868b2b66 (kx 2024-12-20 16:11:07 +0300 10187)         eiy_r = 0.0,
868b2b66 (kx 2024-12-20 16:11:07 +0300 10188)         eiy_j = 0.0
868b2b66 (kx 2024-12-20 16:11:07 +0300 10189)       и переходить на упаковку, т.к. можем пропустить
868b2b66 (kx 2024-12-20 16:11:07 +0300 10190)       выражение 0^0.
868b2b66 (kx 2024-12-20 16:11:07 +0300 10191)       ==============
868b2b66 (kx 2024-12-20 16:11:07 +0300 10192)      *********************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10193)     /* _gen_zero( eiy_j, n_bits ); */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10194)     /* _gen_zero( eiy_j, n_bits ); */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10195)     __complex_POW_of_zero();
868b2b66 (kx 2024-12-20 16:11:07 +0300 10196)     /* goto packing; */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10197)     /*********************************************************
868b2b66 (kx 2024-12-20 16:11:07 +0300 10198)       Здесь POW( 0.0r0+0.0j0, 0.0r0+0.0j0 ) == 1.0r0+0.0j0;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10199)      *********************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10200)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10201) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10202)   ei_atan2( eia, eix_j, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10203)   ei_pow( eilr, eih, eip_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10204)   ei_mul( eilj, eip_r, eia, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10205) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10206)   if( ei_cmp( eip_j, zero, n_bits ) != 0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10207)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10208)     ei_mul( eir, eip_j, eia, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10209)     ei_exp( eir, eir, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10210)     ei_div( eilr, eilr, eir, n_bits ); /* lr /= exp( p.imag * a ); */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10211) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10212)     ei_log( eij, eih, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10213)     ei_mul( eij, eip_j, eij, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10214)     ei_add( eilj, eilj, eij, n_bits ); /* lj += p.imag * log( h ); */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10215)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10216) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10217)   ei_cos( eir, eilj, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10218)   ei_mul( eiy_r, eilr, eir, n_bits );   /* y.real = lr * cos( lj ); */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10219) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10220)   ei_sin( eij, eilj, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10221)   ei_mul( eiy_j, eilr, eij, n_bits );   /* y.imag = lr * sin( lj ); */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10222) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10223) /* packing: */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10224) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10225)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300 10226)     pack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300 10227)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10228) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300 10229)   py += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10230) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 10231)   pack( (EMUSHORT *)py, eiy_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10232) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10233)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300 10234)     pack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300 10235)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10236) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300 10237)   py -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10238) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300 10239)   py += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10240) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 10241)   pack( (EMUSHORT *)py, eiy_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10242) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10243)   /* FREE eia ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10244)   /* FREE eih ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10245)   /* FREE zero **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10246)   /* FREE eilj **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10247)   /* FREE eilr **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10248)   /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10249)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10250)   /* FREE eip_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10251)   /* FREE eip_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10252)   /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10253)   /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10254)   /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10255)   /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10256)   __mpu_sbrk( -(int)(13*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10257)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10258) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10259) } /* End of c_pow() */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10260) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10261) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10262) void c_sqrt( mpu_complex *y, mpu_complex *x, int nb )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10263) /*
868b2b66 (kx 2024-12-20 16:11:07 +0300 10264)   The function returns the square root of X, with
868b2b66 (kx 2024-12-20 16:11:07 +0300 10265)   phase angle in the half-open interval (-pi/2, pi/2].
868b2b66 (kx 2024-12-20 16:11:07 +0300 10266)   The branch cuts are along the negative real axis.
868b2b66 (kx 2024-12-20 16:11:07 +0300 10267)  ******************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10268) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10269)   EMUSHORT *eiy_r = NULL, *eiy_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300 10270)            *eix_r = NULL, *eix_j = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300 10271)              *eir = NULL,   *eij = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300 10272)             *zero = NULL,  *half = NULL,
868b2b66 (kx 2024-12-20 16:11:07 +0300 10273)              *eih = NULL;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10274)   mpu_real *py, *px;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10275)   int       n_bits;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10276)   int       np;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10277) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10278)   errno           = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10279)   __real_error_no = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10280) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10281)   __CLEAR_RFLAGS;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10282) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10283)   px = x;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10284)   py = y;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10285) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10286)   n_bits = nb * BITS_PER_BYTE;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10287) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10288)   np = internal_np( n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10289) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10290)   /*** Allocate memory for eiy_r, eiy_j, eix_r, eix_j . *******/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10291)   eiy_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10292)   if( !eiy_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10293)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10294)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10295)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10296)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10297) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10298)   eiy_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10299)   if( !eiy_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10300)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10301)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10302) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10303)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10304)     __mpu_sbrk( -(int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10305)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10306) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10307)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10308)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10309) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10310)   eix_r = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10311)   if( !eix_r )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10312)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10313)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10314) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10315)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10316)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10317)     __mpu_sbrk( -(int)(2*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10318)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10319) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10320)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10321)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10322) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10323)   eix_j = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10324)   if( !eix_j )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10325)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10326)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10327) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10328)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10329)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10330)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10331)     __mpu_sbrk( -(int)(3*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10332)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10333) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10334)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10335)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10336)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10337) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10338)   /*** Allocate memory for eir, eij . *************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10339)   eir = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10340)   if( !eir )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10341)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10342)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10343) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10344)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10345)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10346)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10347)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10348)     __mpu_sbrk( -(int)(4*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10349)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10350) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10351)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10352)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10353) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10354)   eij = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10355)   if( !eij )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10356)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10357)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10358) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10359)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10360)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10361)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10362)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10363)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10364)     __mpu_sbrk( -(int)(5*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10365)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10366) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10367)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10368)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10369)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10370) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10371)   /*** Allocate memory for zero, half, eih . ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10372)   zero = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10373)   if( !zero )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10374)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10375)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10376) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10377)     /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10378)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10379)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10380)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10381)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10382)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10383)     __mpu_sbrk( -(int)(6*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10384)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10385) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10386)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10387)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10388) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10389)   half = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10390)   if( !half )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10391)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10392)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10393) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10394)     /* FREE zero **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10395)     /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10396)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10397)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10398)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10399)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10400)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10401)     __mpu_sbrk( -(int)(7*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10402)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10403) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10404)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10405)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10406) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10407)   eih = (EMUSHORT *)__mpu_sbrk( (int)(np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10408)   if( !eih )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10409)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10410)     /* fatal error */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10411) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10412)     /* FREE half **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10413)     /* FREE zero **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10414)     /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10415)     /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10416)     /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10417)     /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10418)     /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10419)     /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10420)     __mpu_sbrk( -(int)(8*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10421)     /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10422) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10423)     return;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10424)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10425)   /************************************************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10426) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10427)   _gen_zero( zero, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10428)   _gen_half( half, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10429) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10430)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300 10431)     unpack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300 10432)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10433) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300 10434)   px += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10435) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 10436)   unpack( eix_j, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10437) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10438)   /******************
868b2b66 (kx 2024-12-20 16:11:07 +0300 10439)     unpack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300 10440)    ******************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10441) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300 10442)   px -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10443) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300 10444)   px += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10445) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 10446)   unpack( eix_r, (EMUSHORT *)px, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10447) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10448)   /* SQRT of a complex number */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10449)   /*
868b2b66 (kx 2024-12-20 16:11:07 +0300 10450)     if( x.real == 0.0 && x.imag == 0.0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10451)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10452)       y.real = 0.0;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10453)       y.imag = 0.0;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10454)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10455)     else
868b2b66 (kx 2024-12-20 16:11:07 +0300 10456)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10457)       real s = sqrt( (abs( x.real ) + hypot( x.real, x.imag )) * 0.5 );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10458)       real d = ( x.imag / s ) * 0.5;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10459) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10460)       if( x.real > 0.0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10461)       {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10462)         y.real = s;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10463)         y.imag = d;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10464)       }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10465)       else if( x.imag >= 0.0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10466)       {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10467)         y.real = d;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10468)         y.imag = s;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10469)       }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10470)       else
868b2b66 (kx 2024-12-20 16:11:07 +0300 10471)       {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10472)         y.real = -d;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10473)         y.imag = -s;
868b2b66 (kx 2024-12-20 16:11:07 +0300 10474)       }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10475)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10476)    */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10477) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10478)   if( (ei_cmp( eix_r, zero, n_bits ) == 0) &&
868b2b66 (kx 2024-12-20 16:11:07 +0300 10479)       (ei_cmp( eix_j, zero, n_bits ) == 0)   )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10480)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10481)     _gen_zero( eiy_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10482)     _gen_zero( eiy_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10483)   }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10484)   else
868b2b66 (kx 2024-12-20 16:11:07 +0300 10485)   {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10486)     ei_mul( eir, eix_r, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10487)     ei_mul( eij, eix_j, eix_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10488)     ei_add( eih, eir, eij, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10489)     ei_sqrt( eih, eih, n_bits );      /* eih = hypot( eix_r, eix_j ); */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10490) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10491)     ei_copy( eir, eix_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10492)     ei_abs( eir, n_bits );            /* eir = abs( eix_r ); */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10493) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10494)     ei_add( eir, eir, eih, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10495)     ei_mul( eir, eir, half, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10496)     ei_sqrt( eir, eir, n_bits );      /* s := eir; */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10497) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10498)     ei_div( eij, eix_j, eir, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10499)     ei_mul( eij, eij, half, n_bits ); /* d := eij; */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10500) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10501)     if( ei_cmp( eix_r, zero, n_bits ) >  0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10502)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10503)       ei_copy( eiy_r, eir, n_bits ); /* y.real =  s; */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10504)       ei_copy( eiy_j, eij, n_bits ); /* y.imag =  d; */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10505)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10506)     else if( ei_cmp( eix_j, zero, n_bits ) >= 0 )
868b2b66 (kx 2024-12-20 16:11:07 +0300 10507)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10508)       ei_copy( eiy_r, eij, n_bits ); /* y.real =  d; */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10509)       ei_copy( eiy_j, eir, n_bits ); /* y.imag =  s; */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10510)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10511)     else
868b2b66 (kx 2024-12-20 16:11:07 +0300 10512)     {
868b2b66 (kx 2024-12-20 16:11:07 +0300 10513)       ei_neg( eir, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10514)       ei_neg( eij, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10515) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10516)       ei_copy( eiy_r, eij, n_bits ); /* y.real = -d; */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10517)       ei_copy( eiy_j, eir, n_bits ); /* y.imag = -s; */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10518)     }
868b2b66 (kx 2024-12-20 16:11:07 +0300 10519) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10520)   } /* End if( X != 0.0r0+0.0j0 ) */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10521) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10522)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300 10523)     pack IMAGINARY
868b2b66 (kx 2024-12-20 16:11:07 +0300 10524)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10525) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300 10526)   py += nb; /* point to imaginary */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10527) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 10528)   pack( (EMUSHORT *)py, eiy_j, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10529) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10530)   /****************
868b2b66 (kx 2024-12-20 16:11:07 +0300 10531)     pack REAL_PART
868b2b66 (kx 2024-12-20 16:11:07 +0300 10532)    ****************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10533) #if MPU_WORD_ORDER_BIG_ENDIAN == 1
868b2b66 (kx 2024-12-20 16:11:07 +0300 10534)   py -= nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10535) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300 10536)   py += nb; /* point to real_part */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10537) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 10538)   pack( (EMUSHORT *)py, eiy_r, n_bits );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10539) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10540)   /* FREE eih ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10541)   /* FREE half **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10542)   /* FREE zero **************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10543)   /* FREE eij ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10544)   /* FREE eir ***************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10545)   /* FREE eix_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10546)   /* FREE eix_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10547)   /* FREE eiy_j *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10548)   /* FREE eiy_r *************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10549)   __mpu_sbrk( -(int)(9*np*SIZE_OF_EMUSHORT) );
868b2b66 (kx 2024-12-20 16:11:07 +0300 10550)   /**************************/
868b2b66 (kx 2024-12-20 16:11:07 +0300 10551) 
868b2b66 (kx 2024-12-20 16:11:07 +0300 10552) } /* End of c_sqrt() */
868b2b66 (kx 2024-12-20 16:11:07 +0300 10553)