Lines Matching defs:bigint
70 JSHandle<BigInt> bigint = CreateBigint(thread, 3); // 3:The number of digits in an object of type BigInt
72 bigint->SetDigit(0, 0);
73 bigint->SetDigit(1, 0);
74 bigint->SetDigit(2, 1); // 2:The number of digits in an object of type BigInt
75 return bigint;
80 JSHandle<BigInt> bigint = CreateBigint(thread, 2); // 2:The number of digits in an object of type BigInt
82 bigint->SetDigit(0, 0);
83 bigint->SetDigit(1, 0x80000000); // 0x80000000:Int MAX
84 return bigint;
111 JSHandle<BigInt> bigint;
118 bigint = BigInt::CreateBigint(thread, len);
123 bigint = BigInt::CreateBigint(thread, len);
130 bigint->SetDigit(index, val);
134 bigint->SetSign(true);
143 bigint->SetDigit(index, val);
146 return BigIntHelper::RightTruncate(thread, bigint);
176 CString BigIntHelper::GetBinary(const BigInt *bigint)
178 ASSERT(bigint != nullptr);
180 int len = static_cast<int>(bigint->GetLength());
186 uint32_t val = bigint->GetDigit(index);
200 JSHandle<BigInt> bigint(thread, JSTaggedValue::Exception());
201 THROW_RANGE_ERROR_AND_RETURN(thread, "Maximum BigInt size exceeded", bigint);
204 JSHandle<BigInt> bigint = factory->NewBigInt(length);
205 return bigint;
256 JSHandle<BigInt> bigint = BigInt::CreateBigint(thread, maxLen);
260 bigint->SetDigit(i, x->GetDigit(i) | y->GetDigit(i));
262 bigint->SetDigit(i, x->GetDigit(i) & y->GetDigit(i));
265 bigint->SetDigit(i, x->GetDigit(i) ^ y->GetDigit(i));
271 bigint->SetDigit(i, x->GetDigit(i));
275 bigint->SetDigit(i, y->GetDigit(i));
279 return BigIntHelper::RightTruncate(thread, bigint);
366 JSHandle<BigInt> BigInt::BitwiseSubOne(JSThread *thread, JSHandle<BigInt> bigint, uint32_t maxLen)
368 ASSERT(!bigint->IsZero());
369 ASSERT(maxLen >= bigint->GetLength());
373 uint32_t bigintLen = bigint->GetLength();
377 newBigint->SetDigit(i, BigIntHelper::SubHelper(bigint->GetDigit(i), carry, bigintCarry));
384 JSHandle<BigInt> BigInt::BitwiseAddOne(JSThread *thread, JSHandle<BigInt> bigint)
386 uint32_t bigintLength = bigint->GetLength();
390 if (std::numeric_limits<uint32_t>::max() != bigint->GetDigit(i)) {
404 newBigint->SetDigit(i, BigIntHelper::AddHelper(bigint->GetDigit(i), carry, bigintCarry));
478 JSHandle<EcmaString> BigInt::ToString(JSThread *thread, JSHandle<BigInt> bigint, uint32_t conversionToRadix)
481 CString result = bigint->ToStdString(conversionToRadix);
520 JSHandle<BigInt> bigint = CreateBigint(thread, mayNeedLen);
522 bigint->SetSign(num < 0);
535 bigint->SetDigit(index, doubleNum);
540 bigint->SetDigit(index, doubleNum);
543 return BigIntHelper::RightTruncate(thread, bigint).GetTaggedValue();
548 JSHandle<BigInt> bigint = CreateBigint(thread, 1);
557 bigint->SetDigit(0, value);
558 bigint->SetSign(sign);
559 return bigint;
564 JSHandle<BigInt> bigint = CreateBigint(thread, 1);
566 bigint->SetDigit(0, number);
567 return bigint;
579 JSHandle<BigInt> bigint = Uint64ToBigInt(thread, value);
581 bigint->SetSign(sign);
582 return BigIntHelper::RightTruncate(thread, bigint);
587 JSHandle<BigInt> bigint = CreateBigint(thread, 2); // 2 : one int64_t bits need two uint32_t bits
591 bigint->SetDigit(0, lowBits);
592 bigint->SetDigit(1, highBits);
593 return BigIntHelper::RightTruncate(thread, bigint);
618 void BigInt::BigIntToInt64(JSThread *thread, JSHandle<JSTaggedValue> bigint, int64_t *cValue, bool *lossless)
622 if (bigint->IsBoolean()) {
623 bigint = JSHandle<JSTaggedValue>(thread, JSTaggedValue::ToBigInt(thread, bigint));
625 } else if (!bigint->IsBigInt()) {
626 JSHandle<BigInt> bigInt64(thread, JSTaggedValue::ToBigInt64(thread, bigint));
631 JSHandle<BigInt> bigInt64(thread, JSTaggedValue::ToBigInt64(thread, bigint));
633 if (Equal(bigInt64.GetTaggedValue(), bigint.GetTaggedValue())) {
641 void BigInt::BigIntToUint64(JSThread *thread, JSHandle<JSTaggedValue> bigint, uint64_t *cValue, bool *lossless)
645 if (bigint->IsBoolean()) {
646 bigint = JSHandle<JSTaggedValue>(thread, JSTaggedValue::ToBigInt(thread, bigint));
648 } else if (!bigint->IsBigInt()) {
649 JSHandle<BigInt> bigInt64(thread, JSTaggedValue::ToBigUint64(thread, bigint));
654 JSHandle<BigInt> bigUint64(thread, JSTaggedValue::ToBigUint64(thread, bigint));
656 if (Equal(bigUint64.GetTaggedValue(), bigint.GetTaggedValue())) {
673 JSHandle<BigInt> bigint(thread, JSTaggedValue::Exception());
674 THROW_RANGE_ERROR_AND_RETURN(thread, "Maximum BigInt size exceeded", bigint);
676 JSHandle<BigInt> bigint = CreateBigint(thread, needLen);
681 bigint->SetDigit(MULTIPLE * index, lowBits);
682 bigint->SetDigit(MULTIPLE * index + 1, highBits);
684 bigint->SetSign(sign);
685 return BigIntHelper::RightTruncate(thread, bigint);
755 JSHandle<BigInt> bigint = BigInt::CreateBigint(thread, x->GetLength() + 1);
763 bigint->SetDigit(i, addPlus);
770 bigint->SetDigit(i, addPlus);
774 bigint->SetDigit(i, bigintCarry);
775 bigint->SetSign(resultSign);
776 return BigIntHelper::RightTruncate(thread, bigint);
790 JSHandle<BigInt> bigint = BigInt::CreateBigint(thread, x->GetLength());
798 bigint->SetDigit(i, minuSub);
805 bigint->SetDigit(i, minuSub);
809 bigint->SetSign(resultSign);
810 return BigIntHelper::RightTruncate(thread, bigint);
890 void BigInt::RightShift(JSHandle<BigInt> bigint, JSHandle<BigInt> x, uint32_t digitMove, uint32_t bitsMove)
895 bigint->SetDigit(i - digitMove, x->GetDigit(i));
903 bigint->SetDigit(i, (value << (DATEBITS - bitsMove)) | carry);
906 bigint->SetDigit(last, carry);
955 JSHandle<BigInt> bigint = CreateBigint(thread, needLen);
958 RightShift(bigint, x, digitMove, bitsMove);
959 bigint = BigIntHelper::RightTruncate(thread, bigint);
961 bigint->SetSign(true);
963 return BitwiseAddOne(thread, bigint);
966 return bigint;
989 JSHandle<BigInt> bigint = CreateBigint(thread, needLen);
994 bigint->SetDigit(index, x->GetDigit(index - digitMove));
1002 bigint->SetDigit(index + digitMove, (value << bitsMove) | carry);
1008 bigint->SetDigit(index + digitMove, carry);
1011 bigint->SetSign(x->GetSign());
1012 return BigIntHelper::RightTruncate(thread, bigint);
1059 JSHandle<BigInt> bigint(thread, JSTaggedValue::Exception());
1060 THROW_RANGE_ERROR_AND_RETURN(thread, "Exponent must be positive", bigint);
1078 JSHandle<BigInt> bigint(thread, JSTaggedValue::Exception());
1079 THROW_RANGE_ERROR_AND_RETURN(thread, "Maximum BigInt size exceeded", bigint);
1084 JSHandle<BigInt> bigint = CreateBigint(thread, needLength);
1087 bigint->SetDigit(needLength - 1, value);
1089 bigint->SetSign(static_cast<bool>(expValue & 1));
1091 return bigint;
1144 JSHandle<BigInt> bigint = BigInt::CreateBigint(thread, needLength);
1161 uint32_t value = bigint->GetDigit(index);
1168 bigint->SetDigit(index, value);
1173 ASSERT(index < bigint->GetLength());
1174 uint32_t value = bigint->GetDigit(index);
1179 bigint->SetDigit(index, value);
1185 bigint->SetSign(x->GetSign() != y->GetSign());
1186 return BigIntHelper::RightTruncate(thread, bigint);
1273 JSHandle<BigInt> BigInt::FormatLeftShift(JSThread *thread, uint32_t shift, JSHandle<BigInt> bigint, bool neeedAddOne)
1276 return bigint;
1278 uint32_t len = bigint->GetLength();
1286 std::copy(bigint->GetData(), bigint->GetData() + len, result->GetData());
1291 uint32_t value = bigint->GetDigit(index);
1304 void BigInt::UnformattedRightShift(JSHandle<BigInt> bigint, uint32_t shift)
1306 RightShift(bigint, bigint, 0, shift);
1458 JSHandle<BigInt> bigint(thread, JSTaggedValue::Exception());
1459 THROW_RANGE_ERROR_AND_RETURN(thread, "Division by zero", bigint);
1498 JSHandle<BigInt> bigint(thread, JSTaggedValue::Exception());
1499 THROW_RANGE_ERROR_AND_RETURN(thread, "Division by zero", bigint);
1532 JSTaggedValue BigInt::AsUintN(JSThread *thread, JSTaggedNumber &bits, JSHandle<BigInt> bigint)
1540 if (bigint->IsZero()) {
1541 return bigint.GetTaggedValue();
1545 if (bit >= kMaxLengthBits && !bigint->GetSign()) {
1546 return bigint.GetTaggedValue();
1550 return FloorMod(thread, bigint, tValue).GetTaggedValue();
1553 JSTaggedValue BigInt::AsintN(JSThread *thread, JSTaggedNumber &bits, JSHandle<BigInt> bigint)
1561 if (bigint->IsZero()) {
1562 return bigint.GetTaggedValue();
1567 if (bit >= kMaxLengthBits && !bigint->GetSign()) {
1568 return bigint.GetTaggedValue();
1572 JSHandle<BigInt> modValue = FloorMod(thread, bigint, tValue);
1609 JSTaggedNumber BigInt::BigIntToNumber(JSHandle<BigInt> bigint)
1611 if (bigint->IsZero()) {
1614 uint32_t bigintLen = bigint->GetLength();
1616 uint32_t BigintHead = bigint->GetDigit(bigintLen - 1);
1620 bool bigintSign = bigint->GetSign();
1635 digit = bigint->GetDigit(--index);
1646 digit = bigint->GetDigit(index);
1650 // After the mantissa is filled, if the bits of bigint have not been used up, consider the rounding problem
1662 digit = bigint->GetDigit(index--);
1673 if (bigint->GetDigit(--index) != 0) {
1680 static int CompareToBitsLen(JSHandle<BigInt> bigint, int numBitLen, int &leadingZeros)
1682 uint32_t bigintLen = bigint->GetLength();
1684 uint32_t BigintHead = bigint->GetDigit(bigintLen - 1);
1687 bool bigintSign = bigint->GetSign();
1698 ComparisonResult BigInt::CompareWithNumber(JSHandle<BigInt> bigint, JSHandle<JSTaggedValue> number)
1719 bool bigintSign = bigint->GetSign();
1726 if (bigint->IsZero() && !num) {
1729 if (bigint->IsZero() && num > 0) {
1737 // Compare the significant bits of bigint with the significant integer bits of double
1739 int res = CompareToBitsLen(bigint, integerDigits + 1, leadingZeros);
1746 uint32_t bigintLen = bigint->GetLength();
1752 uint32_t BigintNum = bigint->GetDigit(index);