亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? math24f.h

?? FreeRTOS 是一個源碼公開的免費的嵌入式實時操作系統
?? H
?? 第 1 頁 / 共 2 頁
字號:
// *************************************************
// 24 bit basic floating point math operations
// Copyright (c) B Knudsen Data, Norway, 2000 - 2005
// *************************************************

#pragma library 1
/* PROTOTYPES for page definition in application header file:
float24 operator* _fmul24( float24 arg1f24, float24 arg2f24);
float24 operator/ _fdiv24( float24 arg1f24, float24 arg2f24);
float24 operator+ _fadd24( float24 arg1f24, float24 arg2f24);
float24 operator- _fsub24( float24 arg1f24, float24 arg2f24);
float24 operator= _int24ToFloat24( int24 arg1f24);
float24 operator= _int32ToFloat24( int32 arg32);
int24 operator= _float24ToInt24( float24 arg1f24);
bit operator< _f24_LT_f24( float24 arg1f24, float24 arg2f24);
bit operator>= _f24_GE_f24( float24 arg1f24, float24 arg2f24);
bit operator> _f24_GT_f24( float24 arg1f24, float24 arg2f24);
bit operator<= _f24_LE_f24( float24 arg1f24, float24 arg2f24);
*/

// DEFINABLE SYMBOLS (in the application code):
//#define FP_OPTIM_SPEED  // optimize for SPEED: default
//#define FP_OPTIM_SIZE   // optimize for SIZE
//#define DISABLE_ROUNDING   // disable rounding and save code space

#define float24ToIEEE754(a) { a.mid8=rl(a.mid8); a.high8=rr(a.high8);\
                              a.mid8=rr(a.mid8); }
#define IEEE754ToFloat24(a) { a.mid8=rl(a.mid8); a.high8=rl(a.high8);\
                              a.mid8=rr(a.mid8); }


/*  24 bit floating point format:

  address  ID
    X      a.low8  : LSB, bit 0-7 of mantissa
    X+1    a.mid8  : bit 8-14 of mantissa, bit 15 is the sign bit
    X+2    a.high8 : MSB, bit 0-7 of exponent, with bias 0x7F

    bit 15 of mantissa is a hidden bit, always equal to 1
    zero (0.0) :  a.high8 = 0 (mantissa & sign ignored)

   MSB    LSB
    7F 00 00  : 1.0   =  1.0  * 2**(0x7F-0x7F) = 1.0 * 1
    7F 80 00  : -1.0  = -1.0  * 2**(0x7F-0x7F) = -1.0 * 1
    80 00 00  : 2.0   =  1.0  * 2**(0x80-0x7F) = 1.0 * 2
    80 40 00  : 3.0   =  1.5  * 2**(0x80-0x7F) = 1.5 * 2
    7E 60 00  : 0.875 =  1.75 * 2**(0x7E-0x7F) = 1.75 * 0.5
    7F 60 00  : 1.75  =  1.75 * 2**(0x7E-0x7F) = 1.75 * 1
    7F 7F FF  : 1.999969482
    00 7C 5A  : 0.0 (mantissa & sign ignored)
    01 00 00  : 1.17549435e-38 =  1.0 * 2**(0x01-0x7F)
    FE 7F FF  : 3.40277175e+38 =  1.999969482 * 2**(0xFE-0x7F)
    FF 00 00  : +INF : positive infinity
    FF 80 00  : -INF : negative infinity
*/                 

#define  FpBIAS  0x7F

#ifndef FpFlags_defined
 #define FpFlags_defined

 char FpFlags;
 //bit IOV         @ FpFlags.0; // integer overflow flag: NOT USED
 bit FpOverflow    @ FpFlags.1; // floating point overflow flag
 bit FpUnderFlow   @ FpFlags.2; // floating point underflow flag
 bit FpDiv0        @ FpFlags.3; // floating point divide by zero flag
 //bit FpNAN       @ FpFlags.4; // not-a-number exception flag: NOT USED
 bit FpDomainError @ FpFlags.5; // domain error exception flag
 bit FpRounding    @ FpFlags.6; // floating point rounding flag, 0=truncation
                                // 1 = unbiased rounding to nearest LSB
 //bit FpSaturate  @ FpFlags.7; // floating point saturate flag: NOT USED

 #pragma floatOverflow FpOverflow
 #pragma floatUnderflow FpUnderFlow

 #define InitFpFlags()  FpFlags = 0x40 /* enable rounding as default */
