OLD | NEW |
1 //===- lib/MC/MCAsmStreamer.cpp - Text Assembly Output --------------------===// | 1 //===- lib/MC/MCAsmStreamer.cpp - Text Assembly Output --------------------===// |
2 // | 2 // |
3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 | 9 |
10 #include "llvm/MC/MCStreamer.h" | 10 #include "llvm/MC/MCStreamer.h" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 | 47 |
48 SmallString<128> CommentToEmit; | 48 SmallString<128> CommentToEmit; |
49 raw_svector_ostream CommentStream; | 49 raw_svector_ostream CommentStream; |
50 | 50 |
51 unsigned IsVerboseAsm : 1; | 51 unsigned IsVerboseAsm : 1; |
52 unsigned ShowInst : 1; | 52 unsigned ShowInst : 1; |
53 unsigned UseDwarfDirectory : 1; | 53 unsigned UseDwarfDirectory : 1; |
54 // @LOCALMOD: we don't have an MCAssembler object here, so we can't ask it | 54 // @LOCALMOD: we don't have an MCAssembler object here, so we can't ask it |
55 // if bundle alignment is enabled. Instead, just track the alignment here. | 55 // if bundle alignment is enabled. Instead, just track the alignment here. |
56 unsigned BundleAlignmentEnabled : 1; | 56 unsigned BundleAlignmentEnabled : 1; |
| 57 unsigned BundleLocked : 1; |
57 | 58 |
58 void EmitRegisterName(int64_t Register); | 59 void EmitRegisterName(int64_t Register); |
59 void EmitCFIStartProcImpl(MCDwarfFrameInfo &Frame) override; | 60 void EmitCFIStartProcImpl(MCDwarfFrameInfo &Frame) override; |
60 void EmitCFIEndProcImpl(MCDwarfFrameInfo &Frame) override; | 61 void EmitCFIEndProcImpl(MCDwarfFrameInfo &Frame) override; |
61 | 62 |
62 public: | 63 public: |
63 MCAsmStreamer(MCContext &Context, std::unique_ptr<formatted_raw_ostream> os, | 64 MCAsmStreamer(MCContext &Context, std::unique_ptr<formatted_raw_ostream> os, |
64 bool isVerboseAsm, bool useDwarfDirectory, | 65 bool isVerboseAsm, bool useDwarfDirectory, |
65 MCInstPrinter *printer, MCCodeEmitter *emitter, | 66 MCInstPrinter *printer, MCCodeEmitter *emitter, |
66 MCAsmBackend *asmbackend, bool showInst) | 67 MCAsmBackend *asmbackend, bool showInst) |
(...skipping 1182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1249 OS << " fixup " << char('A' + i) << " - " << "offset: " << F.getOffset() | 1250 OS << " fixup " << char('A' + i) << " - " << "offset: " << F.getOffset() |
1250 << ", value: " << *F.getValue() << ", kind: " << Info.Name << "\n"; | 1251 << ", value: " << *F.getValue() << ", kind: " << Info.Name << "\n"; |
1251 } | 1252 } |
1252 } | 1253 } |
1253 | 1254 |
1254 void MCAsmStreamer::EmitInstruction(const MCInst &Inst, const MCSubtargetInfo &S
TI) { | 1255 void MCAsmStreamer::EmitInstruction(const MCInst &Inst, const MCSubtargetInfo &S
TI) { |
1255 assert(getCurrentSection().first && | 1256 assert(getCurrentSection().first && |
1256 "Cannot emit contents before setting section!"); | 1257 "Cannot emit contents before setting section!"); |
1257 | 1258 |
1258 // @LOCALMOD-START | 1259 // @LOCALMOD-START |
1259 if (NaClExpander && NaClExpander->expandInst(Inst, *this, STI)) | 1260 if (NaClExpander && !BundleLocked && |
| 1261 NaClExpander->expandInst(Inst, *this, STI)) |
1260 return; | 1262 return; |
1261 | 1263 |
1262 if (BundleAlignmentEnabled && AsmBackend && | 1264 if (BundleAlignmentEnabled && AsmBackend && |
1263 AsmBackend->CustomExpandInst(Inst, *this)) { | 1265 AsmBackend->CustomExpandInst(Inst, *this)) { |
1264 return; | 1266 return; |
1265 } | 1267 } |
1266 // @LOCALMOD-END | 1268 // @LOCALMOD-END |
1267 // Show the encoding in a comment if we have a code emitter. | 1269 // Show the encoding in a comment if we have a code emitter. |
1268 if (Emitter) | 1270 if (Emitter) |
1269 AddEncodingComment(Inst, STI); | 1271 AddEncodingComment(Inst, STI); |
(...skipping 15 matching lines...) Expand all Loading... |
1285 void MCAsmStreamer::EmitBundleAlignMode(unsigned AlignPow2) { | 1287 void MCAsmStreamer::EmitBundleAlignMode(unsigned AlignPow2) { |
1286 OS << "\t.bundle_align_mode " << AlignPow2; | 1288 OS << "\t.bundle_align_mode " << AlignPow2; |
1287 BundleAlignmentEnabled = AlignPow2 > 0; // @LOCALMOD | 1289 BundleAlignmentEnabled = AlignPow2 > 0; // @LOCALMOD |
1288 EmitEOL(); | 1290 EmitEOL(); |
1289 } | 1291 } |
1290 | 1292 |
1291 void MCAsmStreamer::EmitBundleLock(bool AlignToEnd) { | 1293 void MCAsmStreamer::EmitBundleLock(bool AlignToEnd) { |
1292 OS << "\t.bundle_lock"; | 1294 OS << "\t.bundle_lock"; |
1293 if (AlignToEnd) | 1295 if (AlignToEnd) |
1294 OS << " align_to_end"; | 1296 OS << " align_to_end"; |
| 1297 BundleLocked = true; // @LOCALMOD |
1295 EmitEOL(); | 1298 EmitEOL(); |
1296 } | 1299 } |
1297 | 1300 |
1298 void MCAsmStreamer::EmitBundleUnlock() { | 1301 void MCAsmStreamer::EmitBundleUnlock() { |
1299 OS << "\t.bundle_unlock"; | 1302 OS << "\t.bundle_unlock"; |
| 1303 BundleLocked = false; // @LOCALMOD |
1300 EmitEOL(); | 1304 EmitEOL(); |
1301 } | 1305 } |
1302 | 1306 |
1303 /// EmitRawText - If this file is backed by an assembly streamer, this dumps | 1307 /// EmitRawText - If this file is backed by an assembly streamer, this dumps |
1304 /// the specified string in the output .s file. This capability is | 1308 /// the specified string in the output .s file. This capability is |
1305 /// indicated by the hasRawTextSupport() predicate. | 1309 /// indicated by the hasRawTextSupport() predicate. |
1306 void MCAsmStreamer::EmitRawTextImpl(StringRef String) { | 1310 void MCAsmStreamer::EmitRawTextImpl(StringRef String) { |
1307 if (!String.empty() && String.back() == '\n') | 1311 if (!String.empty() && String.back() == '\n') |
1308 String = String.substr(0, String.size()-1); | 1312 String = String.substr(0, String.size()-1); |
1309 OS << String; | 1313 OS << String; |
(...skipping 19 matching lines...) Expand all Loading... |
1329 } | 1333 } |
1330 | 1334 |
1331 MCStreamer *llvm::createAsmStreamer(MCContext &Context, | 1335 MCStreamer *llvm::createAsmStreamer(MCContext &Context, |
1332 std::unique_ptr<formatted_raw_ostream> OS, | 1336 std::unique_ptr<formatted_raw_ostream> OS, |
1333 bool isVerboseAsm, bool useDwarfDirectory, | 1337 bool isVerboseAsm, bool useDwarfDirectory, |
1334 MCInstPrinter *IP, MCCodeEmitter *CE, | 1338 MCInstPrinter *IP, MCCodeEmitter *CE, |
1335 MCAsmBackend *MAB, bool ShowInst) { | 1339 MCAsmBackend *MAB, bool ShowInst) { |
1336 return new MCAsmStreamer(Context, std::move(OS), isVerboseAsm, | 1340 return new MCAsmStreamer(Context, std::move(OS), isVerboseAsm, |
1337 useDwarfDirectory, IP, CE, MAB, ShowInst); | 1341 useDwarfDirectory, IP, CE, MAB, ShowInst); |
1338 } | 1342 } |
OLD | NEW |