< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86_tan.cpp

Print this page
rev 51719 : [mq]: 8210676


 484 ATTRIBUTE_ALIGNED(8) juint _TWO_POW_55_tan[] =
 485 {
 486     0x00000000UL, 0x43600000UL
 487 };
 488 
 489 ATTRIBUTE_ALIGNED(4) juint _TWO_POW_M55_tan[] =
 490 {
 491     0x00000000UL, 0x3c800000UL
 492 };
 493 
 494 ATTRIBUTE_ALIGNED(4) juint _NEG_ZERO_tan[] =
 495 {
 496     0x00000000UL, 0x80000000UL
 497 };
 498 
 499 void MacroAssembler::fast_tan(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register r8, Register r9, Register r10, Register r11) {
 500 
 501   Label L_2TAG_PACKET_0_0_1, L_2TAG_PACKET_1_0_1, L_2TAG_PACKET_2_0_1, L_2TAG_PACKET_3_0_1;
 502   Label L_2TAG_PACKET_4_0_1, L_2TAG_PACKET_5_0_1, L_2TAG_PACKET_6_0_1, L_2TAG_PACKET_7_0_1;
 503   Label L_2TAG_PACKET_8_0_1, L_2TAG_PACKET_9_0_1, L_2TAG_PACKET_10_0_1, L_2TAG_PACKET_11_0_1;
 504   Label L_2TAG_PACKET_12_0_1, L_2TAG_PACKET_13_0_1, L_2TAG_PACKET_14_0_1, B1_2, B1_3, B1_4, B1_5, start;
 505 
 506   address ONEHALF = (address)_ONEHALF_tan;
 507   address MUL16 = (address)_MUL16;
 508   address sign_mask = (address)_sign_mask_tan;
 509   address PI32INV = (address)_PI32INV_tan;
 510   address P_1 = (address)_P_1_tan;
 511   address P_2 = (address)_P_2_tan;
 512   address P_3 = (address)_P_3_tan;
 513   address Ctable = (address)_Ctable_tan;
 514   address MASK_35 = (address)_MASK_35_tan;
 515   address Q_11 = (address)_Q_11_tan;
 516   address Q_9 = (address)_Q_9_tan;
 517   address Q_7 = (address)_Q_7_tan;
 518   address Q_5 = (address)_Q_5_tan;
 519   address Q_3 = (address)_Q_3_tan;
 520   address PI_INV_TABLE = (address)_PI_INV_TABLE_tan;
 521   address PI_4 = (address)_PI_4_tan;
 522   address QQ_2 = (address)_QQ_2_tan;
 523   address ONE = (address)_ONE_tan;
 524   address TWO_POW_55 = (address)_TWO_POW_55_tan;


1072     0x3ffe, 0x0000, 0xb70f, 0xd068, 0xa6ce, 0xe9dd, 0xbff9, 0x0000, 0x820f, 0x51ce,
1073     0x7d76, 0x9bff, 0x3ff3, 0x0000
1074 };
1075 
1076 ATTRIBUTE_ALIGNED(16) jushort _GP[] =
1077 {
1078     0xaaab, 0xaaaa, 0xaaaa, 0xaaaa, 0xbffd, 0x0000, 0xb62f, 0x0b60, 0x60b6, 0xb60b,
1079     0xbff9, 0x0000, 0xdfa7, 0x08aa, 0x55e0, 0x8ab3, 0xbff6, 0x0000, 0x85a0, 0xa819,
1080     0xbc99, 0xddeb, 0xbff2, 0x0000, 0x7065, 0x6a37, 0x795f, 0xb354, 0xbfef, 0x0000,
1081     0xa8f9, 0x83f1, 0x2ec8, 0x9140, 0xbfec, 0x0000, 0xf3ca, 0x8c96, 0x8e0b, 0xeb6d,
1082     0xbfe8, 0x0000, 0x355b, 0xd910, 0x67c9, 0xbed3, 0xbfe5, 0x0000, 0x286b, 0xb49e,
1083     0xb854, 0x9a98, 0xbfe2, 0x0000, 0x0871, 0x1a2f, 0x6477, 0xfcc4, 0xbfde, 0x0000,
1084     0xa559, 0x1da9, 0xaed2, 0xba76, 0xbfdb, 0x0000, 0x00a3, 0x7fea, 0x9bc3, 0xf205,
1085     0xbfd8, 0x0000
1086 };
1087 
1088 void MacroAssembler::libm_tancot_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
1089   Label B1_1, B1_2, B1_3, B1_4, B1_5, B1_6, B1_7, B1_8, B1_9, B1_10, B1_11, B1_12;
1090   Label B1_13, B1_14, B1_15, B1_16, B1_17, B1_18, B1_19, B1_20, B1_21, B1_22, B1_23;
1091   Label B1_24, B1_25, B1_26, B1_27, B1_28, B1_29, B1_30, B1_31, B1_32, B1_33, B1_34;
1092   Label B1_35, B1_36, B1_37, B1_38, B1_39, B1_40, B1_41, B1_42, B1_43, B1_44, B1_45, B1_46;
1093 
1094   assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
1095 
1096   address L_2il0floatpacket_0 = StubRoutines::x86::_L_2il0floatpacket_0_addr();
1097   address Pi4Inv = StubRoutines::x86::_Pi4Inv_addr();
1098   address Pi4x3 = StubRoutines::x86::_Pi4x3_addr();
1099   address Pi4x4 = StubRoutines::x86::_Pi4x4_addr();
1100   address ones = StubRoutines::x86::_ones_addr();
1101   address TP = (address)_TP;
1102   address TQ = (address)_TQ;
1103   address GP = (address)_GP;
1104 
1105   bind(B1_1);
1106   push(ebp);
1107   movl(ebp, esp);
1108   andl(esp, -64);
1109   push(esi);
1110   push(edi);
1111   push(ebx);
1112   subl(esp, 52);