#endif

#ifdef DISABLE_ROUNDING
 #pragma floatRounding 0
#endif


#if __CoreSet__ < 1600
 #define genAdd(r,a) W=a; btsc(Carry); W=incsz(a); r+=W;
 #define genSub(r,a) W=a; btss(Carry); W=incsz(a); r-=W;
 #define genAddW(r,a) W=a; btsc(Carry); W=incsz(a); W=r+W;
 #define genSubW(r,a) W=a; btss(Carry); W=incsz(a); W=r-W;
#else
 #define genAdd(r,a) W=a; r=addWFC(r);
 #define genSub(r,a) W=a; r=subWFB(r);
 #define genAddW(r,a) W=a; W=addWFC(r);
 #define genSubW(r,a) W=a; W=subWFB(r);
#endif

#if __CoreSet__ == 1700 || __CoreSet__ == 1800
 #define hw_mult8x8(a,b)  { W = a; multiply(b); }
 #define loRES PRODL
 #define hiRES PRODH
#endif

#if __CoreSet__ == 2000
 #define hw_mult8x8(a,b)  { W = a; multiply(b); }
 #define loRES W
 #define hiRES MULH
#endif


float24 operator* _fmul24( sharedM float24 arg1f24, sharedM float24 arg2f24)
{
    uns16 aarg;
    W = arg1f24.mid8;
    aarg.high8 = W;

    // save sign
    char sign = arg2f24.mid8 ^ W;  // before first overflow test

    W = arg1f24.high8;
   #if __CoreSet__ / 100 == 17
    if (W != 0)
        W = arg2f24.high8;
    if (W == 0)
        goto RES0;
   #else
    if (!Zero_)
        W = arg2f24.high8;
    if (Zero_)
        goto RES0;
   #endif

    arg1f24.high8 += W /* arg2f24.high8 */;
    W = FpBIAS-1;
    if (Carry)  {
        arg1f24.high8 -= W;
        if (Carry)
            goto OVERFLOW;
    }
    else  {
        arg1f24.high8 -= W;
        if (!Carry)
            goto UNDERFLOW;
    }
    aarg.low8 = arg1f24.low8;

    aarg.15 = 1;
    arg2f24.15 = 1;

   #if defined hw_mult8x8  &&  !defined FP_OPTIM_SIZE

    char tmpL;
    arg1f24.low16 = 0;

    hw_mult8x8( arg2f24.low8, aarg.low8);   // p1
    tmpL = hiRES;

    hw_mult8x8( arg2f24.mid8, aarg.low8);  // p2
    tmpL += loRES;
    genAdd( arg1f24.low8, hiRES);
    genAdd( arg1f24.mid8, 0);

    hw_mult8x8( arg2f24.low8, aarg.mid8);  // p2
    tmpL += loRES;
    genAdd( arg1f24.low8, hiRES);
    genAdd( arg1f24.mid8, 0);

    hw_mult8x8( arg2f24.mid8, aarg.mid8);  // p3
    arg1f24.low8 += loRES;
    genAdd( arg1f24.mid8, hiRES);

   #undef hw_mult8x8
   #undef loRES
   #undef hiRES

    if (!arg1f24.15)  {
        tmpL = rl( tmpL);
        arg1f24.low16 = rl( arg1f24.low16);
        if (arg1f24.high8 == 0)
            goto UNDERFLOW;
        arg1f24.high8 -= 1;
        W = rl( tmpL);  // restore bit behind LSB in Carry
    }

   #else

    arg1f24.low16 = 0;

    char counter = sizeof(aarg)*8;

    do  {
        aarg = rr( aarg);
        if (Carry)  {
            arg1f24.low8 += arg2f24.low8;
            genAdd( arg1f24.mid8, arg2f24.mid8);
        }
        arg1f24.low16 = rr( arg1f24.low16);
        counter = decsz(counter);
    } while (1);

    if (!arg1f24.15)  {
        // catch Carry bit that was shifted out previously
        arg1f24.low16 = rl( arg1f24.low16);
        if (arg1f24.high8 == 0)
            goto UNDERFLOW;
        arg1f24.high8 -= 1;
        W = rl( aarg.high8);
        // restore bit behind LSB in Carry
    }

   #endif

   #ifndef DISABLE_ROUNDING
    if (FpRounding  &&  Carry)  {
        arg1f24.low8 += 1;
        if (!arg1f24.low8)  {
            arg1f24.mid8 += 1;
            if (!arg1f24.mid8)  {
               #if __CoreSet__ >= 1700 && __CoreSet__ <= 1800
                Carry = 1; // previous INCF changes Carry
               #else
                // Carry = 1; //OK
               #endif
                arg1f24.low16 = rr( arg1f24.low16);
                arg1f24.high8 += 1;
                if (Zero_)
                    goto OVERFLOW;
            }
        }
    }
   #endif
    goto SET_SIGN;

  UNDERFLOW:
    FpUnderFlow = 1;
  RES0:
    arg1f24.high8 = 0;
    goto MANTISSA;

  OVERFLOW:
    FpOverflow = 1;
    arg1f24.high8 = 0xFF;
  MANTISSA:
    arg1f24.low16 = 0x8000;

  SET_SIGN:
    if (!(sign & 0x80))
        arg1f24.15 = 0;
    return arg1f24;
}



float24 operator/ _fdiv24( sharedM float24 arg1f24, sharedM float24 arg2f24)
{
    uns16 aarg;
    W = arg1f24.mid8;
    aarg.high8 = W;

    // save sign
    char sign = arg2f24.mid8 ^ W;  // before first overflow test

   #if __CoreSet__ / 100 == 17
    if (!arg2f24.high8)
        goto Div0;
   #else
    W = arg2f24.high8;
    if (Zero_)
        goto Div0;
   #endif
    if (!arg1f24.high8)
        goto RES0;

    arg1f24.high8 -= arg2f24.high8;
    W = FpBIAS;
    if (!Carry)  {
        arg1f24.high8 += W;
        if (!Carry)
            goto UNDERFLOW;
    }
    else  {
        arg1f24.high8 += W;
        if (Carry)
            goto OVERFLOW;
    }

    aarg.low8 = arg1f24.low8;
    aarg.15 = 1;
    arg2f24.15 = 1;

    // division: shift & add
    char counter = 16;
    arg1f24.low16 = 0;  // speedup

#if defined FP_OPTIM_SPEED || !defined FP_OPTIM_SIZE  // SPEED

    goto START;

  TEST_ZERO_L:
    W = aarg.low8 - arg2f24.low8;
    if (!Carry)
        goto SHIFT_IN_CARRY;
    aarg.low8 = W;
    aarg.high8 = 0;
    goto SET_AND_SHIFT_IN_CARRY;

// MAIN LOOP
    do  {
      LOOP:
        if (!Carry)  {
           START:
            W = aarg.high8 - arg2f24.mid8;
            if (Zero_)
                goto TEST_ZERO_L;
            if (!Carry)
                goto SHIFT_IN_CARRY;
        }
        aarg.low8 -= arg2f24.low8;
        genSub( aarg.high8, arg2f24.mid8);
      SET_AND_SHIFT_IN_CARRY:
        Carry = 1;
      SHIFT_IN_CARRY:
        arg1f24.low16 = rl( arg1f24.low16);
        // Carry = 0;  // ok, speedup
        aarg = rl( aarg);
        counter = decsz(counter);
    } while (1);



#else  // SIZE

    goto START;

// MAIN LOOP
    do  {
      LOOP:
        if (Carry)
            goto SUBTRACT;
      START:
        W = aarg.low8 - arg2f24.low8;
        genSubW( aarg.high8, arg2f24.mid8);
        if (!Carry)
            goto SKIP_SUB;
       SUBTRACT:
        aarg.low8 -= arg2f24.low8;
        genSub( aarg.high8, arg2f24.mid8);
        Carry = 1;
       SKIP_SUB:
        arg1f24.low16 = rl( arg1f24.low16);
        // Carry = 0;  // ok
        aarg = rl( aarg);
        counter = decsz(counter);
    } while (1);

#endif

    if (!arg1f24.15)  {
        if (!arg1f24.high8)
            goto UNDERFLOW;
       #if __CoreSet__ >= 1700 && __CoreSet__ <= 1800
        sign = rr( sign);   // Save Carry
       #endif
        arg1f24.high8 --;
        counter ++;
       #if __CoreSet__ >= 1700 && __CoreSet__ <= 1800
        sign = rl( sign);   // Restore Carry, changed by INCF/DECF
       #endif
        goto LOOP;
    }

   #ifndef DISABLE_ROUNDING
    if (FpRounding)  {
        if (Carry)
            goto ADD_1;
        aarg.low8 -= arg2f24.low8;
        genSub( aarg.high8, arg2f24.mid8);
        if (Carry)  {
          ADD_1:
            arg1f24.low8 += 1;
            if (!arg1f24.low8)  {
                arg1f24.mid8 ++;
                if (!arg1f24.mid8)  {
                    arg1f24.low16 = rr( arg1f24.low16);
                    arg1f24.high8 ++;
                    if (!arg1f24.high8)
                        goto OVERFLOW;
                }
            }
        }
    }
   #endif
    goto SET_SIGN;

  Div0:
    FpDiv0 = 1;
    goto SATURATE;

  UNDERFLOW:
    FpUnderFlow = 1;
  RES0:
    arg1f24.high8 = 0;
    goto MANTISSA;

  OVERFLOW:
    FpOverflow = 1;
  SATURATE:
    arg1f24.high8 = 0xFF;
  MANTISSA:
    arg1f24.low16 = 0x8000;

  SET_SIGN:
    if (!(sign & 0x80))
        arg1f24.15 = 0;
    return arg1f24;
}


