001/* 002 * This file is part of the Jikes RVM project (http://jikesrvm.org). 003 * 004 * This file is licensed to You under the Eclipse Public License (EPL); 005 * You may not use this file except in compliance with the License. You 006 * may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/eclipse-1.0.php 009 * 010 * See the COPYRIGHT.txt file distributed with this work for information 011 * regarding copyright ownership. 012 */ 013package org.jikesrvm; 014 015import org.jikesrvm.runtime.CommandLineArgs; 016 017/** 018 * Flags that specify the configuration of our virtual machine. 019 * 020 * Note: Changing any <code>final</code> flags requires that the whole vm 021 * be recompiled and rebuilt after their values are changed. 022 */ 023public abstract class Configuration { 024 025 public static final boolean BuildForPowerPC = false; 026 public static final boolean BuildForIA32 = !BuildForPowerPC; 027 public static final boolean BuildForSSE2 = BuildForIA32 && true; 028 public static final boolean BuildForSSE2Full = BuildForSSE2 && true; 029 public static final boolean BuildForHwFsqrt = true && (false || VM.BuildForSSE2); 030 031 public static final boolean BuildFor32Addr = true; 032 public static final boolean BuildFor64Addr = !BuildFor32Addr; 033 034 public static final boolean BuildForLinux = true; 035 public static final boolean BuildForSolaris = false; 036 public static final boolean BuildForOsx = false; 037 038 public static final boolean BuildForGnuClasspath = true; 039 public static final boolean BuildForHarmony = false; 040 041 public static final boolean LittleEndian = true; 042 043 /* ABI selection for PowerPC. Exactly one of these variables will be true in each build. */ 044 public static final boolean BuildForPower64ELF_ABI = BuildForLinux && BuildForPowerPC && BuildFor64Addr; 045 public static final boolean BuildForSVR4ABI = !BuildForPower64ELF_ABI; 046 047 /** Are we using Classpath's portable native sync feature? */ 048 public static final boolean PortableNativeSync = true; 049 050 /** Assertion checking. 051 <dl> 052 <dt>false</dt> <dd> no assertion checking at runtime</dd> 053 <dt>true </dt> <dd> execute assertion checks at runtime</dd> 054 </dl> 055 056 Note: code your assertion checks as 057 <pre> 058 if (VM.VerifyAssertions) 059 VM._assert(xxx); 060 </pre> 061 */ 062 public static final boolean VerifyAssertions = true; 063 public static final boolean ExtremeAssertions = false; 064 065 /** 066 * If set, verify that Uninterruptible methods actually cannot be 067 * interrupted. 068 */ 069 public static final boolean VerifyUnint = VerifyAssertions; 070 071 /** If set, ignore the supression pragma and print all warning messages. */ 072 public static final boolean ParanoidVerifyUnint = false; 073 074 /** Is this an adaptive build? */ 075 public static final boolean BuildForAdaptiveSystem = true; 076 077 /** Is this an opt compiler build? */ 078 public static final boolean BuildForOptCompiler = true; 079 080 /** build with Base boot image compiler? */ 081 public static final boolean BuildWithBaseBootImageCompiler = false; 082 083 /** allow bootimage writer to build oversized images? */ 084 public static final boolean AllowOversizedImages = false; 085 086 // Interface method dispatch strategy. 087 // We either use IMT's (Alpern, Cocchi, Fink, Grove, and Lieber OOPSLA 2001) 088 // or searched ITables. See also the research archive for the variants on these 089 // two schemes that were evaluated in the OOPSLA 2001 paper. 090 public static final boolean BuildForIMTInterfaceInvocation = true; 091 public static final boolean BuildForITableInterfaceInvocation = !BuildForIMTInterfaceInvocation; 092 093 /** Epilogue yieldpoints increase sampling accuracy for adaptive 094 recompilation. In particular, they are key for large, leaf, loop-free 095 methods. */ 096 public static final boolean UseEpilogueYieldPoints = BuildForAdaptiveSystem; 097 098 /** NUmber of allocations between gc's during stress testing. Set to 0 to disable. */ 099 public static final int StressGCAllocationInterval = 0; 100 public static final boolean ForceFrequentGC = 0 != StressGCAllocationInterval; 101 102 public static final boolean BuildWithGCTrace = false; 103 public static final boolean BuildWithGCSpy = false; 104 105 public static final String RVM_VERSION_STRING = "Jikes RVM 3.1.3+git (rc88b3e32993ff6e735fea23c8b83f87dc23b9150)"; 106 public static final String RVM_CONFIGURATION = "development"; 107 108 /** 109 * Alignment checking (for IA32 only; for debugging purposes only). 110 * To enable, build with -Dconfig.alignment-checking=true. 111 * Important: You'll also need to build without SSE (-Dtarget.arch.sse2=none) and 112 * run Jikes with only one processor. 113 */ 114 public static final boolean AlignmentChecking = false; 115}