| Index: src/assembler_ia32.cpp
|
| diff --git a/src/assembler_ia32.cpp b/src/assembler_ia32.cpp
|
| index d4fff33dcb1522465c2812ed079f9edbf2126866..aac473c11427f245d50d668204dcd5e504c7fb0e 100644
|
| --- a/src/assembler_ia32.cpp
|
| +++ b/src/assembler_ia32.cpp
|
| @@ -79,13 +79,15 @@ Label *AssemblerX86::GetOrCreateLocalLabel(SizeT Number) {
|
| }
|
|
|
| void AssemblerX86::BindCfgNodeLabel(SizeT NodeNumber) {
|
| + assert(!getPreliminary());
|
| Label *L = GetOrCreateCfgNodeLabel(NodeNumber);
|
| this->Bind(L);
|
| }
|
|
|
| void AssemblerX86::BindLocalLabel(SizeT Number) {
|
| Label *L = GetOrCreateLocalLabel(Number);
|
| - this->Bind(L);
|
| + if (!getPreliminary())
|
| + this->Bind(L);
|
| }
|
|
|
| void AssemblerX86::call(GPRRegister reg) {
|
| @@ -2229,6 +2231,13 @@ void AssemblerX86::j(CondX86::BrCond condition, Label *label, bool near) {
|
| intptr_t offset = label->Position() - buffer_.Size();
|
| assert(offset <= 0);
|
| if (Utils::IsInt(8, offset - kShortSize)) {
|
| + // TODO(stichnot): Here and in jmp(), we may need to be more
|
| + // conservative about the backward branch distance if the branch
|
| + // instruction is within a bundle_lock sequence, because the
|
| + // distance may increase when padding is added. This isn't an
|
| + // issue for branches outside a bundle_lock, because if padding
|
| + // is added, the retry may change it to a long backward branch
|
| + // without affecting any of the bookkeeping.
|
| EmitUint8(0x70 + condition);
|
| EmitUint8((offset - kShortSize) & 0xFF);
|
| } else {
|
| @@ -2463,14 +2472,16 @@ void AssemblerX86::EmitLabelLink(Label *label) {
|
| assert(!label->IsBound());
|
| intptr_t position = buffer_.Size();
|
| EmitInt32(label->position_);
|
| - label->LinkTo(position);
|
| + if (!getPreliminary())
|
| + label->LinkTo(position);
|
| }
|
|
|
| void AssemblerX86::EmitNearLabelLink(Label *label) {
|
| assert(!label->IsBound());
|
| intptr_t position = buffer_.Size();
|
| EmitUint8(0);
|
| - label->NearLinkTo(position);
|
| + if (!getPreliminary())
|
| + label->NearLinkTo(position);
|
| }
|
|
|
| void AssemblerX86::EmitGenericShift(int rm, Type Ty, GPRRegister reg,
|
|
|