⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mgcsoftasm.h

📁 3D Game Engine Design Source Code非常棒
💻 H
字号:
// Magic Software, Inc.
// http://www.magic-software.com
// Copyright (c) 2000, All Rights Reserved
//
// Source code from Magic Software is supplied under the terms of a license
// agreement and may not be copied or disclosed except in accordance with the
// terms of that agreement.  The various license agreements may be found at
// the Magic Software web site.  This file is subject to the license
//
// RESTRICTED USE SOURCE CODE
// http://www.magic-software.com/License/restricted.pdf

#ifndef MGCSOFTASM_H
#define MGCSOFTASM_H

class MgcSoftASM
{
public:
    static int FloatToInt (float fValue)
    {
        int iValue;
        _asm fld fValue
        _asm fistp iValue
        return iValue;
    }

    static void InitializeFastDivide ()
    {
        unsigned short usFpuControlWord;
        __asm FSTCW usFpuControlWord;
        ms_usFpuControlWord = usFpuControlWord;
        usFpuControlWord = (usFpuControlWord | 0x0c3f) & 0xfcff;
        __asm FLDCW usFpuControlWord;
    }

    static void TerminateFastDivide ()
    {
        unsigned short usFpuControlWord = ms_usFpuControlWord;
        __asm FLDCW usFpuControlWord;
    }

private:
    static unsigned short ms_usFpuControlWord;
};

//----------------------------------------------------------------------------
#define MgcSoftASM_FloatToIntMult(fFloat,iInt,iLog) \
{ \
    int iShift = 150 - iLog - ((*(int*)(&fFloat) >> 23) & 0xFF); \
    if ( iShift < 24 ) \
    { \
        iInt = ((*(int *)(&fFloat) & 0x007FFFFF) | 0x00800000) >> iShift; \
        if ( iInt == (1 << iLog) ) \
            iInt--; \
    } \
    else \
    { \
        iInt = 0; \
    } \
}
//----------------------------------------------------------------------------

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -