diff options
Diffstat (limited to 'src/gallium/drivers/r300/compiler/radeon_program_print.c')
-rw-r--r-- | src/gallium/drivers/r300/compiler/radeon_program_print.c | 18 |
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) { |