bakervm 0.9.0

A virtual machine for building and running retro games
Documentation
jmp _std_math_sqrt

  include! abs

  .std.math.sqrt
    dup $st
    push $st, 2.0
    div $st, $st
    call std.math.sqrt__test
  ret

  .std.math.sqrt__test
    push $st, @2
    add $bp, $st

    mov $vi(20), $st  ; g
    mov $vi(21), $st  ; x

    dup $vi(21)
    dup $vi(20)
    div $st, $st
    dup $vi(20)
    call std.math.sqrt__close_enough
    jmpgteq std.math.sqrt__test___again
      dup $vi(20)
      jmp std.math.sqrt__end
    .std.math.sqrt__test___again
      dup $vi(21)
      dup $vi(20)
      call std.math.sqrt__better_guess
      dup $vi(21)
      swp $st, $st
      call std.math.sqrt__test

  .std.math.sqrt__end

    push $st, @2
    sub $bp, $st
  ret

  .std.math.sqrt__close_enough
    sub $st, $st
    call std.math.abs
    push $st, 0.0001
    cmp $st, $st
    mov $vi(19), $st
    mov $vi(19), $st
  ret

  .std.math.sqrt__better_guess
    push $st, @2
    add $bp, $st

    mov $vi(20), $st
    dup $vi(20)

    div $st, $st
    add $st, $vi(20)

    push $st, 2.0
    div $st, $st

    push $st, @2
    sub $bp, $st
  ret

._std_math_sqrt