| Index: runtime/vm/intrinsifier_ia32.cc
|
| ===================================================================
|
| --- runtime/vm/intrinsifier_ia32.cc (revision 41040)
|
| +++ runtime/vm/intrinsifier_ia32.cc (working copy)
|
| @@ -654,7 +654,7 @@
|
| __ movl(EAX, EBX);
|
| __ shll(EBX, ECX);
|
| __ xorl(EDI, EDI);
|
| - __ shld(EDI, EAX);
|
| + __ shldl(EDI, EAX);
|
| // Result in EDI (high) and EBX (low).
|
| const Class& mint_class = Class::Handle(
|
| Isolate::Current()->object_store()->mint_class());
|
| @@ -1096,7 +1096,7 @@
|
|
|
| // uint32_t mi = *mip++
|
| __ movl(EAX, Address(EDI, 0));
|
| - __ addl(EDI, Immediate(kWordSize));
|
| + __ addl(EDI, Immediate(Bigint::kBytesPerDigit));
|
|
|
| // uint64_t t = x*mi
|
| __ mull(EBX); // t = EDX:EAX = EAX * EBX
|
| @@ -1109,7 +1109,7 @@
|
|
|
| // *ajp++ = low32(t)
|
| __ movl(Address(ESI, 0), EAX);
|
| - __ addl(ESI, Immediate(kWordSize));
|
| + __ addl(ESI, Immediate(Bigint::kBytesPerDigit));
|
|
|
| // c = high32(t)
|
| __ movl(ECX, EDX);
|
| @@ -1120,7 +1120,7 @@
|
|
|
| Label done;
|
| __ testl(ECX, ECX);
|
| - __ j(ZERO, &done);
|
| + __ j(ZERO, &done, Assembler::kNearJump);
|
|
|
| // *ajp += c
|
| __ addl(Address(ESI, 0), ECX);
|
| @@ -1128,7 +1128,7 @@
|
|
|
| Label propagate_carry_loop;
|
| __ Bind(&propagate_carry_loop);
|
| - __ addl(ESI, Immediate(kWordSize));
|
| + __ addl(ESI, Immediate(Bigint::kBytesPerDigit));
|
| __ incl(Address(ESI, 0)); // c == 0 or 1
|
| __ j(CARRY, &propagate_carry_loop, Assembler::kNearJump);
|
|
|
| @@ -1178,8 +1178,8 @@
|
| Label x_zero;
|
| __ movl(EBX, Address(EDI, 0));
|
| __ cmpl(EBX, Immediate(0));
|
| - __ j(EQUAL, &x_zero);
|
| - __ addl(EDI, Immediate(kWordSize));
|
| + __ j(EQUAL, &x_zero, Assembler::kNearJump);
|
| + __ addl(EDI, Immediate(Bigint::kBytesPerDigit));
|
|
|
| // Preserve CTX to free ESI.
|
| __ pushl(CTX);
|
| @@ -1197,7 +1197,7 @@
|
|
|
| // *ajp++ = low32(t)
|
| __ movl(Address(ESI, 0), EAX);
|
| - __ addl(ESI, Immediate(kWordSize));
|
| + __ addl(ESI, Immediate(Bigint::kBytesPerDigit));
|
|
|
| // int n = used - i - 1
|
| __ movl(EAX, Address(ESP, 2 * kWordSize)); // used is Smi
|
| @@ -1225,17 +1225,17 @@
|
|
|
| // while (--n >= 0)
|
| __ decl(Address(ESP, 2 * kWordSize)); // --n
|
| - __ j(NEGATIVE, &done);
|
| + __ j(NEGATIVE, &done, Assembler::kNearJump);
|
|
|
| // uint32_t xi = *xip++
|
| __ movl(EAX, Address(EDI, 0));
|
| - __ addl(EDI, Immediate(kWordSize));
|
| + __ addl(EDI, Immediate(Bigint::kBytesPerDigit));
|
|
|
| // uint96_t t = ECX:EDX:EAX = 2*x*xi + aj + c
|
| __ mull(EBX); // EDX:EAX = EAX * EBX
|
| __ xorl(ECX, ECX); // ECX = 0
|
| - __ shld(ECX, EDX, Immediate(1));
|
| - __ shld(EDX, EAX, Immediate(1));
|
| + __ shldl(ECX, EDX, Immediate(1));
|
| + __ shldl(EDX, EAX, Immediate(1));
|
| __ shll(EAX, Immediate(1)); // ECX:EDX:EAX <<= 1
|
| __ addl(EAX, Address(ESI, 0)); // t += aj
|
| __ adcl(EDX, Immediate(0));
|
| @@ -1246,7 +1246,7 @@
|
|
|
| // *ajp++ = low32(t)
|
| __ movl(Address(ESI, 0), EAX);
|
| - __ addl(ESI, Immediate(kWordSize));
|
| + __ addl(ESI, Immediate(Bigint::kBytesPerDigit));
|
|
|
| // c = high64(t)
|
| __ movl(cl_addr, EDX);
|
| @@ -1264,7 +1264,7 @@
|
| // *ajp++ = low32(t)
|
| // *ajp = high32(t)
|
| __ movl(Address(ESI, 0), EAX);
|
| - __ movl(Address(ESI, kWordSize), EDX);
|
| + __ movl(Address(ESI, Bigint::kBytesPerDigit), EDX);
|
|
|
| // Restore CTX and return.
|
| __ Drop(3);
|
| @@ -1314,7 +1314,7 @@
|
| __ j(EQUAL, &return_qd, Assembler::kNearJump);
|
|
|
| // EAX = dl = dp[-1]
|
| - __ movl(EAX, Address(EBX, -kWordSize));
|
| + __ movl(EAX, Address(EBX, -Bigint::kBytesPerDigit));
|
|
|
| // EAX = qd = dh:dl / yt = EDX:EAX / ECX
|
| __ divl(ECX);
|
| @@ -1321,7 +1321,8 @@
|
|
|
| __ Bind(&return_qd);
|
| // args[1] = qd
|
| - __ movl(FieldAddress(EDI, TypedData::data_offset() + kWordSize), EAX);
|
| + __ movl(FieldAddress(EDI, TypedData::data_offset() + Bigint::kBytesPerDigit),
|
| + EAX);
|
|
|
| // Returning Object::null() is not required, since this method is private.
|
| __ ret();
|
| @@ -1352,7 +1353,8 @@
|
| __ mull(ECX);
|
|
|
| // args[1] = t mod DIGIT_BASE = low32(t)
|
| - __ movl(FieldAddress(EDI, TypedData::data_offset() + kWordSize), EAX);
|
| + __ movl(FieldAddress(EDI, TypedData::data_offset() + Bigint::kBytesPerDigit),
|
| + EAX);
|
|
|
| // Returning Object::null() is not required, since this method is private.
|
| __ ret();
|
|
|