summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/r300/compiler/radeon_program_print.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/r300/compiler/radeon_program_print.c')
-rw-r--r--src/gallium/drivers/r300/compiler/radeon_program_print.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/gallium/drivers/r300/compiler/radeon_program_print.c b/src/gallium/drivers/r300/compiler/radeon_program_print.c
index dc40d7fd4f2..e3d2104b250 100644
--- a/src/gallium/drivers/r300/compiler/radeon_program_print.c
+++ b/src/gallium/drivers/r300/compiler/radeon_program_print.c
@@ -109,6 +109,22 @@ static void rc_print_comparefunc(FILE * f, const char * lhs, rc_compare_func fun
}
}
+static void rc_print_inline_float(FILE * f, int index)
+{
+ int r300_exponent = (index >> 3) & 0xf;
+ unsigned r300_mantissa = index & 0x7;
+ unsigned float_exponent;
+ unsigned real_float;
+ float * print_float = (float*) &real_float;
+
+ r300_exponent -= 7;
+ float_exponent = r300_exponent + 127;
+ real_float = (r300_mantissa << 20) | (float_exponent << 23);
+
+ fprintf(f, "%f (0x%x)", *print_float, index);
+
+}
+
static void rc_print_register(FILE * f, rc_register_file file, int index, unsigned int reladdr)
{
if (file == RC_FILE_NONE) {
@@ -118,6 +134,8 @@ static void rc_print_register(FILE * f, rc_register_file file, int index, unsign
case RC_SPECIAL_ALU_RESULT: fprintf(f, "aluresult"); break;
default: fprintf(f, "special[%i]", index); break;
}
+ } else if (file == RC_FILE_INLINE) {
+ rc_print_inline_float(f, index);
} else {
const char * filename;
switch(file) {