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

Unified Diff: src/IceAssemblerARM32.h

Issue 1407273006: Generate block labels in the ARM hybrid assembler. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Ready for review. Created 5 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: src/IceAssemblerARM32.h
diff --git a/src/IceAssemblerARM32.h b/src/IceAssemblerARM32.h
index 20b4e67da28ee3f7596688728a9378cdf3a6dec5..b1329030b1c21e728918994efeb3c27c3b722020 100644
--- a/src/IceAssemblerARM32.h
+++ b/src/IceAssemblerARM32.h
@@ -39,6 +39,7 @@ namespace Ice {
namespace ARM32 {
class AssemblerARM32 : public Assembler {
+ AssemblerARM32() = delete;
AssemblerARM32(const AssemblerARM32 &) = delete;
AssemblerARM32 &operator=(const AssemblerARM32 &) = delete;
@@ -48,7 +49,16 @@ public:
// TODO(kschimpf): Add mode if needed when branches are handled.
(void)use_far_branches;
}
- ~AssemblerARM32() override = default;
+ ~AssemblerARM32() override {
+ if (BuildDefs::asserts()) {
+ for (const Label *Label : CfgNodeLabels) {
+ Label->finalCheck();
+ }
+ for (const Label *Label : LocalLabels) {
+ Label->finalCheck();
+ }
+ }
+ }
void alignFunction() override {
const SizeT Align = 1 << getBundleAlignLog2Bytes();
@@ -84,10 +94,12 @@ public:
return CfgNodeLabels[NodeNumber];
}
- void bindCfgNodeLabel(SizeT NodeNumber) override {
- assert(!getPreliminary());
- Label *L = getOrCreateCfgNodeLabel(NodeNumber);
- this->bind(L);
+ void bindCfgNodeLabel(const CfgNode *Node) override;
+
+ void bindLocalLabel(SizeT Number) {
+ Label *L = getOrCreateLocalLabel(Number);
+ if (!getPreliminary())
+ this->bind(L);
}
bool fixupIsPCRel(FixupKind Kind) const override {
@@ -120,17 +132,22 @@ public:
return Asm->getKind() == Asm_ARM32;
}
- void emitTextInst(const std::string &Text);
+ void emitTextInst(const std::string &Text, SizeT InstSize = sizeof(uint32_t));
private:
// A vector of pool-allocated x86 labels for CFG nodes.
using LabelVector = std::vector<Label *>;
LabelVector CfgNodeLabels;
+ // A vector of pool-allocated x86 labels for Local labels.
+ LabelVector LocalLabels;
Label *getOrCreateLabel(SizeT Number, LabelVector &Labels);
Label *getOrCreateCfgNodeLabel(SizeT NodeNumber) {
return getOrCreateLabel(NodeNumber, CfgNodeLabels);
}
+ Label *getOrCreateLocalLabel(SizeT Number) {
+ return getOrCreateLabel(Number, LocalLabels);
+ }
void emitInst(uint32_t Value) { Buffer.emit<uint32_t>(Value); }
« no previous file with comments | « src/IceAssembler.h ('k') | src/IceAssemblerARM32.cpp » ('j') | src/IceAssemblerARM32.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698