blob: c2f3e034363847c8d2d7334264cadaa526965477 [file] [log] [blame]
Jim Laskey7c95ad42006-09-06 19:21:41 +00001//===-- TargetAsmInfo.cpp - Asm Info ---------------------------------------==//
Jim Laskeyec0d9fe2006-09-06 18:35:33 +00002//
3// The LLVM Compiler Infrastructure
4//
5// This file was developed by James M. Laskey and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines target asm properties related what form asm statements
11// should take.
12//
13//===----------------------------------------------------------------------===//
14
15#include "llvm/Target/TargetAsmInfo.h"
16
17using namespace llvm;
18
19TargetAsmInfo::TargetAsmInfo() :
20 TextSection(".text"),
21 DataSection(".data"),
22 AddressSize(4),
23 NeedsSet(false),
Chris Lattner4c7b07a2006-10-13 17:50:07 +000024 MaxInstLength(4),
25 SeparatorChar(';'),
Jim Laskeyec0d9fe2006-09-06 18:35:33 +000026 CommentString("#"),
27 GlobalPrefix(""),
28 PrivateGlobalPrefix("."),
29 GlobalVarAddrPrefix(""),
30 GlobalVarAddrSuffix(""),
31 FunctionAddrPrefix(""),
32 FunctionAddrSuffix(""),
33 InlineAsmStart("#APP"),
34 InlineAsmEnd("#NO_APP"),
35 ZeroDirective("\t.zero\t"),
36 ZeroDirectiveSuffix(0),
37 AsciiDirective("\t.ascii\t"),
38 AscizDirective("\t.asciz\t"),
39 Data8bitsDirective("\t.byte\t"),
40 Data16bitsDirective("\t.short\t"),
41 Data32bitsDirective("\t.long\t"),
42 Data64bitsDirective("\t.quad\t"),
43 AlignDirective("\t.align\t"),
44 AlignmentIsInBytes(true),
45 SwitchToSectionDirective("\t.section\t"),
46 TextSectionStartSuffix(""),
47 DataSectionStartSuffix(""),
48 SectionEndDirectiveSuffix(0),
49 ConstantPoolSection("\t.section .rodata\n"),
50 JumpTableDataSection("\t.section .rodata\n"),
Andrew Lenharthbeec30e2006-09-24 19:45:58 +000051 JumpTableDirective(0),
Reid Spencerc50209b2006-10-27 16:14:06 +000052 CStringSection(0),
Jim Laskeyec0d9fe2006-09-06 18:35:33 +000053 StaticCtorsSection("\t.section .ctors,\"aw\",@progbits"),
54 StaticDtorsSection("\t.section .dtors,\"aw\",@progbits"),
55 FourByteConstantSection(0),
56 EightByteConstantSection(0),
57 SixteenByteConstantSection(0),
58 SetDirective(0),
59 LCOMMDirective(0),
60 COMMDirective("\t.comm\t"),
61 COMMDirectiveTakesAlignment(true),
62 HasDotTypeDotSizeDirective(true),
Chris Lattnercb05af82006-09-26 03:38:18 +000063 UsedDirective(0),
Evan Cheng8752ce62006-12-01 20:47:11 +000064 WeakRefDirective(0),
Chris Lattner9784bc72007-01-14 06:27:21 +000065 HiddenDirective("\t.hidden\t"),
Jim Laskeyec0d9fe2006-09-06 18:35:33 +000066 HasLEB128(false),
67 HasDotLoc(false),
68 HasDotFile(false),
Reid Spencer02b85112006-10-30 22:32:30 +000069 DwarfRequiresFrameSection(true),
Jim Laskeyec0d9fe2006-09-06 18:35:33 +000070 DwarfAbbrevSection(".debug_abbrev"),
71 DwarfInfoSection(".debug_info"),
72 DwarfLineSection(".debug_line"),
73 DwarfFrameSection(".debug_frame"),
74 DwarfPubNamesSection(".debug_pubnames"),
75 DwarfPubTypesSection(".debug_pubtypes"),
76 DwarfStrSection(".debug_str"),
77 DwarfLocSection(".debug_loc"),
78 DwarfARangesSection(".debug_aranges"),
79 DwarfRangesSection(".debug_ranges"),
Andrew Lenharth3655de62006-11-28 19:52:20 +000080 DwarfMacInfoSection(".debug_macinfo"),
81 AsmTransCBE(0) {
Chris Lattner4c7b07a2006-10-13 17:50:07 +000082}
Chris Lattnerf5b10ec2006-10-05 00:35:16 +000083
84TargetAsmInfo::~TargetAsmInfo() {
85}
Chris Lattner4c7b07a2006-10-13 17:50:07 +000086
87/// Measure the specified inline asm to determine an approximation of its
88/// length.
89unsigned TargetAsmInfo::getInlineAsmLength(const char *Str) const {
90 // Count the number of instructions in the asm.
91 unsigned NumInsts = 0;
92 for (; *Str; ++Str) {
93 if (*Str == '\n' || *Str == SeparatorChar)
94 ++NumInsts;
95 }
96
97 // Multiply by the worst-case length for each instruction.
98 return NumInsts * MaxInstLength;
99}