123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- .global dvu4
- .global dvi4
- .global mathdvi4
- EIDIVZ=6
- dvi4:
- ! %o0' = %o0 / %o1
- ! %o1' = %o0 % %o1
- tst %o1
- be 0f
- clr %o5
- tst %o0
- bge 1f
- nop
- neg %o0
- xor %o5, 1, %o5
- 1:
- tst %o1
- bge 3f
- nop
- neg %o1
- xor %o5, 2, %o5
- 3: /* div common */
- clr %o2
- mov %o1, %o3
- clr %o4
- 4:
- cmp %o1, %o0
- bgeu 5f
- nop
- inc %o4
- sll %o1, 1, %o1
- b 4b
- nop
- 5:
- sll %o2, 1, %o2
- subcc %o0, %o1, %o0
- bgeu 3f
- nop
- add %o0, %o1, %o0
- b 4f
- nop
- 3:
- inc %o2
- 4:
- srl %o1, 1, %o1
- tst %o4
- bz 5f
- nop
- dec %o4
- b 5b
- nop
- 5:
- andcc %o5, 1, %g0
- bz 6f
- nop
- neg %o0
- neg %o2
- 6:
- andcc %o5, 2, %g0
- bz 8f
- nop
- neg %o2
- 8:
- mov %o0, %o1
- mov %o2, %o0
- retl
- nop
- dvu4:
- ! %o0' = %o0 / %o1
- ! %o1' = %o0 % %o1
- tst %o1
- be 0f
- nop
- clr %o5
- tst %o0
- bge 3f /* jump if msb clear */
- nop
- clr %o2
- mov %o1, %o3
- clr %o4
- 1: tst %o1
- bl 5f /* jump if msb set */
- nop
- sll %o1, 1, %o1
- inc %o4
- b 1b
- nop
- mathdvi4:
- ! %o0' = %o0 / %o1
- ! %o1' = %o0 % %o1
- tst %o1
- be 0f
- clr %o5
- tst %o0
- bge 1f
- nop
- neg %o0
- xor %o5, 1, %o5
- 1:
- tst %o1
- bge 3f
- nop
- neg %o1
- xor %o5, 3, %o5
- 3: /* div common */
- clr %o2
- mov %o1, %o3
- clr %o4
- 4:
- cmp %o1, %o0
- bgeu 5f
- nop
- inc %o4
- sll %o1, 1, %o1
- b 4b
- nop
- 5: /* div common for dvu4 && ( %o0 & 0x80000000) */
- sll %o2, 1, %o2
- subcc %o0, %o1, %o0
- bgeu 3f
- nop
- add %o0, %o1, %o0
- b 4f
- nop
- 3:
- inc %o2
- 4:
- srl %o1, 1, %o1
- tst %o4
- bz 5f
- nop
- dec %o4
- b 5b
- nop
- 5:
- andcc %o5, 1, %g0
- bz 6f
- nop
- tst %o0
- bz 7f
- nop
- inc %o2
- sub %o3, %o0, %o0
- 7:
- neg %o2
- 6:
- andcc %o5, 2, %g0
- bz 8f
- nop
- neg %o0
- 8:
- mov %o0, %o1
- mov %o2, %o0
- retl
- nop
- 0: /* divide by zero */
- set EIDIVZ, %o0
- call trp
- nop
- retl
- nop
|