1a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang/* 2a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang * Copyright 2010, The Android Open Source Project 3a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang * 4a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang * Licensed under the Apache License, Version 2.0 (the "License"); 5a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang * you may not use this file except in compliance with the License. 6a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang * You may obtain a copy of the License at 7a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang * 8a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang * http://www.apache.org/licenses/LICENSE-2.0 9a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang * 10a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang * Unless required by applicable law or agreed to in writing, software 11a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang * distributed under the License is distributed on an "AS IS" BASIS, 12a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang * See the License for the specific language governing permissions and 14a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang * limitations under the License. 15a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang */ 16a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 17d30158df95b37bc758df37addcc4ed19a3a92615Stephen Hines#include <cstdio> 18e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#include <cstring> 19e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines 20e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#include <string> 21a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 220307eaa71dc1d05582347cacd9209ac1e6100102Zonr Chang#include "slang_rs_type_spec.h" 23a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 24a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Changenum { 25a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang#define ENUM_PRIMITIVE_DATA_TYPE(x, name, bits) x, 26b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define PRIMITIVE_DATA_TYPE_RANGE(x, y) \ 27b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang FirstPrimitiveType = x, \ 28b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang LastPrimitiveType = y, 29a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang PRIMITIVE_DATA_TYPE_ENUMS 30a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang#undef ENUM_PRIMITIVE_DATA_TYPE 31b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef PRIMITIVE_DATA_TYPE_RANGE 32b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 33b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define ENUM_RS_MATRIX_DATA_TYPE(x, name, dim) x, 34b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define RS_MATRIX_DATA_TYPE_RANGE(x, y) \ 35b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang FirstRSMatrixType = x, \ 36b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang LastRSMatrixType = y, 37b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang RS_MATRIX_DATA_TYPE_ENUMS 38b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef ENUM_RS_MATRIX_DATA_TYPE 39b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef RS_MATRIX_DATA_TYPE_RANGE 40b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 41a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang#define ENUM_RS_OBJECT_DATA_TYPE(x, name) x, 42b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define RS_OBJECT_DATA_TYPE_RANGE(x, y) \ 43b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang FirstRSObjectType = x, \ 44b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang LastRSObjectType = y, 45a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang RS_OBJECT_DATA_TYPE_ENUMS 46a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang#undef ENUM_RS_OBJECT_DATA_TYPE 47b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef RS_OBJECT_DATA_TYPE_RANGE 48a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang}; 49a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 50a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Changenum { 51a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang#define ENUM_RS_DATA_KIND(x) x, 52a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang RS_DATA_KIND_ENUMS 53a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang#undef ENUM_RS_DATA_KIND 54a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang}; 55a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 56a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Changclass RSDataTypeSpec { 57a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang private: 58a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang const char *mTypeName; // e.g. Float32 59a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang // FIXME: better name 60a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang const char *mTypePragmaName; // e.g. float 61a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang size_t mBits; 62a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 63a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang protected: 64b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang enum { 65b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang DT_PrimitiveClass, 66b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang DT_RSMatrixClass, 67b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang DT_RSObjectClass 68b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang } mClass; 69a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 70a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang public: 71a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang RSDataTypeSpec(const char *TypeName, 72a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang const char *TypePragmaName, 73a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang size_t Bits) 74a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang : mTypeName(TypeName), 75a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang mTypePragmaName(TypePragmaName), 76a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang mBits(Bits), 77b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang mClass(DT_PrimitiveClass) { 78a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang return; 79a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang } 80a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 81a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang inline const char *getTypeName() const { return mTypeName; } 82a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang inline const char *getTypePragmaName() const { return mTypePragmaName; } 83a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang inline size_t getSizeInBit() const { return mBits; } 84b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang inline bool isRSMatrix() const { return (mClass == DT_RSMatrixClass); } 85b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang inline bool isRSObject() const { return (mClass == DT_RSObjectClass); } 86b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang}; 87b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 88b1771ef128b10c4d4575634828006bfba20b1d9cZonr Changclass RSMatrixDataTypeSpec : public RSDataTypeSpec { 89b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang private: 90b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang unsigned mDim; 91e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines static float ignore; 92b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 93b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang public: 94b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang RSMatrixDataTypeSpec(const char *TypeName, 95b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang const char *TypePragmaName, 96b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang unsigned Dim) 97e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines : RSDataTypeSpec(TypeName, TypePragmaName, Dim * Dim * sizeof(ignore)), 98b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang mDim(Dim) { 99b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang mClass = DT_RSMatrixClass; 100b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang return; 101b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang } 102b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 103b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang inline unsigned getDim() const { return mDim; } 104a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang}; 105a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 106a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Changclass RSObjectDataTypeSpec : public RSDataTypeSpec { 107a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang public: 108a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang RSObjectDataTypeSpec(const char *TypeName, 109a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang const char *TypePragmaName) 110a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang : RSDataTypeSpec(TypeName, TypePragmaName, 32 /* opaque pointer */) { 111b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang mClass = DT_RSObjectClass; 112a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang return; 113a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang } 114a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang}; 115a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 116a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang///////////////////////////////////////////////////////////////////////////// 117a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 118a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// clang::BuiltinType::Kind -> RSDataTypeSpec 119a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Changclass ClangBuiltinTypeMap { 120a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang const char *mBuiltinTypeKind; 121a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang const RSDataTypeSpec *mDataType; 122a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 123a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang public: 124a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang ClangBuiltinTypeMap(const char *BuiltinTypeKind, 125a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang const RSDataTypeSpec *DataType) 126a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang : mBuiltinTypeKind(BuiltinTypeKind), 127a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang mDataType(DataType) { 128a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang return; 129a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang } 130a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 131a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang inline const char *getBuiltinTypeKind() const { return mBuiltinTypeKind; } 132a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang inline const RSDataTypeSpec *getDataType() const { return mDataType; } 133a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang}; 134a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 135a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang///////////////////////////////////////////////////////////////////////////// 136a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 137a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Changclass RSDataKindSpec { 138a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang private: 139a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang const char *mKindName; 140a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 141a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang public: 142a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang explicit RSDataKindSpec(const char *KindName) : mKindName(KindName) { 143a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang return; 144a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang } 145a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 146a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang inline const char *getKindName() const { return mKindName; } 147a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang}; 148a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 149a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang///////////////////////////////////////////////////////////////////////////// 150a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 151a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Changclass RSDataElementSpec { 152a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang private: 153a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang const char *mElementName; 154a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang const RSDataKindSpec *mDataKind; 155a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang const RSDataTypeSpec *mDataType; 156a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang bool mIsNormal; 157a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang unsigned mVectorSize; 158a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 159a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang public: 160a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang RSDataElementSpec(const char *ElementName, 161a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang const RSDataKindSpec *DataKind, 162a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang const RSDataTypeSpec *DataType, 163a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang bool IsNormal, 164a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang unsigned VectorSize) 165a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang : mElementName(ElementName), 166a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang mDataKind(DataKind), 167a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang mDataType(DataType), 168a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang mIsNormal(IsNormal), 169a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang mVectorSize(VectorSize) { 170a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang return; 171a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang } 172a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 173a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang inline const char *getElementName() const { return mElementName; } 174a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang inline const RSDataKindSpec *getDataKind() const { return mDataKind; } 175a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang inline const RSDataTypeSpec *getDataType() const { return mDataType; } 176a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang inline bool isNormal() const { return mIsNormal; } 177a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang inline unsigned getVectorSize() const { return mVectorSize; } 178a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang}; 179a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 180a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang///////////////////////////////////////////////////////////////////////////// 181a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 182a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// -gen-rs-data-type-enums 183a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// 184b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang// ENUM_PRIMITIVE_DATA_TYPE(type, cname, bits) 185b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang// ENUM_PRIMITIVE_DATA_TYPE_RANGE(begin_type, end_type) 186b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang// ENUM_RS_MATRIX_DATA_TYPE(type, cname, bits) 187b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang// ENUM_RS_MATRIX_DATA_TYPE_RANGE(begin_type, end_type) 188b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang// ENUM_RS_OBJECT_DATA_TYPE(type, cname, bits) 189b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang// ENUM_RS_OBJECT_DATA_TYPE_RANGE(begin_type, end_type) 190b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang// 191a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// ENUM_RS_DATA_TYPE(type, cname, bits) 192a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// e.g., ENUM_RS_DATA_TYPE(Float32, "float", 256) 193a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Changstatic int GenRSDataTypeEnums(const RSDataTypeSpec *const DataTypes[], 194a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang unsigned NumDataTypes) { 195b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang // Alias missing #define 196b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define ALIAS_DEF(x, y) \ 197b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang printf("#ifndef " #x "\n"); \ 198b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang printf("#define " #x "(type, cname, bits) " #y "(type, cname, bits)\n"); \ 199b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang printf("#endif\n\n") 200b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang ALIAS_DEF(ENUM_PRIMITIVE_DATA_TYPE, ENUM_RS_DATA_TYPE); 201b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang ALIAS_DEF(ENUM_RS_MATRIX_DATA_TYPE, ENUM_RS_DATA_TYPE); 202b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang ALIAS_DEF(ENUM_RS_OBJECT_DATA_TYPE, ENUM_RS_DATA_TYPE); 203b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef ALIAS_DEF 204b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 205b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define ALIAS_DEF(x) \ 206b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang printf("#ifndef " #x "\n"); \ 207b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang printf("#define " #x "(begin_type, end_type)\n"); \ 208b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang printf("#endif\n\n") 209b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang ALIAS_DEF(ENUM_PRIMITIVE_DATA_TYPE_RANGE); 210b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang ALIAS_DEF(ENUM_RS_MATRIX_DATA_TYPE_RANGE); 211b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang ALIAS_DEF(ENUM_RS_OBJECT_DATA_TYPE_RANGE); 212b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef ALIAS_DEF 213b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 214b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define DEF(x) \ 215b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang printf(#x "(%s, \"%s\", %lu)\n", \ 216b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang DataTypes[i]->getTypeName(), \ 217b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang DataTypes[i]->getTypePragmaName(), \ 218e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines (unsigned long) DataTypes[i]->getSizeInBit()); // NOLINT(runtime/int) 219b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define DEF_RANGE(x, begin, end) \ 220b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang printf(#x "(%s, %s)\n\n", \ 221b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang DataTypes[begin]->getTypeName(), \ 222b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang DataTypes[end]->getTypeName()) 223b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang for (unsigned i = FirstPrimitiveType; i <= LastPrimitiveType; i++) 224b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang DEF(ENUM_PRIMITIVE_DATA_TYPE); 225b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang DEF_RANGE(ENUM_PRIMITIVE_DATA_TYPE_RANGE, 226b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang FirstPrimitiveType, LastPrimitiveType); 227b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang for (unsigned i = FirstRSMatrixType; i <= LastRSMatrixType; i++) 228b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang DEF(ENUM_RS_MATRIX_DATA_TYPE) 229b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang DEF_RANGE(ENUM_RS_MATRIX_DATA_TYPE_RANGE, 230b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang FirstRSMatrixType, LastRSMatrixType); 231b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang for (unsigned i = FirstRSObjectType; i <= LastRSObjectType; i++) 232b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang DEF(ENUM_RS_OBJECT_DATA_TYPE) 233b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang DEF_RANGE(ENUM_RS_OBJECT_DATA_TYPE_RANGE, 234b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang FirstRSObjectType, LastRSObjectType); 235b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef DEF 236b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef DEF_RANGE 237b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 238b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define UNDEF(x) \ 239b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang printf("#undef " #x "\n") 240b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang UNDEF(ENUM_PRIMITIVE_DATA_TYPE); 241b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang UNDEF(ENUM_RS_MATRIX_DATA_TYPE); 242b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang UNDEF(ENUM_RS_OBJECT_DATA_TYPE); 243b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang UNDEF(ENUM_PRIMITIVE_DATA_TYPE_RANGE); 244b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang UNDEF(ENUM_RS_MATRIX_DATA_TYPE_RANGE); 245b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang UNDEF(ENUM_RS_OBJECT_DATA_TYPE_RANGE); 246b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang UNDEF(ENUM_RS_DATA_TYPE); 247a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang return 0; 248a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang} 249a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 250a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// -gen-clang-builtin-cnames 251a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// 252a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// ENUM_SUPPORT_BUILTIN_TYPE(builtin_type, type, cname) 253a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// e.g., ENUM_SUPPORT_BUILTIN_TYPE(clang::BuiltinType::Float, Float32, "float") 254a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Changstatic int GenClangBuiltinEnum( 255a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang const ClangBuiltinTypeMap *const ClangBuilitinsMap[], 256a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang unsigned NumClangBuilitins) { 257a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang for (unsigned i = 0; i < NumClangBuilitins; i++) 258a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang printf("ENUM_SUPPORT_BUILTIN_TYPE(%s, %s, \"%s\")\n", 259a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang ClangBuilitinsMap[i]->getBuiltinTypeKind(), 260a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang ClangBuilitinsMap[i]->getDataType()->getTypeName(), 261a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang ClangBuilitinsMap[i]->getDataType()->getTypePragmaName()); 262b85033587194aed2b7f37059f66142d84576d9e8Shih-wei Liao printf("#undef ENUM_SUPPORT_BUILTIN_TYPE\n"); 263a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang return 0; 264a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang} 265a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 266b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang// -gen-rs-matrix-type-enums 267b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang// 268b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang// ENUM_RS_MATRIX_TYPE(type, cname, dim) 269b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang// e.g., ENUM_RS_MATRIX_TYPE(RSMatrix2x2, "rs_matrix2x2", 2) 270b1771ef128b10c4d4575634828006bfba20b1d9cZonr Changstatic int GenRSMatrixTypeEnums(const RSDataTypeSpec *const DataTypes[], 271b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang unsigned NumDataTypes) { 272b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang for (unsigned i = 0; i < NumDataTypes; i++) 273b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang if (DataTypes[i]->isRSMatrix()) { 274b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang const RSMatrixDataTypeSpec *const MatrixDataType = 275b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang static_cast<const RSMatrixDataTypeSpec *const>(DataTypes[i]); 276b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang printf("ENUM_RS_MATRIX_TYPE(%s, \"%s\", %u)\n", 277b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang MatrixDataType->getTypeName(), 278b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang MatrixDataType->getTypePragmaName(), 279b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang MatrixDataType->getDim()); 280b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang } 281b85033587194aed2b7f37059f66142d84576d9e8Shih-wei Liao printf("#undef ENUM_RS_MATRIX_TYPE\n"); 282b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang return 0; 283b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang} 284b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 285a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// -gen-rs-object-type-enums 286a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// 287a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// ENUM_RS_OBJECT_TYPE(type, cname) 288b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang// e.g., ENUM_RS_OBJECT_TYPE(RSElement, "rs_element") 289a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Changstatic int GenRSObjectTypeEnums(const RSDataTypeSpec *const DataTypes[], 290a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang unsigned NumDataTypes) { 291a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang for (unsigned i = 0; i < NumDataTypes; i++) 292a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang if (DataTypes[i]->isRSObject()) 293a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang printf("ENUM_RS_OBJECT_TYPE(%s, \"%s\")\n", 294a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataTypes[i]->getTypeName(), 295a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataTypes[i]->getTypePragmaName()); 296b85033587194aed2b7f37059f66142d84576d9e8Shih-wei Liao printf("#undef ENUM_RS_OBJECT_TYPE\n"); 297a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang return 0; 298a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang} 299a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 300a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// -gen-rs-data-kind-enums 301a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// 302a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// ENUM_RS_DATA_KIND(kind) 303a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// e.g., ENUM_RS_DATA_KIND(PixelRGB) 304a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Changint GenRSDataKindEnums(const RSDataKindSpec *const DataKinds[], 305a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang unsigned NumDataKinds) { 306a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang for (unsigned i = 0; i < NumDataKinds; i++) 307a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang printf("ENUM_RS_DATA_KIND(%s)\n", DataKinds[i]->getKindName()); 308b85033587194aed2b7f37059f66142d84576d9e8Shih-wei Liao printf("#undef ENUM_RS_DATA_KIND\n"); 309a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang return 0; 310a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang} 311a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 312a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// -gen-rs-data-element-enums 313a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// 314a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// ENUM_RS_DATA_ELEMENT(name, dt, dk, normailized, vsize) 315a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang// e.g., ENUM_RS_DATA_ELEMENT("rs_pixel_rgba", PixelRGB, Unsigned8, true, 4) 316a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Changint GenRSDataElementEnums(const RSDataElementSpec *const DataElements[], 317a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang unsigned NumDataElements) { 318a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang for (unsigned i = 0; i < NumDataElements; i++) 319a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang printf("ENUM_RS_DATA_ELEMENT(\"%s\", %s, %s, %s, %d)\n", 320a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataElements[i]->getElementName(), 321a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataElements[i]->getDataKind()->getKindName(), 322a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataElements[i]->getDataType()->getTypeName(), 323a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang ((DataElements[i]->isNormal()) ? "true" : "false"), 324a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataElements[i]->getVectorSize()); 325b85033587194aed2b7f37059f66142d84576d9e8Shih-wei Liao printf("#undef ENUM_RS_DATA_ELEMENT\n"); 326a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang return 0; 327a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang} 328a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 329a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Changint main(int argc, char **argv) { 330a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang if (argc < 2) { 331a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang fprintf(stderr, "usage: %s [gen type]\n", argv[0]); 332a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang return 1; 333a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang } 334a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 335a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang RSDataTypeSpec *DataTypes[] = { 336a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang#define ENUM_PRIMITIVE_DATA_TYPE(x, name, bits) \ 337a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new RSDataTypeSpec(#x , name, bits), 338b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define PRIMITIVE_DATA_TYPE_RANGE(x, y) 339a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang PRIMITIVE_DATA_TYPE_ENUMS 340a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang#undef ENUM_PRIMITIVE_DATA_TYPE 341b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef PRIMITIVE_DATA_TYPE_RANGE 342b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 343b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define ENUM_RS_MATRIX_DATA_TYPE(x, name, dim) \ 344b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang new RSMatrixDataTypeSpec(#x , name, dim), 345b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define RS_MATRIX_DATA_TYPE_RANGE(x, y) 346b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang RS_MATRIX_DATA_TYPE_ENUMS 347b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef ENUM_RS_MATRIX_DATA_TYPE 348b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef RS_MATRIX_DATA_TYPE_RANGE 349b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang 350a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang#define ENUM_RS_OBJECT_DATA_TYPE(x, name) \ 351a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new RSObjectDataTypeSpec(#x, name), 352b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#define RS_OBJECT_DATA_TYPE_RANGE(x, y) 353a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang RS_OBJECT_DATA_TYPE_ENUMS 354a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang#undef ENUM_RS_OBJECT_DATA_TYPE 355b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang#undef RS_OBJECT_DATA_TYPE_RANGE 356a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang }; 357a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 358a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang unsigned NumDataTypes = sizeof(DataTypes) / sizeof(DataTypes[0]); 359a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang ///////////////////////////////////////////////////////////////////////////// 360a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 361a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang ClangBuiltinTypeMap *ClangBuilitinsMap[] = { 362a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new ClangBuiltinTypeMap("clang::BuiltinType::Bool", DataTypes[Boolean]), 363a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new ClangBuiltinTypeMap("clang::BuiltinType::Char_U", DataTypes[Unsigned8]), 364a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new ClangBuiltinTypeMap("clang::BuiltinType::UChar", DataTypes[Unsigned8]), 365a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new ClangBuiltinTypeMap("clang::BuiltinType::Char16", DataTypes[Signed16]), 366a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new ClangBuiltinTypeMap("clang::BuiltinType::Char32", DataTypes[Signed32]), 367e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines new ClangBuiltinTypeMap( 368e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines "clang::BuiltinType::UShort", DataTypes[Unsigned16]), 369e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines new ClangBuiltinTypeMap( 370e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines "clang::BuiltinType::UInt", DataTypes[Unsigned32]), 371e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines new ClangBuiltinTypeMap( 372e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines "clang::BuiltinType::ULong", DataTypes[Unsigned32]), 373e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines new ClangBuiltinTypeMap( 374e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines "clang::BuiltinType::ULongLong", DataTypes[Unsigned64]), 375a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 376a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new ClangBuiltinTypeMap("clang::BuiltinType::Char_S", DataTypes[Signed8]), 377a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new ClangBuiltinTypeMap("clang::BuiltinType::SChar", DataTypes[Signed8]), 378a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new ClangBuiltinTypeMap("clang::BuiltinType::Short", DataTypes[Signed16]), 379a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new ClangBuiltinTypeMap("clang::BuiltinType::Int", DataTypes[Signed32]), 380a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new ClangBuiltinTypeMap("clang::BuiltinType::Long", DataTypes[Signed64]), 381e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines new ClangBuiltinTypeMap( 382e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines "clang::BuiltinType::LongLong", DataTypes[Signed64]), 383a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 384a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new ClangBuiltinTypeMap("clang::BuiltinType::Float", DataTypes[Float32]), 385e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines new ClangBuiltinTypeMap("clang::BuiltinType::Double", DataTypes[Float64]) 386a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang }; 387a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 388a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang unsigned NumClangBuilitins = 389a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang sizeof(ClangBuilitinsMap) / sizeof(ClangBuilitinsMap[0]); 390a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 391a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang ///////////////////////////////////////////////////////////////////////////// 392a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 393a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang RSDataKindSpec *DataKinds[] = { 394a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang#define ENUM_RS_DATA_KIND(x) \ 395a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new RSDataKindSpec(#x), 396a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang RS_DATA_KIND_ENUMS 397a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang#undef ENUM_RS_DATA_KIND 398a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang }; 399a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 400a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang unsigned NumDataKinds = sizeof(DataKinds) / sizeof(DataKinds[0]); 401a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang ///////////////////////////////////////////////////////////////////////////// 402a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 403a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang RSDataElementSpec *DataElements[] = { 404a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new RSDataElementSpec("rs_pixel_l", 405a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataKinds[PixelL], 406a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataTypes[Unsigned8], 407a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang /* IsNormal = */true, /* VectorSize = */1), 408a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new RSDataElementSpec("rs_pixel_a", 409a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataKinds[PixelA], 410a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataTypes[Unsigned8], 411a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang true, 1), 412a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new RSDataElementSpec("rs_pixel_la", 413a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataKinds[PixelLA], 414a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataTypes[Unsigned8], 415a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang true, 2), 416a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new RSDataElementSpec("rs_pixel_rgb", 417a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataKinds[PixelRGB], 418a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataTypes[Unsigned8], 419a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang true, 3), 420a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new RSDataElementSpec("rs_pixel_rgba", 421a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataKinds[PixelRGB], 422a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataTypes[Unsigned8], 423a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang true, 4), 424a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new RSDataElementSpec("rs_pixel_rgb565", 425a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataKinds[PixelRGB], 426a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataTypes[Unsigned8], 427a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang true, 3), 428a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new RSDataElementSpec("rs_pixel_rgb5551", 429a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataKinds[PixelRGBA], 430a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataTypes[Unsigned8], 431a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang true, 4), 432a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang new RSDataElementSpec("rs_pixel_rgb4444", 433a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataKinds[PixelRGBA], 434a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang DataTypes[Unsigned8], 435a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang true, 4), 436a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang }; 437a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 438a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang unsigned NumDataElements = sizeof(DataElements) / sizeof(DataElements[0]); 439a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang ///////////////////////////////////////////////////////////////////////////// 440a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang int Result = 1; 441a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 442a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang if (::strcmp(argv[1], "-gen-rs-data-type-enums") == 0) 443a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang Result = GenRSDataTypeEnums(DataTypes, NumDataTypes); 444a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang else if (::strcmp(argv[1], "-gen-clang-builtin-enums") == 0) 445a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang Result = GenClangBuiltinEnum(ClangBuilitinsMap, NumClangBuilitins); 446b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang else if (::strcmp(argv[1], "-gen-rs-matrix-type-enums") == 0) 447b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang Result = GenRSMatrixTypeEnums(DataTypes, NumDataTypes); 448a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang else if (::strcmp(argv[1], "-gen-rs-object-type-enums") == 0) 449a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang Result = GenRSObjectTypeEnums(DataTypes, NumDataTypes); 450a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang else if (::strcmp(argv[1], "-gen-rs-data-kind-enums") == 0) 451a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang Result = GenRSDataKindEnums(DataKinds, NumDataKinds); 452a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang else if (::strcmp(argv[1], "-gen-rs-data-element-enums") == 0) 453a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang Result = GenRSDataElementEnums(DataElements, NumDataElements); 454a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang else 455a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang fprintf(stderr, "%s: Unknown table generation type '%s'\n", 456a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang argv[0], argv[1]); 457a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 458a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 459a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang ///////////////////////////////////////////////////////////////////////////// 460a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang for (unsigned i = 0; i < NumDataTypes; i++) 461a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang delete DataTypes[i]; 462a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang for (unsigned i = 0; i < NumClangBuilitins; i++) 463a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang delete ClangBuilitinsMap[i]; 464a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang for (unsigned i = 0; i < NumDataKinds; i++) 465a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang delete DataKinds[i]; 466a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang for (unsigned i = 0; i < NumDataElements; i++) 467a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang delete DataElements[i]; 468a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang 469a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang return Result; 470a65ec168e41e3ee9c6e8ac04cde694bbbfc2590aZonr Chang} 471