< prev index next >

src/hotspot/share/utilities/globalDefinitions_xlc.hpp

Print this page
rev 53569 : 8218136: minor hotspot adjustments for xlclang++ from xlc16 on AIX

*** 1,8 **** /* * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved. ! * Copyright (c) 2012, 2017 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,8 ---- /* * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved. ! * Copyright (c) 2012, 2019 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 49,103 **** #include <limits.h> #include <errno.h> #include <stdint.h> // Use XLC compiler builtins instead of inline assembler #define USE_XLC_BUILTINS #ifdef USE_XLC_BUILTINS #include <builtins.h> ! #if __IBMCPP__ < 1000 ! // the funtion prototype for __dcbtst(void *) is missing in XLC V8.0 ! // I could compile a little test, where I provided the prototype. ! // The generated code was correct there. This is the prototype: ! // extern "builtin" void __dcbtst (void *); ! // For now we don't make use of it when compiling with XLC V8.0 ! #else ! // __IBMCPP__ >= 1000 ! // XLC V10 provides the prototype for __dcbtst (void *); ! #define USE_XLC_PREFETCH_WRITE_BUILTIN ! #endif #endif // USE_XLC_BUILTINS // NULL vs NULL_WORD: ! // On Linux NULL is defined as a special type '__null'. Assigning __null to ! // integer variable will cause gcc warning. Use NULL_WORD in places where a ! // pointer is stored as integer value. On some platforms, sizeof(intptr_t) > ! // sizeof(void*), so here we want something which is integer type, but has the ! // same size as a pointer. ! #ifdef __GNUC__ ! #error XLC and __GNUC__? ! #else ! #define NULL_WORD NULL ! #endif // AIX also needs a 64 bit NULL to work as a null address pointer. // Most system includes on AIX would define it as an int 0 if not already defined with one // exception: /usr/include/dirent.h will unconditionally redefine NULL to int 0 again. // In this case you need to copy the following defines to a position after #include <dirent.h> ! // (see jmv_aix.h). ! #ifdef AIX ! #include <dirent.h> ! #ifdef _LP64 #undef NULL #define NULL 0L ! #else #ifndef NULL #define NULL 0 #endif ! #endif ! #endif // AIX // Compiler-specific primitive types // All defs of int (uint16_6 etc) are defined in AIX' /usr/include/stdint.h // Additional Java basic types --- 49,95 ---- #include <limits.h> #include <errno.h> #include <stdint.h> + // __IBMCPP__ is not defined any more with xlclang++ + #ifdef __IBMCPP__ + #if __IBMCPP__ < 1200 + #error "xlc < 12 not supported" + #endif + #endif + + #ifndef _AIX + #error "missing AIX-specific definition _AIX" + #endif + // Use XLC compiler builtins instead of inline assembler #define USE_XLC_BUILTINS + #ifdef USE_XLC_BUILTINS #include <builtins.h> ! // XLC V10 and higher provide the prototype for __dcbtst (void *); #endif // USE_XLC_BUILTINS // NULL vs NULL_WORD: ! // Some platform/tool-chain combinations can't assign NULL to an integer ! // type so we define NULL_WORD to use in those contexts. For xlc they are the same. ! #define NULL_WORD NULL // AIX also needs a 64 bit NULL to work as a null address pointer. // Most system includes on AIX would define it as an int 0 if not already defined with one // exception: /usr/include/dirent.h will unconditionally redefine NULL to int 0 again. // In this case you need to copy the following defines to a position after #include <dirent.h> ! #include <dirent.h> ! #ifdef _LP64 #undef NULL #define NULL 0L ! #else #ifndef NULL #define NULL 0 #endif ! #endif // Compiler-specific primitive types // All defs of int (uint16_6 etc) are defined in AIX' /usr/include/stdint.h // Additional Java basic types
*** 106,130 **** typedef uint16_t jushort; typedef uint32_t juint; typedef uint64_t julong; // checking for nanness - #ifdef AIX inline int g_isnan(float f) { return isnan(f); } inline int g_isnan(double f) { return isnan(f); } - #else - #error "missing platform-specific definition here" - #endif // Checking for finiteness - inline int g_isfinite(jfloat f) { return finite(f); } inline int g_isfinite(jdouble f) { return finite(f); } - // Wide characters - inline int wcslen(const jchar* x) { return wcslen((const wchar_t*)x); } // Formatting. #ifdef _LP64 --- 98,115 ----
< prev index next >