|
|
| 171 |
//============================================================== |
171 |
//============================================================== |
| 172 |
// general input registers: |
172 |
// general input registers: |
| 173 |
// r14 -> r19 |
173 |
// r14 -> r19 |
| 174 |
// r32 -> r45 |
174 |
// r32 -> r43 |
| 175 |
|
175 |
|
| 176 |
// predicate registers used: |
176 |
// predicate registers used: |
| 177 |
// p6 -> p14 |
177 |
// p6 -> p14 |
|
|
| 260 |
GR_SAVE_B0 = r42 |
260 |
GR_SAVE_B0 = r42 |
| 261 |
GR_SAVE_GP = r43 |
261 |
GR_SAVE_GP = r43 |
| 262 |
|
262 |
|
|
|
263 |
GR_Parameter_X = r44 |
| 264 |
GR_Parameter_Y = r45 |
| 265 |
GR_Parameter_RESULT = r46 |
| 266 |
GR_Parameter_TAG = r47 |
| 267 |
|
| 263 |
RODATA |
268 |
RODATA |
| 264 |
.align 16 |
269 |
.align 16 |
| 265 |
|
270 |
|
|
Lines 389-395
LOCAL_OBJECT_END(double_sin_cos_beta_k4)
|
Link Here
|
|---|
|
| 389 |
GLOBAL_IEEE754_ENTRY(sinf) |
394 |
GLOBAL_IEEE754_ENTRY(sinf) |
| 390 |
|
395 |
|
| 391 |
{ .mlx |
396 |
{ .mlx |
| 392 |
alloc r32 = ar.pfs,1,13,0,0 |
397 |
alloc r32 = ar.pfs,1,11,4,0 |
| 393 |
movl sincosf_GR_sig_inv_pi_by_16 = 0xA2F9836E4E44152A //signd of 16/pi |
398 |
movl sincosf_GR_sig_inv_pi_by_16 = 0xA2F9836E4E44152A //signd of 16/pi |
| 394 |
} |
399 |
} |
| 395 |
{ .mlx |
400 |
{ .mlx |
|
Lines 413-419
GLOBAL_IEEE754_END(sinf)
|
Link Here
|
|---|
|
| 413 |
GLOBAL_IEEE754_ENTRY(cosf) |
418 |
GLOBAL_IEEE754_ENTRY(cosf) |
| 414 |
|
419 |
|
| 415 |
{ .mlx |
420 |
{ .mlx |
| 416 |
alloc r32 = ar.pfs,1,13,0,0 |
421 |
alloc r32 = ar.pfs,1,11,4,0 |
| 417 |
movl sincosf_GR_sig_inv_pi_by_16 = 0xA2F9836E4E44152A //signd of 16/pi |
422 |
movl sincosf_GR_sig_inv_pi_by_16 = 0xA2F9836E4E44152A //signd of 16/pi |
| 418 |
} |
423 |
} |
| 419 |
{ .mlx |
424 |
{ .mlx |
|
|
| 641 |
////////// x = 0/Inf/NaN path ////////////////// |
646 |
////////// x = 0/Inf/NaN path ////////////////// |
| 642 |
_SINCOSF_SPECIAL_ARGS: |
647 |
_SINCOSF_SPECIAL_ARGS: |
| 643 |
.pred.rel "mutex",p8,p9 |
648 |
.pred.rel "mutex",p8,p9 |
|
|
649 |
|
| 650 |
{ .mfi |
| 651 |
nop.m 999 |
| 652 |
fclass.m.unc p7,p0 = f8, 0x23 // is x +/- inf? |
| 653 |
nop.i 999;; |
| 654 |
} |
| 655 |
|
| 656 |
{ .mfi |
| 657 |
nop.m 999 |
| 658 |
(p7) fmerge.s f9 = f8,f8 |
| 659 |
nop.i 999 |
| 660 |
} |
| 661 |
|
| 644 |
// sinf(+/-0) = +/-0 |
662 |
// sinf(+/-0) = +/-0 |
| 645 |
// sinf(Inf) = NaN |
663 |
// sinf(Inf) = NaN |
| 646 |
// sinf(NaN) = NaN |
664 |
// sinf(NaN) = NaN |
| 647 |
{ .mfi |
665 |
{ .mfi |
| 648 |
nop.m 999 |
666 |
nop.m 999 |
| 649 |
(p8) fma.s.s0 f8 = f8, f0, f0 // sinf(+/-0,NaN,Inf) |
667 |
(p8) fma.s.s0 f8 = f8, f0, f0 // sinf(+/-0,NaN,Inf) |
| 650 |
nop.i 999 |
668 |
(p8) mov GR_Parameter_TAG = 281 |
| 651 |
} |
669 |
} |
| 652 |
// cosf(+/-0) = 1.0 |
670 |
// cosf(+/-0) = 1.0 |
| 653 |
// cosf(Inf) = NaN |
671 |
// cosf(Inf) = NaN |
| 654 |
// cosf(NaN) = NaN |
672 |
// cosf(NaN) = NaN |
| 655 |
{ .mfb |
673 |
{ .mfi |
| 656 |
nop.m 999 |
674 |
nop.m 999 |
| 657 |
(p9) fma.s.s0 f8 = f8, f0, f1 // cosf(+/-0,NaN,Inf) |
675 |
(p9) fma.s.s0 f8 = f8, f0, f1 // cosf(+/-0,NaN,Inf) |
|
|
676 |
(p9) mov GR_Parameter_TAG = 278 |
| 677 |
};; |
| 678 |
|
| 679 |
{ .mbb |
| 680 |
nop.m 999 |
| 681 |
(p7) br.cond.spnt __libm_error_region |
| 658 |
br.ret.sptk b0 // Exit for x = 0/Inf/NaN path |
682 |
br.ret.sptk b0 // Exit for x = 0/Inf/NaN path |
| 659 |
};; |
683 |
};; |
| 660 |
|
684 |
|
|
Lines 715-717
LOCAL_LIBM_END(__libm_callout_sincosf)
|
Link Here
|
|---|
|
| 715 |
.type __libm_cos_large#, @function |
739 |
.type __libm_cos_large#, @function |
| 716 |
.global __libm_cos_large# |
740 |
.global __libm_cos_large# |
| 717 |
|
741 |
|
|
|
742 |
LOCAL_LIBM_ENTRY(__libm_error_region) |
| 743 |
.prologue |
| 744 |
{ .mfi |
| 745 |
add GR_Parameter_Y=-32,sp // Parameter 2 value |
| 746 |
nop.f 0 |
| 747 |
.save ar.pfs,GR_SAVE_PFS |
| 748 |
mov GR_SAVE_PFS=ar.pfs // Save ar.pfs |
| 749 |
} |
| 750 |
{ .mfi |
| 751 |
.fframe 64 |
| 752 |
add sp=-64,sp // Create new stack |
| 753 |
nop.f 0 |
| 754 |
mov GR_SAVE_GP=gp // Save gp |
| 755 |
};; |
| 756 |
{ .mmi |
| 757 |
stfd [GR_Parameter_Y] = f1,16 // STORE Parameter 2 on stack |
| 758 |
add GR_Parameter_X = 16,sp // Parameter 1 address |
| 759 |
.save b0, GR_SAVE_B0 |
| 760 |
mov GR_SAVE_B0=b0 // Save b0 |
| 761 |
};; |
| 762 |
.body |
| 763 |
{ .mib |
| 764 |
stfd [GR_Parameter_X] = f9 // STORE Parameter 1 on stack |
| 765 |
add GR_Parameter_RESULT = 0,GR_Parameter_Y // Parameter 3 address |
| 766 |
nop.b 0 |
| 767 |
} |
| 768 |
{ .mib |
| 769 |
stfd [GR_Parameter_Y] = f8 // STORE Parameter 3 on stack |
| 770 |
add GR_Parameter_Y = -16,GR_Parameter_Y |
| 771 |
br.call.sptk b0=__libm_error_support# // Call error handling function |
| 772 |
};; |
| 773 |
{ .mmi |
| 774 |
add GR_Parameter_RESULT = 48,sp |
| 775 |
nop.m 0 |
| 776 |
nop.i 0 |
| 777 |
};; |
| 778 |
{ .mmi |
| 779 |
ldfd f8 = [GR_Parameter_RESULT] // Get return result off stack |
| 780 |
.restore sp |
| 781 |
add sp = 64,sp // Restore stack pointer |
| 782 |
mov b0 = GR_SAVE_B0 // Restore return address |
| 783 |
};; |
| 784 |
{ .mib |
| 785 |
mov gp = GR_SAVE_GP // Restore gp |
| 786 |
mov ar.pfs = GR_SAVE_PFS // Restore ar.pfs |
| 787 |
br.ret.sptk b0 // Return |
| 788 |
};; |
| 789 |
|
| 790 |
LOCAL_LIBM_END(__libm_error_region) |
| 791 |
.type __libm_error_support#,@function |
| 792 |
.global __libm_error_support# |