📄 divide.c
字号:
#include <stdint.h>#include <asm/gentrap.h>#include <asm/pal.h>#if BITS == 64typedef uint64_t uint;typedef int64_t sint;#elsetypedef uint32_t uint;typedef int32_t sint;#endif#ifdef SIGNEDtypedef sint xint;#elsetypedef uint xint;#endifxint NAME(uint num, uint den){ uint quot = 0, qbit = 1; int minus = 0; xint v; if (den == 0) { /* This is really $16, but $16 and $24 are exchanged by a script */ register unsigned long cause asm("$24") = GEN_INTDIV; asm volatile ("call_pal %0"::"i" (PAL_gentrap), "r"(cause)); return 0; /* If trap returns... */ }#if SIGNED if ((sint) (num ^ den) < 0) minus = 1; if ((sint) num < 0) num = -num; if ((sint) den < 0) den = -den;#endif /* Left-justify denominator and count shift */ while ((sint) den >= 0) { den <<= 1; qbit <<= 1; } while (qbit) { if (den <= num) { num -= den; quot += qbit; } den >>= 1; qbit >>= 1; } v = (xint) (REM ? num : quot); if (minus) v = -v; return v;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -