mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-02 00:42:52 +01:00
c9e252df68
CPU, and feature string. Parsing some asm directives can change subtarget state (e.g. .code 16) and it must be reflected in other modules (e.g. MCCodeEmitter). That is, the MCSubtargetInfo instance must be shared. llvm-svn: 134795
116 lines
4.0 KiB
C++
116 lines
4.0 KiB
C++
//===-- llvm/MC/SubtargetFeature.h - CPU characteristics --------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines and manages user or tool specified CPU characteristics.
|
|
// The intent is to be able to package specific features that should or should
|
|
// not be used on a specific target processor. A tool, such as llc, could, as
|
|
// as example, gather chip info from the command line, a long with features
|
|
// that should be used on that chip.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_MC_SUBTARGETFEATURE_H
|
|
#define LLVM_MC_SUBTARGETFEATURE_H
|
|
|
|
#include <vector>
|
|
#include "llvm/ADT/Triple.h"
|
|
#include "llvm/Support/DataTypes.h"
|
|
|
|
namespace llvm {
|
|
class raw_ostream;
|
|
class StringRef;
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// SubtargetFeatureKV - Used to provide key value pairs for feature and
|
|
/// CPU bit flags.
|
|
//
|
|
struct SubtargetFeatureKV {
|
|
const char *Key; // K-V key string
|
|
const char *Desc; // Help descriptor
|
|
uint64_t Value; // K-V integer value
|
|
uint64_t Implies; // K-V bit mask
|
|
|
|
// Compare routine for std binary search
|
|
bool operator<(const SubtargetFeatureKV &S) const {
|
|
return strcmp(Key, S.Key) < 0;
|
|
}
|
|
};
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// SubtargetInfoKV - Used to provide key value pairs for CPU and arbitrary
|
|
/// pointers.
|
|
//
|
|
struct SubtargetInfoKV {
|
|
const char *Key; // K-V key string
|
|
void *Value; // K-V pointer value
|
|
|
|
// Compare routine for std binary search
|
|
bool operator<(const SubtargetInfoKV &S) const {
|
|
return strcmp(Key, S.Key) < 0;
|
|
}
|
|
};
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// SubtargetFeatures - Manages the enabling and disabling of subtarget
|
|
/// specific features. Features are encoded as a string of the form
|
|
/// "cpu,+attr1,+attr2,-attr3,...,+attrN"
|
|
/// A comma separates each feature from the next (all lowercase.)
|
|
/// The first feature is always the CPU subtype (eg. pentiumm). If the CPU
|
|
/// value is "generic" then the CPU subtype should be generic for the target.
|
|
/// Each of the remaining features is prefixed with + or - indicating whether
|
|
/// that feature should be enabled or disabled contrary to the cpu
|
|
/// specification.
|
|
///
|
|
|
|
class SubtargetFeatures {
|
|
std::vector<std::string> Features; // Subtarget features as a vector
|
|
public:
|
|
explicit SubtargetFeatures(const StringRef Initial = "");
|
|
|
|
/// Features string accessors.
|
|
std::string getString() const;
|
|
|
|
/// Adding Features.
|
|
void AddFeature(const StringRef String, bool IsEnabled = true);
|
|
|
|
/// ToggleFeature - Toggle a feature and returns the newly updated feature
|
|
/// bits.
|
|
uint64_t ToggleFeature(uint64_t Bits, const StringRef String,
|
|
const SubtargetFeatureKV *FeatureTable,
|
|
size_t FeatureTableSize);
|
|
|
|
/// Get feature bits of a CPU.
|
|
uint64_t getFeatureBits(const StringRef CPU,
|
|
const SubtargetFeatureKV *CPUTable,
|
|
size_t CPUTableSize,
|
|
const SubtargetFeatureKV *FeatureTable,
|
|
size_t FeatureTableSize);
|
|
|
|
/// Get scheduling itinerary of a CPU.
|
|
void *getItinerary(const StringRef CPU,
|
|
const SubtargetInfoKV *Table, size_t TableSize);
|
|
|
|
/// Print feature string.
|
|
void print(raw_ostream &OS) const;
|
|
|
|
// Dump feature info.
|
|
void dump() const;
|
|
|
|
/// Retrieve a formatted string of the default features for the specified
|
|
/// target triple.
|
|
void getDefaultSubtargetFeatures(const Triple& Triple);
|
|
};
|
|
|
|
} // End namespace llvm
|
|
|
|
#endif
|