?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1.  ifndef included_sqrt64
  2.  define included_sqrt64
  3.  include "sqrt32.asm"
  4.  include "../div/div32.asm"
  5.  
  6. sqrt64:
  7. ;avg: 7544.059294cc
  8. ;Speed: 106+{0,47}+{0,109+{0,18+{0,18+{0,18+{0,17}/256}/256}/256}}+sqrt32+div32_32
  9. ;min: 106+min(sqrt32)+min(div32_32)
  10. ;     4560cc
  11. ;max: 333+max(sqrt32)+max(div32_32)
  12. ;     6547cc
  13. ;avg: 188.517647+avg(sqrt32)+avg(div32_32)
  14. ;     5708.042cc
  15.  
  16.   call sqrt32
  17. ;AHLBC is the remainder
  18.  
  19.   rra
  20.   rr h
  21.   rr l
  22.   rr b
  23.   rr c
  24.   rra
  25.   jr nc,sqrt64p;+_
  26.   xor a
  27.   ld d,a : sub c : ld c,a
  28.   ld a,d : sbc a,b : ld b,a
  29.   ld a,d : sbc a,l : ld l,a
  30.   ld a,d : sbc a,h : ld h,a
  31. sqrt64p;_:
  32.   push af
  33.   ld d,b
  34.   ld e,c
  35.   call div32_32
  36.   ;append to var_x
  37.   pop af
  38.   ret nc
  39.   ld hl,var_x
  40.   xor a
  41.   ld b,a : sbc a,(hl) : ld (hl),a : inc hl
  42.   ld a,b : sbc a,(hl) : ld (hl),a : inc hl
  43.   ld a,b : sbc a,(hl) : ld (hl),a : inc hl
  44.   ld a,b : sbc a,(hl) : ld (hl),a
  45.   ret nc
  46.   inc hl : dec (hl) : ret nz
  47.   inc hl : dec (hl) : ret nz
  48.   inc hl : dec (hl) : ret nz
  49.   inc hl : dec (hl)
  50.   ret
  51.  endif
  52.