Chromium Code Reviews| Index: src/IceAssemblerARM32.cpp |
| diff --git a/src/IceAssemblerARM32.cpp b/src/IceAssemblerARM32.cpp |
| index 06ba9c466e55a85a98b74024c3b66229b3117ce8..7f9e50946063bb651cdcfdc54e44a22c5d55aa2b 100644 |
| --- a/src/IceAssemblerARM32.cpp |
| +++ b/src/IceAssemblerARM32.cpp |
| @@ -21,6 +21,7 @@ |
| //===----------------------------------------------------------------------===// |
| #include "IceAssemblerARM32.h" |
| +#include "IceCfgNode.h" |
| #include "IceUtils.h" |
| namespace { |
| @@ -204,6 +205,17 @@ DecodedResult decodeAddress(const Operand *Opnd, uint32_t &Value) { |
| namespace Ice { |
| +void ARM32::AssemblerARM32::bindCfgNodeLabel(const CfgNode *Node) { |
| + if (BuildDefs::dump() && !Ctx->getFlags().getDisableHybridAssembly()) { |
| + // Generate label name so that branches can find it. |
| + emitTextInst(Node->getAsmName() + ":", 0); |
|
Jim Stichnoth
2015/10/23 13:54:52
Can you use "constexpr SizeT InstSize = 0;" for th
Karl
2015/10/23 16:20:07
Done.
|
| + } |
| + SizeT NodeNumber = Node->getIndex(); |
| + assert(!getPreliminary()); |
| + Label *L = getOrCreateCfgNodeLabel(NodeNumber); |
| + this->bind(L); |
| +} |
| + |
| Label *ARM32::AssemblerARM32::getOrCreateLabel(SizeT Number, |
| LabelVector &Labels) { |
| Label *L = nullptr; |
| @@ -236,12 +248,13 @@ void ARM32::AssemblerARM32::bind(Label *label) { |
| label->bindTo(bound); |
| } |
| -void ARM32::AssemblerARM32::emitTextInst(const std::string &Text) { |
| - static constexpr uint32_t Placeholder = 0; |
| +void ARM32::AssemblerARM32::emitTextInst(const std::string &Text, |
| + SizeT InstSize) { |
| AssemblerBuffer::EnsureCapacity ensured(&Buffer); |
| - AssemblerFixup *F = createTextFixup(Text, sizeof(Placeholder)); |
| + AssemblerFixup *F = createTextFixup(Text, InstSize); |
| emitFixup(F); |
| - emitInst(Placeholder); |
| + for (SizeT I = 0; I < InstSize; ++I) |
| + Buffer.emit<char>(0); |
| } |
| void ARM32::AssemblerARM32::emitType01(CondARM32::Cond Cond, uint32_t Type, |