d7c96573a1597fdb5bafe4d9740a73301ede9b15
[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 #ifdef UPSTREAM_LLVM
11 #include "AMDIL7XXAsmPrinter.h"
12 #endif
13 #include "AMDILDevice.h"
14
15 using namespace llvm;
16
17 AMDIL7XXDevice::AMDIL7XXDevice(AMDILSubtarget *ST) : AMDILDevice(ST)
18 {
19 setCaps();
20 std::string name = mSTM->getDeviceName();
21 if (name == "rv710") {
22 mDeviceFlag = OCL_DEVICE_RV710;
23 } else if (name == "rv730") {
24 mDeviceFlag = OCL_DEVICE_RV730;
25 } else {
26 mDeviceFlag = OCL_DEVICE_RV770;
27 }
28 }
29
30 AMDIL7XXDevice::~AMDIL7XXDevice()
31 {
32 }
33
34 void AMDIL7XXDevice::setCaps()
35 {
36 mSWBits.set(AMDILDeviceInfo::LocalMem);
37 }
38
39 size_t AMDIL7XXDevice::getMaxLDSSize() const
40 {
41 if (usesHardware(AMDILDeviceInfo::LocalMem)) {
42 return MAX_LDS_SIZE_700;
43 }
44 return 0;
45 }
46
47 size_t AMDIL7XXDevice::getWavefrontSize() const
48 {
49 return AMDILDevice::HalfWavefrontSize;
50 }
51
52 uint32_t AMDIL7XXDevice::getGeneration() const
53 {
54 return AMDILDeviceInfo::HD4XXX;
55 }
56
57 uint32_t AMDIL7XXDevice::getResourceID(uint32_t DeviceID) const
58 {
59 switch (DeviceID) {
60 default:
61 assert(0 && "ID type passed in is unknown!");
62 break;
63 case GLOBAL_ID:
64 case CONSTANT_ID:
65 case RAW_UAV_ID:
66 case ARENA_UAV_ID:
67 break;
68 case LDS_ID:
69 if (usesHardware(AMDILDeviceInfo::LocalMem)) {
70 return DEFAULT_LDS_ID;
71 }
72 break;
73 case SCRATCH_ID:
74 if (usesHardware(AMDILDeviceInfo::PrivateMem)) {
75 return DEFAULT_SCRATCH_ID;
76 }
77 break;
78 case GDS_ID:
79 assert(0 && "GDS UAV ID is not supported on this chip");
80 if (usesHardware(AMDILDeviceInfo::RegionMem)) {
81 return DEFAULT_GDS_ID;
82 }
83 break;
84 };
85
86 return 0;
87 }
88
89 uint32_t AMDIL7XXDevice::getMaxNumUAVs() const
90 {
91 return 1;
92 }
93
94 AsmPrinter*
95 AMDIL7XXDevice::getAsmPrinter(TargetMachine& TM, MCStreamer &Streamer) const
96 {
97 #ifdef UPSTREAM_LLVM
98 return new AMDIL7XXAsmPrinter(TM, Streamer);
99 #else
100 return NULL;
101 #endif
102 }
103
104 AMDIL770Device::AMDIL770Device(AMDILSubtarget *ST): AMDIL7XXDevice(ST)
105 {
106 setCaps();
107 }
108
109 AMDIL770Device::~AMDIL770Device()
110 {
111 }
112
113 void AMDIL770Device::setCaps()
114 {
115 if (mSTM->isOverride(AMDILDeviceInfo::DoubleOps)) {
116 mSWBits.set(AMDILDeviceInfo::FMA);
117 mHWBits.set(AMDILDeviceInfo::DoubleOps);
118 }
119 mSWBits.set(AMDILDeviceInfo::BarrierDetect);
120 mHWBits.reset(AMDILDeviceInfo::LongOps);
121 mSWBits.set(AMDILDeviceInfo::LongOps);
122 mSWBits.set(AMDILDeviceInfo::LocalMem);
123 }
124
125 size_t AMDIL770Device::getWavefrontSize() const
126 {
127 return AMDILDevice::WavefrontSize;
128 }
129
130 AMDIL710Device::AMDIL710Device(AMDILSubtarget *ST) : AMDIL7XXDevice(ST)
131 {
132 }
133
134 AMDIL710Device::~AMDIL710Device()
135 {
136 }
137
138 size_t AMDIL710Device::getWavefrontSize() const
139 {
140 return AMDILDevice::QuarterWavefrontSize;
141 }