1 //===-- MSP430Subtarget.cpp - MSP430 Subtarget Information ----------------===//
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 // This file implements the MSP430 specific subclass of TargetSubtargetInfo.
11 //===----------------------------------------------------------------------===//
13 #include "MSP430Subtarget.h"
15 #include "llvm/Support/TargetRegistry.h"
19 #define DEBUG_TYPE "msp430-subtarget"
21 static cl::opt
<MSP430Subtarget::HWMultEnum
>
22 HWMultModeOption("mhwmult", cl::Hidden
,
23 cl::desc("Hardware multiplier use mode for MSP430"),
24 cl::init(MSP430Subtarget::NoHWMult
),
26 clEnumValN(MSP430Subtarget::NoHWMult
, "none",
27 "Do not use hardware multiplier"),
28 clEnumValN(MSP430Subtarget::HWMult16
, "16bit",
29 "Use 16-bit hardware multiplier"),
30 clEnumValN(MSP430Subtarget::HWMult32
, "32bit",
31 "Use 32-bit hardware multiplier"),
32 clEnumValN(MSP430Subtarget::HWMultF5
, "f5series",
33 "Use F5 series hardware multiplier")));
35 #define GET_SUBTARGETINFO_TARGET_DESC
36 #define GET_SUBTARGETINFO_CTOR
37 #include "MSP430GenSubtargetInfo.inc"
39 void MSP430Subtarget::anchor() { }
42 MSP430Subtarget::initializeSubtargetDependencies(StringRef CPU
, StringRef FS
) {
43 ExtendedInsts
= false;
44 HWMultMode
= NoHWMult
;
46 std::string CPUName
= CPU
;
50 ParseSubtargetFeatures(CPUName
, FS
);
52 if (HWMultModeOption
!= NoHWMult
)
53 HWMultMode
= HWMultModeOption
;
58 MSP430Subtarget::MSP430Subtarget(const Triple
&TT
, const std::string
&CPU
,
59 const std::string
&FS
, const TargetMachine
&TM
)
60 : MSP430GenSubtargetInfo(TT
, CPU
, FS
), FrameLowering(),
61 InstrInfo(initializeSubtargetDependencies(CPU
, FS
)), TLInfo(TM
, *this) {}