radeon/llvm: add support to fetch temps as vectors
[mesa.git] / src / gallium / drivers / radeon / AMDIL7XXDevice.cpp
1 //===-- AMDIL7XXDevice.cpp - Device Info for 7XX GPUs ---------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //==-----------------------------------------------------------------------===//
9 #include "AMDIL7XXDevice.h"
10 #include "AMDGPUSubtarget.h"
11 #ifdef UPSTREAM_LLVM
12 #include "AMDIL7XXAsmPrinter.h"
13 #endif
14 #include "AMDILDevice.h"
15
16 using namespace llvm;
17
18 AMDGPU7XXDevice::AMDGPU7XXDevice(AMDGPUSubtarget *ST) : AMDGPUDevice(ST)
19 {
20 setCaps();
21 std::string name = mSTM->getDeviceName();
22 if (name == "rv710") {
23 mDeviceFlag = OCL_DEVICE_RV710;
24 } else if (name == "rv730") {
25 mDeviceFlag = OCL_DEVICE_RV730;
26 } else {
27 mDeviceFlag = OCL_DEVICE_RV770;
28 }
29 }
30
31 AMDGPU7XXDevice::~AMDGPU7XXDevice()
32 {
33 }
34
35 void AMDGPU7XXDevice::setCaps()
36 {
37 mSWBits.set(AMDGPUDeviceInfo::LocalMem);
38 }
39
40 size_t AMDGPU7XXDevice::getMaxLDSSize() const
41 {
42 if (usesHardware(AMDGPUDeviceInfo::LocalMem)) {
43 return MAX_LDS_SIZE_700;
44 }
45 return 0;
46 }
47
48 size_t AMDGPU7XXDevice::getWavefrontSize() const
49 {
50 return AMDGPUDevice::HalfWavefrontSize;
51 }
52
53 uint32_t AMDGPU7XXDevice::getGeneration() const
54 {
55 return AMDGPUDeviceInfo::HD4XXX;
56 }
57
58 uint32_t AMDGPU7XXDevice::getResourceID(uint32_t DeviceID) const
59 {
60 switch (DeviceID) {
61 default:
62 assert(0 && "ID type passed in is unknown!");
63 break;
64 case GLOBAL_ID:
65 case CONSTANT_ID:
66 case RAW_UAV_ID:
67 case ARENA_UAV_ID:
68 break;
69 case LDS_ID:
70 if (usesHardware(AMDGPUDeviceInfo::LocalMem)) {
71 return DEFAULT_LDS_ID;
72 }
73 break;
74 case SCRATCH_ID:
75 if (usesHardware(AMDGPUDeviceInfo::PrivateMem)) {
76 return DEFAULT_SCRATCH_ID;
77 }
78 break;
79 case GDS_ID:
80 assert(0 && "GDS UAV ID is not supported on this chip");
81 if (usesHardware(AMDGPUDeviceInfo::RegionMem)) {
82 return DEFAULT_GDS_ID;
83 }
84 break;
85 };
86
87 return 0;
88 }
89
90 uint32_t AMDGPU7XXDevice::getMaxNumUAVs() const
91 {
92 return 1;
93 }
94
95 AsmPrinter*
96 AMDGPU7XXDevice::getAsmPrinter(TargetMachine& TM, MCStreamer &Streamer) const
97 {
98 #ifdef UPSTREAM_LLVM
99 return new AMDGPU7XXAsmPrinter(TM, Streamer);
100 #else
101 return NULL;
102 #endif
103 }
104
105 AMDGPU770Device::AMDGPU770Device(AMDGPUSubtarget *ST): AMDGPU7XXDevice(ST)
106 {
107 setCaps();
108 }
109
110 AMDGPU770Device::~AMDGPU770Device()
111 {
112 }
113
114 void AMDGPU770Device::setCaps()
115 {
116 if (mSTM->isOverride(AMDGPUDeviceInfo::DoubleOps)) {
117 mSWBits.set(AMDGPUDeviceInfo::FMA);
118 mHWBits.set(AMDGPUDeviceInfo::DoubleOps);
119 }
120 mSWBits.set(AMDGPUDeviceInfo::BarrierDetect);
121 mHWBits.reset(AMDGPUDeviceInfo::LongOps);
122 mSWBits.set(AMDGPUDeviceInfo::LongOps);
123 mSWBits.set(AMDGPUDeviceInfo::LocalMem);
124 }
125
126 size_t AMDGPU770Device::getWavefrontSize() const
127 {
128 return AMDGPUDevice::WavefrontSize;
129 }
130
131 AMDGPU710Device::AMDGPU710Device(AMDGPUSubtarget *ST) : AMDGPU7XXDevice(ST)
132 {
133 }
134
135 AMDGPU710Device::~AMDGPU710Device()
136 {
137 }
138
139 size_t AMDGPU710Device::getWavefrontSize() const
140 {
141 return AMDGPUDevice::QuarterWavefrontSize;
142 }