mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-09 01:38:03 +00:00
make mcasmstreamer handle expanding 8 byte integer constants to
4-byte constants if .quad isn't supported. Switch a bunch of methods used by the dwarf writer to use OutStreamer.EmitIntValue. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93987 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1658202529
commit
5eaa54e210
@ -784,39 +784,25 @@ void AsmPrinter::EmitSLEB128Bytes(int Value) const {
|
||||
/// EmitInt8 - Emit a byte directive and value.
|
||||
///
|
||||
void AsmPrinter::EmitInt8(int Value) const {
|
||||
O << MAI->getData8bitsDirective();
|
||||
PrintHex(Value & 0xFF);
|
||||
OutStreamer.EmitIntValue(Value, 1, 0/*addrspace*/);
|
||||
}
|
||||
|
||||
/// EmitInt16 - Emit a short directive and value.
|
||||
///
|
||||
void AsmPrinter::EmitInt16(int Value) const {
|
||||
O << MAI->getData16bitsDirective();
|
||||
PrintHex(Value & 0xFFFF);
|
||||
OutStreamer.EmitIntValue(Value, 2, 0/*addrspace*/);
|
||||
}
|
||||
|
||||
/// EmitInt32 - Emit a long directive and value.
|
||||
///
|
||||
void AsmPrinter::EmitInt32(int Value) const {
|
||||
O << MAI->getData32bitsDirective();
|
||||
PrintHex(Value);
|
||||
OutStreamer.EmitIntValue(Value, 4, 0/*addrspace*/);
|
||||
}
|
||||
|
||||
/// EmitInt64 - Emit a long long directive and value.
|
||||
///
|
||||
void AsmPrinter::EmitInt64(uint64_t Value) const {
|
||||
if (MAI->getData64bitsDirective()) {
|
||||
O << MAI->getData64bitsDirective();
|
||||
PrintHex(Value);
|
||||
} else {
|
||||
if (TM.getTargetData()->isBigEndian()) {
|
||||
EmitInt32(unsigned(Value >> 32)); O << '\n';
|
||||
EmitInt32(unsigned(Value));
|
||||
} else {
|
||||
EmitInt32(unsigned(Value)); O << '\n';
|
||||
EmitInt32(unsigned(Value >> 32));
|
||||
}
|
||||
}
|
||||
OutStreamer.EmitIntValue(Value, 8, 0/*addrspace*/);
|
||||
}
|
||||
|
||||
/// toOctal - Convert the low order bits of X into an octal digit.
|
||||
|
@ -198,14 +198,24 @@ void MCAsmStreamer::EmitBytes(StringRef Data, unsigned AddrSpace) {
|
||||
void MCAsmStreamer::EmitIntValue(uint64_t Value, unsigned Size,
|
||||
unsigned AddrSpace) {
|
||||
assert(CurSection && "Cannot emit contents before setting section!");
|
||||
// Need target hooks to know how to print this.
|
||||
const char *Directive = 0;
|
||||
switch (Size) {
|
||||
default: break;
|
||||
case 1: Directive = MAI.getData8bitsDirective(AddrSpace); break;
|
||||
case 2: Directive = MAI.getData16bitsDirective(AddrSpace); break;
|
||||
case 4: Directive = MAI.getData32bitsDirective(AddrSpace); break;
|
||||
case 8: Directive = MAI.getData64bitsDirective(AddrSpace); break;
|
||||
case 8:
|
||||
Directive = MAI.getData64bitsDirective(AddrSpace);
|
||||
// If the target doesn't support 64-bit data, emit as two 32-bit halves.
|
||||
if (Directive) break;
|
||||
if (isLittleEndian()) {
|
||||
EmitIntValue((uint32_t)(Value >> 0 ), 4, AddrSpace);
|
||||
EmitIntValue((uint32_t)(Value >> 32), 4, AddrSpace);
|
||||
} else {
|
||||
EmitIntValue((uint32_t)(Value >> 32), 4, AddrSpace);
|
||||
EmitIntValue((uint32_t)(Value >> 0 ), 4, AddrSpace);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
assert(Directive && "Invalid size for machine code value!");
|
||||
@ -215,7 +225,6 @@ void MCAsmStreamer::EmitIntValue(uint64_t Value, unsigned Size,
|
||||
void MCAsmStreamer::EmitValue(const MCExpr *Value, unsigned Size,
|
||||
unsigned AddrSpace) {
|
||||
assert(CurSection && "Cannot emit contents before setting section!");
|
||||
// Need target hooks to know how to print this.
|
||||
const char *Directive = 0;
|
||||
switch (Size) {
|
||||
default: break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user