aboutsummaryrefslogtreecommitdiff
path: root/tools/jello/GlobalVars.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/jello/GlobalVars.cpp')
-rw-r--r--tools/jello/GlobalVars.cpp110
1 files changed, 0 insertions, 110 deletions
diff --git a/tools/jello/GlobalVars.cpp b/tools/jello/GlobalVars.cpp
deleted file mode 100644
index 17495953da..0000000000
--- a/tools/jello/GlobalVars.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-//===-- GlobalVars.cpp - Code to emit global variables to memory ----------===//
-//
-// This file contains the code to generate global variables to memory.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Module.h"
-#include "llvm/DerivedTypes.h"
-#include "llvm/Constants.h"
-#include "llvm/Target/TargetMachine.h"
-#include "Support/Statistic.h"
-#include "VM.h"
-#include <iostream>
-
-Statistic<> NumInitBytes("jello", "Number of bytes of data area initialized");
-
-/// EmitGlobals - Emit all of the global variables to memory, storing their
-/// addresses into GlobalAddress. This must make sure to copy the contents of
-/// their initializers into the memory.
-///
-void VM::emitGlobals() {
- const TargetData &TD = TM.getTargetData();
-
- // Loop over all of the global variables in the program, allocating the memory
- // to hold them.
- for (Module::giterator I = M.gbegin(), E = M.gend(); I != E; ++I)
- if (!I->isExternal()) {
- // Get the type of the global...
- const Type *Ty = I->getType()->getElementType();
-
- // Allocate some memory for it!
- GlobalAddress[I] = new char[TD.getTypeSize(Ty)];
-
- DEBUG(std::cerr << "Allocated global '" << I->getName()
- << "' to addr 0x" << std::hex << GlobalAddress[I] << std::dec
- << "\n");
- } else {
- assert(0 && "References to external globals not handled yet!");
- }
-
- // Now that all of the globals are set up in memory, loop through them all and
- // initialize their contents.
- for (Module::giterator I = M.gbegin(), E = M.gend(); I != E; ++I)
- if (!I->isExternal())
- emitConstantToMemory(I->getInitializer(), GlobalAddress[I]);
-}
-
-/// emitConstantToMemory - Use the specified LLVM constant to initialize the
-/// specified region of memory.
-///
-void VM::emitConstantToMemory(Constant *Init, void *Addr) {
- const TargetData &TD = TM.getTargetData();
- NumInitBytes += TD.getTypeSize (Init->getType ());
- if (ConstantIntegral *CI = dyn_cast<ConstantIntegral>(Init)) {
- switch (CI->getType()->getPrimitiveID()) {
- case Type::BoolTyID:
- *(char*)Addr = cast<ConstantBool>(CI)->getValue();
- return;
- case Type::UByteTyID:
- *(unsigned char*)Addr = cast<ConstantUInt>(CI)->getValue();
- return;
- case Type::SByteTyID:
- *( signed char*)Addr = cast<ConstantSInt>(CI)->getValue();
- return;
- case Type::UShortTyID:
- *(unsigned short*)Addr = cast<ConstantUInt>(CI)->getValue();
- return;
- case Type::ShortTyID:
- *( signed short*)Addr = cast<ConstantSInt>(CI)->getValue();
- return;
- case Type::UIntTyID:
- *(unsigned int*)Addr = cast<ConstantUInt>(CI)->getValue();
- return;
- case Type::IntTyID:
- *( signed int*)Addr = cast<ConstantSInt>(CI)->getValue();
- return;
- case Type::ULongTyID:
- *(uint64_t*)Addr = cast<ConstantUInt>(CI)->getValue();
- return;
- case Type::LongTyID:
- *(int64_t*)Addr = cast<ConstantSInt>(CI)->getValue();
- return;
- default: break;
- }
- } else if (ConstantFP *CF = dyn_cast <ConstantFP> (Init)) {
- switch (CF->getType ()->getPrimitiveID ()) {
- case Type::FloatTyID:
- *(float*)Addr = CF->getValue ();
- return;
- case Type::DoubleTyID:
- *(double*)Addr = CF->getValue ();
- return;
- default: break;
- }
- } else if (ConstantPointerNull *CP = dyn_cast <ConstantPointerNull> (Init)) {
- // Fill the space with a NULL pointer.
- *(void **)Addr = NULL;
- return;
- } else if (ConstantArray *CA = dyn_cast<ConstantArray>(Init)) {
- unsigned ElementSize = TD.getTypeSize(CA->getType()->getElementType());
- for (unsigned i = 0, e = CA->getType()->getNumElements(); i != e; ++i) {
- emitConstantToMemory(cast<Constant>(CA->getOperand(i)), Addr);
- Addr = (char*)Addr+ElementSize;
- }
- return;
- }
-
- std::cerr << "Offending constant: " << Init << "\n";
- assert(0 && "Don't know how to emit this constant to memory!");
-}