[visitors] ported llvm asm generator
[ozulis.git] / src / ozulis / target-data.hh
blob96189765159df530ce29647ec93ad680eed17d17
1 #ifndef TARGET_DATA_HH
2 # define TARGET_DATA_HH
4 # include <stdint.h>
5 # include <vector>
7 namespace ozulis
9 struct TargetData
11 struct TypeAlignment
13 enum Type {
14 Pointer = 'p',
15 Integer = 'i',
16 Float = 'f',
17 Vector = 'v',
18 Agregate = 'a',
21 TypeAlignment(Type _type,
22 uint8_t _size,
23 uint8_t _abiAlignment,
24 uint8_t _preferedAlignment)
25 : type(_type),
26 size(_size),
27 abiAlignment(_abiAlignment),
28 preferedAlignment(_preferedAlignment)
31 Type type;
32 uint8_t size;
33 uint8_t abiAlignment;
34 uint8_t preferedAlignment;
37 const TargetData::TypeAlignment * find(TargetData::TypeAlignment::Type type, uint8_t size) const;
38 const TargetData::TypeAlignment * findPointer() const;
39 inline const TypeAlignment * findInteger(uint8_t size) const;
40 inline const TypeAlignment * findFloat(uint8_t size) const;
41 inline const TypeAlignment * findVector(uint8_t size) const;
42 inline const TypeAlignment * findAgregate(uint8_t size) const;
44 bool isLittleEndian;
45 std::vector<TypeAlignment> typeAlignments;
49 extern template class std::vector<ozulis::TargetData::TypeAlignment>;
51 #include "target-data.hxx"
53 #endif /* !TARGET_DATA_HH */