1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
  23  */
  24 /*
  25  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
  26  * Use is subject to license terms.
  27  */
  28 
  29         .file   "__vsinf.S"
  30 
  31 #include "libm.h"
  32 
  33         RO_DATA
  34         .align  64
  35 constants:
  36         .word   0xbfc55554,0x60000000
  37         .word   0x3f811077,0xe0000000
  38         .word   0xbf29956b,0x60000000
  39         .word   0x3ff00000,0x00000000
  40         .word   0xbfe00000,0x00000000
  41         .word   0x3fa55554,0xa0000000
  42         .word   0xbf56c0c1,0xe0000000
  43         .word   0x3ef99e24,0xe0000000
  44         .word   0x3fe45f30,0x6dc9c883
  45         .word   0x43380000,0x00000000
  46         .word   0x3ff921fb,0x54400000
  47         .word   0x3dd0b461,0x1a626331
  48         .word   0x3f490fdb,0
  49         .word   0x49c90fdb,0
  50         .word   0x7f800000,0
  51         .word   0x80000000,0
  52 
  53 #define S0              0x0
  54 #define S1              0x08
  55 #define S2              0x10
  56 #define one             0x18
  57 #define mhalf           0x20
  58 #define C0              0x28
  59 #define C1              0x30
  60 #define C2              0x38
  61 #define invpio2         0x40
  62 #define round           0x48
  63 #define pio2_1          0x50
  64 #define pio2_t          0x58
  65 #define thresh1         0x60
  66 #define thresh2         0x68
  67 #define inf             0x70
  68 #define signbit         0x78
  69 
  70 ! local storage indices
  71 
  72 #define xsave           STACK_BIAS-0x8
  73 #define ysave           STACK_BIAS-0x10
  74 #define nsave           STACK_BIAS-0x14
  75 #define sxsave          STACK_BIAS-0x18
  76 #define sysave          STACK_BIAS-0x1c
  77 #define junk            STACK_BIAS-0x20
  78 #define n3              STACK_BIAS-0x24
  79 #define n2              STACK_BIAS-0x28
  80 #define n1              STACK_BIAS-0x2c
  81 #define n0              STACK_BIAS-0x30
  82 ! sizeof temp storage - must be a multiple of 16 for V9
  83 #define tmps            0x30
  84 
  85 ! register use
  86 
  87 ! i0  n
  88 ! i1  x
  89 ! i2  stridex
  90 ! i3  y
  91 ! i4  stridey
  92 ! i5  biguns
  93 
  94 ! l0  n0
  95 ! l1  n1
  96 ! l2  n2
  97 ! l3  n3
  98 ! l4  
  99 ! l5  
 100 ! l6  
 101 ! l7  
 102 
 103 ! the following are 64-bit registers in both V8+ and V9
 104 
 105 ! g1  
 106 ! g5  
 107 
 108 ! o0  py0
 109 ! o1  py1
 110 ! o2  py2
 111 ! o3  py3
 112 ! o4  
 113 ! o5  
 114 ! o7  
 115 
 116 ! f0  x0
 117 ! f2  x1
 118 ! f4  x2
 119 ! f6  x3
 120 ! f8  thresh1 (pi/4)
 121 ! f10 y0
 122 ! f12 y1
 123 ! f14 y2
 124 ! f16 y3
 125 ! f18 thresh2 (2^19 pi)
 126 ! f20 
 127 ! f22 
 128 ! f24 
 129 ! f26 
 130 ! f28 signbit
 131 ! f30 
 132 ! f32 
 133 ! f34 
 134 ! f36 
 135 ! f38 inf
 136 ! f40 S0
 137 ! f42 S1
 138 ! f44 S2
 139 ! f46 one
 140 ! f48 mhalf
 141 ! f50 C0
 142 ! f52 C1
 143 ! f54 C2
 144 ! f56 invpio2
 145 ! f58 round
 146 ! f60 pio2_1
 147 ! f62 pio2_t
 148 
 149         ENTRY(__vsinf)
 150         save    %sp,-SA(MINFRAME)-tmps,%sp
 151         PIC_SETUP(l7)
 152         PIC_SET(l7,constants,l1)
 153         mov     %l1,%g1
 154         wr      %g0,0x82,%asi           ! set %asi for non-faulting loads
 155 #ifdef __sparcv9
 156         stx     %i1,[%fp+xsave]         ! save arguments
 157         stx     %i3,[%fp+ysave]
 158 #else
 159         st      %i1,[%fp+xsave]         ! save arguments
 160         st      %i3,[%fp+ysave]
 161 #endif
 162         st      %i0,[%fp+nsave]
 163         st      %i2,[%fp+sxsave]
 164         st      %i4,[%fp+sysave]
 165         mov     0,%i5                   ! biguns = 0
 166         ldd     [%g1+S0],%f40           ! load constants
 167         ldd     [%g1+S1],%f42
 168         ldd     [%g1+S2],%f44
 169         ldd     [%g1+one],%f46
 170         ldd     [%g1+mhalf],%f48
 171         ldd     [%g1+C0],%f50
 172         ldd     [%g1+C1],%f52
 173         ldd     [%g1+C2],%f54
 174         ldd     [%g1+invpio2],%f56
 175         ldd     [%g1+round],%f58
 176         ldd     [%g1+pio2_1],%f60
 177         ldd     [%g1+pio2_t],%f62
 178         ldd     [%g1+thresh1],%f8
 179         ldd     [%g1+thresh2],%f18
 180         ldd     [%g1+inf],%f38
 181         ldd     [%g1+signbit],%f28
 182         sll     %i2,2,%i2               ! scale strides
 183         sll     %i4,2,%i4
 184         fzero   %f10                    ! loop prologue
 185         add     %fp,junk,%o0
 186         fzero   %f12
 187         add     %fp,junk,%o1
 188         fzero   %f14
 189         add     %fp,junk,%o2
 190         fzero   %f16
 191         ba      .start
 192         add     %fp,junk,%o3
 193 
 194 ! 16-byte aligned
 195         .align  16
 196 .start:
 197         ld      [%i1],%f0               ! *x
 198         add     %i1,%i2,%i1             ! x += stridex
 199         addcc   %i0,-1,%i0
 200         fdtos   %f10,%f10
 201 
 202         st      %f10,[%o0]
 203         mov     %i3,%o0                 ! py0 = y
 204         ble,pn  %icc,.last1
 205 ! delay slot
 206         add     %i3,%i4,%i3             ! y += stridey
 207 
 208         ld      [%i1],%f2               ! *x
 209         add     %i1,%i2,%i1             ! x += stridex
 210         addcc   %i0,-1,%i0
 211         fdtos   %f12,%f12
 212 
 213         st      %f12,[%o1]
 214         mov     %i3,%o1                 ! py1 = y
 215         ble,pn  %icc,.last2
 216 ! delay slot
 217         add     %i3,%i4,%i3             ! y += stridey
 218 
 219         ld      [%i1],%f4               ! *x
 220         add     %i1,%i2,%i1             ! x += stridex
 221         addcc   %i0,-1,%i0
 222         fdtos   %f14,%f14
 223 
 224         st      %f14,[%o2]
 225         mov     %i3,%o2                 ! py2 = y
 226         ble,pn  %icc,.last3
 227 ! delay slot
 228         add     %i3,%i4,%i3             ! y += stridey
 229 
 230         ld      [%i1],%f6               ! *x
 231         add     %i1,%i2,%i1             ! x += stridex
 232         nop
 233         fdtos   %f16,%f16
 234 
 235         st      %f16,[%o3]
 236         mov     %i3,%o3                 ! py3 = y
 237         add     %i3,%i4,%i3             ! y += stridey
 238 .cont:
 239         fabsd   %f0,%f30
 240 
 241         fabsd   %f2,%f32
 242 
 243         fabsd   %f4,%f34
 244 
 245         fabsd   %f6,%f36
 246         fcmple32 %f30,%f18,%l0
 247 
 248         fcmple32 %f32,%f18,%l1
 249 
 250         fcmple32 %f34,%f18,%l2
 251 
 252         fcmple32 %f36,%f18,%l3
 253         nop
 254 
 255 ! 16-byte aligned
 256         andcc   %l0,2,%g0
 257         bz,pn   %icc,.range0            ! branch if > 2^19 pi
 258 ! delay slot
 259         fcmple32 %f30,%f8,%l0
 260 
 261 .check1:
 262         andcc   %l1,2,%g0
 263         bz,pn   %icc,.range1            ! branch if > 2^19 pi
 264 ! delay slot
 265         fcmple32 %f32,%f8,%l1
 266 
 267 .check2:
 268         andcc   %l2,2,%g0
 269         bz,pn   %icc,.range2            ! branch if > 2^19 pi
 270 ! delay slot
 271         fcmple32 %f34,%f8,%l2
 272 
 273 .check3:
 274         andcc   %l3,2,%g0
 275         bz,pn   %icc,.range3            ! branch if > 2^19 pi
 276 ! delay slot
 277         fcmple32 %f36,%f8,%l3
 278 
 279 .checkprimary:
 280         fsmuld  %f0,%f0,%f30
 281         fstod   %f0,%f0
 282 
 283         fsmuld  %f2,%f2,%f32
 284         fstod   %f2,%f2
 285         and     %l0,%l1,%o4
 286 
 287         fsmuld  %f4,%f4,%f34
 288         fstod   %f4,%f4
 289 
 290         fsmuld  %f6,%f6,%f36
 291         fstod   %f6,%f6
 292         and     %l2,%l3,%o5
 293 
 294         fmuld   %f30,%f44,%f10
 295         and     %o4,%o5,%o5
 296 
 297         fmuld   %f32,%f44,%f12
 298         andcc   %o5,2,%g0
 299         bz,pn   %icc,.medium            ! branch if any argument is > pi/4
 300 ! delay slot
 301         nop
 302 
 303         fmuld   %f34,%f44,%f14
 304 
 305         fmuld   %f36,%f44,%f16
 306 
 307         fmuld   %f30,%f40,%f20
 308         faddd   %f10,%f42,%f10
 309 
 310         fmuld   %f32,%f40,%f22
 311         faddd   %f12,%f42,%f12
 312 
 313         fmuld   %f34,%f40,%f24
 314         faddd   %f14,%f42,%f14
 315 
 316         fmuld   %f36,%f40,%f26
 317         faddd   %f16,%f42,%f16
 318 
 319         fmuld   %f30,%f30,%f30
 320         faddd   %f20,%f46,%f20
 321 
 322         fmuld   %f32,%f32,%f32
 323         faddd   %f22,%f46,%f22
 324 
 325         fmuld   %f34,%f34,%f34
 326         faddd   %f24,%f46,%f24
 327 
 328         fmuld   %f36,%f36,%f36
 329         faddd   %f26,%f46,%f26
 330 
 331         fmuld   %f30,%f10,%f10
 332 
 333         fmuld   %f32,%f12,%f12
 334 
 335         fmuld   %f34,%f14,%f14
 336 
 337         fmuld   %f36,%f16,%f16
 338 
 339         faddd   %f10,%f20,%f10
 340 
 341         faddd   %f12,%f22,%f12
 342 
 343         faddd   %f14,%f24,%f14
 344 
 345         faddd   %f16,%f26,%f16
 346 
 347         fmuld   %f0,%f10,%f10
 348 
 349         fmuld   %f2,%f12,%f12
 350 
 351         fmuld   %f4,%f14,%f14
 352 
 353         addcc   %i0,-1,%i0
 354         bg,pt   %icc,.start
 355 ! delay slot
 356         fmuld   %f6,%f16,%f16
 357 
 358         ba,pt   %icc,.end
 359 ! delay slot
 360         nop
 361 
 362 
 363         .align  16
 364 .medium:
 365         fmuld   %f0,%f56,%f10
 366 
 367         fmuld   %f2,%f56,%f12
 368 
 369         fmuld   %f4,%f56,%f14
 370 
 371         fmuld   %f6,%f56,%f16
 372 
 373         faddd   %f10,%f58,%f10
 374         st      %f11,[%fp+n0]
 375 
 376         faddd   %f12,%f58,%f12
 377         st      %f13,[%fp+n1]
 378 
 379         faddd   %f14,%f58,%f14
 380         st      %f15,[%fp+n2]
 381 
 382         faddd   %f16,%f58,%f16
 383         st      %f17,[%fp+n3]
 384 
 385         fsubd   %f10,%f58,%f10
 386 
 387         fsubd   %f12,%f58,%f12
 388 
 389         fsubd   %f14,%f58,%f14
 390 
 391         fsubd   %f16,%f58,%f16
 392 
 393         fmuld   %f10,%f60,%f20
 394         ld      [%fp+n0],%l0
 395 
 396         fmuld   %f12,%f60,%f22
 397         ld      [%fp+n1],%l1
 398 
 399         fmuld   %f14,%f60,%f24
 400         ld      [%fp+n2],%l2
 401 
 402         fmuld   %f16,%f60,%f26
 403         ld      [%fp+n3],%l3
 404 
 405         fsubd   %f0,%f20,%f0
 406         fmuld   %f10,%f62,%f30
 407 
 408         fsubd   %f2,%f22,%f2
 409         fmuld   %f12,%f62,%f32
 410 
 411         fsubd   %f4,%f24,%f4
 412         fmuld   %f14,%f62,%f34
 413 
 414         fsubd   %f6,%f26,%f6
 415         fmuld   %f16,%f62,%f36
 416 
 417         fsubd   %f0,%f30,%f0
 418 
 419         fsubd   %f2,%f32,%f2
 420 
 421         fsubd   %f4,%f34,%f4
 422 
 423         fsubd   %f6,%f36,%f6
 424         andcc   %l0,1,%g0
 425 
 426         fmuld   %f0,%f0,%f30
 427         bz,pn   %icc,.case8
 428 ! delay slot
 429         andcc   %l1,1,%g0
 430 
 431         fmuld   %f2,%f2,%f32
 432         bz,pn   %icc,.case4
 433 ! delay slot
 434         andcc   %l2,1,%g0
 435 
 436         fmuld   %f4,%f4,%f34
 437         bz,pn   %icc,.case2
 438 ! delay slot
 439         andcc   %l3,1,%g0
 440 
 441         fmuld   %f6,%f6,%f36
 442         bz,pn   %icc,.case1
 443 ! delay slot
 444         nop
 445 
 446 !.case0:
 447         fmuld   %f30,%f54,%f10          ! cos(x0)
 448         fzero   %f0             
 449 
 450         fmuld   %f32,%f54,%f12          ! cos(x1)
 451         fzero   %f2             
 452 
 453         fmuld   %f34,%f54,%f14          ! cos(x2)
 454         fzero   %f4             
 455 
 456         fmuld   %f36,%f54,%f16          ! cos(x3)
 457         fzero   %f6             
 458 
 459         fmuld   %f30,%f48,%f20
 460         faddd   %f10,%f52,%f10
 461 
 462         fmuld   %f32,%f48,%f22
 463         faddd   %f12,%f52,%f12
 464 
 465         fmuld   %f34,%f48,%f24
 466         faddd   %f14,%f52,%f14
 467 
 468         fmuld   %f36,%f48,%f26
 469         faddd   %f16,%f52,%f16
 470 
 471         fmuld   %f30,%f10,%f10
 472         faddd   %f20,%f46,%f20
 473 
 474         fmuld   %f32,%f12,%f12
 475         faddd   %f22,%f46,%f22
 476 
 477         fmuld   %f34,%f14,%f14
 478         faddd   %f24,%f46,%f24
 479 
 480         fmuld   %f36,%f16,%f16
 481         faddd   %f26,%f46,%f26
 482 
 483         fmuld   %f30,%f30,%f30
 484         faddd   %f10,%f50,%f10
 485         and     %l0,2,%g1
 486 
 487         fmuld   %f32,%f32,%f32
 488         faddd   %f12,%f50,%f12
 489         and     %l1,2,%g5
 490 
 491         fmuld   %f34,%f34,%f34
 492         faddd   %f14,%f50,%f14
 493         and     %l2,2,%o4
 494 
 495         fmuld   %f36,%f36,%f36
 496         faddd   %f16,%f50,%f16
 497         and     %l3,2,%o5
 498 
 499         fmuld   %f30,%f10,%f10
 500         fmovrdnz %g1,%f28,%f0
 501 
 502         fmuld   %f32,%f12,%f12
 503         fmovrdnz %g5,%f28,%f2
 504 
 505         fmuld   %f34,%f14,%f14
 506         fmovrdnz %o4,%f28,%f4
 507 
 508         fmuld   %f36,%f16,%f16
 509         fmovrdnz %o5,%f28,%f6
 510 
 511         faddd   %f10,%f20,%f10
 512 
 513         faddd   %f12,%f22,%f12
 514 
 515         faddd   %f14,%f24,%f14
 516 
 517         faddd   %f16,%f26,%f16
 518 
 519         fxor    %f10,%f0,%f10
 520 
 521         fxor    %f12,%f2,%f12
 522 
 523         fxor    %f14,%f4,%f14
 524 
 525         addcc   %i0,-1,%i0
 526         bg,pt   %icc,.start
 527 ! delay slot
 528         fxor    %f16,%f6,%f16
 529 
 530         ba,pt   %icc,.end
 531 ! delay slot
 532         nop
 533 
 534         .align  16
 535 .case1:
 536         fmuld   %f30,%f54,%f10          ! cos(x0)
 537         fzero   %f0             
 538 
 539         fmuld   %f32,%f54,%f12          ! cos(x1)
 540         fzero   %f2             
 541 
 542         fmuld   %f34,%f54,%f14          ! cos(x2)
 543         fzero   %f4             
 544 
 545         fmuld   %f36,%f44,%f16          ! sin(x3)
 546 
 547         fmuld   %f30,%f48,%f20
 548         faddd   %f10,%f52,%f10
 549 
 550         fmuld   %f32,%f48,%f22
 551         faddd   %f12,%f52,%f12
 552 
 553         fmuld   %f34,%f48,%f24
 554         faddd   %f14,%f52,%f14
 555 
 556         fmuld   %f36,%f40,%f26
 557         faddd   %f16,%f42,%f16
 558 
 559         fmuld   %f30,%f10,%f10
 560         faddd   %f20,%f46,%f20
 561 
 562         fmuld   %f32,%f12,%f12
 563         faddd   %f22,%f46,%f22
 564 
 565         fmuld   %f34,%f14,%f14
 566         faddd   %f24,%f46,%f24
 567 
 568         fmuld   %f36,%f36,%f36
 569         faddd   %f26,%f46,%f26
 570 
 571         fmuld   %f30,%f30,%f30
 572         faddd   %f10,%f50,%f10
 573         and     %l0,2,%g1
 574 
 575         fmuld   %f32,%f32,%f32
 576         faddd   %f12,%f50,%f12
 577         and     %l1,2,%g5
 578 
 579         fmuld   %f34,%f34,%f34
 580         faddd   %f14,%f50,%f14
 581         and     %l2,2,%o4
 582 
 583         fmuld   %f36,%f16,%f16
 584         fzero   %f36
 585 
 586         fmuld   %f30,%f10,%f10
 587         fmovrdnz %g1,%f28,%f0
 588 
 589         fmuld   %f32,%f12,%f12
 590         fmovrdnz %g5,%f28,%f2
 591 
 592         fmuld   %f34,%f14,%f14
 593         fmovrdnz %o4,%f28,%f4
 594 
 595         faddd   %f16,%f26,%f16
 596         and     %l3,2,%o5
 597 
 598         faddd   %f10,%f20,%f10
 599 
 600         faddd   %f12,%f22,%f12
 601 
 602         faddd   %f14,%f24,%f14
 603 
 604         fmuld   %f6,%f16,%f16
 605         fmovrdnz %o5,%f28,%f36
 606 
 607         fxor    %f10,%f0,%f10
 608 
 609         fxor    %f12,%f2,%f12
 610 
 611         fxor    %f14,%f4,%f14
 612 
 613         addcc   %i0,-1,%i0
 614         bg,pt   %icc,.start
 615 ! delay slot
 616         fxor    %f16,%f36,%f16
 617 
 618         ba,pt   %icc,.end
 619 ! delay slot
 620         nop
 621 
 622         .align  16
 623 .case2:
 624         fmuld   %f6,%f6,%f36
 625         bz,pn   %icc,.case3
 626 ! delay slot
 627         nop
 628 
 629         fmuld   %f30,%f54,%f10          ! cos(x0)
 630         fzero   %f0             
 631 
 632         fmuld   %f32,%f54,%f12          ! cos(x1)
 633         fzero   %f2             
 634 
 635         fmuld   %f34,%f44,%f14          ! sin(x2)
 636 
 637         fmuld   %f36,%f54,%f16          ! cos(x3)
 638         fzero   %f6             
 639 
 640         fmuld   %f30,%f48,%f20
 641         faddd   %f10,%f52,%f10
 642 
 643         fmuld   %f32,%f48,%f22
 644         faddd   %f12,%f52,%f12
 645 
 646         fmuld   %f34,%f40,%f24
 647         faddd   %f14,%f42,%f14
 648 
 649         fmuld   %f36,%f48,%f26
 650         faddd   %f16,%f52,%f16
 651 
 652         fmuld   %f30,%f10,%f10
 653         faddd   %f20,%f46,%f20
 654 
 655         fmuld   %f32,%f12,%f12
 656         faddd   %f22,%f46,%f22
 657 
 658         fmuld   %f34,%f34,%f34
 659         faddd   %f24,%f46,%f24
 660 
 661         fmuld   %f36,%f16,%f16
 662         faddd   %f26,%f46,%f26
 663 
 664         fmuld   %f30,%f30,%f30
 665         faddd   %f10,%f50,%f10
 666         and     %l0,2,%g1
 667 
 668         fmuld   %f32,%f32,%f32
 669         faddd   %f12,%f50,%f12
 670         and     %l1,2,%g5
 671 
 672         fmuld   %f34,%f14,%f14
 673         fzero   %f34
 674 
 675         fmuld   %f36,%f36,%f36
 676         faddd   %f16,%f50,%f16
 677         and     %l3,2,%o5
 678 
 679         fmuld   %f30,%f10,%f10
 680         fmovrdnz %g1,%f28,%f0
 681 
 682         fmuld   %f32,%f12,%f12
 683         fmovrdnz %g5,%f28,%f2
 684 
 685         faddd   %f14,%f24,%f14
 686         and     %l2,2,%o4
 687 
 688         fmuld   %f36,%f16,%f16
 689         fmovrdnz %o5,%f28,%f6
 690 
 691         faddd   %f10,%f20,%f10
 692 
 693         faddd   %f12,%f22,%f12
 694 
 695         fmuld   %f4,%f14,%f14
 696         fmovrdnz %o4,%f28,%f34
 697 
 698         faddd   %f16,%f26,%f16
 699 
 700         fxor    %f10,%f0,%f10
 701 
 702         fxor    %f12,%f2,%f12
 703 
 704         fxor    %f14,%f34,%f14
 705 
 706         addcc   %i0,-1,%i0
 707         bg,pt   %icc,.start
 708 ! delay slot
 709         fxor    %f16,%f6,%f16
 710 
 711         ba,pt   %icc,.end
 712 ! delay slot
 713         nop
 714 
 715         .align  16
 716 .case3:
 717         fmuld   %f30,%f54,%f10          ! cos(x0)
 718         fzero   %f0             
 719 
 720         fmuld   %f32,%f54,%f12          ! cos(x1)
 721         fzero   %f2             
 722 
 723         fmuld   %f34,%f44,%f14          ! sin(x2)
 724 
 725         fmuld   %f36,%f44,%f16          ! sin(x3)
 726 
 727         fmuld   %f30,%f48,%f20
 728         faddd   %f10,%f52,%f10
 729 
 730         fmuld   %f32,%f48,%f22
 731         faddd   %f12,%f52,%f12
 732 
 733         fmuld   %f34,%f40,%f24
 734         faddd   %f14,%f42,%f14
 735 
 736         fmuld   %f36,%f40,%f26
 737         faddd   %f16,%f42,%f16
 738 
 739         fmuld   %f30,%f10,%f10
 740         faddd   %f20,%f46,%f20
 741 
 742         fmuld   %f32,%f12,%f12
 743         faddd   %f22,%f46,%f22
 744 
 745         fmuld   %f34,%f34,%f34
 746         faddd   %f24,%f46,%f24
 747 
 748         fmuld   %f36,%f36,%f36
 749         faddd   %f26,%f46,%f26
 750 
 751         fmuld   %f30,%f30,%f30
 752         faddd   %f10,%f50,%f10
 753         and     %l0,2,%g1
 754 
 755         fmuld   %f32,%f32,%f32
 756         faddd   %f12,%f50,%f12
 757         and     %l1,2,%g5
 758 
 759         fmuld   %f34,%f14,%f14
 760         fzero   %f34
 761 
 762         fmuld   %f36,%f16,%f16
 763         fzero   %f36
 764 
 765         fmuld   %f30,%f10,%f10
 766         fmovrdnz %g1,%f28,%f0
 767 
 768         fmuld   %f32,%f12,%f12
 769         fmovrdnz %g5,%f28,%f2
 770 
 771         faddd   %f14,%f24,%f14
 772         and     %l2,2,%o4
 773 
 774         faddd   %f16,%f26,%f16
 775         and     %l3,2,%o5
 776 
 777         faddd   %f10,%f20,%f10
 778 
 779         faddd   %f12,%f22,%f12
 780 
 781         fmuld   %f4,%f14,%f14
 782         fmovrdnz %o4,%f28,%f34
 783 
 784         fmuld   %f6,%f16,%f16
 785         fmovrdnz %o5,%f28,%f36
 786 
 787         fxor    %f10,%f0,%f10
 788 
 789         fxor    %f12,%f2,%f12
 790 
 791         fxor    %f14,%f34,%f14
 792 
 793         addcc   %i0,-1,%i0
 794         bg,pt   %icc,.start
 795 ! delay slot
 796         fxor    %f16,%f36,%f16
 797 
 798         ba,pt   %icc,.end
 799 ! delay slot
 800         nop
 801 
 802         .align  16
 803 .case4:
 804         fmuld   %f4,%f4,%f34
 805         bz,pn   %icc,.case6
 806 ! delay slot
 807         andcc   %l3,1,%g0
 808 
 809         fmuld   %f6,%f6,%f36
 810         bz,pn   %icc,.case5
 811 ! delay slot
 812         nop
 813 
 814         fmuld   %f30,%f54,%f10          ! cos(x0)
 815         fzero   %f0             
 816 
 817         fmuld   %f32,%f44,%f12          ! sin(x1)
 818 
 819         fmuld   %f34,%f54,%f14          ! cos(x2)
 820         fzero   %f4             
 821 
 822         fmuld   %f36,%f54,%f16          ! cos(x3)
 823         fzero   %f6             
 824 
 825         fmuld   %f30,%f48,%f20
 826         faddd   %f10,%f52,%f10
 827 
 828         fmuld   %f32,%f40,%f22
 829         faddd   %f12,%f42,%f12
 830 
 831         fmuld   %f34,%f48,%f24
 832         faddd   %f14,%f52,%f14
 833 
 834         fmuld   %f36,%f48,%f26
 835         faddd   %f16,%f52,%f16
 836 
 837         fmuld   %f30,%f10,%f10
 838         faddd   %f20,%f46,%f20
 839 
 840         fmuld   %f32,%f32,%f32
 841         faddd   %f22,%f46,%f22
 842 
 843         fmuld   %f34,%f14,%f14
 844         faddd   %f24,%f46,%f24
 845 
 846         fmuld   %f36,%f16,%f16
 847         faddd   %f26,%f46,%f26
 848 
 849         fmuld   %f30,%f30,%f30
 850         faddd   %f10,%f50,%f10
 851         and     %l0,2,%g1
 852 
 853         fmuld   %f32,%f12,%f12
 854         fzero   %f32
 855 
 856         fmuld   %f34,%f34,%f34
 857         faddd   %f14,%f50,%f14
 858         and     %l2,2,%o4
 859 
 860         fmuld   %f36,%f36,%f36
 861         faddd   %f16,%f50,%f16
 862         and     %l3,2,%o5
 863 
 864         fmuld   %f30,%f10,%f10
 865         fmovrdnz %g1,%f28,%f0
 866 
 867         faddd   %f12,%f22,%f12
 868         and     %l1,2,%g5
 869 
 870         fmuld   %f34,%f14,%f14
 871         fmovrdnz %o4,%f28,%f4
 872 
 873         fmuld   %f36,%f16,%f16
 874         fmovrdnz %o5,%f28,%f6
 875 
 876         faddd   %f10,%f20,%f10
 877 
 878         fmuld   %f2,%f12,%f12
 879         fmovrdnz %g5,%f28,%f32
 880 
 881         faddd   %f14,%f24,%f14
 882 
 883         faddd   %f16,%f26,%f16
 884 
 885         fxor    %f10,%f0,%f10
 886 
 887         fxor    %f12,%f32,%f12
 888 
 889         fxor    %f14,%f4,%f14
 890 
 891         addcc   %i0,-1,%i0
 892         bg,pt   %icc,.start
 893 ! delay slot
 894         fxor    %f16,%f6,%f16
 895 
 896         ba,pt   %icc,.end
 897 ! delay slot
 898         nop
 899 
 900         .align  16
 901 .case5:
 902         fmuld   %f30,%f54,%f10          ! cos(x0)
 903         fzero   %f0             
 904 
 905         fmuld   %f32,%f44,%f12          ! sin(x1)
 906 
 907         fmuld   %f34,%f54,%f14          ! cos(x2)
 908         fzero   %f4             
 909 
 910         fmuld   %f36,%f44,%f16          ! sin(x3)
 911 
 912         fmuld   %f30,%f48,%f20
 913         faddd   %f10,%f52,%f10
 914 
 915         fmuld   %f32,%f40,%f22
 916         faddd   %f12,%f42,%f12
 917 
 918         fmuld   %f34,%f48,%f24
 919         faddd   %f14,%f52,%f14
 920 
 921         fmuld   %f36,%f40,%f26
 922         faddd   %f16,%f42,%f16
 923 
 924         fmuld   %f30,%f10,%f10
 925         faddd   %f20,%f46,%f20
 926 
 927         fmuld   %f32,%f32,%f32
 928         faddd   %f22,%f46,%f22
 929 
 930         fmuld   %f34,%f14,%f14
 931         faddd   %f24,%f46,%f24
 932 
 933         fmuld   %f36,%f36,%f36
 934         faddd   %f26,%f46,%f26
 935 
 936         fmuld   %f30,%f30,%f30
 937         faddd   %f10,%f50,%f10
 938         and     %l0,2,%g1
 939 
 940         fmuld   %f32,%f12,%f12
 941         fzero   %f32
 942 
 943         fmuld   %f34,%f34,%f34
 944         faddd   %f14,%f50,%f14
 945         and     %l2,2,%o4
 946 
 947         fmuld   %f36,%f16,%f16
 948         fzero   %f36
 949 
 950         fmuld   %f30,%f10,%f10
 951         fmovrdnz %g1,%f28,%f0
 952 
 953         faddd   %f12,%f22,%f12
 954         and     %l1,2,%g5
 955 
 956         fmuld   %f34,%f14,%f14
 957         fmovrdnz %o4,%f28,%f4
 958 
 959         faddd   %f16,%f26,%f16
 960         and     %l3,2,%o5
 961 
 962         faddd   %f10,%f20,%f10
 963 
 964         fmuld   %f2,%f12,%f12
 965         fmovrdnz %g5,%f28,%f32
 966 
 967         faddd   %f14,%f24,%f14
 968 
 969         fmuld   %f6,%f16,%f16
 970         fmovrdnz %o5,%f28,%f36
 971 
 972         fxor    %f10,%f0,%f10
 973 
 974         fxor    %f12,%f32,%f12
 975 
 976         fxor    %f14,%f4,%f14
 977 
 978         addcc   %i0,-1,%i0
 979         bg,pt   %icc,.start
 980 ! delay slot
 981         fxor    %f16,%f36,%f16
 982 
 983         ba,pt   %icc,.end
 984 ! delay slot
 985         nop
 986 
 987         .align  16
 988 .case6:
 989         fmuld   %f6,%f6,%f36
 990         bz,pn   %icc,.case7
 991 ! delay slot
 992         nop
 993 
 994         fmuld   %f30,%f54,%f10          ! cos(x0)
 995         fzero   %f0             
 996 
 997         fmuld   %f32,%f44,%f12          ! sin(x1)
 998 
 999         fmuld   %f34,%f44,%f14          ! sin(x2)
