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

📄 math24.h

📁 FreeRTOS 是一个源码公开的免费的嵌入式实时操作系统
💻 H
📖 第 1 页 / 共 2 页
字号:

int16 operator/ _divS16_8( int16 arg1, int8 arg2)
{
    uns8 rm = 0;
    char counter = 16+1;
    char sign = arg1.high8 ^ arg2.high8;
    if (arg1 < 0)  {
       INVERT:
        arg1 = -arg1;
        if (!counter)
            return arg1;
    }
    if (arg2 < 0)
        arg2 = -arg2;
    goto ENTRY;
    do  {
        rm = rl( rm);
        W = rm - arg2;
        if (Carry)
            rm = W;
       ENTRY:
        arg1 = rl( arg1);
        counter = decsz(counter);
    } while (1);
    if (sign & 0x80)
        goto INVERT;
    return arg1;
}


int24 operator/ _divS24_8( int24 arg1, int8 arg2)
{
    uns8 rm = 0;
    char counter = sizeof(arg1)*8+1;
    char sign = arg1.high8 ^ arg2.high8;
    if (arg1 < 0)  {
       INVERT:
        arg1 = -arg1;
        if (!counter)
            return arg1;
    }
    if (arg2 < 0)
        arg2 = -arg2;
    goto ENTRY;
    do  {
        rm = rl( rm);
        W = rm - arg2;
        if (Carry)
            rm = W;
       ENTRY:
        arg1 = rl( arg1);
        counter = decsz(counter);
    } while (1);
    if (sign & 0x80)
        goto INVERT;
    return arg1;
}


int16 operator/ _divS16_16( int16 arg1, int16 arg2)
{
    uns16 rm = 0;
    char counter = sizeof(arg1)*8+1;
    char sign = arg1.high8 ^ arg2.high8;
    if (arg1 < 0)  {
       INVERT:
        arg1 = -arg1;
        if (!counter)
            return arg1;
    }
    if (arg2 < 0)
        arg2 = -arg2;
    goto ENTRY;
    do  {
        rm = rl( rm);
        W = rm.low8 - arg2.low8;
        genSubW( rm.high8, arg2.high8);
        if (!Carry)
            goto ENTRY;
        rm.high8 = W;
        rm.low8 -= arg2.low8;
        Carry = 1;
       ENTRY:
        arg1 = rl( arg1);
        counter = decsz(counter);
    } while (1);
    if (sign & 0x80)
        goto INVERT;
    return arg1;
}


int24 operator/ _divS24_16( int24 arg1, int16 arg2)
{
    uns16 rm = 0;
    char counter = sizeof(arg1)*8+1;
    char sign = arg1.high8 ^ arg2.high8;
    if (arg1 < 0)  {
       INVERT:
        arg1 = -arg1;
        if (!counter)
            return arg1;
    }
    if (arg2 < 0)
        arg2 = -arg2;
    goto ENTRY;
    do  {
        rm = rl( rm);
        W = rm.low8 - arg2.low8;
        genSubW( rm.high8, arg2.high8);
        if (!Carry)
            goto ENTRY;
        rm.high8 = W;
        rm.low8 -= arg2.low8;
        Carry = 1;
       ENTRY:
        arg1 = rl( arg1);
        counter = decsz(counter);
    } while (1);
    if (sign & 0x80)
        goto INVERT;
    return arg1;
}


int24 operator/ _divS24_24( int24 arg1, int24 arg2)
{
    uns24 rm = 0;
    char counter = sizeof(arg1)*8+1;
    char sign = arg1.high8 ^ arg2.high8;
    if (arg1 < 0)  {
       INVERT:
        arg1 = -arg1;
        if (!counter)
            return arg1;
    }
    if (arg2 < 0)
        arg2 = -arg2;
    goto ENTRY;
    do  {
        rm = rl( rm);
        W = rm.low8 - arg2.low8;
        genSubW( rm.mid8, arg2.mid8);
        genSubW( rm.high8, arg2.high8);
        if (!Carry)
            goto ENTRY;
        rm.high8 = W;
        rm.low8 -= arg2.low8;
        genSub( rm.mid8, arg2.mid8);
        Carry = 1;
       ENTRY:
        arg1 = rl( arg1);
        counter = decsz(counter);
    } while (1);
    if (sign & 0x80)
        goto INVERT;
    return arg1;
}



uns8 operator% _remU16_8( uns16 arg1, uns8 arg2)
{
    uns8 rm = 0;
    char counter = sizeof(arg1)*8;
    do  {
        arg1 = rl( arg1);
        rm = rl( rm);
        uns8 tmp = rl( tmp);
        W = rm - arg2;
        if (tmp & 1)
            Carry = 1;
        if (Carry)
            rm = W;
        counter = decsz(counter);
    } while (1);
    return rm;
}


uns8 operator% _remU24_8( uns24 arg1, uns8 arg2)
{
    uns8 rm = 0;
    char counter = sizeof(arg1)*8;
    do  {
        arg1 = rl( arg1);
        rm = rl( rm);
        uns8 tmp = rl( tmp);
        W = rm - arg2;
        if (tmp & 1)
            Carry = 1;
        if (Carry)
            rm = W;
        counter = decsz(counter);
    } while (1);
    return rm;
}


uns16 operator% _remU16_16( uns16 arg1, uns16 arg2)
{
    uns16 rm = 0;
    char counter = sizeof(arg1)*8;
    do  {
        arg1 = rl( arg1);
        rm = rl( rm);
        W = rm.low8 - arg2.low8;
        genSubW( rm.high8, arg2.high8);
        if (!Carry)
            goto NOSUB;
        rm.high8 = W;
        rm.low8 -= arg2.low8;
      NOSUB:
        counter = decsz(counter);
    } while (1);
    return rm;
}


uns16 operator% _remU24_16( uns24 arg1, uns16 arg2)
{
    uns16 rm = 0;
    char counter = sizeof(arg1)*8;
    do  {
        arg1 = rl( arg1);
        rm = rl( rm);
        if (Carry)
            goto SUBTRACT;
        W = rm.low8 - arg2.low8;
        genSubW( rm.high8, arg2.high8);
        if (!Carry)
            goto NOSUB;
      SUBTRACT:
        rm.low8 -= arg2.low8;
        genSub( rm.high8, arg2.high8);
      NOSUB:
        counter = decsz(counter);
    } while (1);
    return rm;
}


uns24 operator% _remU24_24( uns24 arg1, uns24 arg2)
{
    uns24 rm = 0;
    char counter = sizeof(arg1)*8;
    do  {
        arg1 = rl( arg1);
        rm = rl( rm);
        W = rm.low8 - arg2.low8;
        genSubW( rm.mid8, arg2.mid8);
        genSubW( rm.high8, arg2.high8);
        if (!Carry)
            goto NOSUB;
        rm.high8 = W;
        rm.low8 -= arg2.low8;
        genSub( rm.mid8, arg2.mid8);
      NOSUB:
        counter = decsz(counter);
    } while (1);
    return rm;
}


int8 operator% (int8 arg1, int8 arg2) @

int8 operator% _remS16_8( int16 arg1, int8 arg2)
{
    int8 rm = 0;
    char counter = 16;
    char sign = arg1.high8;
    if (arg1 < 0)
        arg1 = -arg1;
    if (arg2 < 0)
        arg2 = -arg2;
    do  {
        arg1 = rl( arg1);
        rm = rl( rm);
        W = rm - arg2;
        if (Carry)
            rm = W;
        counter = decsz(counter);
    } while (1);
    if (sign & 0x80)
        rm = -rm;
    return rm;
}


int8 operator% _remS24_8( int24 arg1, int8 arg2)
{
    int8 rm = 0;
    char counter = sizeof(arg1)*8;
    char sign = arg1.high8;
    if (arg1 < 0)
        arg1 = -arg1;
    if (arg2 < 0)
        arg2 = -arg2;
    do  {
        arg1 = rl( arg1);
        rm = rl( rm);
        W = rm - arg2;
        if (Carry)
            rm = W;
        counter = decsz(counter);
    } while (1);
    if (sign & 0x80)
        rm = -rm;
    return rm;
}


int16 operator% _remS16_16( int16 arg1, int16 arg2)
{
    int16 rm = 0;
    char counter = sizeof(arg1)*8;
    char sign = arg1.high8;
    if (arg1 < 0)
        arg1 = -arg1;
    if (arg2 < 0)
        arg2 = -arg2;
    do  {
        arg1 = rl( arg1);
        rm = rl( rm);
        W = rm.low8 - arg2.low8;
        genSubW( rm.high8, arg2.high8);
        if (!Carry)
            goto NOSUB;
        rm.high8 = W;
        rm.low8 -= arg2.low8;
      NOSUB:
        counter = decsz(counter);
    } while (1);
    if (sign & 0x80)
        rm = -rm;
    return rm;
}


int16 operator% _remS24_16( int24 arg1, int16 arg2)
{
    int16 rm = 0;
    char counter = sizeof(arg1)*8;
    char sign = arg1.high8;
    if (arg1 < 0)
        arg1 = -arg1;
    if (arg2 < 0)
        arg2 = -arg2;
    do  {
        arg1 = rl( arg1);
        rm = rl( rm);
        W = rm.low8 - arg2.low8;
        genSubW( rm.high8, arg2.high8);
        if (!Carry)
            goto NOSUB;
        rm.high8 = W;
        rm.low8 -= arg2.low8;
      NOSUB:
        counter = decsz(counter);
    } while (1);
    if (sign & 0x80)
        rm = -rm;
    return rm;
}


int24 operator% _remS24_24( int24 arg1, int24 arg2)
{
    int24 rm = 0;
    char counter = sizeof(arg1)*8;
    char sign = arg1.high8;
    if (arg1 < 0)
        arg1 = -arg1;
    if (arg2 < 0)
        arg2 = -arg2;
    do  {
        arg1 = rl( arg1);
        rm = rl( rm);
        W = rm.low8 - arg2.low8;
        genSubW( rm.mid8, arg2.mid8);
        genSubW( rm.high8, arg2.high8);
        if (!Carry)
            goto NOSUB;
        rm.high8 = W;
        rm.low8 -= arg2.low8;
        genSub( rm.mid8, arg2.mid8);
      NOSUB:
        counter = decsz(counter);
    } while (1);
    if (sign & 0x80)
        rm = -rm;
    return rm;
}

#ifdef hw_mult8x8
 #undef hw_mult8x8
 #undef loRES
 #undef hiRES
#endif

#undef genAdd
#undef genSub
#undef genAddW
#undef genSubW

#pragma library 0

⌨️ 快捷键说明

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