Skip to content

Commit

Permalink
8218136: minor hotspot adjustments for xlclang++ from xlc16 on AIX
Browse files Browse the repository at this point in the history
Reviewed-by: mdoerr
Backport-of: 8218872
  • Loading branch information
backwaterred authored and TheRealMDoerr committed Apr 11, 2022
1 parent 9b5d972 commit b930441
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 45 deletions.
12 changes: 11 additions & 1 deletion src/hotspot/os/aix/porting_aix.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2013 SAP SE. 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
Expand Down Expand Up @@ -34,7 +34,15 @@
#include "utilities/align.hpp"
#include "utilities/debug.hpp"

// distinguish old xlc and xlclang++, where
// <ibmdemangle.h> is suggested but not found in GA release (might come with a fix)
#if defined(__clang__)
#define DISABLE_DEMANGLE
// #include <ibmdemangle.h>
#else
#include <demangle.h>
#endif

#include <sys/debug.h>
#include <pthread.h>
#include <ucontext.h>
Expand Down Expand Up @@ -237,6 +245,7 @@ bool AixSymbols::get_function_name (
p_name[i] = '\0';

// If it is a C++ name, try and demangle it using the Demangle interface (see demangle.h).
#ifndef DISABLE_DEMANGLE
if (demangle) {
char* rest;
Name* const name = Demangle(p_name, rest);
Expand All @@ -249,6 +258,7 @@ bool AixSymbols::get_function_name (
delete name;
}
}
#endif
} else {
strncpy(p_name, "<nameless function>", namelen-1);
p_name[namelen-1] = '\0';
Expand Down
2 changes: 1 addition & 1 deletion src/hotspot/os_cpu/aix_ppc/prefetch_aix_ppc.inline.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ inline void Prefetch::read(void *loc, intx interval) {
}

inline void Prefetch::write(void *loc, intx interval) {
#if !defined(USE_XLC_PREFETCH_WRITE_BUILTIN)
#if !defined(USE_XLC_BUILTINS)
__asm__ __volatile__ (
" dcbtst 0, %0 \n"
:
Expand Down
2 changes: 1 addition & 1 deletion src/hotspot/share/runtime/arguments.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3904,7 +3904,7 @@ jint Arguments::parse(const JavaVMInitArgs* initial_cmd_args) {
#endif

#if defined(AIX)
UNSUPPORTED_OPTION(AllocateHeapAt);
UNSUPPORTED_OPTION_NULL(AllocateHeapAt);
#endif

ArgumentsExt::report_unsupported_options();
Expand Down
14 changes: 13 additions & 1 deletion src/hotspot/share/runtime/arguments.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -665,4 +665,16 @@ do { \
} \
} while(0)

#endif // SHARE_VM_RUNTIME_ARGUMENTS_HPP
// similar to UNSUPPORTED_OPTION but sets flag to NULL
#define UNSUPPORTED_OPTION_NULL(opt) \
do { \
if (opt) { \
if (FLAG_IS_CMDLINE(opt)) { \
warning("-XX flag " #opt " not supported in this VM"); \
} \
FLAG_SET_DEFAULT(opt, NULL); \
} \
} while(0)


#endif // SHARE_RUNTIME_ARGUMENTS_HPP
56 changes: 15 additions & 41 deletions src/hotspot/share/utilities/globalDefinitions_xlc.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2017 SAP SE. All rights reserved.
* 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
Expand Down Expand Up @@ -53,49 +53,30 @@

// 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
// XLC V10 and higher provide the prototype for __dcbtst (void *);
#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
// 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>
// (see jmv_aix.h).
#ifdef AIX
#include <dirent.h>
#ifdef _LP64
#undef NULL
#define NULL 0L
#else
#ifndef NULL
#define NULL 0
#endif
#include <dirent.h>
#ifdef _LP64
#undef NULL
#define NULL 0L
#else
#ifndef NULL
#define NULL 0
#endif
#endif // AIX
#endif

// Compiler-specific primitive types
// All defs of int (uint16_6 etc) are defined in AIX' /usr/include/stdint.h
Expand All @@ -108,21 +89,14 @@ 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); }


Expand Down

1 comment on commit b930441

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.