Home | History | Annotate | Download | only in WebAssembly
      1 //- WebAssembly.td - Describe the WebAssembly Target Machine --*- tablegen -*-//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 ///
     10 /// \file
     11 /// This is a target description file for the WebAssembly architecture,
     12 /// which is also known as "wasm".
     13 ///
     14 //===----------------------------------------------------------------------===//
     15 
     16 //===----------------------------------------------------------------------===//
     17 // Target-independent interfaces which we are implementing
     18 //===----------------------------------------------------------------------===//
     19 
     20 include "llvm/Target/Target.td"
     21 
     22 //===----------------------------------------------------------------------===//
     23 // WebAssembly Subtarget features.
     24 //===----------------------------------------------------------------------===//
     25 
     26 def FeatureSIMD128 : SubtargetFeature<"simd128", "HasSIMD128", "true",
     27                                       "Enable 128-bit SIMD">;
     28 def FeatureAtomics : SubtargetFeature<"atomics", "HasAtomics", "true",
     29                                       "Enable Atomics">;
     30 def FeatureNontrappingFPToInt :
     31       SubtargetFeature<"nontrapping-fptoint",
     32                        "HasNontrappingFPToInt", "true",
     33                        "Enable non-trapping float-to-int conversion operators">;
     34 
     35 def FeatureSignExt :
     36       SubtargetFeature<"sign-ext",
     37                        "HasSignExt", "true",
     38                        "Enable sign extension operators">;
     39 
     40 def FeatureExceptionHandling :
     41       SubtargetFeature<"exception-handling", "HasExceptionHandling", "true",
     42                        "Enable Wasm exception handling">;
     43 
     44 //===----------------------------------------------------------------------===//
     45 // Architectures.
     46 //===----------------------------------------------------------------------===//
     47 
     48 //===----------------------------------------------------------------------===//
     49 // Register File Description
     50 //===----------------------------------------------------------------------===//
     51 
     52 include "WebAssemblyRegisterInfo.td"
     53 
     54 //===----------------------------------------------------------------------===//
     55 // Instruction Descriptions
     56 //===----------------------------------------------------------------------===//
     57 
     58 include "WebAssemblyInstrInfo.td"
     59 
     60 def WebAssemblyInstrInfo : InstrInfo;
     61 
     62 //===----------------------------------------------------------------------===//
     63 // WebAssembly Processors supported.
     64 //===----------------------------------------------------------------------===//
     65 
     66 // Minimal Viable Product.
     67 def : ProcessorModel<"mvp", NoSchedModel, []>;
     68 
     69 // Generic processor: latest stable version.
     70 def : ProcessorModel<"generic", NoSchedModel, []>;
     71 
     72 // Latest and greatest experimental version of WebAssembly. Bugs included!
     73 def : ProcessorModel<"bleeding-edge", NoSchedModel,
     74                       [FeatureSIMD128, FeatureAtomics]>;
     75 
     76 //===----------------------------------------------------------------------===//
     77 // Target Declaration
     78 //===----------------------------------------------------------------------===//
     79 
     80 def WebAssemblyAsmParser : AsmParser {
     81   // The physical register names are not in the binary format or asm text
     82   let ShouldEmitMatchRegisterName = 0;
     83 }
     84 
     85 def WebAssemblyAsmWriter : AsmWriter {
     86   string AsmWriterClassName  = "InstPrinter";
     87   int PassSubtarget = 0;
     88   int Variant = 0;
     89   bit isMCAsmWriter = 1;
     90 }
     91 
     92 def WebAssembly : Target {
     93   let InstructionSet = WebAssemblyInstrInfo;
     94   let AssemblyParsers  = [WebAssemblyAsmParser];
     95   let AssemblyWriters = [WebAssemblyAsmWriter];
     96 }
     97