Next: , Up: Libgcc


4.1 整数算术例程

整数算术例程用于那些对一些机器模式的算术运算不提供硬件支持的平台上。

4.1.1 算术函数

— Runtime Function: int __ashlsi3 (int a, int b)
— Runtime Function: long __ashldi3 (long a, int b)
— Runtime Function: long long __ashlti3 (long long a, int b)

这些函数返回a左移b位后的结果。

— Runtime Function: int __ashrsi3 (int a, int b)
— Runtime Function: long __ashrdi3 (long a, int b)
— Runtime Function: long long __ashrti3 (long long a, int b)

这些函数返回a算术右移b位后的结果。

— Runtime Function: int __divsi3 (int a, int b)
— Runtime Function: long __divdi3 (long a, long b)
— Runtime Function: long long __divti3 (long long a, long long b)

这些函数返回ab的有符号除法的商。

— Runtime Function: int __lshrsi3 (int a, int b)
— Runtime Function: long __lshrdi3 (long a, int b)
— Runtime Function: long long __lshrti3 (long long a, int b)

这些函数返回将a逻辑右移b位后的结果。

— Runtime Function: int __modsi3 (int a, int b)
— Runtime Function: long __moddi3 (long a, long b)
— Runtime Function: long long __modti3 (long long a, long long b)

这些函数返回ab的有符号除法的余数。

— Runtime Function: int __mulsi3 (int a, int b)
— Runtime Function: long __muldi3 (long a, long b)
— Runtime Function: long long __multi3 (long long a, long long b)

这些函数返回ab的乘积。

— Runtime Function: long __negdi2 (long a)
— Runtime Function: long long __negti2 (long long a)

这些函数返回a的负数。

— Runtime Function: unsigned int __udivsi3 (unsigned int a, unsigned int b)
— Runtime Function: unsigned long __udivdi3 (unsigned long a, unsigned long b)
— Runtime Function: unsigned long long __udivti3 (unsigned long long a, unsigned long long b)

这些函数返回ab的无符号除法的商。

— Runtime Function: unsigned long __udivmoddi3 (unsigned long a, unsigned long b, unsigned long *c)
— Runtime Function: unsigned long long __udivti3 (unsigned long long a, unsigned long long b, unsigned long long *c)

这些函数计算ab的无符号除法的商和余数。返回值为商,并且余数放在c所指向的变量中。

— Runtime Function: unsigned int __umodsi3 (unsigned int a, unsigned int b)
— Runtime Function: unsigned long __umoddi3 (unsigned long a, unsigned long b)
— Runtime Function: unsigned long long __umodti3 (unsigned long long a, unsigned long long b)

这些函数返回ab的无符号除法的余数。

4.1.2 比较函数

以下函数实现了整数比较。这些函数实现了低层次的比较,在这之上可以构建更高级别的比较运算符(像小于,大于,或者等于)。返回值位于0到2的范围,使得高级别的比较运算符可以通过测试有符号比较或者无符号比较的返回值来实现。

— Runtime Function: int __cmpdi2 (long a, long b)
— Runtime Function: int __cmpti2 (long long a, long long b)

这些函数执行一个ab的有符号比较。如果a小于b,则返回0;如果a大于b,则返回2;如果ab 相等则返回1。

— Runtime Function: int __ucmpdi2 (unsigned long a, unsigned long b)
— Runtime Function: int __ucmpti2 (unsigned long long a, unsigned long long b)

这些函数执行一个a和b的无符号比较。如果a小于b,则返回0;如果a大于b,则返回2;如果ab相等则返回1。

4.1.3 可产生异常的算术函数

以下函数实现了可产生异常的算术运算。这些函数在出现有符号算术溢出时,会调用libc函数abort

— Runtime Function: int __absvsi2 (int a)
— Runtime Function: long __absvdi2 (long a)

这些函数返回a的绝对值。

— Runtime Function: int __addvsi3 (int a, int b)
— Runtime Function: long __addvdi3 (long a, long b)

这些函数返回ab的和;也就是a + b

— Runtime Function: int __mulvsi3 (int a, int b)
— Runtime Function: long __mulvdi3 (long a, long b)

这些函数返回ab的积;也就是a * b

— Runtime Function: int __negvsi2 (int a)
— Runtime Function: long __negvdi2 (long a)

这些函数返回a的负数;也就是-a

— Runtime Function: int __subvsi3 (int a, int b)
— Runtime Function: long __subvdi3 (long a, long b)

这些函数返回ab的差;也就是a - b

4.1.4 位运算

— Runtime Function: int __clzsi2 (int a)
— Runtime Function: int __clzdi2 (long a)
— Runtime Function: int __clzti2 (long long a)

这些函数返回a中从最高有效位开始的前导0位的数目。如果a为0,则结果未定义。

— Runtime Function: int __ctzsi2 (int a)
— Runtime Function: int __ctzdi2 (long a)
— Runtime Function: int __ctzti2 (long long a)

这些函数返回a中从最低有效位开始的尾部0位的数目。如果a为0,则结果未定义。

— Runtime Function: int __ffsdi2 (long a)
— Runtime Function: int __ffsti2 (long long a)

这些函数返回a中最低有效1位的索引,或者a为0时返回0。最低有效位的索引为1。

— Runtime Function: int __paritysi2 (int a)
— Runtime Function: int __paritydi2 (long a)
— Runtime Function: int __parityti2 (long long a)

如果a中置位的数目是偶数,则这些函数返回0,否则返回1。

— Runtime Function: int __popcountsi2 (int a)
— Runtime Function: int __popcountdi2 (long a)
— Runtime Function: int __popcountti2 (long long a)

这些函数返回在a中置位的数目。

— Runtime Function: int32_t __bswapsi2 (int32_t a)
— Runtime Function: int64_t __bswapdi2 (int64_t a)

这些函数返回a的字节交换。