📄 math32.h
字号:
if (tmp&1)
Carry = 1;
if (Carry)
rm = W;
ENTRY:
arg1 = rl( arg1);
counter = decsz(counter);
} while (1);
return arg1;
}
uns16 operator/ _divU16_16( uns16 arg1, uns16 arg2)
{
uns16 rm = 0;
char counter = sizeof(arg1)*8+1;
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);
return arg1;
}
uns32 operator/ _divU32_16( uns32 arg1, uns16 arg2)
{
uns16 rm = 0;
char counter = sizeof(arg1)*8+1;
goto ENTRY;
do {
rm = rl( rm);
if (Carry)
goto SUBTRACT;
W = rm.low8 - arg2.low8;
genSubW( rm.high8, arg2.high8);
if (!Carry)
goto ENTRY;
SUBTRACT:
rm.low8 -= arg2.low8;
genSub( rm.high8, arg2.high8);
Carry = 1;
ENTRY:
arg1 = rl( arg1);
counter = decsz(counter);
} while (1);
return arg1;
}
uns32 operator/ _divU32_32( uns32 arg1, uns32 arg2)
{
uns32 rm = 0;
char counter = sizeof(arg1)*8+1;
goto ENTRY;
do {
rm = rl( rm);
W = rm.low8 - arg2.low8;
genSubW( rm.midL8, arg2.midL8);
genSubW( rm.midH8, arg2.midH8);
genSubW( rm.high8, arg2.high8);
if (!Carry)
goto ENTRY;
rm.high8 = W;
rm.low8 -= arg2.low8;
genSub( rm.midL8, arg2.midL8);
genSub( rm.midH8, arg2.midH8);
Carry = 1;
ENTRY:
arg1 = rl( arg1);
counter = decsz(counter);
} while (1);
return arg1;
}
int8 operator/ (int8 arg1, int8 arg2) @
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;
}
int32 operator/ _divS32_8( int32 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;
}
int32 operator/ _divS32_16( int32 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;
}
int32 operator/ _divS32_32( int32 arg1, int32 arg2)
{
uns32 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.midL8, arg2.midL8);
genSubW( rm.midH8, arg2.midH8);
genSubW( rm.high8, arg2.high8);
if (!Carry)
goto ENTRY;
rm.high8 = W;
rm.low8 -= arg2.low8;
genSub( rm.midL8, arg2.midL8);
genSub( rm.midH8, arg2.midH8);
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% _remU32_8( uns32 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% _remU32_16( uns32 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;
}
uns32 operator% _remU32_32( uns32 arg1, uns32 arg2)
{
uns32 rm = 0;
char counter = sizeof(arg1)*8;
do {
arg1 = rl( arg1);
rm = rl( rm);
W = rm.low8 - arg2.low8;
genSubW( rm.midL8, arg2.midL8);
genSubW( rm.midH8, arg2.midH8);
genSubW( rm.high8, arg2.high8);
if (!Carry)
goto NOSUB;
rm.high8 = W;
rm.low8 -= arg2.low8;
genSub( rm.midL8, arg2.midL8);
genSub( rm.midH8, arg2.midH8);
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% _remS32_8( int32 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% _remS32_16( int32 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;
}
int32 operator% _remS32_32( int32 arg1, int32 arg2)
{
int32 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.midL8, arg2.midL8);
genSubW( rm.midH8, arg2.midH8);
genSubW( rm.high8, arg2.high8);
if (!Carry)
goto NOSUB;
rm.high8 = W;
rm.low8 -= arg2.low8;
genSub( rm.midL8, arg2.midL8);
genSub( rm.midH8, arg2.midH8);
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 + -