float24 operator+ _fadd24( sharedM float24 arg1f24, sharedM float24 arg2f24)
{
    char xtra, temp;
    char expo = arg1f24.high8 - arg2f24.high8;
    if (!Carry)  {
        expo = -expo;
        temp = arg1f24.high8;
        arg1f24.high8 = arg2f24.high8;
        arg2f24.high8 = temp;
        temp = arg1f24.mid8;
        arg1f24.mid8 = arg2f24.mid8;
        arg2f24.mid8 = temp;
        temp = arg1f24.low8;
        arg1f24.low8 = arg2f24.low8;
        arg2f24.low8 = temp;
    }
    if (expo > sizeof(arg1f24)*8-7)
        goto RETURN;
    if (!arg2f24.high8)
        goto RETURN;   // result is arg1f24

    xtra = 0;

    W = arg1f24.mid8;
    temp = W;
    char sign = arg2f24.mid8 ^ W;
    arg1f24.15 = 1;
    arg2f24.15 = 1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频 欧洲视频| 欧美国产视频在线| 色屁屁一区二区| 国产成人av一区| 国产一区二区三区免费看 | 成人免费一区二区三区视频| 精品久久一区二区| 日韩欧美中文一区二区| 日韩一区二区电影网| 正在播放一区二区| 日韩一区二区麻豆国产| 精品国产一二三| 久久午夜羞羞影院免费观看| 久久精品夜色噜噜亚洲a∨| 久久久精品人体av艺术| 国产喂奶挤奶一区二区三区| 中文字幕欧美激情一区| **网站欧美大片在线观看| 亚洲色图视频网| 亚洲成人动漫在线免费观看| 午夜精品免费在线| 国产精品一级在线| 99热精品一区二区| 777奇米成人网| 2022国产精品视频| 亚洲日本丝袜连裤袜办公室| 香蕉久久夜色精品国产使用方法 | 亚洲视频1区2区| 亚洲国产一区二区三区青草影视| 午夜久久久久久| 韩国中文字幕2020精品| 99久久精品免费精品国产| 欧美午夜寂寞影院| 久久久久久亚洲综合影院红桃| 中文字幕成人av| 五月天激情小说综合| 国内外成人在线视频| 91网站在线观看视频| 日韩欧美在线不卡| 亚洲色图第一区| 六月丁香婷婷久久| 91成人在线精品| 精品久久久久久最新网址| 中文字幕五月欧美| 久久99深爱久久99精品| 欧洲av在线精品| 国产欧美精品国产国产专区| 亚洲成在人线在线播放| 国产999精品久久久久久| 欧美日韩亚洲高清一区二区| 久久精品视频网| 奇米影视一区二区三区| 97久久超碰精品国产| 欧美videofree性高清杂交| 夜夜嗨av一区二区三区| 国产69精品久久777的优势| 日韩欧美激情四射| 亚洲综合av网| 91美女蜜桃在线| 国产精品乱码一区二区三区软件| 免费人成精品欧美精品| 欧美三级在线播放| 一区二区三区在线高清| 波多野结衣亚洲| 国产精品欧美一区二区三区| 九九视频精品免费| 欧美电影在哪看比较好| 亚洲午夜久久久久久久久久久 | 亚洲一区二区三区免费视频| 成人动漫视频在线| 国产日韩av一区| 国产成人午夜视频| 久久久久久亚洲综合| 伦理电影国产精品| 日韩欧美高清dvd碟片| 日本少妇一区二区| 欧美一区二区福利视频| 日韩不卡一二三区| 欧美一区二区三区影视| 日本欧美大码aⅴ在线播放| 91精品国产福利| 久久精品国产一区二区三| 欧美一区二区播放| 韩国av一区二区三区在线观看| 日韩视频国产视频| 国产精品自在欧美一区| 国产拍欧美日韩视频二区| 国产大陆精品国产| 成人欧美一区二区三区黑人麻豆| eeuss鲁片一区二区三区| 亚洲乱码中文字幕| 在线观看日韩av先锋影音电影院| 一区二区三区四区五区视频在线观看| 色噜噜偷拍精品综合在线| 亚洲国产日韩a在线播放性色| 欧美综合一区二区| 日韩成人午夜电影| 国产性色一区二区| 99视频精品全部免费在线| 亚洲网友自拍偷拍| 欧美成人高清电影在线| 国产高清精品网站| 亚洲精品自拍动漫在线| 制服丝袜亚洲精品中文字幕| 久久99久久99精品免视看婷婷| 国产午夜精品久久久久久久| 91麻豆高清视频| 蜜乳av一区二区| 日本一区二区电影| 欧美精品久久久久久久多人混战 | 国产乱人伦偷精品视频免下载 | 日韩精品国产欧美| 久久精品视频一区二区三区| 91视频在线看| 麻豆精品一二三| 亚洲视频你懂的| 精品国产乱码91久久久久久网站| 波多野结衣的一区二区三区| 日本亚洲三级在线| 亚洲色图清纯唯美| 26uuu欧美| 欧美精品视频www在线观看| 国产成人综合自拍| 日韩精品电影在线观看| 国产午夜亚洲精品不卡| 欧美一级欧美一级在线播放| www.成人网.com| 国产在线看一区| 五月婷婷综合网| 亚洲柠檬福利资源导航| 久久久国产午夜精品 | 国产麻豆视频一区| 五月天国产精品| 亚洲精品老司机| 国产精品乱子久久久久| 精品国产青草久久久久福利| 欧美日韩在线精品一区二区三区激情 | 亚洲欧美欧美一区二区三区| 精品日韩成人av| 欧美日韩小视频| 91丝袜呻吟高潮美腿白嫩在线观看| 精品在线播放午夜| 视频在线在亚洲| 亚洲一区二区不卡免费| 亚洲男女一区二区三区| 国产精品欧美一区二区三区| 亚洲精品在线观看网站| 日韩欧美亚洲国产另类| 777a∨成人精品桃花网| 欧美性大战久久| 欧美亚洲国产一区在线观看网站| 不卡电影免费在线播放一区| 国产大陆亚洲精品国产| 国产成人亚洲综合a∨婷婷图片| 久久99精品国产91久久来源| 奇米色一区二区| 久久99精品视频| 国产一区二区三区在线观看免费| 国产综合色精品一区二区三区| 久久精品免费观看| 韩国一区二区在线观看| 国产一级精品在线| 成人激情免费电影网址| 成人污视频在线观看| 99久久国产综合精品女不卡| 成人av资源站| 91精彩视频在线| 欧美精品在线一区二区| 日韩欧美国产综合| 欧美精品一区二区在线播放| 久久精品视频一区二区三区| 国产精品免费网站在线观看| 亚洲三级免费观看| 午夜精品久久久久久久久久久 | 国产99精品国产| 91丨九色丨蝌蚪丨老版| 色噜噜狠狠成人网p站| 欧美人狂配大交3d怪物一区| 日韩欧美国产wwwww| 国产农村妇女精品| 亚洲男女一区二区三区| 日本美女一区二区三区| 国产成人在线电影| 一本到三区不卡视频| 3d动漫精品啪啪一区二区竹菊| 欧美xxx久久| 亚洲精品乱码久久久久久日本蜜臀| 亚洲亚洲人成综合网络| 韩国成人在线视频| 色欧美日韩亚洲| 精品国产一区a| 亚洲精品第一国产综合野| 蜜桃精品视频在线| 91丨porny丨最新| 日韩一区二区三区在线观看| 中文欧美字幕免费| 免费不卡在线观看| 一本到不卡精品视频在线观看| 欧美不卡一二三| 亚洲大型综合色站|