366 ATTRIBUTE_ALIGNED(8) juint _TWO_POW_M55[] =
367 {
368 0x00000000UL, 0x3c800000UL
369 };
370
371 ATTRIBUTE_ALIGNED(8) juint StubRoutines::x86::_P_1[] =
372 {
373 0x54400000UL, 0x3fb921fbUL
374 };
375
376 ATTRIBUTE_ALIGNED(8) juint StubRoutines::x86::_NEG_ZERO[] =
377 {
378 0x00000000UL, 0x80000000UL
379 };
380
381 void MacroAssembler::fast_sin(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ebx, Register ecx, Register edx, Register tmp1, Register tmp2, Register tmp3, Register tmp4) {
382 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;
383 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;
384 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;
385 Label L_2TAG_PACKET_13_0_1, L_2TAG_PACKET_14_0_1;
386 Label L_2TAG_PACKET_12_0_1, B1_1, B1_2, B1_4, start;
387
388 assert_different_registers(tmp1, tmp2, tmp3, tmp4, eax, ebx, ecx, edx);
389 address ONEHALF = StubRoutines::x86::_ONEHALF_addr();
390 address P_2 = StubRoutines::x86::_P_2_addr();
391 address SC_4 = StubRoutines::x86::_SC_4_addr();
392 address Ctable = StubRoutines::x86::_Ctable_addr();
393 address SC_2 = StubRoutines::x86::_SC_2_addr();
394 address SC_3 = StubRoutines::x86::_SC_3_addr();
395 address SC_1 = StubRoutines::x86::_SC_1_addr();
396 address PI_INV_TABLE = StubRoutines::x86::_PI_INV_TABLE_addr();
397 address PI_4 = (address)StubRoutines::x86::_PI_4_addr();
398 address PI32INV = (address)StubRoutines::x86::_PI32INV_addr();
399 address SHIFTER = (address)_SHIFTER;
400 address SIGN_MASK = (address)StubRoutines::x86::_SIGN_MASK_addr();
401 address P_3 = (address)StubRoutines::x86::_P_3_addr();
402 address ALL_ONES = (address)_ALL_ONES;
403 address TWO_POW_55 = (address)_TWO_POW_55;
404 address TWO_POW_M55 = (address)_TWO_POW_M55;
405 address P_1 = (address)StubRoutines::x86::_P_1_addr();
406 address NEG_ZERO = (address)StubRoutines::x86::_NEG_ZERO_addr();
1656 };
1657
1658 ATTRIBUTE_ALIGNED(16) jushort _CP[] =
1659 {
1660 0x0000, 0x0000, 0x0000, 0x8000, 0xbffe, 0x0000, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa,
1661 0x3ffa, 0x0000, 0x9c2f, 0x0b60, 0x60b6, 0xb60b, 0xbff5, 0x0000, 0xf024, 0x0cac,
1662 0x00d0, 0xd00d, 0x3fef, 0x0000, 0x03fe, 0x3f65, 0x7dbb, 0x93f2, 0xbfe9, 0x0000,
1663 0xd84d, 0xadee, 0xc698, 0x8f76, 0x3fe2, 0x0000, 0xdaba, 0xfe79, 0xea36, 0xc9c9,
1664 0xbfda, 0x0000, 0x3ac6, 0x0ba0, 0x07ce, 0xd585, 0x3fd2, 0x0000
1665 };
1666
1667 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_ones[] =
1668 {
1669 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xbff00000UL
1670 };
1671
1672 void MacroAssembler::libm_sincos_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
1673 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;
1674 Label B1_13, B1_14, B1_15, B1_16, B1_17, B1_18, B1_19, B1_20, B1_21, B1_22, B1_23;
1675 Label B1_24, B1_25, B1_26, B1_27, B1_28, B1_29, B1_30, B1_31, B1_32, B1_33, B1_34;
1676 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;
1677
1678 assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
1679
1680 address L_2il0floatpacket_0 = StubRoutines::x86::_L_2il0floatpacket_0_addr();
1681 address Pi4Inv = StubRoutines::x86::_Pi4Inv_addr();
1682 address Pi4x3 = StubRoutines::x86::_Pi4x3_addr();
1683 address Pi4x4 = StubRoutines::x86::_Pi4x4_addr();
1684 address ones = StubRoutines::x86::_ones_addr();
1685 address CP = (address)_CP;
1686 address SP = (address)_SP;
1687
1688 bind(B1_1);
1689 push(ebp);
1690 movl(ebp, esp);
1691 andl(esp, -64);
1692 push(esi);
1693 push(edi);
1694 push(ebx);
1695 subl(esp, 52);
1696 movl(eax, Address(ebp, 16));
|
366 ATTRIBUTE_ALIGNED(8) juint _TWO_POW_M55[] =
367 {
368 0x00000000UL, 0x3c800000UL
369 };
370
371 ATTRIBUTE_ALIGNED(8) juint StubRoutines::x86::_P_1[] =
372 {
373 0x54400000UL, 0x3fb921fbUL
374 };
375
376 ATTRIBUTE_ALIGNED(8) juint StubRoutines::x86::_NEG_ZERO[] =
377 {
378 0x00000000UL, 0x80000000UL
379 };
380
381 void MacroAssembler::fast_sin(XMMRegister xmm0, XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, XMMRegister xmm5, XMMRegister xmm6, XMMRegister xmm7, Register eax, Register ebx, Register ecx, Register edx, Register tmp1, Register tmp2, Register tmp3, Register tmp4) {
382 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;
383 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;
384 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;
385 Label L_2TAG_PACKET_13_0_1, L_2TAG_PACKET_14_0_1;
386 Label L_2TAG_PACKET_12_0_1, B1_4, start;
387
388 assert_different_registers(tmp1, tmp2, tmp3, tmp4, eax, ebx, ecx, edx);
389 address ONEHALF = StubRoutines::x86::_ONEHALF_addr();
390 address P_2 = StubRoutines::x86::_P_2_addr();
391 address SC_4 = StubRoutines::x86::_SC_4_addr();
392 address Ctable = StubRoutines::x86::_Ctable_addr();
393 address SC_2 = StubRoutines::x86::_SC_2_addr();
394 address SC_3 = StubRoutines::x86::_SC_3_addr();
395 address SC_1 = StubRoutines::x86::_SC_1_addr();
396 address PI_INV_TABLE = StubRoutines::x86::_PI_INV_TABLE_addr();
397 address PI_4 = (address)StubRoutines::x86::_PI_4_addr();
398 address PI32INV = (address)StubRoutines::x86::_PI32INV_addr();
399 address SHIFTER = (address)_SHIFTER;
400 address SIGN_MASK = (address)StubRoutines::x86::_SIGN_MASK_addr();
401 address P_3 = (address)StubRoutines::x86::_P_3_addr();
402 address ALL_ONES = (address)_ALL_ONES;
403 address TWO_POW_55 = (address)_TWO_POW_55;
404 address TWO_POW_M55 = (address)_TWO_POW_M55;
405 address P_1 = (address)StubRoutines::x86::_P_1_addr();
406 address NEG_ZERO = (address)StubRoutines::x86::_NEG_ZERO_addr();
1656 };
1657
1658 ATTRIBUTE_ALIGNED(16) jushort _CP[] =
1659 {
1660 0x0000, 0x0000, 0x0000, 0x8000, 0xbffe, 0x0000, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa,
1661 0x3ffa, 0x0000, 0x9c2f, 0x0b60, 0x60b6, 0xb60b, 0xbff5, 0x0000, 0xf024, 0x0cac,
1662 0x00d0, 0xd00d, 0x3fef, 0x0000, 0x03fe, 0x3f65, 0x7dbb, 0x93f2, 0xbfe9, 0x0000,
1663 0xd84d, 0xadee, 0xc698, 0x8f76, 0x3fe2, 0x0000, 0xdaba, 0xfe79, 0xea36, 0xc9c9,
1664 0xbfda, 0x0000, 0x3ac6, 0x0ba0, 0x07ce, 0xd585, 0x3fd2, 0x0000
1665 };
1666
1667 ATTRIBUTE_ALIGNED(16) juint StubRoutines::x86::_ones[] =
1668 {
1669 0x00000000UL, 0x3ff00000UL, 0x00000000UL, 0xbff00000UL
1670 };
1671
1672 void MacroAssembler::libm_sincos_huge(XMMRegister xmm0, XMMRegister xmm1, Register eax, Register ecx, Register edx, Register ebx, Register esi, Register edi, Register ebp, Register esp) {
1673 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;
1674 Label B1_13, B1_14, B1_15, B1_16, B1_17, B1_18, B1_19, B1_20, B1_21, B1_22, B1_23;
1675 Label B1_24, B1_25, B1_26, B1_27, B1_28, B1_29, B1_30, B1_31, B1_32, B1_33, B1_34;
1676 Label B1_35, B1_36, B1_37, B1_38, B1_39, B1_40, B1_41, B1_42, B1_43, B1_46;
1677
1678 assert_different_registers(ebx, eax, ecx, edx, esi, edi, ebp, esp);
1679
1680 address L_2il0floatpacket_0 = StubRoutines::x86::_L_2il0floatpacket_0_addr();
1681 address Pi4Inv = StubRoutines::x86::_Pi4Inv_addr();
1682 address Pi4x3 = StubRoutines::x86::_Pi4x3_addr();
1683 address Pi4x4 = StubRoutines::x86::_Pi4x4_addr();
1684 address ones = StubRoutines::x86::_ones_addr();
1685 address CP = (address)_CP;
1686 address SP = (address)_SP;
1687
1688 bind(B1_1);
1689 push(ebp);
1690 movl(ebp, esp);
1691 andl(esp, -64);
1692 push(esi);
1693 push(edi);
1694 push(ebx);
1695 subl(esp, 52);
1696 movl(eax, Address(ebp, 16));
|