Mercurial > libdvdnav.hg
comparison decoder.c @ 156:a68751e6e84f src
Use more common sense values for div 0. I.E. As close to infinity as a 16 bit number can get!
Also avoid div 0 exception for MOD operation. I.E. 10 % 0 gives a crash with the message "Floating point exception" on my PC.
| author | jcdutton |
|---|---|
| date | Sat, 05 Apr 2003 21:23:02 +0000 |
| parents | 3492d41dc247 |
| children | 3bfaec0c1288 |
comparison
equal
deleted
inserted
replaced
| 155:840e99bfb57d | 156:a68751e6e84f |
|---|---|
| 424 if(tmp < 0) tmp = 0; | 424 if(tmp < 0) tmp = 0; |
| 425 set_GPRM(command->registers, reg, (uint16_t)tmp); | 425 set_GPRM(command->registers, reg, (uint16_t)tmp); |
| 426 break; | 426 break; |
| 427 case 5: | 427 case 5: |
| 428 tmp = get_GPRM(command->registers, reg) * data; | 428 tmp = get_GPRM(command->registers, reg) * data; |
| 429 if(tmp >= shortmax) tmp = shortmax; | 429 if(tmp > shortmax) tmp = shortmax; |
| 430 set_GPRM(command->registers, reg, (uint16_t)tmp); | 430 set_GPRM(command->registers, reg, (uint16_t)tmp); |
| 431 break; | 431 break; |
| 432 case 6: | 432 case 6: |
| 433 if (data != 0) { | 433 if (data != 0) { |
| 434 set_GPRM(command->registers, reg, (get_GPRM(command->registers, reg) / data) ); | 434 set_GPRM(command->registers, reg, (get_GPRM(command->registers, reg) / data) ); |
| 435 } else { | 435 } else { |
| 436 set_GPRM(command->registers, reg, 0); /* Avoid that divide by zero! */ | 436 set_GPRM(command->registers, reg, 0xffff); /* Avoid that divide by zero! */ |
| 437 } | 437 } |
| 438 break; | 438 break; |
| 439 case 7: | 439 case 7: |
| 440 set_GPRM(command->registers, reg, (get_GPRM(command->registers, reg) % data) ); | 440 if (data != 0) { |
| 441 break; | 441 set_GPRM(command->registers, reg, (get_GPRM(command->registers, reg) % data) ); |
| 442 case 8: /* SPECIAL CASE - RND! */ | 442 } else { |
| 443 set_GPRM(command->registers, reg, ((uint16_t) ((float) data * rand()/(RAND_MAX+1.0))) ); | 443 set_GPRM(command->registers, reg, 0xffff); /* Avoid that divide by zero! */ |
| 444 } | |
| 445 break; | |
| 446 case 8: /* SPECIAL CASE - RND! Return numbers between 1 and data. */ | |
| 447 set_GPRM(command->registers, reg, 1 + ((uint16_t) ((float) data * rand()/(RAND_MAX+1.0))) ); | |
| 444 break; | 448 break; |
| 445 case 9: | 449 case 9: |
| 446 set_GPRM(command->registers, reg, (get_GPRM(command->registers, reg) & data) ); | 450 set_GPRM(command->registers, reg, (get_GPRM(command->registers, reg) & data) ); |
| 447 break; | 451 break; |
| 448 case 10: | 452 case 10: |
