summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Stellard <tstellar@gmail.com>2010-12-16 19:15:39 -0800
committerTom Stellard <tstellar@gmail.com>2010-12-16 19:15:39 -0800
commit2a0ffd147e0158f9eb16ad173603da9eddd691a1 (patch)
tree684ab309b46a4004e44c58f77cdaed2de772fd88
parent038c976fd5709cf8fe647f7e0ace989737b37176 (diff)
register_address: Fix up int conversion.
Also update to_string() to include immediates.
-rw-r--r--program.cpp2
-rw-r--r--register_address.cpp20
2 files changed, 12 insertions, 10 deletions
diff --git a/program.cpp b/program.cpp
index 01d584f..153246c 100644
--- a/program.cpp
+++ b/program.cpp
@@ -6,7 +6,7 @@ register_address
program::add_immediate(float value)
{
m_immediate_regs.push_back(new float_value(value));
- return register_address(REGISTER_TYPE_IMMEDIATE, m_immediate_regs.size());
+ return register_address(REGISTER_TYPE_IMMEDIATE, m_immediate_regs.size() - 1);
}
void
diff --git a/register_address.cpp b/register_address.cpp
index 2fcd350..a942b91 100644
--- a/register_address.cpp
+++ b/register_address.cpp
@@ -27,10 +27,10 @@ register_address::register_address(
{
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;
+ case 0: m_swizzle = SWIZZLE_X; break;
+ case 1: m_swizzle = SWIZZLE_Y; break;
+ case 2: m_swizzle = SWIZZLE_Z; break;
+ case 3: m_swizzle = SWIZZLE_W; break;
}
m_index = int_val / 4;
}
@@ -54,6 +54,7 @@ register_address::register_type_to_string(enum register_type type)
case REGISTER_TYPE_CONST: return "CONST";
case REGISTER_TYPE_IN: return "IN";
case REGISTER_TYPE_OUT: return "OUT";
+ case REGISTER_TYPE_IMMEDIATE: return "IMM";
default: return "NONE";
}
}
@@ -76,12 +77,13 @@ 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;
+ case SWIZZLE_X: swz_val = 0; break;
+ case SWIZZLE_Y: swz_val = 1; break;
+ case SWIZZLE_Z: swz_val = 2; break;
+ case SWIZZLE_W: swz_val = 3; break;
default:
- std::cerr << __FUNCTION__ << ": unhandled swizzle\n";
+ std::cerr << __FUNCTION__ << ": unhandled swizzle: " <<
+ m_swizzle << "\n";
return 0;
}
return (m_index * 4) + swz_val;