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)