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"
11 #include "llvm/Support/ErrorHandling.h"
14 using namespace llvm::MSP430Attrs
;
16 constexpr std::array
<MSP430AttributeParser::DisplayHandler
, 4>
17 MSP430AttributeParser::DisplayRoutines
{
18 {{MSP430Attrs::TagISA
, &MSP430AttributeParser::parseISA
},
19 {MSP430Attrs::TagCodeModel
, &MSP430AttributeParser::parseCodeModel
},
20 {MSP430Attrs::TagDataModel
, &MSP430AttributeParser::parseDataModel
},
21 {MSP430Attrs::TagEnumSize
, &MSP430AttributeParser::parseEnumSize
}}};
23 Error
MSP430AttributeParser::parseISA(AttrType Tag
) {
24 static const char *StringVals
[] = {"None", "MSP430", "MSP430X"};
25 return parseStringAttribute("ISA", Tag
, ArrayRef(StringVals
));
28 Error
MSP430AttributeParser::parseCodeModel(AttrType Tag
) {
29 static const char *StringVals
[] = {"None", "Small", "Large"};
30 return parseStringAttribute("Code Model", Tag
, ArrayRef(StringVals
));
33 Error
MSP430AttributeParser::parseDataModel(AttrType Tag
) {
34 static const char *StringVals
[] = {"None", "Small", "Large", "Restricted"};
35 return parseStringAttribute("Data Model", Tag
, ArrayRef(StringVals
));
38 Error
MSP430AttributeParser::parseEnumSize(AttrType Tag
) {
39 static const char *StringVals
[] = {"None", "Small", "Integer", "Don't Care"};
40 return parseStringAttribute("Enum Size", Tag
, ArrayRef(StringVals
));
43 Error
MSP430AttributeParser::handler(uint64_t Tag
, bool &Handled
) {
45 for (const DisplayHandler
&Disp
: DisplayRoutines
) {
46 if (uint64_t(Disp
.Attribute
) != Tag
)
48 if (Error E
= (this->*Disp
.Routine
)(static_cast<AttrType
>(Tag
)))
53 return Error::success();