1 /*
  2  * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
  3  * Copyright (c) 2016, 2018 SAP SE. All rights reserved.
  4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  5  *
  6  * This code is free software; you can redistribute it and/or modify it
  7  * under the terms of the GNU General Public License version 2 only, as
  8  * published by the Free Software Foundation.
  9  *
 10  * This code is distributed in the hope that it will be useful, but WITHOUT
 11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 13  * version 2 for more details (a copy is included in the LICENSE file that
 14  * accompanied this code).
 15  *
 16  * You should have received a copy of the GNU General Public License version
 17  * 2 along with this work; if not, write to the Free Software Foundation,
 18  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 19  *
 20  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 21  * or visit www.oracle.com if you need additional information or have any
 22  * questions.
 23  *
 24  */
 25 
 26 #ifndef CPU_S390_GLOBALS_S390_HPP
 27 #define CPU_S390_GLOBALS_S390_HPP
 28 
 29 #include "utilities/globalDefinitions.hpp"
 30 #include "utilities/macros.hpp"
 31 
 32 // Sets the default values for platform dependent flags used by the runtime system.
 33 // (see globals.hpp)
 34 // Sorted according to sparc.
 35 
 36 define_pd_global(bool,  ImplicitNullChecks,          true);  // Generate code for implicit null checks.
 37 define_pd_global(bool,  TrapBasedNullChecks,         true);
 38 define_pd_global(bool,  UncommonNullCast,            true);  // Uncommon-trap NULLs passed to check cast.
 39 
 40 define_pd_global(uintx, CodeCacheSegmentSize,        256);
 41 // This shall be at least 32 for proper branch target alignment.
 42 // Ideally, this is 256 (cache line size). This keeps code end data
 43 // on separate lines. But we reduced it to 64 since 256 increased
 44 // code size significantly by padding nops between IVC and second UEP.
 45 define_pd_global(intx,  CodeEntryAlignment,          64);
 46 define_pd_global(intx,  OptoLoopAlignment,           2);
 47 define_pd_global(intx,  InlineFrequencyCount,        100);
 48 define_pd_global(intx,  InlineSmallCode,             2000);
 49 
 50 #define DEFAULT_STACK_YELLOW_PAGES   (2)
 51 #define DEFAULT_STACK_RED_PAGES      (1)
 52 // Java_java_net_SocketOutputStream_socketWrite0() uses a 64k buffer on the
 53 // stack. To pass stack overflow tests we need 20 shadow pages.
 54 #define DEFAULT_STACK_SHADOW_PAGES   (20 DEBUG_ONLY(+4))
 55 #define DEFAULT_STACK_RESERVED_PAGES (1)
 56 
 57 #define MIN_STACK_YELLOW_PAGES     DEFAULT_STACK_YELLOW_PAGES
 58 #define MIN_STACK_RED_PAGES        DEFAULT_STACK_RED_PAGES
 59 #define MIN_STACK_SHADOW_PAGES     DEFAULT_STACK_SHADOW_PAGES
 60 #define MIN_STACK_RESERVED_PAGES   (0)
 61 
 62 define_pd_global(intx,  StackYellowPages,            DEFAULT_STACK_YELLOW_PAGES);
 63 define_pd_global(intx,  StackRedPages,               DEFAULT_STACK_RED_PAGES);
 64 define_pd_global(intx,  StackShadowPages,            DEFAULT_STACK_SHADOW_PAGES);
 65 define_pd_global(intx,  StackReservedPages,          DEFAULT_STACK_RESERVED_PAGES);
 66 
 67 define_pd_global(bool, RewriteBytecodes,     true);
 68 define_pd_global(bool, RewriteFrequentPairs, true);
 69 
 70 define_pd_global(bool, PreserveFramePointer, false);
 71 
 72 // GC Ergo Flags
 73 define_pd_global(uintx, TypeProfileLevel, 111);
 74 
 75 define_pd_global(bool, CompactStrings, true);
 76 
 77 // 8146801 (Short Array Allocation): No performance work done here yet.
 78 define_pd_global(intx, InitArrayShortSize, 1*BytesPerLong);
 79 
 80 define_pd_global(bool, ThreadLocalHandshakes, true);
 81 
 82 #define ARCH_FLAGS(develop,      \
 83                    product,      \
 84                    diagnostic,   \
 85                    experimental, \
 86                    notproduct,   \
 87                    range,        \
 88                    constraint,   \
 89                    writeable)    \
 90                                                                               \
 91   /* Reoptimize code-sequences of calls at runtime, e.g. replace an */        \
 92   /* indirect call by a direct call.                                */        \
 93   product(bool, ReoptimizeCallSequences, true,                                \
 94           "Reoptimize code-sequences of calls at runtime.")                   \
 95                                                                               \
 96   product(bool, UseByteReverseInstruction, true,                              \
 97           "Use byte reverse instruction.")                                    \
 98                                                                               \
 99   product(bool, ExpandLoadingBaseDecode, true, "Expand the assembler "        \
100           "instruction required to load the base from DecodeN nodes during "  \
101           "matching.")                                                        \
102   product(bool, ExpandLoadingBaseDecode_NN, true, "Expand the assembler "     \
103           "instruction required to load the base from DecodeN_NN nodes "      \
104           "during matching.")                                                 \
105   product(bool, ExpandLoadingBaseEncode, true, "Expand the assembler "        \
106           "instruction required to load the base from EncodeP nodes during "  \
107           "matching.")                                                        \
108   product(bool, ExpandLoadingBaseEncode_NN, true, "Expand the assembler "     \
109           "instruction required to load the base from EncodeP_NN nodes "      \
110           "during matching.")                                                 \
111                                                                               \
112   /* Seems to pay off with 2 pages already. */                                \
113   product(size_t, MVCLEThreshold, +2*(4*K),                                   \
114           "Threshold above which page-aligned MVCLE copy/init is used.")      \
115                                                                               \
116   product(bool, PreferLAoverADD, false,                                       \
117           "Use LA/LAY instructions over ADD instructions (z/Architecture).")  \
118                                                                               \
119   develop(bool, ZapEmptyStackFields, false, "Write 0x0101... to empty stack"  \
120           " fields. Use this to ease stack debugging.")                       \
121                                                                               \
122   product(bool, TraceTraps, false, "Trace all traps the signal handler"       \
123           "handles.")
124 
125 #endif // CPU_S390_GLOBALS_S390_HPP