mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-13 22:58:50 +00:00
[AMDGPU][llvm-mc] Predefined symbols to access -mcpu from the assembly source (.option.machine_version...)
The feature allows for conditional assembly etc. TODO: make those symbols read-only. Test added. Differential Revision: http://reviews.llvm.org/D21238 llvm-svn: 272673
This commit is contained in:
parent
fd3d54b8e1
commit
1b18af3b37
@ -60,8 +60,6 @@ class AMDGPUOperand : public MCParsedAsmOperand {
|
||||
public:
|
||||
AMDGPUOperand(enum KindTy K) : MCParsedAsmOperand(), Kind(K) {}
|
||||
|
||||
MCContext *Ctx;
|
||||
|
||||
typedef std::unique_ptr<AMDGPUOperand> Ptr;
|
||||
|
||||
struct Modifiers {
|
||||
@ -586,6 +584,21 @@ public:
|
||||
}
|
||||
|
||||
setAvailableFeatures(ComputeAvailableFeatures(getSTI().getFeatureBits()));
|
||||
|
||||
{
|
||||
// TODO: make those pre-defined variables read-only.
|
||||
// Currently there is none suitable machinery in the core llvm-mc for this.
|
||||
// MCSymbol::isRedefinable is intended for another purpose, and
|
||||
// AsmParser::parseDirectiveSet() cannot be specialized for specific target.
|
||||
AMDGPU::IsaVersion Isa = AMDGPU::getIsaVersion(getSTI().getFeatureBits());
|
||||
MCContext &Ctx = getContext();
|
||||
MCSymbol *Sym = Ctx.getOrCreateSymbol(Twine(".option.machine_version_major"));
|
||||
Sym->setVariableValue(MCConstantExpr::create(Isa.Major, Ctx));
|
||||
Sym = Ctx.getOrCreateSymbol(Twine(".option.machine_version_minor"));
|
||||
Sym->setVariableValue(MCConstantExpr::create(Isa.Minor, Ctx));
|
||||
Sym = Ctx.getOrCreateSymbol(Twine(".option.machine_version_stepping"));
|
||||
Sym->setVariableValue(MCConstantExpr::create(Isa.Stepping, Ctx));
|
||||
}
|
||||
}
|
||||
|
||||
AMDGPUTargetStreamer &getTargetStreamer() {
|
||||
|
48
test/MC/AMDGPU/symbol_special.s
Normal file
48
test/MC/AMDGPU/symbol_special.s
Normal file
@ -0,0 +1,48 @@
|
||||
// RUN: llvm-mc -arch=amdgcn -mcpu=bonaire %s | FileCheck %s --check-prefix=BONAIRE
|
||||
// RUN: llvm-mc -arch=amdgcn -mcpu=hawaii %s | FileCheck %s --check-prefix=HAWAII
|
||||
// RUN: llvm-mc -arch=amdgcn -mcpu=tonga %s | FileCheck %s --check-prefix=TONGA
|
||||
// RUN: llvm-mc -arch=amdgcn -mcpu=fiji %s | FileCheck %s --check-prefix=FIJI
|
||||
|
||||
.if .option.machine_version_major == 0
|
||||
.byte 0
|
||||
.elseif .option.machine_version_major == 7
|
||||
.byte 7
|
||||
.elseif .option.machine_version_major == 8
|
||||
.byte 8
|
||||
.else
|
||||
.error "major unknown"
|
||||
.endif
|
||||
// BONAIRE: .byte 7
|
||||
// HAWAII: .byte 7
|
||||
// TONGA: .byte 8
|
||||
// FIJI: .byte 8
|
||||
|
||||
.if .option.machine_version_minor == 0
|
||||
.byte 0
|
||||
.else
|
||||
.error "minor unknown"
|
||||
.endif
|
||||
// BONAIRE: .byte 0
|
||||
// HAWAII: .byte 0
|
||||
// TONGA: .byte 0
|
||||
// FIJI: .byte 0
|
||||
|
||||
.if .option.machine_version_stepping == 0
|
||||
.byte 0
|
||||
.elseif .option.machine_version_stepping == 1
|
||||
.byte 1
|
||||
.elseif .option.machine_version_stepping == 3
|
||||
.byte 3
|
||||
.else
|
||||
.error "stepping unknown"
|
||||
.endif
|
||||
// BONAIRE: .byte 0
|
||||
// HAWAII: .byte 1
|
||||
// TONGA: .byte 0
|
||||
// FIJI: .byte 3
|
||||
|
||||
v_add_f32 v0, v0, v[.option.machine_version_major]
|
||||
// BONAIRE: v_add_f32_e32 v0, v0, v7
|
||||
// HAWAII: v_add_f32_e32 v0, v0, v7
|
||||
// TONGA: v_add_f32_e32 v0, v0, v8
|
||||
// FIJI: v_add_f32_e32 v0, v0, v8
|
Loading…
Reference in New Issue
Block a user