Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4358 Serge 1
/*
2
 * Copyright 2011 Christoph Bumiller
3
 *
4
 * Permission is hereby granted, free of charge, to any person obtaining a
5
 * copy of this software and associated documentation files (the "Software"),
6
 * to deal in the Software without restriction, including without limitation
7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
 * and/or sell copies of the Software, and to permit persons to whom the
9
 * Software is furnished to do so, subject to the following conditions:
10
 *
11
 * The above copyright notice and this permission notice shall be included in
12
 * all copies or substantial portions of the Software.
13
 *
14
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20
 * OTHER DEALINGS IN THE SOFTWARE.
21
 */
22
 
23
#include "nv50/codegen/nv50_ir_target.h"
24
 
25
namespace nv50_ir {
26
 
27
#define NVC0_BUILTIN_DIV_U32 0
28
#define NVC0_BUILTIN_DIV_S32 1
29
#define NVC0_BUILTIN_RCP_F64 2
30
#define NVC0_BUILTIN_RSQ_F64 3
31
 
32
#define NVC0_BUILTIN_COUNT 4
33
 
34
class TargetNVC0 : public Target
35
{
36
public:
37
   TargetNVC0(unsigned int chipset);
38
 
39
   virtual CodeEmitter *getCodeEmitter(Program::Type);
40
 
41
   CodeEmitter *createCodeEmitterNVC0(Program::Type);
42
   CodeEmitter *createCodeEmitterGK110(Program::Type);
43
 
44
   virtual bool runLegalizePass(Program *, CGStage stage) const;
45
 
46
   virtual void getBuiltinCode(const uint32_t **code, uint32_t *size) const;
47
 
48
   virtual bool insnCanLoad(const Instruction *insn, int s,
49
                            const Instruction *ld) const;
50
   virtual bool isOpSupported(operation, DataType) const;
51
   virtual bool isAccessSupported(DataFile, DataType) const;
52
   virtual bool isModSupported(const Instruction *, int s, Modifier) const;
53
   virtual bool isSatSupported(const Instruction *) const;
54
   virtual bool isPostMultiplySupported(operation, float, int& e) const;
55
   virtual bool mayPredicate(const Instruction *, const Value *) const;
56
 
57
   virtual bool canDualIssue(const Instruction *, const Instruction *) const;
58
   virtual int getLatency(const Instruction *) const;
59
   virtual int getThroughput(const Instruction *) const;
60
 
61
   virtual unsigned int getFileSize(DataFile) const;
62
   virtual unsigned int getFileUnit(DataFile) const;
63
 
64
   virtual uint32_t getSVAddress(DataFile shaderFile, const Symbol *sv) const;
65
 
66
   uint32_t getBuiltinOffset(int builtin) const;
67
 
68
private:
69
   void initOpInfo();
70
};
71
 
72
bool calculateSchedDataNVC0(const Target *, Function *);
73
 
74
} // namespace nv50_ir