1 //===-- MSP430AttributeParser.cpp - MSP430 Attribute Parser ---------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "llvm/Support/MSP430AttributeParser.h"
10 #include "llvm/ADT/ArrayRef.h"
13 using namespace llvm::MSP430Attrs
;
15 constexpr std::array
<MSP430AttributeParser::DisplayHandler
, 4>
16 MSP430AttributeParser::DisplayRoutines
{
17 {{MSP430Attrs::TagISA
, &MSP430AttributeParser::parseISA
},
18 {MSP430Attrs::TagCodeModel
, &MSP430AttributeParser::parseCodeModel
},
19 {MSP430Attrs::TagDataModel
, &MSP430AttributeParser::parseDataModel
},
20 {MSP430Attrs::TagEnumSize
, &MSP430AttributeParser::parseEnumSize
}}};
22 Error
MSP430AttributeParser::parseISA(AttrType Tag
) {
23 static const char *const StringVals
[] = {"None", "MSP430", "MSP430X"};
24 return parseStringAttribute("ISA", Tag
, ArrayRef(StringVals
));
27 Error
MSP430AttributeParser::parseCodeModel(AttrType Tag
) {
28 static const char *const StringVals
[] = {"None", "Small", "Large"};
29 return parseStringAttribute("Code Model", Tag
, ArrayRef(StringVals
));
32 Error
MSP430AttributeParser::parseDataModel(AttrType Tag
) {
33 static const char *const StringVals
[] = {"None", "Small", "Large",
35 return parseStringAttribute("Data Model", Tag
, ArrayRef(StringVals
));
38 Error
MSP430AttributeParser::parseEnumSize(AttrType Tag
) {
39 static const char *const StringVals
[] = {"None", "Small", "Integer",
41 return parseStringAttribute("Enum Size", Tag
, ArrayRef(StringVals
));
44 Error
MSP430AttributeParser::handler(uint64_t Tag
, bool &Handled
) {
46 for (const DisplayHandler
&Disp
: DisplayRoutines
) {
47 if (uint64_t(Disp
.Attribute
) != Tag
)
49 if (Error E
= (this->*Disp
.Routine
)(static_cast<AttrType
>(Tag
)))
54 return Error::success();