mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-27 04:18:42 +00:00
* If compiling on X86 or Sparc, automagically enable the JIT for that arch
* Setting ENABLE_X86_JIT or ENABLE_SPARC_JIT on the `make' command-line will force the inclusion of that JIT on a different architecture * If neither JIT is enabled (e.g., compiling on a different architecture), the -march option will not be available to LLI. * As a side effect of the $ARCH variable, the Sparc LLI can now link just a bit faster by not including the x86 library. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7070 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
1 parent
b103e610cc
commit
82742916f3
4 files changed
+99
-31
No files matched your search
@@ -14,24 +14,31 @@
|
|||||||
// FIXME: REMOVE THIS
|
// FIXME: REMOVE THIS
|
||||||
#include "llvm/PassManager.h"
|
#include "llvm/PassManager.h"
|
||||||
|
|
||||||
namespace {
|
#if !defined(ENABLE_X86_JIT) && !defined(ENABLE_SPARC_JIT)
|
||||||
enum ArchName { nojit, x86, Sparc };
|
#define NO_JITS_ENABLED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
enum ArchName { x86, Sparc };
|
||||||
|
|
||||||
|
#ifndef NO_JITS_ENABLED
|
||||||
cl::opt<ArchName>
|
cl::opt<ArchName>
|
||||||
Arch("march", cl::desc("Architecture to JIT to:"), cl::Prefix,
|
Arch("march", cl::desc("Architecture to JIT to:"), cl::Prefix,
|
||||||
cl::values(clEnumVal(x86, " IA-32 (pentium and above)"),
|
cl::values(
|
||||||
#if defined(sparc) || defined(__sparc__) || defined(__sparcv9)
|
#ifdef ENABLE_X86_JIT
|
||||||
|
clEnumVal(x86, " IA-32 (Pentium and above)"),
|
||||||
|
#endif
|
||||||
|
#ifdef ENABLE_SPARC_JIT
|
||||||
clEnumValN(Sparc, "sparc", " Sparc-V9"),
|
clEnumValN(Sparc, "sparc", " Sparc-V9"),
|
||||||
#endif
|
#endif
|
||||||
0),
|
0),
|
||||||
#if defined(i386) || defined(__i386__) || defined(__x86__)
|
#if defined(ENABLE_X86_JIT)
|
||||||
cl::init(x86)
|
cl::init(x86)
|
||||||
#elif defined(sparc) || defined(__sparc__) || defined(__sparcv9)
|
#elif defined(ENABLE_SPARC_JIT)
|
||||||
cl::init(Sparc)
|
cl::init(Sparc)
|
||||||
#else
|
|
||||||
cl::init(nojit)
|
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
|
#endif /* NO_JITS_ENABLED */
|
||||||
}
|
}
|
||||||
|
|
||||||
/// createJIT - Create an return a new JIT compiler if there is one available
|
/// createJIT - Create an return a new JIT compiler if there is one available
|
||||||
@@ -43,20 +50,24 @@ ExecutionEngine *ExecutionEngine::createJIT(Module *M, unsigned Config) {
|
|||||||
|
|
||||||
// Allow a command-line switch to override what *should* be the default target
|
// Allow a command-line switch to override what *should* be the default target
|
||||||
// machine for this platform. This allows for debugging a Sparc JIT on X86 --
|
// machine for this platform. This allows for debugging a Sparc JIT on X86 --
|
||||||
// our X86 machines are much faster at recompiling LLVM and linking lli.
|
// our X86 machines are much faster at recompiling LLVM and linking LLI.
|
||||||
|
#ifdef NO_JITS_ENABLED
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (Arch) {
|
switch (Arch) {
|
||||||
|
#ifdef ENABLE_X86_JIT
|
||||||
case x86:
|
case x86:
|
||||||
TargetMachineAllocator = allocateX86TargetMachine;
|
TargetMachineAllocator = allocateX86TargetMachine;
|
||||||
break;
|
break;
|
||||||
#if defined(sparc) || defined(__sparc__) || defined(__sparcv9)
|
#endif
|
||||||
|
#ifdef ENABLE_SPARC_JIT
|
||||||
case Sparc:
|
case Sparc:
|
||||||
TargetMachineAllocator = allocateSparcTargetMachine;
|
TargetMachineAllocator = allocateSparcTargetMachine;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
assert(0 && "-march flag not supported on this host!");
|
assert(0 && "-march flag not supported on this host!");
|
||||||
case nojit:
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Allocate a target...
|
// Allocate a target...
|
||||||
@@ -75,7 +86,7 @@ VM::VM(Module *M, TargetMachine *tm) : ExecutionEngine(M), TM(*tm) {
|
|||||||
|
|
||||||
setupPassManager();
|
setupPassManager();
|
||||||
|
|
||||||
#if defined(sparc) || defined(__sparc__) || defined(__sparcv9)
|
#ifdef ENABLE_SPARC_JIT
|
||||||
// THIS GOES BEYOND UGLY HACKS
|
// THIS GOES BEYOND UGLY HACKS
|
||||||
if (TM.getName() == "UltraSparc-Native") {
|
if (TM.getName() == "UltraSparc-Native") {
|
||||||
extern Pass *createPreSelectionPass(TargetMachine &TM);
|
extern Pass *createPreSelectionPass(TargetMachine &TM);
|
||||||
|
|||||||
@@ -1,4 +1,29 @@
|
|||||||
LEVEL = ../../..
|
LEVEL = ../../..
|
||||||
LIBRARYNAME = lli-jit
|
LIBRARYNAME = lli-jit
|
||||||
|
|
||||||
|
# Get the $(ARCH) setting
|
||||||
|
include $(LEVEL)/Makefile.config
|
||||||
|
|
||||||
|
# Enable the X86 JIT if compiling on X86
|
||||||
|
ifeq ($(ARCH), x86)
|
||||||
|
ENABLE_X86_JIT = 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
# This flag can also be used on the command line to force inclusion
|
||||||
|
# of the X86 JIT on non-X86 hosts
|
||||||
|
ifdef ENABLE_X86_JIT
|
||||||
|
CPPFLAGS += -DENABLE_X86_JIT
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Enable the X86 JIT if compiling on X86
|
||||||
|
ifeq ($(ARCH), Sparc)
|
||||||
|
ENABLE_SPARC_JIT = 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
# This flag can also be used on the command line to force inclusion
|
||||||
|
# of the Sparc JIT on non-Sparc hosts
|
||||||
|
ifdef ENABLE_SPARC_JIT
|
||||||
|
CPPFLAGS += -DENABLE_SPARC_JIT
|
||||||
|
endif
|
||||||
|
|
||||||
include $(LEVEL)/Makefile.common
|
include $(LEVEL)/Makefile.common
|
||||||
@@ -2,25 +2,41 @@ LEVEL = ../..
|
|||||||
TOOLNAME = lli
|
TOOLNAME = lli
|
||||||
PARALLEL_DIRS = Interpreter JIT
|
PARALLEL_DIRS = Interpreter JIT
|
||||||
|
|
||||||
# Get the config name...
|
# Get the $(ARCH) setting
|
||||||
include $(LEVEL)/Makefile.config
|
include $(LEVEL)/Makefile.config
|
||||||
|
|
||||||
# Generic JIT libraries
|
# Generic JIT libraries
|
||||||
JITLIBS = lli-jit codegen
|
JITLIBS = lli-jit codegen
|
||||||
ARCHLIBS =
|
ARCHLIBS =
|
||||||
|
|
||||||
|
# You can enable the X86 JIT on a non-X86 host by setting the flag
|
||||||
|
# ENABLE_X86_JIT on the make command line. If not, it will still be
|
||||||
|
# enabled automagically on an X86 host.
|
||||||
|
ifeq ($(ARCH), x86)
|
||||||
|
ENABLE_X86_JIT = 1
|
||||||
|
endif
|
||||||
|
|
||||||
# What the X86 JIT requires
|
# What the X86 JIT requires
|
||||||
JITLIBS += x86
|
ifdef ENABLE_X86_JIT
|
||||||
# X86 doesn't require any ARCHLIBS
|
CPPFLAGS += -DENABLE_X86_JIT
|
||||||
|
JITLIBS += x86
|
||||||
|
# X86 doesn't require any ARCHLIBS
|
||||||
|
endif
|
||||||
|
|
||||||
|
# You can enable the Sparc JIT on a non-Sparc host by setting the flag
|
||||||
|
# ENABLE_SPARC_JIT on the make command line. If not, it will still be
|
||||||
|
# enabled automagically on an Sparc host.
|
||||||
|
ifeq ($(ARCH), Sparc)
|
||||||
|
ENABLE_SPARC_JIT = 1
|
||||||
|
endif
|
||||||
|
|
||||||
# What the Sparc JIT requires
|
# What the Sparc JIT requires
|
||||||
ifeq ($(ARCH),Sparc)
|
ifdef ENABLE_SPARC_JIT
|
||||||
JITLIBS += sparc
|
CPPFLAGS += -DENABLE_SPARC_JIT
|
||||||
ARCHLIBS = sched livevar instrument.a profpaths \
|
JITLIBS += sparc
|
||||||
bcwriter transforms.a ipo.a ipa.a datastructure.a regalloc \
|
ARCHLIBS += sched livevar instrument.a profpaths \
|
||||||
mapping select postopts.a preopts
|
bcwriter transforms.a ipo.a ipa.a datastructure.a regalloc \
|
||||||
|
mapping select postopts.a preopts
|
||||||
endif
|
endif
|
||||||
|
|
||||||
USEDLIBS = lli-interpreter $(JITLIBS) $(ARCHLIBS) scalaropts analysis.a \
|
USEDLIBS = lli-interpreter $(JITLIBS) $(ARCHLIBS) scalaropts analysis.a \
|
||||||
|
|||||||
+25
-9
@@ -2,25 +2,41 @@ LEVEL = ../..
|
|||||||
TOOLNAME = lli
|
TOOLNAME = lli
|
||||||
PARALLEL_DIRS = Interpreter JIT
|
PARALLEL_DIRS = Interpreter JIT
|
||||||
|
|
||||||
# Get the config name...
|
# Get the $(ARCH) setting
|
||||||
include $(LEVEL)/Makefile.config
|
include $(LEVEL)/Makefile.config
|
||||||
|
|
||||||
# Generic JIT libraries
|
# Generic JIT libraries
|
||||||
JITLIBS = lli-jit codegen
|
JITLIBS = lli-jit codegen
|
||||||
ARCHLIBS =
|
ARCHLIBS =
|
||||||
|
|
||||||
|
# You can enable the X86 JIT on a non-X86 host by setting the flag
|
||||||
|
# ENABLE_X86_JIT on the make command line. If not, it will still be
|
||||||
|
# enabled automagically on an X86 host.
|
||||||
|
ifeq ($(ARCH), x86)
|
||||||
|
ENABLE_X86_JIT = 1
|
||||||
|
endif
|
||||||
|
|
||||||
# What the X86 JIT requires
|
# What the X86 JIT requires
|
||||||
JITLIBS += x86
|
ifdef ENABLE_X86_JIT
|
||||||
# X86 doesn't require any ARCHLIBS
|
CPPFLAGS += -DENABLE_X86_JIT
|
||||||
|
JITLIBS += x86
|
||||||
|
# X86 doesn't require any ARCHLIBS
|
||||||
|
endif
|
||||||
|
|
||||||
|
# You can enable the Sparc JIT on a non-Sparc host by setting the flag
|
||||||
|
# ENABLE_SPARC_JIT on the make command line. If not, it will still be
|
||||||
|
# enabled automagically on an Sparc host.
|
||||||
|
ifeq ($(ARCH), Sparc)
|
||||||
|
ENABLE_SPARC_JIT = 1
|
||||||
|
endif
|
||||||
|
|
||||||
# What the Sparc JIT requires
|
# What the Sparc JIT requires
|
||||||
ifeq ($(ARCH),Sparc)
|
ifdef ENABLE_SPARC_JIT
|
||||||
JITLIBS += sparc
|
CPPFLAGS += -DENABLE_SPARC_JIT
|
||||||
ARCHLIBS = sched livevar instrument.a profpaths \
|
JITLIBS += sparc
|
||||||
bcwriter transforms.a ipo.a ipa.a datastructure.a regalloc \
|
ARCHLIBS += sched livevar instrument.a profpaths \
|
||||||
mapping select postopts.a preopts
|
bcwriter transforms.a ipo.a ipa.a datastructure.a regalloc \
|
||||||
|
mapping select postopts.a preopts
|
||||||
endif
|
endif
|
||||||
|
|
||||||
USEDLIBS = lli-interpreter $(JITLIBS) $(ARCHLIBS) scalaropts analysis.a \
|
USEDLIBS = lli-interpreter $(JITLIBS) $(ARCHLIBS) scalaropts analysis.a \
|
||||||
|
|||||||
Reference in new issue
Block a user