summaryrefslogtreecommitdiff
path: root/lib/MC/MCContext.cpp
diff options
context:
space:
mode:
authorKevin Enderby <enderby@apple.com>2010-05-17 23:08:19 +0000
committerKevin Enderby <enderby@apple.com>2010-05-17 23:08:19 +0000
commitebe7fcd041e1e9c3a0c535b26d8cdb45805bbeb8 (patch)
tree24b43a97e9c13fffbfa6bc0cbb970686a513694b /lib/MC/MCContext.cpp
parentc6177a4531a5d7e2207a3184cc8a4f1792073a7d (diff)
downloadllvm-ebe7fcd041e1e9c3a0c535b26d8cdb45805bbeb8.tar.gz
llvm-ebe7fcd041e1e9c3a0c535b26d8cdb45805bbeb8.tar.bz2
llvm-ebe7fcd041e1e9c3a0c535b26d8cdb45805bbeb8.tar.xz
Added support in MC for Directional Local Labels.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103989 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCContext.cpp')
-rw-r--r--lib/MC/MCContext.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/MC/MCContext.cpp b/lib/MC/MCContext.cpp
index 5a65b8ae38..5cc72e8e9f 100644
--- a/lib/MC/MCContext.cpp
+++ b/lib/MC/MCContext.cpp
@@ -13,6 +13,7 @@
#include "llvm/MC/MCSectionELF.h"
#include "llvm/MC/MCSectionCOFF.h"
#include "llvm/MC/MCSymbol.h"
+#include "llvm/MC/MCLabel.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/Twine.h"
using namespace llvm;
@@ -71,6 +72,50 @@ MCSymbol *MCContext::CreateTempSymbol() {
"tmp" + Twine(NextUniqueID++));
}
+unsigned MCContext::NextInstance(int64_t LocalLabelVal) {
+ unsigned Instance;
+ MCLabel *Label;
+ Label = Instances[LocalLabelVal];
+ if (Label) {
+ Instance = Label->incInstance();
+ }
+ else {
+ Instance = 1;
+ Label = new MCLabel(Instance);
+ Instances[LocalLabelVal] = Label;
+ }
+ return Instance;
+}
+
+unsigned MCContext::GetInstance(int64_t LocalLabelVal) {
+ int Instance;
+ MCLabel *Label;
+ Label = Instances[LocalLabelVal];
+ if (Label) {
+ Instance = Label->getInstance();
+ }
+ else {
+ Instance = 0;
+ Label = new MCLabel(Instance);
+ Instances[LocalLabelVal] = Label;
+ }
+ return Instance;
+}
+
+MCSymbol *MCContext::CreateDirectionalLocalSymbol(int64_t LocalLabelVal) {
+ return GetOrCreateSymbol(Twine(MAI.getPrivateGlobalPrefix()) +
+ Twine(LocalLabelVal) +
+ "\2" +
+ Twine(NextInstance(LocalLabelVal)));
+}
+MCSymbol *MCContext::GetDirectionalLocalSymbol(int64_t LocalLabelVal,
+ int bORf) {
+ return GetOrCreateSymbol(Twine(MAI.getPrivateGlobalPrefix()) +
+ Twine(LocalLabelVal) +
+ "\2" +
+ Twine(GetInstance(LocalLabelVal) + bORf));
+}
+
MCSymbol *MCContext::LookupSymbol(StringRef Name) const {
return Symbols.lookup(Name);
}