diff options
Diffstat (limited to 'register_address.cpp')
-rw-r--r-- | register_address.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/register_address.cpp b/register_address.cpp index e499da2..2fcd350 100644 --- a/register_address.cpp +++ b/register_address.cpp @@ -1,3 +1,4 @@ +#include <iostream> #include <sstream> #include "register_address.h" @@ -12,6 +13,28 @@ register_address::register_address( m_swizzle(swizzle) { } +register_address::register_address() : + m_type(REGISTER_TYPE_NONE), + m_index(0), + m_swizzle(SWIZZLE_EMPTY) + { } + +register_address::register_address( + register_type type, + unsigned int int_val) + : + m_type(type) +{ + unsigned int swz_val = int_val % 4; + switch (swz_val) { + case 0: m_swizzle = SWIZZLE_X; + case 1: m_swizzle = SWIZZLE_Y; + case 2: m_swizzle = SWIZZLE_Z; + case 3: m_swizzle = SWIZZLE_W; + } + m_index = int_val / 4; +} + std::string register_address::to_string() { @@ -47,3 +70,19 @@ register_address::swizzle_to_string(enum swizzle swz) default: return "?"; } } + +unsigned int +register_address::to_int() +{ + unsigned int swz_val; + switch(m_swizzle) { + case SWIZZLE_X: swz_val = 0; + case SWIZZLE_Y: swz_val = 1; + case SWIZZLE_Z: swz_val = 2; + case SWIZZLE_W: swz_val = 3; + default: + std::cerr << __FUNCTION__ << ": unhandled swizzle\n"; + return 0; + } + return (m_index * 4) + swz_val; +} |