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

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

?? shfloat.c

?? 可用于嵌入式編程學習
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* Copyright (c) 1999-2000 Microsoft Corporation.  All rights reserved. */
#ifdef SH4
#include "kernel.h"
#include "shxinst.h"
// fp instruction opcodes
#define FADD_OP   0x0
#define FSUB_OP   0x1
#define FMUL_OP   0x2
#define FDIV_OP   0x3
#define FCMP_EQ   0x4
#define FCMP_GT   0x5
#define FMAC_OP   0xe

// all these instrs have a last 
// common opcode is 0xd
#define FLOAT_OP  0x2
#define FTRC_OP   0x3
#define FSQRT_OP  0x6
#define FCNVSD_OP 0xa
#define FCNVDS_OP 0xb
#define FIPR_OP   0xe
#define FTRV_OP   0xf

// fpscr bit masks
#define FR              0x00200000       // FR
#define SZ              0x00100000       // SZ
#define PR              0x00080000       // PR
#define DN              0x00040000       // DN

#define IMCW_ENABLE     0x00000f80       // Enable mask
#define E_INVALID       0x00000800       // Invalid operation
#define E_ZERODIVIDE    0x00000400       // Divide by zero
#define E_OVERFLOW      0x00000200       // Overflow
#define E_UNDERFLOW     0x00000100       // Underflow
#define E_INEXACT       0x00000080       // Inexact result

#define IMCW_CAUSE	0x0001f000	 // Cause mask
#define C_INVALID       0x00010000	 // Invalid operation
#define C_ZERODIVIDE    0x00008000	 // Divide by 0
#define C_OVERFLOW      0x00004000	 // Overflow
#define C_UNDERFLOW     0x00002000	 // Underflow
#define C_INEXACT       0x00001000	 // Inexact result

#define IMCW_FLAG	0x0000007c	 // Flag mask

extern float _adds(float,float);
extern float _subs(float,float);
extern float _muls(float,float);
extern float _divs(float,float);
extern int _eqs(float,float);
extern int _gts(float,float);

extern double _addd(double, double);
extern double _subd(double, double);
extern double _muld(double, double);
extern double _divd(double, double);
extern int _eqd(double,double);
extern int _gtd(double,double);

extern float _itos(int);
extern double _itod(int);
extern int _stoi(float);
extern int _dtoi(double);
extern double sqrt(double);
extern float  fsqrt(float);
extern double _stod(float);
extern float  _dtos(double);

extern ULONG __asm1(const char *,...);

typedef struct _FP_DOUBLE_OPERAND {
    union {
        struct {
            ULONG low;
            LONG  high;
        };
        double d;
    };
} FP_DOUBLE_OPERAND, *PFP_DOUBLE_OPERAND;

typedef union _FP_SINGLE_OPERAND {
    ULONG i;
    float f;
} FP_SINGLE_OPERAND, *PFP_SINGLE_OPERAND;


void set_fpscr(ULONG mask)
{
    __asm("sts  fpscr, r0\n"
          "or   r4, r0\n"
          "lds  r0, fpscr\n",
          mask);
}

void clr_fpscr(ULONG mask)
{
    __asm("sts fpscr, r0\n"
          "not r4, r4\n"
          "and r4, r0\n"
          "lds r0, fpscr\n",
          mask);
}

ULONG get_cause()
{
    return __asm1("sts fpscr, r0\n"
                  "and r4,r0\n"
                  "shlr8 r0\n"
                  "shlr2 r0\n"
                  "shlr2 r0\n",
                  0x3f00);
}

ULONG get_fpscr(void)
{
    return __asm1("sts fpscr,r0\n");
}

void fipr(ULONG *pFVm, ULONG *pFVn)
{
    float result=0.0f;
    FP_SINGLE_OPERAND fp1,fp2;

    fp1.i = (*pFVm)++;
    fp2.i = (*pFVn)++;
    result = _muls(fp1.f,fp2.f);
    
    fp1.i = (*pFVm)++;
    fp2.i = (*pFVn)++;
    fp2.f = _muls(fp1.f,fp2.f);
    result = _adds(fp2.f,result);

    fp1.i = (*pFVm)++;
    fp2.i = (*pFVn)++;
    fp2.f = _muls(fp1.f,fp2.f);
    result = _adds(fp2.f,result);

    fp1.i = (*pFVm);
    fp2.i = (*pFVn);
    fp2.f = _muls(fp1.f,fp2.f);
    fp2.f = _adds(fp2.f,result);
    *pFVn = fp2.i;
}

void ftrv(ULONG *pXMTRX, ULONG *pFVn)
{
    int i;
    float result=0.0f;
    FP_SINGLE_OPERAND fp1,fp2;
    ULONG *pResult = pFVn;
    ULONG *pFV = pFVn;

    for (i=0; i < 4; i++)
    {
        result = 0.0f;
        fp1.i = (*pXMTRX)++;
        fp2.i = (*pFV)++;
        fp2.f =  _muls(fp1.f,fp2.f);
        result = _adds(fp2.f,result);

        fp1.i = (*pXMTRX)++;
        fp2.i = (*pFV)++;
        fp2.f = _muls(fp1.f,fp2.f);
        result = _adds(fp2.f,result);

        fp1.i = (*pXMTRX)++;
        fp2.i = (*pFV)++;
        fp2.f = _muls(fp1.f,fp2.f);
        result = _adds(fp2.f,result);

        fp1.i = (*pXMTRX)++;
        fp2.i = (*pFV);
        fp2.f = _muls(fp1.f,fp2.f);
        fp2.f = _adds(fp2.f,result);
        //
        // store result to FV[n,n+1,n+2,n+3]
        //
        *pResult++ = fp2.i;
        //
        // reset the pFV to beginning of pFVn
        //
        pFV = pFVn;
    }
}

