mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 00:11:00 +00:00
Add X86 MMX type to bitcode and Type.
(The Ada bindings probably need it too, but all the obvious places to change say "do not edit this file".) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113618 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f9e49e86ee
commit
bb811a2445
@ -264,6 +264,11 @@ CAMLprim LLVMTypeRef llvm_ppc_fp128_type(LLVMContextRef Context) {
|
||||
return LLVMPPCFP128TypeInContext(Context);
|
||||
}
|
||||
|
||||
/* llcontext -> lltype */
|
||||
CAMLprim LLVMTypeRef llvm_x86mmx_type(LLVMContextRef Context) {
|
||||
return LLVMX86MMXTypeInContext(Context);
|
||||
}
|
||||
|
||||
/*--... Operations on function types .......................................--*/
|
||||
|
||||
/* lltype -> lltype array -> lltype */
|
||||
|
@ -204,7 +204,8 @@ typedef enum {
|
||||
LLVMPointerTypeKind, /**< Pointers */
|
||||
LLVMOpaqueTypeKind, /**< Opaque: type with unknown structure */
|
||||
LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
|
||||
LLVMMetadataTypeKind /**< Metadata */
|
||||
LLVMMetadataTypeKind, /**< Metadata */
|
||||
LLVMX86_MMXTypeKind /**< X86 MMX */
|
||||
} LLVMTypeKind;
|
||||
|
||||
typedef enum {
|
||||
|
@ -94,7 +94,9 @@ namespace bitc {
|
||||
TYPE_CODE_FP128 = 14, // LONG DOUBLE (112 bit mantissa)
|
||||
TYPE_CODE_PPC_FP128= 15, // PPC LONG DOUBLE (2 doubles)
|
||||
|
||||
TYPE_CODE_METADATA = 16 // METADATA
|
||||
TYPE_CODE_METADATA = 16, // METADATA
|
||||
|
||||
TYPE_CODE_X86_MMX = 17 // X86 MMX
|
||||
};
|
||||
|
||||
// The type symbol table only has one code (TST_ENTRY_CODE).
|
||||
|
@ -88,6 +88,8 @@ class ieee_double {};
|
||||
class x86_fp80 {};
|
||||
class fp128 {};
|
||||
class ppc_fp128 {};
|
||||
// X86 MMX.
|
||||
class x86_mmx {};
|
||||
} // namespace types
|
||||
|
||||
// LLVM doesn't have const or volatile types.
|
||||
@ -219,6 +221,10 @@ template<bool cross> class TypeBuilder<types::ppc_fp128, cross> {
|
||||
public:
|
||||
static const Type *get(LLVMContext& C) { return Type::getPPC_FP128Ty(C); }
|
||||
};
|
||||
template<bool cross> class TypeBuilder<types::x86_mmx, cross> {
|
||||
public:
|
||||
static const Type *get(LLVMContext& C) { return Type::getX86_MMXTy(C); }
|
||||
};
|
||||
|
||||
template<bool cross> class TypeBuilder<void, cross> {
|
||||
public:
|
||||
|
@ -76,19 +76,20 @@ public:
|
||||
PPC_FP128TyID, ///< 5: 128 bit floating point type (two 64-bits)
|
||||
LabelTyID, ///< 6: Labels
|
||||
MetadataTyID, ///< 7: Metadata
|
||||
X86_MMXTyID, ///< 8: MMX vectors (64 bits)
|
||||
|
||||
// Derived types... see DerivedTypes.h file...
|
||||
// Make sure FirstDerivedTyID stays up to date!!!
|
||||
IntegerTyID, ///< 8: Arbitrary bit width integers
|
||||
FunctionTyID, ///< 9: Functions
|
||||
StructTyID, ///< 10: Structures
|
||||
ArrayTyID, ///< 11: Arrays
|
||||
PointerTyID, ///< 12: Pointers
|
||||
OpaqueTyID, ///< 13: Opaque: type with unknown structure
|
||||
VectorTyID, ///< 14: SIMD 'packed' format, or other vector type
|
||||
IntegerTyID, ///< 9: Arbitrary bit width integers
|
||||
FunctionTyID, ///< 10: Functions
|
||||
StructTyID, ///< 11: Structures
|
||||
ArrayTyID, ///< 12: Arrays
|
||||
PointerTyID, ///< 13: Pointers
|
||||
OpaqueTyID, ///< 14: Opaque: type with unknown structure
|
||||
VectorTyID, ///< 15: SIMD 'packed' format, or other vector type
|
||||
|
||||
NumTypeIDs, // Must remain as last defined ID
|
||||
LastPrimitiveTyID = MetadataTyID,
|
||||
LastPrimitiveTyID = X86_MMXTyID,
|
||||
FirstDerivedTyID = IntegerTyID
|
||||
};
|
||||
|
||||
@ -212,6 +213,9 @@ public:
|
||||
bool isFloatingPointTy() const { return ID == FloatTyID || ID == DoubleTyID ||
|
||||
ID == X86_FP80TyID || ID == FP128TyID || ID == PPC_FP128TyID; }
|
||||
|
||||
/// isPPC_FP128Ty - Return true if this is X86 MMX.
|
||||
bool isX86_MMXTy() const { return ID == X86_MMXTyID; }
|
||||
|
||||
/// isFPOrFPVectorTy - Return true if this is a FP type or a vector of FP.
|
||||
///
|
||||
bool isFPOrFPVectorTy() const;
|
||||
@ -400,6 +404,7 @@ public:
|
||||
static const Type *getX86_FP80Ty(LLVMContext &C);
|
||||
static const Type *getFP128Ty(LLVMContext &C);
|
||||
static const Type *getPPC_FP128Ty(LLVMContext &C);
|
||||
static const Type *getX86_MMXTy(LLVMContext &C);
|
||||
static const IntegerType *getIntNTy(LLVMContext &C, unsigned N);
|
||||
static const IntegerType *getInt1Ty(LLVMContext &C);
|
||||
static const IntegerType *getInt8Ty(LLVMContext &C);
|
||||
@ -416,6 +421,7 @@ public:
|
||||
static const PointerType *getX86_FP80PtrTy(LLVMContext &C, unsigned AS = 0);
|
||||
static const PointerType *getFP128PtrTy(LLVMContext &C, unsigned AS = 0);
|
||||
static const PointerType *getPPC_FP128PtrTy(LLVMContext &C, unsigned AS = 0);
|
||||
static const PointerType *getX86_MMXPtrTy(LLVMContext &C, unsigned AS = 0);
|
||||
static const PointerType *getIntNPtrTy(LLVMContext &C, unsigned N,
|
||||
unsigned AS = 0);
|
||||
static const PointerType *getInt1PtrTy(LLVMContext &C, unsigned AS = 0);
|
||||
|
@ -595,6 +595,7 @@ lltok::Kind LLLexer::LexIdentifier() {
|
||||
TYPEKEYWORD("ppc_fp128", Type::getPPC_FP128Ty(Context));
|
||||
TYPEKEYWORD("label", Type::getLabelTy(Context));
|
||||
TYPEKEYWORD("metadata", Type::getMetadataTy(Context));
|
||||
TYPEKEYWORD("x86_mmx", Type::getX86_MMXTy(Context));
|
||||
#undef TYPEKEYWORD
|
||||
|
||||
// Handle special forms for autoupgrading. Drop these in LLVM 3.0. This is
|
||||
|
@ -549,6 +549,9 @@ bool BitcodeReader::ParseTypeTable() {
|
||||
case bitc::TYPE_CODE_METADATA: // METADATA
|
||||
ResultTy = Type::getMetadataTy(Context);
|
||||
break;
|
||||
case bitc::TYPE_CODE_X86_MMX: // X86_MMX
|
||||
ResultTy = Type::getX86_MMXTy(Context);
|
||||
break;
|
||||
case bitc::TYPE_CODE_INTEGER: // INTEGER: [width]
|
||||
if (Record.size() < 1)
|
||||
return Error("Invalid Integer type record");
|
||||
|
@ -211,6 +211,7 @@ static void WriteTypeTable(const ValueEnumerator &VE, BitstreamWriter &Stream) {
|
||||
case Type::LabelTyID: Code = bitc::TYPE_CODE_LABEL; break;
|
||||
case Type::OpaqueTyID: Code = bitc::TYPE_CODE_OPAQUE; break;
|
||||
case Type::MetadataTyID: Code = bitc::TYPE_CODE_METADATA; break;
|
||||
case Type::X86_MMXTyID: Code = bitc::TYPE_CODE_X86_MMX; break;
|
||||
case Type::IntegerTyID:
|
||||
// INTEGER: [width]
|
||||
Code = bitc::TYPE_CODE_INTEGER;
|
||||
|
@ -514,7 +514,11 @@ CWriter::printSimpleType(raw_ostream &Out, const Type *Ty, bool isSigned,
|
||||
case Type::X86_FP80TyID:
|
||||
case Type::PPC_FP128TyID:
|
||||
case Type::FP128TyID: return Out << "long double " << NameSoFar;
|
||||
|
||||
|
||||
case Type::X86_MMXTyID:
|
||||
return printSimpleType(Out, Type::getInt32Ty(Ty->getContext()), isSigned,
|
||||
" __attribute__((vector_size(64))) " + NameSoFar);
|
||||
|
||||
case Type::VectorTyID: {
|
||||
const VectorType *VTy = cast<VectorType>(Ty);
|
||||
return printSimpleType(Out, VTy->getElementType(), isSigned,
|
||||
|
@ -358,6 +358,7 @@ std::string CppWriter::getCppName(const Type* Ty) {
|
||||
case Type::FloatTyID: return "Type::getFloatTy(mod->getContext())";
|
||||
case Type::DoubleTyID: return "Type::getDoubleTy(mod->getContext())";
|
||||
case Type::LabelTyID: return "Type::getLabelTy(mod->getContext())";
|
||||
case Type::X86_MMXTyID: return "Type::getX86_MMXTy(mod->getContext())";
|
||||
default:
|
||||
error("Invalid primitive type");
|
||||
break;
|
||||
|
@ -461,6 +461,7 @@ uint64_t TargetData::getTypeSizeInBits(const Type *Ty) const {
|
||||
case Type::FloatTyID:
|
||||
return 32;
|
||||
case Type::DoubleTyID:
|
||||
case Type::X86_MMXTyID:
|
||||
return 64;
|
||||
case Type::PPC_FP128TyID:
|
||||
case Type::FP128TyID:
|
||||
|
@ -198,6 +198,7 @@ void TypePrinting::CalcTypeName(const Type *Ty,
|
||||
case Type::PPC_FP128TyID: OS << "ppc_fp128"; break;
|
||||
case Type::LabelTyID: OS << "label"; break;
|
||||
case Type::MetadataTyID: OS << "metadata"; break;
|
||||
case Type::X86_MMXTyID: OS << "x86_mmx"; break;
|
||||
case Type::IntegerTyID:
|
||||
OS << 'i' << cast<IntegerType>(Ty)->getBitWidth();
|
||||
break;
|
||||
|
@ -164,6 +164,8 @@ LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty) {
|
||||
return LLVMOpaqueTypeKind;
|
||||
case Type::VectorTyID:
|
||||
return LLVMVectorTypeKind;
|
||||
case Type::X86_MMXTyID:
|
||||
return LLVMX86_MMXTypeKind;
|
||||
}
|
||||
}
|
||||
|
||||
@ -232,6 +234,9 @@ LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C) {
|
||||
LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C) {
|
||||
return (LLVMTypeRef) Type::getPPC_FP128Ty(*unwrap(C));
|
||||
}
|
||||
LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C) {
|
||||
return (LLVMTypeRef) Type::getX86_MMXTy(*unwrap(C));
|
||||
}
|
||||
|
||||
LLVMTypeRef LLVMFloatType(void) {
|
||||
return LLVMFloatTypeInContext(LLVMGetGlobalContext());
|
||||
@ -248,6 +253,9 @@ LLVMTypeRef LLVMFP128Type(void) {
|
||||
LLVMTypeRef LLVMPPCFP128Type(void) {
|
||||
return LLVMPPCFP128TypeInContext(LLVMGetGlobalContext());
|
||||
}
|
||||
LLVMTypeRef LLVMX86MMXType(void) {
|
||||
return LLVMX86MMXTypeInContext(LLVMGetGlobalContext());
|
||||
}
|
||||
|
||||
/*--.. Operations on function types ........................................--*/
|
||||
|
||||
|
@ -26,6 +26,7 @@ LLVMContextImpl::LLVMContextImpl(LLVMContext &C)
|
||||
X86_FP80Ty(C, Type::X86_FP80TyID),
|
||||
FP128Ty(C, Type::FP128TyID),
|
||||
PPC_FP128Ty(C, Type::PPC_FP128TyID),
|
||||
X86_MMXTy(C, Type::X86_MMXTyID),
|
||||
Int1Ty(C, 1),
|
||||
Int8Ty(C, 8),
|
||||
Int16Ty(C, 16),
|
||||
|
@ -174,6 +174,7 @@ public:
|
||||
const Type X86_FP80Ty;
|
||||
const Type FP128Ty;
|
||||
const Type PPC_FP128Ty;
|
||||
const Type X86_MMXTy;
|
||||
const IntegerType Int1Ty;
|
||||
const IntegerType Int8Ty;
|
||||
const IntegerType Int16Ty;
|
||||
|
@ -109,6 +109,7 @@ const Type *Type::getPrimitiveType(LLVMContext &C, TypeID IDNumber) {
|
||||
case PPC_FP128TyID : return getPPC_FP128Ty(C);
|
||||
case LabelTyID : return getLabelTy(C);
|
||||
case MetadataTyID : return getMetadataTy(C);
|
||||
case X86_MMXTyID : return getX86_MMXTy(C);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
@ -192,6 +193,7 @@ unsigned Type::getPrimitiveSizeInBits() const {
|
||||
case Type::X86_FP80TyID: return 80;
|
||||
case Type::FP128TyID: return 128;
|
||||
case Type::PPC_FP128TyID: return 128;
|
||||
case Type::X86_MMXTyID: return 64;
|
||||
case Type::IntegerTyID: return cast<IntegerType>(this)->getBitWidth();
|
||||
case Type::VectorTyID: return cast<VectorType>(this)->getBitWidth();
|
||||
default: return 0;
|
||||
@ -354,6 +356,10 @@ const Type *Type::getPPC_FP128Ty(LLVMContext &C) {
|
||||
return &C.pImpl->PPC_FP128Ty;
|
||||
}
|
||||
|
||||
const Type *Type::getX86_MMXTy(LLVMContext &C) {
|
||||
return &C.pImpl->X86_MMXTy;
|
||||
}
|
||||
|
||||
const IntegerType *Type::getIntNTy(LLVMContext &C, unsigned N) {
|
||||
return IntegerType::get(C, N);
|
||||
}
|
||||
@ -398,6 +404,10 @@ const PointerType *Type::getPPC_FP128PtrTy(LLVMContext &C, unsigned AS) {
|
||||
return getPPC_FP128Ty(C)->getPointerTo(AS);
|
||||
}
|
||||
|
||||
const PointerType *Type::getX86_MMXPtrTy(LLVMContext &C, unsigned AS) {
|
||||
return getX86_MMXTy(C)->getPointerTo(AS);
|
||||
}
|
||||
|
||||
const PointerType *Type::getIntNPtrTy(LLVMContext &C, unsigned N, unsigned AS) {
|
||||
return getIntNTy(C, N)->getPointerTo(AS);
|
||||
}
|
||||
|
@ -156,6 +156,7 @@ const Type *EVT::getTypeForEVT(LLVMContext &Context) const {
|
||||
case MVT::f80: return Type::getX86_FP80Ty(Context);
|
||||
case MVT::f128: return Type::getFP128Ty(Context);
|
||||
case MVT::ppcf128: return Type::getPPC_FP128Ty(Context);
|
||||
case MVT::x86mmx: return Type::getX86_MMXTy(Context);
|
||||
case MVT::v2i8: return VectorType::get(Type::getInt8Ty(Context), 2);
|
||||
case MVT::v4i8: return VectorType::get(Type::getInt8Ty(Context), 4);
|
||||
case MVT::v8i8: return VectorType::get(Type::getInt8Ty(Context), 8);
|
||||
|
Loading…
Reference in New Issue
Block a user