mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[MC,NVPTX] Add MCAsmPrinter support for unsigned-only data directives.
PTX does not support negative values in .bNN data directives and we must typecast such values to unsigned before printing them. MCAsmInfo can now specify whether such casting is necessary for particular target. Differential Revision: https://reviews.llvm.org/D83423
This commit is contained in:
parent
abf1154870
commit
9d0375c353
@ -209,6 +209,9 @@ protected:
|
||||
const char *Data32bitsDirective;
|
||||
const char *Data64bitsDirective;
|
||||
|
||||
/// True if data directives support signed values
|
||||
bool SupportsSignedData = true;
|
||||
|
||||
/// If non-null, a directive that is used to emit a word which should be
|
||||
/// relocated as a 64-bit GP-relative offset, e.g. .gpdword on Mips. Defaults
|
||||
/// to nullptr.
|
||||
@ -436,6 +439,7 @@ public:
|
||||
const char *getData16bitsDirective() const { return Data16bitsDirective; }
|
||||
const char *getData32bitsDirective() const { return Data32bitsDirective; }
|
||||
const char *getData64bitsDirective() const { return Data64bitsDirective; }
|
||||
bool supportsSignedData() const { return SupportsSignedData; }
|
||||
const char *getGPRel64Directive() const { return GPRel64Directive; }
|
||||
const char *getGPRel32Directive() const { return GPRel32Directive; }
|
||||
const char *getDTPRel64Directive() const { return DTPRel64Directive; }
|
||||
|
@ -47,6 +47,8 @@ void MCExpr::print(raw_ostream &OS, const MCAsmInfo *MAI, bool InParens) const {
|
||||
auto Value = cast<MCConstantExpr>(*this).getValue();
|
||||
auto PrintInHex = cast<MCConstantExpr>(*this).useHexFormat();
|
||||
auto SizeInBytes = cast<MCConstantExpr>(*this).getSizeInBytes();
|
||||
if (Value < 0 && MAI && !MAI->supportsSignedData())
|
||||
PrintInHex = true;
|
||||
if (PrintInHex)
|
||||
switch (SizeInBytes) {
|
||||
default:
|
||||
|
@ -47,6 +47,7 @@ NVPTXMCAsmInfo::NVPTXMCAsmInfo(const Triple &TheTriple,
|
||||
AscizDirective = nullptr; // not supported
|
||||
SupportsQuotedNames = false;
|
||||
SupportsExtendedDwarfLocDirective = false;
|
||||
SupportsSignedData = false;
|
||||
|
||||
// @TODO: Can we just disable this?
|
||||
WeakDirective = "\t// .weak\t";
|
||||
|
@ -14,7 +14,8 @@
|
||||
; CHECK: .b8 3 // DW_AT_decl_line
|
||||
; CHECK-NEXT: .b8 1 // DW_AT_byte_size
|
||||
; CHECK-NEXT: .b8 6 // DW_AT_bit_size
|
||||
; CHECK-NEXT: .b64 -1 // DW_AT_bit_offset
|
||||
; Negative offset must be encoded as an unsigned integer.
|
||||
; CHECK-NEXT: .b64 0xffffffffffffffff // DW_AT_bit_offset
|
||||
; CHECK-NEXT: .b8 2 // DW_AT_data_member_location
|
||||
|
||||
%struct.anon = type { i16 }
|
||||
|
Loading…
x
Reference in New Issue
Block a user