Annotation of 43BSD/usr.lib/libm/VAX/sincos.s, revision 1.1.1.1

1.1       root        1: # 
                      2: # Copyright (c) 1985 Regents of the University of California.
                      3: # 
                      4: # Use and reproduction of this software are granted  in  accordance  with
                      5: # the terms and conditions specified in  the  Berkeley  Software  License
                      6: # Agreement (in particular, this entails acknowledgement of the programs'
                      7: # source, and inclusion of this notice) with the additional understanding
                      8: # that  all  recipients  should regard themselves as participants  in  an
                      9: # ongoing  research  project and hence should  feel  obligated  to report
                     10: # their  experiences (good or bad) with these elementary function  codes,
                     11: # using "sendbug 4bsd-bugs@BERKELEY", to the authors.
                     12: #
                     13: 
                     14: # @(#)sincos.s 1.1 (Berkeley) 8/21/85
                     15: 
                     16: #  This is the implementation of Peter Tang's double precision  
                     17: #  sine and cosine for the VAX using Bob Corbett's argument reduction.
                     18: #  
                     19: #  Notes:
                     20: #       under 1,024,000 random arguments testing on [0,2*pi] 
                     21: #       sin() observed maximum error = 0.814 ulps
                     22: #       cos() observed maximum error = 0.792 ulps
                     23: #
                     24: # double sin(arg)
                     25: # double arg;
                     26: # method: true range reduction to [-pi/4,pi/4], P. Tang  &  B. Corbett
                     27: # S. McDonald, April 4,  1985
                     28: #
                     29:        .globl  _sin
                     30:        .text
                     31:        .align  1
                     32: 
                     33: _sin:  .word   0xffc           # save r2-r11
                     34:        movq    4(ap),r0
                     35:        bicw3   $0x807f,r0,r2
                     36:        beql    1f              # if x is zero or reserved operand then return x
                     37: #
                     38: # Save the PSL's IV & FU bits on the stack.
                     39: #
                     40:        movpsl  r2
                     41:        bicw3   $0xff9f,r2,-(sp)
                     42: #
                     43: # Clear the IV & FU bits.
                     44: #
                     45:        bicpsw  $0x0060
                     46: #
                     47: #  Entered by  sine    ; save  0  in  r4 .
                     48: #
                     49:        jsb     libm$argred
                     50:        movl    $0,r4
                     51:        jsb     libm$sincos
                     52:        bispsw  (sp)+
                     53: 1:     ret
                     54: 
                     55: #
                     56: # double cos(arg)
                     57: # double arg;
                     58: # method: true range reduction to [-pi/4,pi/4], P. Tang  &  B. Corbett
                     59: # S. McDonald, April 4,  1985
                     60: #
                     61:        .globl  _cos
                     62:        .text
                     63:        .align  1
                     64: 
                     65: _cos:  .word   0xffc           # save r2-r11
                     66:        movq    4(ap),r0
                     67:        bicw3   $0x7f,r0,r2
                     68:        cmpw    $0x8000,r2
                     69:        beql    1f              # if x is reserved operand then return x
                     70: #
                     71: # Save the PSL's IV & FU bits on the stack.
                     72: #
                     73:        movpsl  r2
                     74:        bicw3   $0xff9f,r2,-(sp)
                     75: #
                     76: # Clear the IV & FU bits.
                     77: #
                     78:        bicpsw  $0x0060
                     79: #
                     80: #  Entered by  cosine  ; save  1  in  r4 .
                     81: #
                     82:        jsb     libm$argred
                     83:        movl    $1,r4
                     84:        jsb     libm$sincos
                     85:        bispsw  (sp)+
                     86: 1:     ret

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.