Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(833)

Unified Diff: runtime/vm/intrinsifier_arm.cc

Issue 648613006: Implement bigint absAdd, absSub, mulAdd, sqrAdd, estQuotientDigit intrinsics, (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/intrinsifier_arm.cc
===================================================================
--- runtime/vm/intrinsifier_arm.cc (revision 41040)
+++ runtime/vm/intrinsifier_arm.cc (working copy)
@@ -925,11 +925,11 @@
__ adds(R0, R0, Operand(0)); // carry flag = 0
Label add_loop;
__ Bind(&add_loop);
- __ ldr(R0, Address(R3, kWordSize, Address::PostIndex));
- __ ldr(R1, Address(R5, kWordSize, Address::PostIndex));
+ __ ldr(R0, Address(R3, Bigint::kBytesPerDigit, Address::PostIndex));
+ __ ldr(R1, Address(R5, Bigint::kBytesPerDigit, Address::PostIndex));
__ adcs(R0, R0, Operand(R1));
__ teq(R3, Operand(R7)); // Does not affect carry flag.
- __ str(R0, Address(R6, kWordSize, Address::PostIndex));
+ __ str(R0, Address(R6, Bigint::kBytesPerDigit, Address::PostIndex));
__ b(&add_loop, NE);
Label last_carry;
@@ -938,10 +938,10 @@
Label carry_loop;
__ Bind(&carry_loop);
- __ ldr(R0, Address(R3, kWordSize, Address::PostIndex));
+ __ ldr(R0, Address(R3, Bigint::kBytesPerDigit, Address::PostIndex));
__ adcs(R0, R0, Operand(0));
__ teq(R3, Operand(R8)); // Does not affect carry flag.
- __ str(R0, Address(R6, kWordSize, Address::PostIndex));
+ __ str(R0, Address(R6, Bigint::kBytesPerDigit, Address::PostIndex));
__ b(&carry_loop, NE);
__ Bind(&last_carry);
@@ -980,11 +980,11 @@
__ subs(R0, R0, Operand(0)); // carry flag = 1
Label sub_loop;
__ Bind(&sub_loop);
- __ ldr(R0, Address(R3, kWordSize, Address::PostIndex));
- __ ldr(R1, Address(R5, kWordSize, Address::PostIndex));
+ __ ldr(R0, Address(R3, Bigint::kBytesPerDigit, Address::PostIndex));
+ __ ldr(R1, Address(R5, Bigint::kBytesPerDigit, Address::PostIndex));
__ sbcs(R0, R0, Operand(R1));
__ teq(R3, Operand(R7)); // Does not affect carry flag.
- __ str(R0, Address(R6, kWordSize, Address::PostIndex));
+ __ str(R0, Address(R6, Bigint::kBytesPerDigit, Address::PostIndex));
__ b(&sub_loop, NE);
Label done;
@@ -993,10 +993,10 @@
Label carry_loop;
__ Bind(&carry_loop);
- __ ldr(R0, Address(R3, kWordSize, Address::PostIndex));
+ __ ldr(R0, Address(R3, Bigint::kBytesPerDigit, Address::PostIndex));
__ sbcs(R0, R0, Operand(0));
__ teq(R3, Operand(R8)); // Does not affect carry flag.
- __ str(R0, Address(R6, kWordSize, Address::PostIndex));
+ __ str(R0, Address(R6, Bigint::kBytesPerDigit, Address::PostIndex));
__ b(&carry_loop, NE);
__ Bind(&done);
@@ -1070,7 +1070,7 @@
// n: R6
// uint32_t mi = *mip++
- __ ldr(R2, Address(R4, kWordSize, Address::PostIndex));
+ __ ldr(R2, Address(R4, Bigint::kBytesPerDigit, Address::PostIndex));
// uint32_t aj = *ajp
__ ldr(R0, Address(R5, 0));
@@ -1079,7 +1079,7 @@
__ umaal(R0, R1, R2, R3); // R1:R0 = R2*R3 + R1 + R0.
// *ajp++ = low32(t) = R0
- __ str(R0, Address(R5, kWordSize, Address::PostIndex));
+ __ str(R0, Address(R5, Bigint::kBytesPerDigit, Address::PostIndex));
// c = high32(t) = R1
@@ -1093,7 +1093,7 @@
// *ajp++ += c
__ ldr(R0, Address(R5, 0));
__ adds(R0, R0, Operand(R1));
- __ str(R0, Address(R5, kWordSize, Address::PostIndex));
+ __ str(R0, Address(R5, Bigint::kBytesPerDigit, Address::PostIndex));
__ b(&done, CC);
Label propagate_carry_loop;
@@ -1100,7 +1100,7 @@
__ Bind(&propagate_carry_loop);
__ ldr(R0, Address(R5, 0));
__ adds(R0, R0, Operand(1));
- __ str(R0, Address(R5, kWordSize, Address::PostIndex));
+ __ str(R0, Address(R5, Bigint::kBytesPerDigit, Address::PostIndex));
__ b(&propagate_carry_loop, CS);
__ Bind(&done);
@@ -1145,7 +1145,7 @@
// R3 = x = *xip++, return if x == 0
Label x_zero;
- __ ldr(R3, Address(R4, kWordSize, Address::PostIndex));
+ __ ldr(R3, Address(R4, Bigint::kBytesPerDigit, Address::PostIndex));
__ tst(R3, Operand(R3));
__ b(&x_zero, EQ);
@@ -1160,7 +1160,7 @@
__ umaal(R0, R6, R3, R3); // R6:R0 = R3*R3 + R6 + R0.
// *ajp++ = low32(t) = R0
- __ str(R0, Address(R5, kWordSize, Address::PostIndex));
+ __ str(R0, Address(R5, Bigint::kBytesPerDigit, Address::PostIndex));
// R6 = low32(c) = high32(t)
// R7 = high32(c) = 0
@@ -1184,7 +1184,7 @@
// n: R8
// uint32_t xi = *xip++
- __ ldr(R2, Address(R4, kWordSize, Address::PostIndex));
+ __ ldr(R2, Address(R4, Bigint::kBytesPerDigit, Address::PostIndex));
// uint32_t aj = *ajp
__ ldr(R1, Address(R5, 0));
@@ -1199,7 +1199,7 @@
__ adc(R7, R7, Operand(0)); // R7:R6:R0 = R1:R0 + R7:R6 = 2*x*xi + aj + c.
// *ajp++ = low32(t) = R0
- __ str(R0, Address(R5, kWordSize, Address::PostIndex));
+ __ str(R0, Address(R5, Bigint::kBytesPerDigit, Address::PostIndex));
// while (--n >= 0)
__ subs(R8, R8, Operand(1)); // --n
@@ -1255,7 +1255,8 @@
__ umull(R0, R1, R2, R3);
// args[1] = t mod DIGIT_BASE = low32(t)
- __ str(R0, FieldAddress(R4, TypedData::data_offset() + kWordSize));
+ __ str(R0,
+ FieldAddress(R4, TypedData::data_offset() + Bigint::kBytesPerDigit));
// Returning Object::null() is not required, since this method is private.
__ Ret();

Powered by Google App Engine
This is Rietveld 408576698