| //- WebAssembly.td - Describe the WebAssembly Target Machine --*- tablegen -*-// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| /// |
| /// \file |
| /// This is a target description file for the WebAssembly architecture, |
| /// which is also known as "wasm". |
| /// |
| //===----------------------------------------------------------------------===// |
| |
| //===----------------------------------------------------------------------===// |
| // Target-independent interfaces which we are implementing |
| //===----------------------------------------------------------------------===// |
| |
| include "llvm/Target/Target.td" |
| |
| //===----------------------------------------------------------------------===// |
| // WebAssembly Subtarget features. |
| //===----------------------------------------------------------------------===// |
| |
| def FeatureSIMD128 : SubtargetFeature<"simd128", "HasSIMD128", "true", |
| "Enable 128-bit SIMD">; |
| def FeatureAtomics : SubtargetFeature<"atomics", "HasAtomics", "true", |
| "Enable Atomics">; |
| def FeatureNontrappingFPToInt : |
| SubtargetFeature<"nontrapping-fptoint", |
| "HasNontrappingFPToInt", "true", |
| "Enable non-trapping float-to-int conversion operators">; |
| |
| def FeatureSignExt : |
| SubtargetFeature<"sign-ext", |
| "HasSignExt", "true", |
| "Enable sign extension operators">; |
| |
| def FeatureExceptionHandling : |
| SubtargetFeature<"exception-handling", "HasExceptionHandling", "true", |
| "Enable Wasm exception handling">; |
| |
| //===----------------------------------------------------------------------===// |
| // Architectures. |
| //===----------------------------------------------------------------------===// |
| |
| //===----------------------------------------------------------------------===// |
| // Register File Description |
| //===----------------------------------------------------------------------===// |
| |
| include "WebAssemblyRegisterInfo.td" |
| |
| //===----------------------------------------------------------------------===// |
| // Instruction Descriptions |
| //===----------------------------------------------------------------------===// |
| |
| include "WebAssemblyInstrInfo.td" |
| |
| def WebAssemblyInstrInfo : InstrInfo; |
| |
| //===----------------------------------------------------------------------===// |
| // WebAssembly Processors supported. |
| //===----------------------------------------------------------------------===// |
| |
| // Minimal Viable Product. |
| def : ProcessorModel<"mvp", NoSchedModel, []>; |
| |
| // Generic processor: latest stable version. |
| def : ProcessorModel<"generic", NoSchedModel, []>; |
| |
| // Latest and greatest experimental version of WebAssembly. Bugs included! |
| def : ProcessorModel<"bleeding-edge", NoSchedModel, |
| [FeatureSIMD128, FeatureAtomics]>; |
| |
| //===----------------------------------------------------------------------===// |
| // Target Declaration |
| //===----------------------------------------------------------------------===// |
| |
| def WebAssemblyAsmParser : AsmParser { |
| // The physical register names are not in the binary format or asm text |
| let ShouldEmitMatchRegisterName = 0; |
| } |
| |
| def WebAssemblyAsmWriter : AsmWriter { |
| string AsmWriterClassName = "InstPrinter"; |
| int PassSubtarget = 0; |
| int Variant = 0; |
| bit isMCAsmWriter = 1; |
| } |
| |
| def WebAssembly : Target { |
| let InstructionSet = WebAssemblyInstrInfo; |
| let AssemblyParsers = [WebAssemblyAsmParser]; |
| let AssemblyWriters = [WebAssemblyAsmWriter]; |
| } |