1000 
1001         fmuld   %f36,%f54,%f16          ! cos(x3)
1002         fzero   %f6             
1003 
1004         fmuld   %f30,%f48,%f20
1005         faddd   %f10,%f52,%f10
1006 
1007         fmuld   %f32,%f40,%f22
1008         faddd   %f12,%f42,%f12
1009 
1010         fmuld   %f34,%f40,%f24
1011         faddd   %f14,%f42,%f14
1012 
1013         fmuld   %f36,%f48,%f26
1014         faddd   %f16,%f52,%f16
1015 
1016         fmuld   %f30,%f10,%f10
1017         faddd   %f20,%f46,%f20
1018 
1019         fmuld   %f32,%f32,%f32
1020         faddd   %f22,%f46,%f22
1021 
1022         fmuld   %f34,%f34,%f34
1023         faddd   %f24,%f46,%f24
1024 
1025         fmuld   %f36,%f16,%f16
1026         faddd   %f26,%f46,%f26
1027 
1028         fmuld   %f30,%f30,%f30
1029         faddd   %f10,%f50,%f10
1030         and     %l0,2,%g1
1031 
1032         fmuld   %f32,%f12,%f12
1033         fzero   %f32
1034 
1035         fmuld   %f34,%f14,%f14
1036         fzero   %f34
1037 
1038         fmuld   %f36,%f36,%f36
1039         faddd   %f16,%f50,%f16
1040         and     %l3,2,%o5
1041 
1042         fmuld   %f30,%f10,%f10
1043         fmovrdnz %g1,%f28,%f0
1044 
1045         faddd   %f12,%f22,%f12
1046         and     %l1,2,%g5
1047 
1048         faddd   %f14,%f24,%f14
1049         and     %l2,2,%o4
1050 
1051         fmuld   %f36,%f16,%f16
1052         fmovrdnz %o5,%f28,%f6
1053 
1054         faddd   %f10,%f20,%f10
1055 
1056         fmuld   %f2,%f12,%f12
1057         fmovrdnz %g5,%f28,%f32
1058 
1059         fmuld   %f4,%f14,%f14
1060         fmovrdnz %o4,%f28,%f34
1061 
1062         faddd   %f16,%f26,%f16
1063 
1064         fxor    %f10,%f0,%f10
1065 
1066         fxor    %f12,%f32,%f12
1067 
1068         fxor    %f14,%f34,%f14
1069 
1070         addcc   %i0,-1,%i0
1071         bg,pt   %icc,.start
1072 ! delay slot
1073         fxor    %f16,%f6,%f16
1074 
1075         ba,pt   %icc,.end
1076 ! delay slot
1077         nop
1078 
1079         .align  16
1080 .case7:
1081         fmuld   %f30,%f54,%f10          ! cos(x0)
1082         fzero   %f0             
1083 
1084         fmuld   %f32,%f44,%f12          ! sin(x1)
1085 
1086         fmuld   %f34,%f44,%f14          ! sin(x2)
1087 
1088         fmuld   %f36,%f44,%f16          ! sin(x3)
1089 
1090         fmuld   %f30,%f48,%f20
1091         faddd   %f10,%f52,%f10
1092 
1093         fmuld   %f32,%f40,%f22
1094         faddd   %f12,%f42,%f12
1095 
1096         fmuld   %f34,%f40,%f24
1097         faddd   %f14,%f42,%f14
1098 
1099         fmuld   %f36,%f40,%f26
1100         faddd   %f16,%f42,%f16
1101 
1102         fmuld   %f30,%f10,%f10
1103         faddd   %f20,%f46,%f20
1104 
1105         fmuld   %f32,%f32,%f32
1106         faddd   %f22,%f46,%f22
1107 
1108         fmuld   %f34,%f34,%f34
1109         faddd   %f24,%f46,%f24
1110 
1111         fmuld   %f36,%f36,%f36
1112         faddd   %f26,%f46,%f26
1113 
1114         fmuld   %f30,%f30,%f30
1115         faddd   %f10,%f50,%f10
1116         and     %l0,2,%g1
1117 
1118         fmuld   %f32,%f12,%f12
1119         fzero   %f32
1120 
1121         fmuld   %f34,%f14,%f14
1122         fzero   %f34
1123 
1124         fmuld   %f36,%f16,%f16
1125         fzero   %f36
1126 
1127         fmuld   %f30,%f10,%f10
1128         fmovrdnz %g1,%f28,%f0
1129 
1130         faddd   %f12,%f22,%f12
1131         and     %l1,2,%g5
1132 
1133         faddd   %f14,%f24,%f14
1134         and     %l2,2,%o4
1135 
1136         faddd   %f16,%f26,%f16
1137         and     %l3,2,%o5
1138 
1139         faddd   %f10,%f20,%f10
1140 
1141         fmuld   %f2,%f12,%f12
1142         fmovrdnz %g5,%f28,%f32
1143 
1144         fmuld   %f4,%f14,%f14
1145         fmovrdnz %o4,%f28,%f34
1146 
1147         fmuld   %f6,%f16,%f16
1148         fmovrdnz %o5,%f28,%f36
1149 
1150         fxor    %f10,%f0,%f10
1151 
1152         fxor    %f12,%f32,%f12
1153 
1154         fxor    %f14,%f34,%f14
1155 
1156         addcc   %i0,-1,%i0
1157         bg,pt   %icc,.start
1158 ! delay slot
1159         fxor    %f16,%f36,%f16
1160 
1161         ba,pt   %icc,.end
1162 ! delay slot
1163         nop
1164 
1165 
1166         .align  16
1167 .case8:
1168         fmuld   %f2,%f2,%f32
1169         bz,pn   %icc,.case12
1170 ! delay slot
1171         andcc   %l2,1,%g0
1172 
1173         fmuld   %f4,%f4,%f34
1174         bz,pn   %icc,.case10
1175 ! delay slot
1176         andcc   %l3,1,%g0
1177 
1178         fmuld   %f6,%f6,%f36
1179         bz,pn   %icc,.case9
1180 ! delay slot
1181         nop
1182 
1183         fmuld   %f30,%f44,%f10          ! sin(x0)
1184 
1185         fmuld   %f32,%f54,%f12          ! cos(x1)
1186         fzero   %f2             
1187 
1188         fmuld   %f34,%f54,%f14          ! cos(x2)
1189         fzero   %f4             
1190 
1191         fmuld   %f36,%f54,%f16          ! cos(x3)
1192         fzero   %f6             
1193 
1194         fmuld   %f30,%f40,%f20
1195         faddd   %f10,%f42,%f10
1196 
1197         fmuld   %f32,%f48,%f22
1198         faddd   %f12,%f52,%f12
1199 
1200         fmuld   %f34,%f48,%f24
1201         faddd   %f14,%f52,%f14
1202 
1203         fmuld   %f36,%f48,%f26
1204         faddd   %f16,%f52,%f16
1205 
1206         fmuld   %f30,%f30,%f30
1207         faddd   %f20,%f46,%f20
1208 
1209         fmuld   %f32,%f12,%f12
1210         faddd   %f22,%f46,%f22
1211 
1212         fmuld   %f34,%f14,%f14
1213         faddd   %f24,%f46,%f24
1214 
1215         fmuld   %f36,%f16,%f16
1216         faddd   %f26,%f46,%f26
1217 
1218         fmuld   %f30,%f10,%f10
1219         fzero   %f30
1220 
1221         fmuld   %f32,%f32,%f32
1222         faddd   %f12,%f50,%f12
1223         and     %l1,2,%g5
1224 
1225         fmuld   %f34,%f34,%f34
1226         faddd   %f14,%f50,%f14
1227         and     %l2,2,%o4
1228 
1229         fmuld   %f36,%f36,%f36
1230         faddd   %f16,%f50,%f16
1231         and     %l3,2,%o5
1232 
1233         faddd   %f10,%f20,%f10
1234         and     %l0,2,%g1
1235 
1236         fmuld   %f32,%f12,%f12
1237         fmovrdnz %g5,%f28,%f2
1238 
1239         fmuld   %f34,%f14,%f14
1240         fmovrdnz %o4,%f28,%f4
1241 
1242         fmuld   %f36,%f16,%f16
1243         fmovrdnz %o5,%f28,%f6
1244 
1245         fmuld   %f0,%f10,%f10
1246         fmovrdnz %g1,%f28,%f30
1247 
1248         faddd   %f12,%f22,%f12
1249 
1250         faddd   %f14,%f24,%f14
1251 
1252         faddd   %f16,%f26,%f16
1253 
1254         fxor    %f10,%f30,%f10
1255 
1256         fxor    %f12,%f2,%f12
1257 
1258         fxor    %f14,%f4,%f14
1259 
1260         addcc   %i0,-1,%i0
1261         bg,pt   %icc,.start
1262 ! delay slot
1263         fxor    %f16,%f6,%f16
1264 
1265         ba,pt   %icc,.end
1266 ! delay slot
1267         nop
1268 
1269         .align  16
1270 .case9:
1271         fmuld   %f30,%f44,%f10          ! sin(x0)
1272 
1273         fmuld   %f32,%f54,%f12          ! cos(x1)
1274         fzero   %f2             
1275 
1276         fmuld   %f34,%f54,%f14          ! cos(x2)
1277         fzero   %f4             
1278 
1279         fmuld   %f36,%f44,%f16          ! sin(x3)
1280 
1281         fmuld   %f30,%f40,%f20
1282         faddd   %f10,%f42,%f10
1283 
1284         fmuld   %f32,%f48,%f22
1285         faddd   %f12,%f52,%f12
1286 
1287         fmuld   %f34,%f48,%f24
1288         faddd   %f14,%f52,%f14
1289 
1290         fmuld   %f36,%f40,%f26
1291         faddd   %f16,%f42,%f16
1292 
1293         fmuld   %f30,%f30,%f30
1294         faddd   %f20,%f46,%f20
1295 
1296         fmuld   %f32,%f12,%f12
1297         faddd   %f22,%f46,%f22
1298 
1299         fmuld   %f34,%f14,%f14
1300         faddd   %f24,%f46,%f24
1301 
1302         fmuld   %f36,%f36,%f36
1303         faddd   %f26,%f46,%f26
1304 
1305         fmuld   %f30,%f10,%f10
1306         fzero   %f30
1307 
1308         fmuld   %f32,%f32,%f32
1309         faddd   %f12,%f50,%f12
1310         and     %l1,2,%g5
1311 
1312         fmuld   %f34,%f34,%f34
1313         faddd   %f14,%f50,%f14
1314         and     %l2,2,%o4
1315 
1316         fmuld   %f36,%f16,%f16
1317         fzero   %f36
1318 
1319         faddd   %f10,%f20,%f10
1320         and     %l0,2,%g1
1321 
1322         fmuld   %f32,%f12,%f12
1323         fmovrdnz %g5,%f28,%f2
1324 
1325         fmuld   %f34,%f14,%f14
1326         fmovrdnz %o4,%f28,%f4
1327 
1328         faddd   %f16,%f26,%f16
1329         and     %l3,2,%o5
1330 
1331         fmuld   %f0,%f10,%f10
1332         fmovrdnz %g1,%f28,%f30
1333 
1334         faddd   %f12,%f22,%f12
1335 
1336         faddd   %f14,%f24,%f14
1337 
1338         fmuld   %f6,%f16,%f16
1339         fmovrdnz %o5,%f28,%f36
1340 
1341         fxor    %f10,%f30,%f10
1342 
1343         fxor    %f12,%f2,%f12
1344 
1345         fxor    %f14,%f4,%f14
1346 
1347         addcc   %i0,-1,%i0
1348         bg,pt   %icc,.start
1349 ! delay slot
1350         fxor    %f16,%f36,%f16
1351 
1352         ba,pt   %icc,.end
1353 ! delay slot
1354         nop
1355 
1356         .align  16
1357 .case10:
1358         fmuld   %f6,%f6,%f36
1359         bz,pn   %icc,.case11
1360 ! delay slot
1361         nop
1362 
1363         fmuld   %f30,%f44,%f10          ! sin(x0)
1364 
1365         fmuld   %f32,%f54,%f12          ! cos(x1)
1366         fzero   %f2             
1367 
1368         fmuld   %f34,%f44,%f14          ! sin(x2)
1369 
1370         fmuld   %f36,%f54,%f16          ! cos(x3)
1371         fzero   %f6             
1372 
1373         fmuld   %f30,%f40,%f20
1374         faddd   %f10,%f42,%f10
1375 
1376         fmuld   %f32,%f48,%f22
1377         faddd   %f12,%f52,%f12
1378 
1379         fmuld   %f34,%f40,%f24
1380         faddd   %f14,%f42,%f14
1381 
1382         fmuld   %f36,%f48,%f26
1383         faddd   %f16,%f52,%f16
1384 
1385         fmuld   %f30,%f30,%f30
1386         faddd   %f20,%f46,%f20
1387 
1388         fmuld   %f32,%f12,%f12
1389         faddd   %f22,%f46,%f22
1390 
1391         fmuld   %f34,%f34,%f34
1392         faddd   %f24,%f46,%f24
1393 
1394         fmuld   %f36,%f16,%f16
1395         faddd   %f26,%f46,%f26
1396 
1397         fmuld   %f30,%f10,%f10
1398         fzero   %f30
1399 
1400         fmuld   %f32,%f32,%f32
1401         faddd   %f12,%f50,%f12
1402         and     %l1,2,%g5
1403 
1404         fmuld   %f34,%f14,%f14
1405         fzero   %f34
1406 
1407         fmuld   %f36,%f36,%f36
1408         faddd   %f16,%f50,%f16
1409         and     %l3,2,%o5
1410 
1411         faddd   %f10,%f20,%f10
1412         and     %l0,2,%g1
1413 
1414         fmuld   %f32,%f12,%f12
1415         fmovrdnz %g5,%f28,%f2
1416 
1417         faddd   %f14,%f24,%f14
1418         and     %l2,2,%o4
1419 
1420         fmuld   %f36,%f16,%f16
1421         fmovrdnz %o5,%f28,%f6
1422 
1423         fmuld   %f0,%f10,%f10
1424         fmovrdnz %g1,%f28,%f30
1425 
1426         faddd   %f12,%f22,%f12
1427 
1428         fmuld   %f4,%f14,%f14
1429         fmovrdnz %o4,%f28,%f34
1430 
1431         faddd   %f16,%f26,%f16
1432 
1433         fxor    %f10,%f30,%f10
1434 
1435         fxor    %f12,%f2,%f12
1436 
1437         fxor    %f14,%f34,%f14
1438 
1439         addcc   %i0,-1,%i0
1440         bg,pt   %icc,.start
1441 ! delay slot
1442         fxor    %f16,%f6,%f16
1443 
1444         ba,pt   %icc,.end
1445 ! delay slot
1446         nop
1447 
1448         .align  16
1449 .case11:
1450         fmuld   %f30,%f44,%f10          ! sin(x0)
1451 
1452         fmuld   %f32,%f54,%f12          ! cos(x1)
1453         fzero   %f2             
1454 
1455         fmuld   %f34,%f44,%f14          ! sin(x2)
1456 
1457         fmuld   %f36,%f44,%f16          ! sin(x3)
1458 
1459         fmuld   %f30,%f40,%f20
1460         faddd   %f10,%f42,%f10
1461 
1462         fmuld   %f32,%f48,%f22
1463         faddd   %f12,%f52,%f12
1464 
1465         fmuld   %f34,%f40,%f24
1466         faddd   %f14,%f42,%f14
1467 
1468         fmuld   %f36,%f40,%f26
1469         faddd   %f16,%f42,%f16
1470 
1471         fmuld   %f30,%f30,%f30
1472         faddd   %f20,%f46,%f20
1473 
1474         fmuld   %f32,%f12,%f12
1475         faddd   %f22,%f46,%f22
1476 
1477         fmuld   %f34,%f34,%f34
1478         faddd   %f24,%f46,%f24
1479 
1480         fmuld   %f36,%f36,%f36
1481         faddd   %f26,%f46,%f26
1482 
1483         fmuld   %f30,%f10,%f10
1484         fzero   %f30
1485 
1486         fmuld   %f32,%f32,%f32
1487         faddd   %f12,%f50,%f12
1488         and     %l1,2,%g5
1489 
1490         fmuld   %f34,%f14,%f14
1491         fzero   %f34
1492 
1493         fmuld   %f36,%f16,%f16
1494         fzero   %f36
1495 
1496         faddd   %f10,%f20,%f10
1497         and     %l0,2,%g1
1498 
1499         fmuld   %f32,%f12,%f12
1500         fmovrdnz %g5,%f28,%f2
1501 
1502         faddd   %f14,%f24,%f14
1503         and     %l2,2,%o4
1504 
1505         faddd   %f16,%f26,%f16
1506         and     %l3,2,%o5
1507 
1508         fmuld   %f0,%f10,%f10
1509         fmovrdnz %g1,%f28,%f30
1510 
1511         faddd   %f12,%f22,%f12
1512 
1513         fmuld   %f4,%f14,%f14
1514         fmovrdnz %o4,%f28,%f34
1515 
1516         fmuld   %f6,%f16,%f16
1517         fmovrdnz %o5,%f28,%f36
1518 
1519         fxor    %f10,%f30,%f10
1520 
1521         fxor    %f12,%f2,%f12
1522 
1523         fxor    %f14,%f34,%f14
1524 
1525         addcc   %i0,-1,%i0
1526         bg,pt   %icc,.start
1527 ! delay slot
1528         fxor    %f16,%f36,%f16
1529 
1530         ba,pt   %icc,.end
1531 ! delay slot
1532         nop
1533 
1534         .align  16
1535 .case12:
1536         fmuld   %f4,%f4,%f34
1537         bz,pn   %icc,.case14
1538 ! delay slot
1539         andcc   %l3,1,%g0
1540 
1541         fmuld   %f6,%f6,%f36
1542         bz,pn   %icc,.case13
1543 ! delay slot
1544         nop
1545 
1546         fmuld   %f30,%f44,%f10          ! sin(x0)
1547 
1548         fmuld   %f32,%f44,%f12          ! sin(x1)
1549 
1550         fmuld   %f34,%f54,%f14          ! cos(x2)
1551         fzero   %f4             
1552 
1553         fmuld   %f36,%f54,%f16          ! cos(x3)
1554         fzero   %f6             
1555 
1556         fmuld   %f30,%f40,%f20
1557         faddd   %f10,%f42,%f10
1558 
1559         fmuld   %f32,%f40,%f22
1560         faddd   %f12,%f42,%f12
1561 
1562         fmuld   %f34,%f48,%f24
1563         faddd   %f14,%f52,%f14
1564 
1565         fmuld   %f36,%f48,%f26
1566         faddd   %f16,%f52,%f16
1567 
1568         fmuld   %f30,%f30,%f30
1569         faddd   %f20,%f46,%f20
1570 
1571         fmuld   %f32,%f32,%f32
1572         faddd   %f22,%f46,%f22
1573 
1574         fmuld   %f34,%f14,%f14
1575         faddd   %f24,%f46,%f24
1576 
1577         fmuld   %f36,%f16,%f16
1578         faddd   %f26,%f46,%f26
1579 
1580         fmuld   %f30,%f10,%f10
1581         fzero   %f30
1582 
1583         fmuld   %f32,%f12,%f12
1584         fzero   %f32
1585 
1586         fmuld   %f34,%f34,%f34
1587         faddd   %f14,%f50,%f14
1588         and     %l2,2,%o4
1589 
1590         fmuld   %f36,%f36,%f36
1591         faddd   %f16,%f50,%f16
1592         and     %l3,2,%o5
1593 
1594         faddd   %f10,%f20,%f10
1595         and     %l0,2,%g1
1596 
1597         faddd   %f12,%f22,%f12
1598         and     %l1,2,%g5
1599 
1600         fmuld   %f34,%f14,%f14
1601         fmovrdnz %o4,%f28,%f4
1602 
1603         fmuld   %f36,%f16,%f16
1604         fmovrdnz %o5,%f28,%f6
1605 
1606         fmuld   %f0,%f10,%f10
1607         fmovrdnz %g1,%f28,%f30
1608 
1609         fmuld   %f2,%f12,%f12
1610         fmovrdnz %g5,%f28,%f32
1611 
1612         faddd   %f14,%f24,%f14
1613 
1614         faddd   %f16,%f26,%f16
1615 
1616         fxor    %f10,%f30,%f10
1617 
1618         fxor    %f12,%f32,%f12
1619 
1620         fxor    %f14,%f4,%f14
1621 
1622         addcc   %i0,-1,%i0
1623         bg,pt   %icc,.start
1624 ! delay slot
1625         fxor    %f16,%f6,%f16
1626 
1627         ba,pt   %icc,.end
1628 ! delay slot
1629         nop
1630 
1631         .align  16
1632 .case13:
1633         fmuld   %f30,%f44,%f10          ! sin(x0)
1634 
1635         fmuld   %f32,%f44,%f12          ! sin(x1)
1636 
1637         fmuld   %f34,%f54,%f14          ! cos(x2)
1638         fzero   %f4             
1639 
1640         fmuld   %f36,%f44,%f16          ! sin(x3)
1641 
1642         fmuld   %f30,%f40,%f20
1643         faddd   %f10,%f42,%f10
1644 
1645         fmuld   %f32,%f40,%f22
1646         faddd   %f12,%f42,%f12
1647 
1648         fmuld   %f34,%f48,%f24
1649         faddd   %f14,%f52,%f14
1650 
1651         fmuld   %f36,%f40,%f26
1652         faddd   %f16,%f42,%f16
1653 
1654         fmuld   %f30,%f30,%f30
1655         faddd   %f20,%f46,%f20
1656 
1657         fmuld   %f32,%f32,%f32
1658         faddd   %f22,%f46,%f22
1659 
1660         fmuld   %f34,%f14,%f14
1661         faddd   %f24,%f46,%f24
1662 
1663         fmuld   %f36,%f36,%f36
1664         faddd   %f26,%f46,%f26
1665 
1666         fmuld   %f30,%f10,%f10
1667         fzero   %f30
1668 
1669         fmuld   %f32,%f12,%f12
1670         fzero   %f32
1671 
1672         fmuld   %f34,%f34,%f34
1673         faddd   %f14,%f50,%f14
1674         and     %l2,2,%o4
1675 
1676         fmuld   %f36,%f16,%f16
1677         fzero   %f36
1678 
1679         faddd   %f10,%f20,%f10
1680         and     %l0,2,%g1
1681 
1682         faddd   %f12,%f22,%f12
1683         and     %l1,2,%g5
1684 
1685         fmuld   %f34,%f14,%f14
1686         fmovrdnz %o4,%f28,%f4
1687 
1688         faddd   %f16,%f26,%f16
1689         and     %l3,2,%o5
1690 
1691         fmuld   %f0,%f10,%f10
1692         fmovrdnz %g1,%f28,%f30
1693 
1694         fmuld   %f2,%f12,%f12
1695         fmovrdnz %g5,%f28,%f32
1696 
1697         faddd   %f14,%f24,%f14
1698 
1699         fmuld   %f6,%f16,%f16
1700         fmovrdnz %o5,%f28,%f36
1701 
1702         fxor    %f10,%f30,%f10
1703 
1704         fxor    %f12,%f32,%f12
1705 
1706         fxor    %f14,%f4,%f14
1707 
1708         addcc   %i0,-1,%i0
1709         bg,pt   %icc,.start
1710 ! delay slot
1711         fxor    %f16,%f36,%f16
1712 
1713         ba,pt   %icc,.end
1714 ! delay slot
1715         nop
1716 
1717         .align  16
1718 .case14:
1719         fmuld   %f6,%f6,%f36
1720         bz,pn   %icc,.case15
1721 ! delay slot
1722         nop
1723 
1724         fmuld   %f30,%f44,%f10          ! sin(x0)
1725 
1726         fmuld   %f32,%f44,%f12          ! sin(x1)
1727 
1728         fmuld   %f34,%f44,%f14          ! sin(x2)
1729 
1730         fmuld   %f36,%f54,%f16          ! cos(x3)
1731         fzero   %f6             
1732 
1733         fmuld   %f30,%f40,%f20
1734         faddd   %f10,%f42,%f10
1735 
1736         fmuld   %f32,%f40,%f22
1737         faddd   %f12,%f42,%f12
1738 
1739         fmuld   %f34,%f40,%f24
1740         faddd   %f14,%f42,%f14
1741 
1742         fmuld   %f36,%f48,%f26
1743         faddd   %f16,%f52,%f16
1744 
1745         fmuld   %f30,%f30,%f30
1746         faddd   %f20,%f46,%f20
1747 
1748         fmuld   %f32,%f32,%f32
1749         faddd   %f22,%f46,%f22
1750 
1751         fmuld   %f34,%f34,%f34
1752         faddd   %f24,%f46,%f24
1753 
1754         fmuld   %f36,%f16,%f16
1755         faddd   %f26,%f46,%f26
1756 
1757         fmuld   %f30,%f10,%f10
1758         fzero   %f30
1759 
1760         fmuld   %f32,%f12,%f12
1761         fzero   %f32
1762 
1763         fmuld   %f34,%f14,%f14
1764         fzero   %f34
1765 
1766         fmuld   %f36,%f36,%f36
1767         faddd   %f16,%f50,%f16
1768         and     %l3,2,%o5
1769 
1770         faddd   %f10,%f20,%f10
1771         and     %l0,2,%g1
1772 
1773         faddd   %f12,%f22,%f12
1774         and     %l1,2,%g5
1775 
1776         faddd   %f14,%f24,%f14
1777         and     %l2,2,%o4
1778 
1779         fmuld   %f36,%f16,%f16
1780         fmovrdnz %o5,%f28,%f6
1781 
1782         fmuld   %f0,%f10,%f10
1783         fmovrdnz %g1,%f28,%f30
1784 
1785         fmuld   %f2,%f12,%f12
1786         fmovrdnz %g5,%f28,%f32
1787 
1788         fmuld   %f4,%f14,%f14
1789         fmovrdnz %o4,%f28,%f34
1790 
1791         faddd   %f16,%f26,%f16
1792 
1793         fxor    %f10,%f30,%f10
1794 
1795         fxor    %f12,%f32,%f12
1796 
1797         fxor    %f14,%f34,%f14
1798 
1799         addcc   %i0,-1,%i0
1800         bg,pt   %icc,.start
1801 ! delay slot
1802         fxor    %f16,%f6,%f16
1803 
1804         ba,pt   %icc,.end
1805 ! delay slot
1806         nop
1807 
1808         .align  16
1809 .case15:
1810         fmuld   %f30,%f44,%f10          ! sin(x0)
1811 
1812         fmuld   %f32,%f44,%f12          ! sin(x1)
1813 
1814         fmuld   %f34,%f44,%f14          ! sin(x2)
1815 
1816         fmuld   %f36,%f44,%f16          ! sin(x3)
1817 
1818         fmuld   %f30,%f40,%f20
1819         faddd   %f10,%f42,%f10
1820 
1821         fmuld   %f32,%f40,%f22
1822         faddd   %f12,%f42,%f12
1823 
1824         fmuld   %f34,%f40,%f24
1825         faddd   %f14,%f42,%f14
1826 
1827         fmuld   %f36,%f40,%f26
1828         faddd   %f16,%f42,%f16
1829 
1830         fmuld   %f30,%f30,%f30
1831         faddd   %f20,%f46,%f20
1832 
1833         fmuld   %f32,%f32,%f32
1834         faddd   %f22,%f46,%f22
1835 
1836         fmuld   %f34,%f34,%f34
1837         faddd   %f24,%f46,%f24
1838 
1839         fmuld   %f36,%f36,%f36
1840         faddd   %f26,%f46,%f26
1841 
1842         fmuld   %f30,%f10,%f10
1843         fzero   %f30
1844 
1845         fmuld   %f32,%f12,%f12
1846         fzero   %f32
1847 
1848         fmuld   %f34,%f14,%f14
1849         fzero   %f34
1850 
1851         fmuld   %f36,%f16,%f16
1852         fzero   %f36
1853 
1854         faddd   %f10,%f20,%f10
1855         and     %l0,2,%g1
1856 
1857         faddd   %f12,%f22,%f12
1858         and     %l1,2,%g5
1859 
1860         faddd   %f14,%f24,%f14
1861         and     %l2,2,%o4
1862 
1863         faddd   %f16,%f26,%f16
1864         and     %l3,2,%o5
1865 
1866         fmuld   %f0,%f10,%f10
1867         fmovrdnz %g1,%f28,%f30
1868 
1869         fmuld   %f2,%f12,%f12
1870         fmovrdnz %g5,%f28,%f32
1871 
1872         fmuld   %f4,%f14,%f14
1873         fmovrdnz %o4,%f28,%f34
1874 
1875         fmuld   %f6,%f16,%f16
1876         fmovrdnz %o5,%f28,%f36
1877 
1878         fxor    %f10,%f30,%f10
1879 
1880         fxor    %f12,%f32,%f12
1881 
1882         fxor    %f14,%f34,%f14
1883 
1884         addcc   %i0,-1,%i0
1885         bg,pt   %icc,.start
1886 ! delay slot
1887         fxor    %f16,%f36,%f16
1888 
1889         ba,pt   %icc,.end
1890 ! delay slot
1891         nop
1892 
1893 
1894         .align  32
1895 .end:
1896         fdtos   %f10,%f10
1897         st      %f10,[%o0]
1898         fdtos   %f12,%f12
1899         st      %f12,[%o1]
1900         fdtos   %f14,%f14
1901         st      %f14,[%o2]
1902         fdtos   %f16,%f16
1903         tst     %i5                     ! check for huge arguments remaining
1904         be,pt   %icc,.exit
1905 ! delay slot
1906         st      %f16,[%o3]
1907 #ifdef __sparcv9
1908         ldx     [%fp+xsave],%o1
1909         ldx     [%fp+ysave],%o3
1910 #else
1911         ld      [%fp+xsave],%o1
1912         ld      [%fp+ysave],%o3
1913 #endif
1914         ld      [%fp+nsave],%o0
1915         ld      [%fp+sxsave],%o2
1916         ld      [%fp+sysave],%o4
1917         sra     %o2,0,%o2               ! sign-extend for V9
1918         call    __vlibm_vsin_bigf
1919         sra     %o4,0,%o4               ! delay slot
1920 
1921 .exit:
1922         ret
1923         restore
1924 
1925 
1926         .align  32
1927 .last1:
1928         fdtos   %f12,%f12
1929         st      %f12,[%o1]
1930         fzeros  %f2
1931         add     %fp,junk,%o1
1932 .last2:
1933         fdtos   %f14,%f14
1934         st      %f14,[%o2]
1935         fzeros  %f4
1936         add     %fp,junk,%o2
1937 .last3:
1938         fdtos   %f16,%f16
1939         st      %f16,[%o3]
1940         fzeros  %f6
1941         ba,pt   %icc,.cont
1942 ! delay slot
1943         add     %fp,junk,%o3
1944 
1945 
1946         .align  16
1947 .range0:
1948         fcmpgt32 %f38,%f30,%l0
1949         andcc   %l0,2,%g0
1950         bnz,a,pt %icc,1f                ! branch if finite
1951 ! delay slot, squashed if branch not taken
1952         mov     1,%i5                   ! set biguns
1953         fzeros  %f1
1954         fmuls   %f0,%f1,%f0
1955         st      %f0,[%o0]
1956 1:
1957         addcc   %i0,-1,%i0
1958         ble,pn  %icc,1f
1959 ! delay slot
1960         nop
1961         ld      [%i1],%f0
1962         add     %i1,%i2,%i1
1963         mov     %i3,%o0
1964         add     %i3,%i4,%i3
1965         fabsd   %f0,%f30
1966         fcmple32 %f30,%f18,%l0
1967         andcc   %l0,2,%g0
1968         bz,pn   %icc,.range0
1969 ! delay slot
1970         nop
1971         ba,pt   %icc,.check1
1972 ! delay slot
1973         fcmple32 %f30,%f8,%l0
1974 1:
1975         fzero   %f0                     ! set up dummy argument
1976         add     %fp,junk,%o0
1977         mov     2,%l0
1978         ba,pt   %icc,.check1
1979 ! delay slot
1980         fzero   %f30
1981 
1982 
1983         .align  16
1984 .range1:
1985         fcmpgt32 %f38,%f32,%l1
1986         andcc   %l1,2,%g0
1987         bnz,a,pt %icc,1f                ! branch if finite
1988 ! delay slot, squashed if branch not taken
1989         mov     1,%i5                   ! set biguns
1990         fzeros  %f3
1991         fmuls   %f2,%f3,%f2
1992         st      %f2,[%o1]
1993 1:
1994         addcc   %i0,-1,%i0
1995         ble,pn  %icc,1f
1996 ! delay slot
1997         nop
1998         ld      [%i1],%f2
1999         add     %i1,%i2,%i1
2000         mov     %i3,%o1
2001         add     %i3,%i4,%i3
2002         fabsd   %f2,%f32
2003         fcmple32 %f32,%f18,%l1
2004         andcc   %l1,2,%g0
2005         bz,pn   %icc,.range1
2006 ! delay slot
2007         nop
2008         ba,pt   %icc,.check2
2009 ! delay slot
2010         fcmple32 %f32,%f8,%l1
2011 1:
2012         fzero   %f2                     ! set up dummy argument
2013         add     %fp,junk,%o1
2014         mov     2,%l1
2015         ba,pt   %icc,.check2
2016 ! delay slot
2017         fzero   %f32
2018 
2019 
2020         .align  16
2021 .range2:
2022         fcmpgt32 %f38,%f34,%l2
2023         andcc   %l2,2,%g0
2024         bnz,a,pt %icc,1f                ! branch if finite
2025 ! delay slot, squashed if branch not taken
2026         mov     1,%i5                   ! set biguns
2027         fzeros  %f5
2028         fmuls   %f4,%f5,%f4
2029         st      %f4,[%o2]
2030 1:
2031         addcc   %i0,-1,%i0
2032         ble,pn  %icc,1f
2033 ! delay slot
2034         nop
2035         ld      [%i1],%f4
2036         add     %i1,%i2,%i1
2037         mov     %i3,%o2
2038         add     %i3,%i4,%i3
2039         fabsd   %f4,%f34
2040         fcmple32 %f34,%f18,%l2
2041         andcc   %l2,2,%g0
2042         bz,pn   %icc,.range2
2043 ! delay slot
2044         nop
2045         ba,pt   %icc,.check3
2046 ! delay slot
2047         fcmple32 %f34,%f8,%l2
2048 1:
2049         fzero   %f4                     ! set up dummy argument
2050         add     %fp,junk,%o2
2051         mov     2,%l2
2052         ba,pt   %icc,.check3
2053 ! delay slot
2054         fzero   %f34
2055 
2056 
2057         .align  16
2058 .range3:
2059         fcmpgt32 %f38,%f36,%l3
2060         andcc   %l3,2,%g0
2061         bnz,a,pt %icc,1f                ! branch if finite
2062 ! delay slot, squashed if branch not taken
2063         mov     1,%i5                   ! set biguns
2064         fzeros  %f7
2065         fmuls   %f6,%f7,%f6
2066         st      %f6,[%o3]
2067 1:
2068         addcc   %i0,-1,%i0
2069         ble,pn  %icc,1f
2070 ! delay slot
2071         nop
2072         ld      [%i1],%f6
2073         add     %i1,%i2,%i1
2074         mov     %i3,%o3
2075         add     %i3,%i4,%i3
2076         fabsd   %f6,%f36
2077         fcmple32 %f36,%f18,%l3
2078         andcc   %l3,2,%g0
2079         bz,pn   %icc,.range3
2080 ! delay slot
2081         nop
2082         ba,pt   %icc,.checkprimary
2083 ! delay slot
2084         fcmple32 %f36,%f8,%l3
2085 1:
2086         fzero   %f6                     ! set up dummy argument
2087         add     %fp,junk,%o3
2088         mov     2,%l3
2089         ba,pt   %icc,.checkprimary
2090 ! delay slot
2091         fzero   %f36
2092 
2093         SET_SIZE(__vsinf)
2094