diff options
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/compile/pr35869.c')
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr35869.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr35869.c b/gcc/testsuite/gcc.c-torture/compile/pr35869.c new file mode 100644 index 00000000000..e83c0e86bed --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr35869.c @@ -0,0 +1,47 @@ +struct texture_stage_op +{ + unsigned int carg1, carg2, carg0; + unsigned int aarg1, aarg2, aarg0; + unsigned int dst; +}; + +static const char *debug_register(unsigned int reg) { + switch(reg) { + case 0x8921: return "GL_REG_0_ATI"; + case 0x8923: return "GL_REG_2_ATI"; + case 0x0: return "GL_ZERO"; + case 0x1: return "GL_ONE"; + default: return "Unknown register\n"; + } +} + +static unsigned int find_tmpreg(struct texture_stage_op op[8]) { + int i; + int tex_used[8]; + + for(i = 0; i < 8; i++) { + if(op[i].carg1 == 0x00000002 ) { + tex_used[i] = 1; + } + } + + for(i = 1; i < 6; i++) { + if(!tex_used[i]) { + return 0x8921 + i; + } + } + return 0; +} + +extern f(const char*); + +void g() { + struct texture_stage_op op[8]; + unsigned int tmparg = find_tmpreg(op); + unsigned int dstreg; + + if(tmparg == 0x0) return; + dstreg = tmparg; + f(debug_register(dstreg)); + return; +} |