| //- 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", "SIMDLevel", "SIMD128", | 
 |                                       "Enable 128-bit SIMD">; | 
 |  | 
 | def FeatureUnimplementedSIMD128 : | 
 |       SubtargetFeature<"unimplemented-simd128", | 
 |                        "SIMDLevel", "UnimplementedSIMD128", | 
 |                        "Enable 128-bit SIMD not yet implemented in engines", | 
 |                        [FeatureSIMD128]>; | 
 |  | 
 | 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, | 
 |                        FeatureNontrappingFPToInt, FeatureSignExt]>; | 
 |  | 
 | //===----------------------------------------------------------------------===// | 
 | // 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]; | 
 | } |