BOOL HandleHWFloatException(EXCEPTION_RECORD *ExceptionRecord,
                            PCONTEXT pctx) 
{
    PVOID ExceptionAddress;
    SH3IW Instruction;
    ULONG OpcodeExt, RegM, RegN, Opcode;
    ULONG prbit, frbit, CauseField;

    FP_DOUBLE_OPERAND dp1,dp2;
    FP_SINGLE_OPERAND fp1,fp2;
    ULONG *fpRegN1, *fpRegM1, *fpRegN2, *fpRegM2;
    ULONG *pFVn, *pFVm, *pXMTRX;

    char f[10];
    void *function = f;

    int retVal = 1;

    ExceptionAddress = ExceptionRecord->ExceptionAddress;

    __try {
        __try {

            Instruction = *(PSH3IW)ExceptionRecord->ExceptionAddress;
            OpcodeExt = Instruction.instr3.ext_disp;
            RegM = Instruction.instr3.regM;
            RegN = Instruction.instr3.regN;
            Opcode = Instruction.instr3.opcode;

            // check for double operation
            prbit =  ((pctx->Fpscr & PR) != 0);

            // check for float-point bank operation
            frbit =  ((pctx->Fpscr & FR) != 0);

            // reset fpscr to thread state
            clr_fpscr(0xffffffff);
            set_fpscr(pctx->Fpscr);

            // clear PR bit
            clr_fpscr(PR);

            if(!frbit)
            {
                fpRegN1 = pctx->FRegs + RegN;
                fpRegM1 = pctx->FRegs + RegM;

                if (prbit)
                {
                    fpRegN2 = pctx->FRegs + RegN+1;
                    fpRegM2 = pctx->FRegs + RegM+1;
                }                
            }else {
                fpRegN1 = pctx->xFRegs + RegN;
                fpRegM1 = pctx->xFRegs + RegM;

                if (prbit)
                {
                    fpRegN2 = pctx->xFRegs + RegN + 1;
                    fpRegM2 = pctx->xFRegs + RegM + 1;
                }
            }
            
            switch(OpcodeExt)
            {
            case FADD_OP:
            case FSUB_OP:
            case FMUL_OP:
            case FDIV_OP:

                if(prbit)
                {
                    dp1.high = *fpRegN1;
                    dp1.low  = *fpRegN2;
                    dp2.high = *fpRegM1;
                    dp2.low  = *fpRegM2;

                    switch(OpcodeExt)
                    {
                    case FADD_OP:
                        function = (void*)&_addd;
                        break;
                    case FSUB_OP:    
                        function = (void*)&_subd;
                        break;
                    case FMUL_OP:    
                        function = (void*)&_muld;
                        break;
                    case FDIV_OP:
                        function = (void*)&_divd;
                        break;
                    case FCMP_EQ:
                        function = (void*)&_eqd;
                        break;
                    case FCMP_GT:
                        function = (void*)&_gtd;
                        break;
                    }

                    if ((OpcodeExt == FCMP_EQ) || (OpcodeExt == FCMP_GT))
                    {
                        dp2.low = ((int(*)(double,double))(function))(dp1.d,dp2.d);

                        // set user t-bit to comparison result
                        pctx->Psr &= (0xfffffffe & (dp2.low != 0));
                        
                    }else {
                    
                        dp2.d = ((double(*)(double,double))(function))(dp1.d,dp2.d);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩中文一区| 91精品国产免费| 午夜激情一区二区三区| 91精品国产品国语在线不卡| 国产精品一区二区三区99| 亚洲成国产人片在线观看| 国产亚洲精品7777| 日韩一区国产二区欧美三区| 成人av网站在线| 国产黄色精品视频| 免费观看在线综合色| 一级女性全黄久久生活片免费| 久久精品视频免费| 日本一区二区视频在线观看| 欧美精品一区二区三区视频| www国产精品av| 91麻豆精品国产91| 精品国产乱码久久久久久1区2区| 欧美变态口味重另类| 国产亚洲综合av| 亚洲人精品午夜| 亚洲国产精品久久久久婷婷884| 一区二区三区四区乱视频| 日韩国产高清在线| 国产一区二区伦理片| 99久久国产综合色|国产精品| 99re视频精品| 欧美成人乱码一区二区三区| 国产视频一区二区在线观看| 国产日韩欧美制服另类| **欧美大码日韩| 亚洲一级在线观看| 久久av老司机精品网站导航| 国产精品18久久久久久久久| 波多野结衣中文一区| 国产精品久久久久久户外露出| 日韩精品一区二区三区三区免费 | 国产精品久久久久四虎| 亚洲精品乱码久久久久| 精品一区二区免费视频| 成人a级免费电影| 欧美一区二区女人| 最新国产成人在线观看| 免费一级片91| 欧美日韩国产精品自在自线| 久久综合999| 偷拍与自拍一区| 91麻豆国产精品久久| 精品久久99ma| 天天av天天翘天天综合网| jiyouzz国产精品久久| 久久―日本道色综合久久| 亚洲一二三四区不卡| fc2成人免费人成在线观看播放| 91精品国产aⅴ一区二区| 洋洋av久久久久久久一区| 99久免费精品视频在线观看 | 国产精品水嫩水嫩| 国产综合色视频| 日韩一区二区三| 蜜桃av一区二区在线观看| 欧美日韩国产色站一区二区三区| 综合在线观看色| 99精品视频在线观看| 日本欧美一区二区在线观看| 制服丝袜激情欧洲亚洲| 亚洲午夜久久久久久久久电影网 | 日本不卡一二三区黄网| 91精品在线观看入口| 日韩精品视频网站| 91精品国产综合久久香蕉的特点 | 日韩精品一区二区在线| 一区二区三区在线视频观看58| 91国偷自产一区二区开放时间 | 丝袜诱惑亚洲看片| 91精彩视频在线| 一区二区三区在线免费| 日本大香伊一区二区三区| 日韩理论片一区二区| aaa国产一区| 成人免费在线观看入口| 91影院在线观看| 亚洲欧美国产77777| 欧美私模裸体表演在线观看| 亚洲午夜电影在线| 欧美日韩免费不卡视频一区二区三区| 亚洲裸体xxx| 欧美日韩一区二区三区在线| 日日骚欧美日韩| 欧美精品一区二区三区在线| 丁香亚洲综合激情啪啪综合| 国产福利一区在线观看| 久久精品一区二区| 色香色香欲天天天影视综合网| 一区二区视频在线| 日韩欧美一区二区免费| 国产酒店精品激情| 国产女主播在线一区二区| 97久久超碰国产精品| 午夜精品久久久久久久久久久| 欧美一区二区三区视频| 高清在线观看日韩| 亚洲综合小说图片| 久久精品一区二区三区不卡牛牛| 国产经典欧美精品| 一区二区三区久久| 亚洲欧美日韩国产一区二区三区 | 国产高清在线精品| 日韩制服丝袜av| 日韩一区二区三区av| 91在线观看成人| 久久电影国产免费久久电影| 亚洲日本乱码在线观看| 久久无码av三级| 日韩视频一区在线观看| 91在线观看成人| 国产很黄免费观看久久| 日本aⅴ亚洲精品中文乱码| 亚洲视频在线一区| 中文在线一区二区 | 成人av免费在线播放| 美女脱光内衣内裤视频久久网站 | 欧美国产一区视频在线观看| 欧美精品日韩综合在线| 在线中文字幕一区| 国产米奇在线777精品观看| 蜜臀91精品一区二区三区| 亚洲.国产.中文慕字在线| 中文字幕一区二区视频| 欧美国产精品一区二区| 久久精品国产99国产精品| 亚洲精选一二三| 怡红院av一区二区三区| 亚洲美女免费视频| 亚洲精品成人天堂一二三| 一区二区三区成人| 日韩精品一区第一页| 免费在线观看成人| 久久99国产精品成人| 蜜臀av性久久久久蜜臀aⅴ| 麻豆91在线观看| 亚洲男同1069视频| 婷婷综合另类小说色区| 激情深爱一区二区| 国产精品99久久久久久久女警| 成人开心网精品视频| 91国偷自产一区二区三区观看| 色婷婷久久久久swag精品| 色综合天天综合色综合av | 亚洲第一成人在线| 狠狠色丁香婷综合久久| 不卡的av中国片| 欧美三级在线播放| 欧美激情艳妇裸体舞| 亚洲不卡av一区二区三区| 亚洲精品免费看| 韩国av一区二区三区| 91成人免费在线视频| 久久品道一品道久久精品| 亚洲五码中文字幕| 99久久综合99久久综合网站| 一区二区三区在线免费| 日韩电影在线一区| 成人99免费视频| 欧美一区二区日韩一区二区| 国产亚洲午夜高清国产拍精品| 夜夜嗨av一区二区三区网页| 国产成人精品一区二区三区网站观看| 91成人网在线| 精品国内片67194| 亚洲成人激情综合网| 91在线小视频| 国产精品乱码久久久久久| 狠狠色丁香婷综合久久| 7777精品伊人久久久大香线蕉的| 久久综合视频网| 久久精品国产99久久6| 欧美一级国产精品| 美女看a上一区| 日韩欧美在线影院| 另类小说视频一区二区| 精品久久久久久综合日本欧美| 亚洲国产va精品久久久不卡综合| 91一区在线观看| 亚洲一线二线三线视频| 在线视频国内自拍亚洲视频| 亚洲免费观看在线观看| 91亚洲精品乱码久久久久久蜜桃| 国产精品视频一二三区| 激情综合一区二区三区| 久久综合久久综合亚洲| 高清在线观看日韩| 一区二区视频免费在线观看| 欧美乱妇15p| 精品一区二区三区免费观看| 国产亚洲精久久久久久| 国产成人亚洲精品青草天美| 久久一二三国产| 91在线观看一区二区| 爽爽淫人综合网网站|