< prev index next >

src/hotspot/cpu/aarch64/stubRoutines_aarch64.cpp

Print this page
8248238: Adding Windows support to OpenJDK on AArch64

Summary: Adding Windows support for AArch64

Contributed-by: Ludovic Henry <luhenry@microsoft.com>, Monica Beckwith <monica.beckwith@microsoft.com>
Reviewed-by:

*** 60,70 **** bool StubRoutines::aarch64::_completed = false; /** * crc_table[] from jdk/src/share/native/java/util/zip/zlib-1.2.5/crc32.h */ ! juint StubRoutines::aarch64::_crc_table[] ATTRIBUTE_ALIGNED(4096) = { // Table 0 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, --- 60,70 ---- bool StubRoutines::aarch64::_completed = false; /** * crc_table[] from jdk/src/share/native/java/util/zip/zlib-1.2.5/crc32.h */ ! ATTRIBUTE_ALIGNED(4096) juint StubRoutines::aarch64::_crc_table[] = { // Table 0 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
*** 287,301 **** 0x02D578EDUL, 0x7DAEED62UL, // word swap 0xD502ED78UL, 0xAE7D62EDUL, // byte swap of word swap }; // Accumulation coefficients for adler32 upper 16 bits ! jubyte StubRoutines::aarch64::_adler_table[] __attribute__ ((aligned(64))) = { 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; ! juint StubRoutines::aarch64::_npio2_hw[] __attribute__ ((aligned(64))) = { // first, various coefficient values: 0.5, invpio2, pio2_1, pio2_1t, pio2_2, // pio2_2t, pio2_3, pio2_3t // This is a small optimization wich keeping double[8] values in int[] table // to have less address calculation instructions // --- 287,301 ---- 0x02D578EDUL, 0x7DAEED62UL, // word swap 0xD502ED78UL, 0xAE7D62EDUL, // byte swap of word swap }; // Accumulation coefficients for adler32 upper 16 bits ! ATTRIBUTE_ALIGNED(64) jubyte StubRoutines::aarch64::_adler_table[] = { 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; ! ATTRIBUTE_ALIGNED(64) juint StubRoutines::aarch64::_npio2_hw[] = { // first, various coefficient values: 0.5, invpio2, pio2_1, pio2_1t, pio2_2, // pio2_2t, pio2_3, pio2_3t // This is a small optimization wich keeping double[8] values in int[] table // to have less address calculation instructions //
*** 323,359 **** 0x404858EB, 0x404921FB }; // Coefficients for sin(x) polynomial approximation: S1..S6. // See kernel_sin comments in macroAssembler_aarch64_trig.cpp for details ! jdouble StubRoutines::aarch64::_dsin_coef[] __attribute__ ((aligned(64))) = { ! -1.66666666666666324348e-01, // 0xBFC5555555555549 ! 8.33333333332248946124e-03, // 0x3F8111111110F8A6 ! -1.98412698298579493134e-04, // 0xBF2A01A019C161D5 ! 2.75573137070700676789e-06, // 0x3EC71DE357B1FE7D ! -2.50507602534068634195e-08, // 0xBE5AE5E68A2B9CEB ! 1.58969099521155010221e-10 // 0x3DE5D93A5ACFD57C }; // Coefficients for cos(x) polynomial approximation: C1..C6. // See kernel_cos comments in macroAssembler_aarch64_trig.cpp for details ! jdouble StubRoutines::aarch64::_dcos_coef[] __attribute__ ((aligned(64))) = { ! 4.16666666666666019037e-02, // c0x3FA555555555554C ! -1.38888888888741095749e-03, // 0xBF56C16C16C15177 ! 2.48015872894767294178e-05, // 0x3EFA01A019CB1590 ! -2.75573143513906633035e-07, // 0xBE927E4F809C52AD ! 2.08757232129817482790e-09, // 0x3E21EE9EBDB4B1C4 ! -1.13596475577881948265e-11 // 0xBDA8FAE9BE8838D4 }; // Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi. // Used in cases of very large argument. 396 hex digits is enough to support // required precision. // Converted to double to avoid unnecessary conversion in code // NOTE: table looks like original int table: {0xA2F983, 0x6E4E44,...} with // only (double) conversion added ! jdouble StubRoutines::aarch64::_two_over_pi[] __attribute__ ((aligned(64))) = { (double)0xA2F983, (double)0x6E4E44, (double)0x1529FC, (double)0x2757D1, (double)0xF534DD, (double)0xC0DB62, (double)0x95993C, (double)0x439041, (double)0xFE5163, (double)0xABDEBB, (double)0xC561B7, (double)0x246E3A, (double)0x424DD2, (double)0xE00649, (double)0x2EEA09, (double)0xD1921C, (double)0xFE1DEB, (double)0x1CB129, (double)0xA73EE8, (double)0x8235F5, (double)0x2EBB44, (double)0x84E99C, (double)0x7026B4, (double)0x5F7E41, (double)0x3991D6, (double)0x398353, (double)0x39F49C, (double)0x845F8B, (double)0xBDF928, (double)0x3B1FF8, --- 323,359 ---- 0x404858EB, 0x404921FB }; // Coefficients for sin(x) polynomial approximation: S1..S6. // See kernel_sin comments in macroAssembler_aarch64_trig.cpp for details ! ATTRIBUTE_ALIGNED(64) julong StubRoutines::aarch64::_dsin_coef[] = { ! 0xBFC5555555555549, // 1.66666666666666324348e-01 ! 0x3F8111111110F8A6, // 8.33333333332248946124e-03 ! 0xBF2A01A019C161D5, // -1.98412698298579493134e-04 ! 0x3EC71DE357B1FE7D, // 2.75573137070700676789e-06 ! 0xBE5AE5E68A2B9CEB, // -2.50507602534068634195e-08 ! 0x3DE5D93A5ACFD57C // 1.58969099521155010221e-10 }; // Coefficients for cos(x) polynomial approximation: C1..C6. // See kernel_cos comments in macroAssembler_aarch64_trig.cpp for details ! ATTRIBUTE_ALIGNED(64) julong StubRoutines::aarch64::_dcos_coef[] = { ! 0x3FA555555555554C, // 4.16666666666666019037e-02 ! 0xBF56C16C16C15177, // -1.38888888888741095749e-03 ! 0x3EFA01A019CB1590, // 2.48015872894767294178e-05 ! 0xBE927E4F809C52AD, // -2.75573143513906633035e-07 ! 0x3E21EE9EBDB4B1C4, // 2.08757232129817482790e-09 ! 0xBDA8FAE9BE8838D4 // -1.13596475577881948265e-11 }; // Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi. // Used in cases of very large argument. 396 hex digits is enough to support // required precision. // Converted to double to avoid unnecessary conversion in code // NOTE: table looks like original int table: {0xA2F983, 0x6E4E44,...} with // only (double) conversion added ! ATTRIBUTE_ALIGNED(64) jdouble StubRoutines::aarch64::_two_over_pi[] = { (double)0xA2F983, (double)0x6E4E44, (double)0x1529FC, (double)0x2757D1, (double)0xF534DD, (double)0xC0DB62, (double)0x95993C, (double)0x439041, (double)0xFE5163, (double)0xABDEBB, (double)0xC561B7, (double)0x246E3A, (double)0x424DD2, (double)0xE00649, (double)0x2EEA09, (double)0xD1921C, (double)0xFE1DEB, (double)0x1CB129, (double)0xA73EE8, (double)0x8235F5, (double)0x2EBB44, (double)0x84E99C, (double)0x7026B4, (double)0x5F7E41, (double)0x3991D6, (double)0x398353, (double)0x39F49C, (double)0x845F8B, (double)0xBDF928, (double)0x3B1FF8,
*** 364,378 **** (double)0x91615E, (double)0xE61B08, (double)0x659985, (double)0x5F14A0, (double)0x68408D, (double)0xFFD880, (double)0x4D7327, (double)0x310606, (double)0x1556CA, (double)0x73A8C9, (double)0x60E27B, (double)0xC08C6B, }; // Pi over 2 value ! jdouble StubRoutines::aarch64::_pio2[] __attribute__ ((aligned(64))) = { ! 1.57079625129699707031e+00, // 0x3FF921FB40000000 ! 7.54978941586159635335e-08, // 0x3E74442D00000000 ! 5.39030252995776476554e-15, // 0x3CF8469880000000 ! 3.28200341580791294123e-22, // 0x3B78CC5160000000 ! 1.27065575308067607349e-29, // 0x39F01B8380000000 ! 1.22933308981111328932e-36, // 0x387A252040000000 ! 2.73370053816464559624e-44, // 0x36E3822280000000 ! 2.16741683877804819444e-51, // 0x3569F31D00000000 }; --- 364,378 ---- (double)0x91615E, (double)0xE61B08, (double)0x659985, (double)0x5F14A0, (double)0x68408D, (double)0xFFD880, (double)0x4D7327, (double)0x310606, (double)0x1556CA, (double)0x73A8C9, (double)0x60E27B, (double)0xC08C6B, }; // Pi over 2 value ! ATTRIBUTE_ALIGNED(64) julong StubRoutines::aarch64::_pio2[] = { ! 0x3FF921FB40000000, // 1.57079625129699707031e+00 ! 0x3E74442D00000000, // 7.54978941586159635335e-08 ! 0x3CF8469880000000, // 5.39030252995776476554e-15 ! 0x3B78CC5160000000, // 3.28200341580791294123e-22 ! 0x39F01B8380000000, // 1.27065575308067607349e-29 ! 0x387A252040000000, // 1.22933308981111328932e-36 ! 0x36E3822280000000, // 2.73370053816464559624e-44 ! 0x3569F31D00000000 // 2.16741683877804819444e-51 };
< prev index next >