16cfb4d46SJozef Lawrynowicz //===-- MSP430AttributeParser.cpp - MSP430 Attribute Parser ---------------===// 26cfb4d46SJozef Lawrynowicz // 36cfb4d46SJozef Lawrynowicz // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 46cfb4d46SJozef Lawrynowicz // See https://llvm.org/LICENSE.txt for license information. 56cfb4d46SJozef Lawrynowicz // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 66cfb4d46SJozef Lawrynowicz // 76cfb4d46SJozef Lawrynowicz //===----------------------------------------------------------------------===// 86cfb4d46SJozef Lawrynowicz 96cfb4d46SJozef Lawrynowicz #include "llvm/Support/MSP430AttributeParser.h" 1075e164f6Sserge-sans-paille #include "llvm/ADT/ArrayRef.h" 116cfb4d46SJozef Lawrynowicz 126cfb4d46SJozef Lawrynowicz using namespace llvm; 136cfb4d46SJozef Lawrynowicz using namespace llvm::MSP430Attrs; 146cfb4d46SJozef Lawrynowicz 156cfb4d46SJozef Lawrynowicz constexpr std::array<MSP430AttributeParser::DisplayHandler, 4> 166cfb4d46SJozef Lawrynowicz MSP430AttributeParser::DisplayRoutines{ 176cfb4d46SJozef Lawrynowicz {{MSP430Attrs::TagISA, &MSP430AttributeParser::parseISA}, 186cfb4d46SJozef Lawrynowicz {MSP430Attrs::TagCodeModel, &MSP430AttributeParser::parseCodeModel}, 196cfb4d46SJozef Lawrynowicz {MSP430Attrs::TagDataModel, &MSP430AttributeParser::parseDataModel}, 206cfb4d46SJozef Lawrynowicz {MSP430Attrs::TagEnumSize, &MSP430AttributeParser::parseEnumSize}}}; 216cfb4d46SJozef Lawrynowicz 226cfb4d46SJozef Lawrynowicz Error MSP430AttributeParser::parseISA(AttrType Tag) { 23*1c1b8c20SPiotr Fusik static const char *const StringVals[] = {"None", "MSP430", "MSP430X"}; 2438818b60Sserge-sans-paille return parseStringAttribute("ISA", Tag, ArrayRef(StringVals)); 256cfb4d46SJozef Lawrynowicz } 266cfb4d46SJozef Lawrynowicz 276cfb4d46SJozef Lawrynowicz Error MSP430AttributeParser::parseCodeModel(AttrType Tag) { 28*1c1b8c20SPiotr Fusik static const char *const StringVals[] = {"None", "Small", "Large"}; 2938818b60Sserge-sans-paille return parseStringAttribute("Code Model", Tag, ArrayRef(StringVals)); 306cfb4d46SJozef Lawrynowicz } 316cfb4d46SJozef Lawrynowicz 326cfb4d46SJozef Lawrynowicz Error MSP430AttributeParser::parseDataModel(AttrType Tag) { 33*1c1b8c20SPiotr Fusik static const char *const StringVals[] = {"None", "Small", "Large", 34*1c1b8c20SPiotr Fusik "Restricted"}; 3538818b60Sserge-sans-paille return parseStringAttribute("Data Model", Tag, ArrayRef(StringVals)); 366cfb4d46SJozef Lawrynowicz } 376cfb4d46SJozef Lawrynowicz 386cfb4d46SJozef Lawrynowicz Error MSP430AttributeParser::parseEnumSize(AttrType Tag) { 39*1c1b8c20SPiotr Fusik static const char *const StringVals[] = {"None", "Small", "Integer", 40*1c1b8c20SPiotr Fusik "Don't Care"}; 4138818b60Sserge-sans-paille return parseStringAttribute("Enum Size", Tag, ArrayRef(StringVals)); 426cfb4d46SJozef Lawrynowicz } 436cfb4d46SJozef Lawrynowicz 446cfb4d46SJozef Lawrynowicz Error MSP430AttributeParser::handler(uint64_t Tag, bool &Handled) { 456cfb4d46SJozef Lawrynowicz Handled = false; 466cfb4d46SJozef Lawrynowicz for (const DisplayHandler &Disp : DisplayRoutines) { 476cfb4d46SJozef Lawrynowicz if (uint64_t(Disp.Attribute) != Tag) 486cfb4d46SJozef Lawrynowicz continue; 496cfb4d46SJozef Lawrynowicz if (Error E = (this->*Disp.Routine)(static_cast<AttrType>(Tag))) 506cfb4d46SJozef Lawrynowicz return E; 516cfb4d46SJozef Lawrynowicz Handled = true; 526cfb4d46SJozef Lawrynowicz break; 536cfb4d46SJozef Lawrynowicz } 546cfb4d46SJozef Lawrynowicz return Error::success(); 556cfb4d46SJozef Lawrynowicz } 56