home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / f / forthmac / !Forthmacs / extend / arm / sqroot < prev   
Encoding:
Text File  |  1997-04-23  |  1.1 KB  |  52 lines

  1. \ Contents: Square-root for ARM processors
  2. \    u1 -- 32-bit unsigned
  3. \    n  -- significant digits
  4. \          16 -> sqrt-integer
  5. \          32 -> fractional integer 16/16bits
  6. only forth also definitions
  7. code (sqrt    \ ( u1 n -- u2 )
  8.     r0    sp    pop
  9.     r1    0 #    mov
  10.     r2    0 #    mov
  11.     begin    r3    r1    mov
  12.         r0    r0    1 #lsl s mov
  13.         r2    r2    r2 adc
  14.         r0    r0    1 #lsl s mov
  15.         r2    r2    r2 adc
  16.         r1    r1    2 #lsl mov
  17.         r1    1    incr
  18.         r2    r2    r1 s sub    \ get C-flag
  19.         r2    r2    r1 lt add
  20.         r1    r3    1 #lsl mov
  21.         r1    r1    1 # ge orr    \ bit0 = not-C
  22.         top    1    s decr
  23.     eq until
  24.         top    r1    mov c;
  25.  
  26. : sqrt        ( u1 -- u2 )    d# 16 (sqrt ;
  27.  
  28.  
  29. code dsqrt    \ ( du1 -- u2 )        \ u1, u2 are in top
  30.     r5    sp        pop        \ top high-part; r5 low-part
  31.     r1      0 #         mov
  32.     r2      0 #         mov
  33.     r0      32 #        mov        \ significant digits
  34.  begin    r3      r1          mov
  35.     top    top    1 #lsl    s mov
  36.     r2      r2      r2    adc
  37.     r5    r5    1 #lsl    s mov
  38.     top    top    0 #    adc
  39.     top    top    1 #lsl    s mov
  40.     r2      r2      r2    adc
  41.     r5    r5    1 #lsl    s mov
  42.     top    top    0 #    adc
  43.     r1      r1      2 #lsl    mov
  44.     r1          1       incr
  45.     r2      r2      r1    s sub        \ get C-flag
  46.     r2      r2      r1    lt add
  47.     r1      r3      1 #lsl    mov
  48.     r1      r1      1 #    ge orr      \ bit0 = not-C
  49.     r0        1    s decr
  50.  eq until
  51.     top     r1          mov c;
  52.