mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 12:14:36 +00:00
[vm, compiler] Fix BigInt._rsh intrinsic when shifting out at least one word on RISC-V.
TEST=ci Bug: https://github.com/dart-lang/sdk/issues/49067 Change-Id: I3f7041243334da3a106534f7cf4903a7c34b272c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/245780 Commit-Queue: Ryan Macnak <rmacnak@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com>
This commit is contained in:
parent
cc17a98514
commit
38f9b339e3
|
@ -245,11 +245,12 @@ void AsmIntrinsifier::Bigint_rsh(Assembler* assembler, Label* normal_ir_body) {
|
|||
__ andi(T5, T2, target::kBitsPerWord - 1); // T5 = bit shift
|
||||
__ li(T6, target::kBitsPerWord);
|
||||
__ sub(T6, T6, T5); // T6 = carry bit shift
|
||||
__ sub(T1, T1, T4); // T1 = words to process
|
||||
|
||||
__ slli(TMP, T4, target::kWordSizeLog2);
|
||||
__ add(T0, T0, TMP); // T0 = &src_digits[word_shift]
|
||||
|
||||
__ li(T2, 0); // carry
|
||||
// T2 = carry
|
||||
__ lx(T2, FieldAddress(T0, target::TypedData::payload_offset()));
|
||||
__ srl(T2, T2, T5);
|
||||
__ addi(T0, T0, target::kWordSize);
|
||||
|
|
|
@ -39,6 +39,12 @@ main() {
|
|||
"d87becaa3701c97b31b5b8084f2b5b34e78570920000000000000000");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
|
||||
"1b0f7d9546e0392f6636b70109e56b669cf0ae1240000000000000000");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 127,
|
||||
"6c3df6551b80e4bd98dadc042795ad9a73c2b84900000000000000000000000000000000");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 128,
|
||||
"d87becaa3701c97b31b5b8084f2b5b34e785709200000000000000000000000000000000");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 129,
|
||||
"1b0f7d9546e0392f6636b70109e56b669cf0ae12400000000000000000000000000000000");
|
||||
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
|
||||
"-d87becaa3701c97b31b5b8084f2b5b34e7857092");
|
||||
|
@ -58,4 +64,10 @@ main() {
|
|||
"-d87becaa3701c97b31b5b8084f2b5b34e78570920000000000000000");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
|
||||
"-1b0f7d9546e0392f6636b70109e56b669cf0ae1240000000000000000");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 127,
|
||||
"-6c3df6551b80e4bd98dadc042795ad9a73c2b84900000000000000000000000000000000");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 128,
|
||||
"-d87becaa3701c97b31b5b8084f2b5b34e785709200000000000000000000000000000000");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 129,
|
||||
"-1b0f7d9546e0392f6636b70109e56b669cf0ae12400000000000000000000000000000000");
|
||||
}
|
||||
|
|
|
@ -39,6 +39,9 @@ main() {
|
|||
"d87becaa3701c97b31b5b808");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
|
||||
"6c3df6551b80e4bd98dadc04");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 127, "1b0f7d954");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 128, "d87becaa");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 129, "6c3df655");
|
||||
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
|
||||
"-d87becaa3701c97b31b5b8084f2b5b34e7857092");
|
||||
|
@ -58,4 +61,7 @@ main() {
|
|||
"-d87becaa3701c97b31b5b809");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
|
||||
"-6c3df6551b80e4bd98dadc05");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 127, "-1b0f7d955");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 128, "-d87becab");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 129, "-6c3df656");
|
||||
}
|
||||
|
|
|
@ -41,6 +41,12 @@ main() {
|
|||
"d87becaa3701c97b31b5b8084f2b5b34e78570920000000000000000");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
|
||||
"1b0f7d9546e0392f6636b70109e56b669cf0ae1240000000000000000");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 127,
|
||||
"6c3df6551b80e4bd98dadc042795ad9a73c2b84900000000000000000000000000000000");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 128,
|
||||
"d87becaa3701c97b31b5b8084f2b5b34e785709200000000000000000000000000000000");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 129,
|
||||
"1b0f7d9546e0392f6636b70109e56b669cf0ae12400000000000000000000000000000000");
|
||||
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
|
||||
"-d87becaa3701c97b31b5b8084f2b5b34e7857092");
|
||||
|
@ -60,4 +66,10 @@ main() {
|
|||
"-d87becaa3701c97b31b5b8084f2b5b34e78570920000000000000000");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
|
||||
"-1b0f7d9546e0392f6636b70109e56b669cf0ae1240000000000000000");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 127,
|
||||
"-6c3df6551b80e4bd98dadc042795ad9a73c2b84900000000000000000000000000000000");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 128,
|
||||
"-d87becaa3701c97b31b5b8084f2b5b34e785709200000000000000000000000000000000");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 129,
|
||||
"-1b0f7d9546e0392f6636b70109e56b669cf0ae12400000000000000000000000000000000");
|
||||
}
|
||||
|
|
|
@ -41,6 +41,9 @@ main() {
|
|||
"d87becaa3701c97b31b5b808");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
|
||||
"6c3df6551b80e4bd98dadc04");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 127, "1b0f7d954");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 128, "d87becaa");
|
||||
expectShifted("d87becaa3701c97b31b5b8084f2b5b34e7857092", 129, "6c3df655");
|
||||
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 0,
|
||||
"-d87becaa3701c97b31b5b8084f2b5b34e7857092");
|
||||
|
@ -60,4 +63,7 @@ main() {
|
|||
"-d87becaa3701c97b31b5b809");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 65,
|
||||
"-6c3df6551b80e4bd98dadc05");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 127, "-1b0f7d955");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 128, "-d87becab");
|
||||
expectShifted("-d87becaa3701c97b31b5b8084f2b5b34e7857092", 129, "-6c3df656");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue