summaryrefslogtreecommitdiff
path: root/register_address.h
blob: 524d134acd87310dd00f187cb81f2cc8e57acc8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <string>

#ifndef REGISTER_ADDRESS_H_
#define REGISTER_ADDRESS_H_

enum register_type {
	REGISTER_TYPE_NONE,
	REGISTER_TYPE_TEMP,
	REGISTER_TYPE_CONST,
	REGISTER_TYPE_IN,
	REGISTER_TYPE_OUT,
	REGISTER_TYPE_IMMEDIATE,
	REGISTER_TYPE_PRIVATE
};

enum swizzle {
	SWIZZLE_EMPTY,
	SWIZZLE_X,
	SWIZZLE_Y,
	SWIZZLE_Z,
	SWIZZLE_W
};

class register_address {
public:

	register_address(
		register_type type,
		unsigned int index,
		enum swizzle swizzle);

	register_address();

	register_address(
		register_type type,
		unsigned int int_val);

	std::string to_string();

	static std::string register_type_to_string(enum register_type type);
	static std::string swizzle_to_string(enum swizzle swz);

	unsigned int to_int();

	register_type m_type;
	unsigned int m_index;
	enum swizzle m_swizzle;
};

#endif //REGISTER_ADDRESS_H_