Example #1
0
UINT64 __aeabi_uldivmod(unsigned numerator, unsigned denominator)
{
	UINT64  Return;
	Return = __udivsi3 (numerator, denominator);
	Return |= LShiftU64 (__umodsi3 (numerator, denominator), 32);
	return Return;
}
Example #2
0
COMPILER_RT_ABI su_int
__udivmodsi4(su_int a, su_int b, su_int* rem)
{
  si_int d = __udivsi3(a,b);
  *rem = a - (d*b);
  return d;
}
Example #3
0
int test__udivsi3(su_int a, su_int b, su_int expected_q)
{
    su_int q = __udivsi3(a, b);
    if (q != expected_q)
        printf("error in __udivsi3: %X / %X = %X, expected %X\n",
               a, b, q, expected_q);
    return q != expected_q;
}
Example #4
0
File: divsi3.c Project: B-Rich/edk2
INT32
__divsi3(INT32 a, INT32 b)
{
    const int bits_in_word_m1 = (int)(sizeof(INT32) * CHAR_BIT) - 1;
    INT32 s_a = a >> bits_in_word_m1;           // s_a = a < 0 ? -1 : 0
    INT32 s_b = b >> bits_in_word_m1;           // s_b = b < 0 ? -1 : 0
    a = (a ^ s_a) - s_a;                         // negate if s_a == -1
    b = (b ^ s_b) - s_b;                         // negate if s_b == -1
    s_a ^= s_b;                                  // sign of quotient
    return (__udivsi3(a, b) ^ s_a) - s_a;        // negate if s_a == -1
}
Example #5
0
int __divsi3(int value1, int value2)
{
	int sign1 = value1 >> 31;
	int sign2 = value2 >> 31;
	
	// Take absolute values
	unsigned int u_value1 = (value1 ^ sign1) - sign1;
	unsigned int u_value2 = (value2 ^ sign2) - sign2;

	// Compute result sign
	sign1 ^= sign2;

	// Perform division, then convert back to 2's complement
	return (__udivsi3(u_value1, u_value2) ^ sign1) - sign1;
}
Example #6
0
COMPILER_RT_ABI su_int
__umodsi3(su_int a, su_int b)
{
    return a - __udivsi3(a, b) * b;
}
Example #7
0
unsigned int __umodsi3(unsigned int value1, unsigned int value2)
{
	return value1 - __udivsi3(value1, value2) * value2;
}
Example #8
0
int main()
{
    // Shift left 64 bits, less than 32 bit shift, unsigned value
    print64bit(__ashldi3(0x1257493827394374LL, 3));
    // CHECK: 0x92ba49c139ca1ba0

    // Shift left 64 bits, more than 32 bit shift, unsigned value
    print64bit(__ashldi3(0x1257493827394374LL, 34));
    // CHECK: 0x9ce50dd000000000

    // Logical shift right 64 bits, less than 32 bit shift, unsigned value
    print64bit(__lshrdi3(0x1d348856d51c4737LL, 7));
    // CHECK: 0x003a6910adaa388e

    // Signed value
    print64bit(__lshrdi3(0xfd348856d51c4737LL, 7));
    // CHECK: 0x01fa6910adaa388e

    // Logical shift right 64 bits, more than 32 bit shift, unsigned value
    print64bit(__lshrdi3(0x1d348856d51c4737LL, 37));
    // CHECK: 0x0000000000e9a442

    // Signed value
    print64bit(__lshrdi3(0xfd348856d51c4737LL, 37));
    // CHECK: 0x0000000007e9a442

    // Unsigned 32 bit integer division, signed value
    printf("0x%08x\n", __udivsi3(0xf39eca1b, 17));
    // CHECK: 0x0e54a27a

    // Unsigned value
    printf("0x%08x\n", __udivsi3(0x5b0a6c63, 17));
    // CHECK: 0x055af751

    // Signed 32 bit integer division, signed value
    printf("0x%08x\n", __divsi3(0xf39eca1b, 17));
    // CHECK: 0xff45936b

    // Unsigned value
    printf("0x%08x\n", __divsi3(0x539eca1b, 17));
    // CHECK: 0x04eb3910

    // Unsigned 32 bit integer modulus, signed value
    printf("0x%08x\n", __umodsi3(0xf39eca1b, 495));
    // CHECK: 0x000001d1

    // Unsigned value
    printf("0x%08x\n", __umodsi3(0x539eca1b, 495));
    // CHECK: 0x000000d7

    // Signed 32 bit integer modulus, signed value
    printf("0x%08x\n", __modsi3(0xf39eca1b, 495));
    // CHECK: 0xfffffeb5

    // Unsigned value
    printf("0x%08x\n", __modsi3(0x539eca1b, 495));
    // CHECK: 0x000000d7

    // Unsigned 64 bit integer division, signed value
    print64bit(__udivdi3(0xf3c367523e29230aLL, 495));
    // CHECK: 0x007e114680625881

    // Unsigned value
    print64bit(__udivdi3(0x53c367523e29230aLL, 495));
    // CHECK: 0x002b51ebff175b17

    // Signed 64 bit integer division, signed value
    print64bit(__divdi3(0xf3c367523e29230aLL, 495));
    // CHECK: 0xfff9abe8e4b72972

    // Unsigned value
    print64bit(__divdi3(0x53c367523e29230aLL, 495));
    // CHECK: 0x002b51ebff175b17

    // Unsigned 64 bit integer modulus, signed value
    print64bit(__umoddi3(0xf3c367523e29230aLL, 495));
    // CHECK: 0x000000000000019b

    // Unsigned value
    print64bit(__umoddi3(0x53c367523e29230aLL, 495));
    // CHECK: 0x0000000000000191

    // Signed 64 bit integer modulus, signed value
    print64bit(__moddi3(0xf3c367523e29230aLL, 495));
    // CHECK: 0xffffffffffffff9c

    // Unsigned value
    print64bit(__moddi3(0x53c367523e29230aLL, 495));
    // CHECK: 0x0000000000000191

    // Convert 64 bit value to float, greater than > 32 bits
    printfloathex(__floatundisf(1674874919848732277LL));
    // CHECK: 0x5db9f2cf

    // < 32 bits
    printfloathex(__floatundisf(1674877LL));
    // CHECK: 0x49cc73e8
}