Mercurial > projects > ldc
view ir/irfunction.cpp @ 445:cc40db549aea
Changed the handling of variadic intrinsics a bit.
Removed the -fp80 option and made real be 80bit floats on X86, this is what the D spec really says it should be and fixes a bunch of issues.
Changed the handling of parameter attributes to a bit more generalized approach.
Added sext/zext attributes for byte/short/ubyte/ushort parameters, fixes #60 .
Parameter attribs now properly set for intrinsic calls if necessary.
Made the tango.math.Math patch less intrusive.
Fixed/added some mini tests.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Fri, 01 Aug 2008 17:59:58 +0200 |
parents | d8357f7004ca |
children | a34078905d01 |
line wrap: on
line source
#include "gen/llvm.h" #include "gen/tollvm.h" #include "ir/irfunction.h" #include <sstream> ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// IrFunction::IrFunction(FuncDeclaration* fd) { decl = fd; Type* t = DtoDType(fd->type); assert(t->ty == Tfunction); type = (TypeFunction*)t; func = NULL; allocapoint = NULL; queued = false; defined = false; retArg = NULL; thisVar = NULL; nestedVar = NULL; _arguments = NULL; _argptr = NULL; dwarfSubProg = NULL; srcfileArg = NULL; msgArg = NULL; nextUnique.push(0); } std::string IrFunction::getScopedLabelName(const char* ident) { if(labelScopes.empty()) return std::string(ident); std::string result = "__"; for(unsigned int i = 0; i < labelScopes.size(); ++i) result += labelScopes[i] + "_"; return result + ident; } void IrFunction::pushUniqueLabelScope(const char* name) { std::ostringstream uniquename; uniquename << name << nextUnique.top()++; nextUnique.push(0); labelScopes.push_back(uniquename.str()); } void IrFunction::popLabelScope() { labelScopes.pop_back(); nextUnique.pop(); }