< prev index next >
src/hotspot/cpu/aarch64/immediate_aarch64.cpp
Print this page
rev 60625 : 8248676: AArch64: Add workaround for LITable constructor
Reviewed-by: aph
Contributed-by: mbeckwit, luhenry, burban
rev 60629 : 8248656: Add Windows AArch64 platform support code
Reviewed-by:
Contributed-by: mbeckwit, luhenry, burban
*** 22,31 ****
--- 22,34 ----
*
*/
#include <stdlib.h>
#include <stdint.h>
+
+ #include "precompiled.hpp"
+ #include "utilities/globalDefinitions.hpp"
#include "immediate_aarch64.hpp"
// there are at most 2^13 possible logical immediate encodings
// however, some combinations of immr and imms are invalid
static const unsigned LI_TABLE_SIZE = (1 << 13);
*** 242,252 ****
return 1;
}
// constructor to initialise the lookup tables
! static void initLITables() __attribute__ ((constructor));
static void initLITables()
{
li_table_entry_count = 0;
for (unsigned index = 0; index < LI_TABLE_SIZE; index++) {
uint32_t N = uimm(index, 12, 12);
--- 245,258 ----
return 1;
}
// constructor to initialise the lookup tables
! static void initLITables();
! // Use an empty struct with a construtor as MSVC doesn't support `__attribute__ ((constructor))`
! // See https://stackoverflow.com/questions/1113409/attribute-constructor-equivalent-in-vc
! static struct initLITables_t { initLITables_t(void) { initLITables(); } } _initLITables;
static void initLITables()
{
li_table_entry_count = 0;
for (unsigned index = 0; index < LI_TABLE_SIZE; index++) {
uint32_t N = uimm(index, 12, 12);
< prev index next >