xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/MSP430/MSP430Subtarget.cpp (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
10b57cec5SDimitry Andric //===-- MSP430Subtarget.cpp - MSP430 Subtarget Information ----------------===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric //
90b57cec5SDimitry Andric // This file implements the MSP430 specific subclass of TargetSubtargetInfo.
100b57cec5SDimitry Andric //
110b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
120b57cec5SDimitry Andric 
130b57cec5SDimitry Andric #include "MSP430Subtarget.h"
140b57cec5SDimitry Andric #include "MSP430.h"
15349cc55cSDimitry Andric #include "llvm/MC/TargetRegistry.h"
160b57cec5SDimitry Andric 
170b57cec5SDimitry Andric using namespace llvm;
180b57cec5SDimitry Andric 
190b57cec5SDimitry Andric #define DEBUG_TYPE "msp430-subtarget"
200b57cec5SDimitry Andric 
210b57cec5SDimitry Andric static cl::opt<MSP430Subtarget::HWMultEnum>
220b57cec5SDimitry Andric HWMultModeOption("mhwmult", cl::Hidden,
230b57cec5SDimitry Andric            cl::desc("Hardware multiplier use mode for MSP430"),
240b57cec5SDimitry Andric            cl::init(MSP430Subtarget::NoHWMult),
250b57cec5SDimitry Andric            cl::values(
260b57cec5SDimitry Andric              clEnumValN(MSP430Subtarget::NoHWMult, "none",
270b57cec5SDimitry Andric                 "Do not use hardware multiplier"),
280b57cec5SDimitry Andric              clEnumValN(MSP430Subtarget::HWMult16, "16bit",
290b57cec5SDimitry Andric                 "Use 16-bit hardware multiplier"),
300b57cec5SDimitry Andric              clEnumValN(MSP430Subtarget::HWMult32, "32bit",
310b57cec5SDimitry Andric                 "Use 32-bit hardware multiplier"),
320b57cec5SDimitry Andric              clEnumValN(MSP430Subtarget::HWMultF5, "f5series",
330b57cec5SDimitry Andric                 "Use F5 series hardware multiplier")));
340b57cec5SDimitry Andric 
350b57cec5SDimitry Andric #define GET_SUBTARGETINFO_TARGET_DESC
360b57cec5SDimitry Andric #define GET_SUBTARGETINFO_CTOR
370b57cec5SDimitry Andric #include "MSP430GenSubtargetInfo.inc"
380b57cec5SDimitry Andric 
anchor()390b57cec5SDimitry Andric void MSP430Subtarget::anchor() { }
400b57cec5SDimitry Andric 
410b57cec5SDimitry Andric MSP430Subtarget &
initializeSubtargetDependencies(StringRef CPU,StringRef FS)420b57cec5SDimitry Andric MSP430Subtarget::initializeSubtargetDependencies(StringRef CPU, StringRef FS) {
430b57cec5SDimitry Andric   ExtendedInsts = false;
440b57cec5SDimitry Andric   HWMultMode = NoHWMult;
450b57cec5SDimitry Andric 
465ffd83dbSDimitry Andric   StringRef CPUName = CPU;
470b57cec5SDimitry Andric   if (CPUName.empty())
480b57cec5SDimitry Andric     CPUName = "msp430";
490b57cec5SDimitry Andric 
50e8d8bef9SDimitry Andric   ParseSubtargetFeatures(CPUName, /*TuneCPU*/ CPUName, FS);
510b57cec5SDimitry Andric 
520b57cec5SDimitry Andric   if (HWMultModeOption != NoHWMult)
530b57cec5SDimitry Andric     HWMultMode = HWMultModeOption;
540b57cec5SDimitry Andric 
550b57cec5SDimitry Andric   return *this;
560b57cec5SDimitry Andric }
570b57cec5SDimitry Andric 
MSP430Subtarget(const Triple & TT,const std::string & CPU,const std::string & FS,const TargetMachine & TM)580b57cec5SDimitry Andric MSP430Subtarget::MSP430Subtarget(const Triple &TT, const std::string &CPU,
590b57cec5SDimitry Andric                                  const std::string &FS, const TargetMachine &TM)
6004eeddc0SDimitry Andric     : MSP430GenSubtargetInfo(TT, CPU, /*TuneCPU*/ CPU, FS),
61*06c3fb27SDimitry Andric       InstrInfo(initializeSubtargetDependencies(CPU, FS)), TLInfo(TM, *this),
62*06c3fb27SDimitry Andric       FrameLowering(*this) {}
63