Mercurial > projects > ldc
view gen/abi.h @ 1015:799dbdf9c461
Same fix for align size of void type on D2.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Sun, 01 Mar 2009 01:34:20 +0100 |
parents | 420ef073448d |
children | e8c6dbcd33d1 |
line wrap: on
line source
#ifndef __LDC_GEN_ABI_H__ #define __LDC_GEN_ABI_H__ #include <vector> struct Type; namespace llvm { class Type; class Value; } // return rewrite rule struct ABIRetRewrite { // get original value from rewritten one virtual LLValue* get(LLValue* v) = 0; // rewrite original value virtual LLValue* put(LLValue* v) = 0; // returns target type of this rewrite virtual const LLType* type(const LLType* t) = 0; // test if rewrite applies virtual bool test(TypeFunction* tf) = 0; }; // interface called by codegen struct TargetABI { static TargetABI* getTarget(); TargetABI(); const llvm::Type* getRetType(TypeFunction* tf, const llvm::Type* t); llvm::Value* getRet(TypeFunction* tf, llvm::Value* v); llvm::Value* putRet(TypeFunction* tf, llvm::Value* v); virtual bool returnInArg(Type* t) = 0; virtual bool passByRef(Type* t) = 0; protected: std::vector<ABIRetRewrite*> retOps; ABIRetRewrite* findRetRewrite(TypeFunction* tf); }; #endif