1949     0x3fafa8aeUL, 0x8c5b2da2UL, 0xbfb936bbUL, 0x4e88f7a5UL, 0xbc587d05UL,
1950     0x00000000UL, 0x3ff00000UL, 0xa8935dd9UL, 0x3f83dde2UL, 0x00000000UL,
1951     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x6dc9c883UL, 0x3fe45f30UL,
1952     0x6dc9c883UL, 0x40245f30UL, 0x00000000UL, 0x43780000UL, 0x00000000UL,
1953     0x43380000UL, 0x54444000UL, 0x3fb921fbUL, 0x54440000UL, 0x3fb921fbUL,
1954     0x67674000UL, 0xbd32e7b9UL, 0x4c4c0000UL, 0x3d468c23UL, 0x3707344aUL,
1955     0x3aa8a2e0UL, 0x03707345UL, 0x3ae98a2eUL, 0x00000000UL, 0x80000000UL,
1956     0x00000000UL, 0x80000000UL, 0x676733afUL, 0x3d32e7b9UL, 0x00000000UL,
1957     0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL,
1958     0x00000000UL, 0x7ff00000UL, 0x00000000UL, 0x00000000UL, 0xfffc0000UL,
1959     0xffffffffUL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x43600000UL,
1960     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x3c800000UL, 0x00000000UL,
1961     0x00000000UL, 0x00000000UL, 0x3ca00000UL, 0x00000000UL, 0x00000000UL,
1962     0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL, 0x00000000UL,
1963     0x40300000UL, 0x00000000UL, 0x3ff00000UL
1964 };
1965 
1966 void MacroAssembler::fast_tan(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
1967 
1968   Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
1969   Label L_2TAG_PACKET_4_0_2, L_2TAG_PACKET_5_0_2, L_2TAG_PACKET_6_0_2, L_2TAG_PACKET_7_0_2;
1970   Label L_2TAG_PACKET_8_0_2, L_2TAG_PACKET_9_0_2, L_2TAG_PACKET_10_0_2, L_2TAG_PACKET_11_0_2;
1971   Label L_2TAG_PACKET_12_0_2, L_2TAG_PACKET_13_0_2, B1_3, B1_5, start;
1972 
1973   assert_different_registers(tmp, eax, ecx, edx);
1974 
1975   address static_const_table_tan = (address)_static_const_table_tan;
1976 
1977   bind(start);
1978   subl(rsp, 120);
1979   movl(Address(rsp, 56), tmp);
1980   lea(tmp, ExternalAddress(static_const_table_tan));
1981   movsd(xmm0, Address(rsp, 128));
1982   pextrw(eax, xmm0, 3);
1983   andl(eax, 32767);
1984   subl(eax, 14368);
1985   cmpl(eax, 2216);
1986   jcc(Assembler::above, L_2TAG_PACKET_0_0_2);
1987   movdqu(xmm5, Address(tmp, 5840));
1988   movdqu(xmm6, Address(tmp, 5856));
1989   unpcklpd(xmm0, xmm0);
1990   movdqu(xmm4, Address(tmp, 5712));
1991   andpd(xmm4, xmm0);




 484 ATTRIBUTE_ALIGNED(8) juint _TWO_POW_55_tan[] =
 485 {
 486     0x00000000UL, 0x43600000UL
 487 };
 488 
 489 ATTRIBUTE_ALIGNED(4) juint _TWO_POW_M55_tan[] =
 490 {
 491     0x00000000UL, 0x3c800000UL
 492 };
 493 
 494 ATTRIBUTE_ALIGNED(4) juint _NEG_ZERO_tan[] =
 495 {
 496     0x00000000UL, 0x80000000UL
 497 };
 498 
 499 void MacroAssembler::fast_tan(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register r8, Register r9, Register r10, Register r11) {
 500 
 501   Label L_2TAG_PACKET_0_0_1, L_2TAG_PACKET_1_0_1, L_2TAG_PACKET_2_0_1, L_2TAG_PACKET_3_0_1;
 502   Label L_2TAG_PACKET_4_0_1, L_2TAG_PACKET_5_0_1, L_2TAG_PACKET_6_0_1, L_2TAG_PACKET_7_0_1;
 503   Label L_2TAG_PACKET_8_0_1, L_2TAG_PACKET_9_0_1, L_2TAG_PACKET_10_0_1, L_2TAG_PACKET_11_0_1;
 504   Label L_2TAG_PACKET_12_0_1, L_2TAG_PACKET_13_0_1, L_2TAG_PACKET_14_0_1, B1_2, B1_4, start;
 505 
 506   address ONEHALF = (address)_ONEHALF_tan;
 507   address MUL16 = (address)_MUL16;
 508   address sign_mask = (address)_sign_mask_tan;
 509   address PI32INV = (address)_PI32INV_tan;
 510   address P_1 = (address)_P_1_tan;
 511   address P_2 = (address)_P_2_tan;
 512   address P_3 = (address)_P_3_tan;
 513   address Ctable = (address)_Ctable_tan;
 514   address MASK_35 = (address)_MASK_35_tan;
 515   address Q_11 = (address)_Q_11_tan;
 516   address Q_9 = (address)_Q_9_tan;
 517   address Q_7 = (address)_Q_7_tan;
 518   address Q_5 = (address)_Q_5_tan;
 519   address Q_3 = (address)_Q_3_tan;
 520   address PI_INV_TABLE = (address)_PI_INV_TABLE_tan;
 521   address PI_4 = (address)_PI_4_tan;
 522   address QQ_2 = (address)_QQ_2_tan;
 523   address ONE = (address)_ONE_tan;
 524   address TWO_POW_55 = (address)_TWO_POW_55_tan;


1072     0x3ffe, 0x0000, 0xb70f, 0xd068, 0xa6ce, 0xe9dd, 0xbff9, 0x0000, 0x820f, 0x51ce,
1073     0x7d76, 0x9bff, 0x3ff3, 0x0000
1074 };
1075 
1076 ATTRIBUTE_ALIGNED(16) jushort _GP[] =
1077 {
1078     0xaaab, 0xaaaa, 0xaaaa, 0xaaaa, 0xbffd, 0x0000, 0xb62f, 0x0b60, 0x60b6, 0xb60b,
1079     0xbff9, 0x0000, 0xdfa7, 0x08aa, 0x55e0, 0x8ab3, 0xbff6, 0x0000, 0x85a0, 0xa819,
1080     0xbc99, 0xddeb, 0xbff2, 0x0000, 0x7065, 0x6a37, 0x795f, 0xb354, 0xbfef, 0x0000,
1081     0xa8f9, 0x83f1, 0x2ec8, 0x9140, 0xbfec, 0x0000, 0xf3ca, 0x8c96, 0x8e0b, 0xeb6d,
1082     0xbfe8, 0x0000, 0x355b, 0xd910, 0x67c9, 0xbed3, 0xbfe5, 0x0000, 0x286b, 0xb49e,
1083     0xb854, 0x9a98, 0xbfe2, 0x0000, 0x0871, 0x1a2f, 0x6477, 0xfcc4, 0xbfde, 0x0000,
1084     0xa559, 0x1da9, 0xaed2, 0xba76, 0xbfdb, 0x0000, 0x00a3, 0x7fea, 0x9bc3, 0xf205,
1085     0xbfd8, 0x0000
1086 };
1087 
1088 void MacroAssembler::libm_tancot_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
1089   Label B1_1, B1_2, B1_3, B1_4, B1_5, B1_6, B1_7, B1_8, B1_9, B1_10, B1_11, B1_12;
1090   Label B1_13, B1_14, B1_15, B1_16, B1_17, B1_18, B1_19, B1_20, B1_21, B1_22, B1_23;
1091   Label B1_24, B1_25, B1_26, B1_27, B1_28, B1_29, B1_30, B1_31, B1_32, B1_33, B1_34;
1092   Label B1_35, B1_36, B1_37, B1_38, B1_39, B1_40, B1_43;
1093 
1094   assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
1095 
1096   address L_2il0floatpacket_0 = StubRoutines::x86::_L_2il0floatpacket_0_addr();
1097   address Pi4Inv = StubRoutines::x86::_Pi4Inv_addr();
1098   address Pi4x3 = StubRoutines::x86::_Pi4x3_addr();
1099   address Pi4x4 = StubRoutines::x86::_Pi4x4_addr();
1100   address ones = StubRoutines::x86::_ones_addr();
1101   address TP = (address)_TP;
1102   address TQ = (address)_TQ;
1103   address GP = (address)_GP;
1104 
1105   bind(B1_1);
1106   push(ebp);
1107   movl(ebp, esp);
1108   andl(esp, -64);
1109   push(esi);
1110   push(edi);
1111   push(ebx);
1112   subl(esp, 52);


1949     0x3fafa8aeUL, 0x8c5b2da2UL, 0xbfb936bbUL, 0x4e88f7a5UL, 0xbc587d05UL,
1950     0x00000000UL, 0x3ff00000UL, 0xa8935dd9UL, 0x3f83dde2UL, 0x00000000UL,
1951     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x6dc9c883UL, 0x3fe45f30UL,
1952     0x6dc9c883UL, 0x40245f30UL, 0x00000000UL, 0x43780000UL, 0x00000000UL,
1953     0x43380000UL, 0x54444000UL, 0x3fb921fbUL, 0x54440000UL, 0x3fb921fbUL,
1954     0x67674000UL, 0xbd32e7b9UL, 0x4c4c0000UL, 0x3d468c23UL, 0x3707344aUL,
1955     0x3aa8a2e0UL, 0x03707345UL, 0x3ae98a2eUL, 0x00000000UL, 0x80000000UL,
1956     0x00000000UL, 0x80000000UL, 0x676733afUL, 0x3d32e7b9UL, 0x00000000UL,
1957     0x00000000UL, 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0x00000000UL,
1958     0x00000000UL, 0x7ff00000UL, 0x00000000UL, 0x00000000UL, 0xfffc0000UL,
1959     0xffffffffUL, 0x00000000UL, 0x00000000UL, 0x00000000UL, 0x43600000UL,
1960     0x00000000UL, 0x00000000UL, 0x00000000UL, 0x3c800000UL, 0x00000000UL,
1961     0x00000000UL, 0x00000000UL, 0x3ca00000UL, 0x00000000UL, 0x00000000UL,
1962     0x00000000UL, 0x3fe00000UL, 0x00000000UL, 0x3fe00000UL, 0x00000000UL,
1963     0x40300000UL, 0x00000000UL, 0x3ff00000UL
1964 };
1965 
1966 void MacroAssembler::fast_tan(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ecx, Register edx, Register tmp) {
1967 
1968   Label L_2TAG_PACKET_0_0_2, L_2TAG_PACKET_1_0_2, L_2TAG_PACKET_2_0_2, L_2TAG_PACKET_3_0_2;
1969   Label L_2TAG_PACKET_4_0_2;
1970   Label start;

1971 
1972   assert_different_registers(tmp, eax, ecx, edx);
1973 
1974   address static_const_table_tan = (address)_static_const_table_tan;
1975 
1976   bind(start);
1977   subl(rsp, 120);
1978   movl(Address(rsp, 56), tmp);
1979   lea(tmp, ExternalAddress(static_const_table_tan));
1980   movsd(xmm0, Address(rsp, 128));
1981   pextrw(eax, xmm0, 3);
1982   andl(eax, 32767);
1983   subl(eax, 14368);
1984   cmpl(eax, 2216);
1985   jcc(Assembler::above, L_2TAG_PACKET_0_0_2);
1986   movdqu(xmm5, Address(tmp, 5840));
1987   movdqu(xmm6, Address(tmp, 5856));
1988   unpcklpd(xmm0, xmm0);
1989   movdqu(xmm4, Address(tmp, 5712));
1990   andpd(xmm4, xmm0);


< prev index next >