WebAssembly.td revision 341825
1285163Sdim//- WebAssembly.td - Describe the WebAssembly Target Machine --*- tablegen -*-//
2285163Sdim//
3285163Sdim//                     The LLVM Compiler Infrastructure
4285163Sdim//
5285163Sdim// This file is distributed under the University of Illinois Open Source
6285163Sdim// License. See LICENSE.TXT for details.
7285163Sdim//
8285163Sdim//===----------------------------------------------------------------------===//
9296417Sdim///
10296417Sdim/// \file
11341825Sdim/// This is a target description file for the WebAssembly architecture,
12296417Sdim/// which is also known as "wasm".
13296417Sdim///
14285163Sdim//===----------------------------------------------------------------------===//
15285163Sdim
16285163Sdim//===----------------------------------------------------------------------===//
17285163Sdim// Target-independent interfaces which we are implementing
18285163Sdim//===----------------------------------------------------------------------===//
19285163Sdim
20285163Sdiminclude "llvm/Target/Target.td"
21285163Sdim
22285163Sdim//===----------------------------------------------------------------------===//
23285163Sdim// WebAssembly Subtarget features.
24285163Sdim//===----------------------------------------------------------------------===//
25285163Sdim
26314564Sdimdef FeatureSIMD128 : SubtargetFeature<"simd128", "HasSIMD128", "true",
27285163Sdim                                      "Enable 128-bit SIMD">;
28327952Sdimdef FeatureAtomics : SubtargetFeature<"atomics", "HasAtomics", "true",
29327952Sdim                                      "Enable Atomics">;
30327952Sdimdef FeatureNontrappingFPToInt :
31327952Sdim      SubtargetFeature<"nontrapping-fptoint",
32327952Sdim                       "HasNontrappingFPToInt", "true",
33327952Sdim                       "Enable non-trapping float-to-int conversion operators">;
34285163Sdim
35341825Sdimdef FeatureSignExt :
36341825Sdim      SubtargetFeature<"sign-ext",
37341825Sdim                       "HasSignExt", "true",
38341825Sdim                       "Enable sign extension operators">;
39341825Sdim
40341825Sdimdef FeatureExceptionHandling :
41341825Sdim      SubtargetFeature<"exception-handling", "HasExceptionHandling", "true",
42341825Sdim                       "Enable Wasm exception handling">;
43341825Sdim
44285163Sdim//===----------------------------------------------------------------------===//
45285163Sdim// Architectures.
46285163Sdim//===----------------------------------------------------------------------===//
47285163Sdim
48285163Sdim//===----------------------------------------------------------------------===//
49285163Sdim// Register File Description
50285163Sdim//===----------------------------------------------------------------------===//
51285163Sdim
52285163Sdiminclude "WebAssemblyRegisterInfo.td"
53285163Sdim
54285163Sdim//===----------------------------------------------------------------------===//
55285163Sdim// Instruction Descriptions
56285163Sdim//===----------------------------------------------------------------------===//
57285163Sdim
58285163Sdiminclude "WebAssemblyInstrInfo.td"
59285163Sdim
60285163Sdimdef WebAssemblyInstrInfo : InstrInfo;
61285163Sdim
62285163Sdim//===----------------------------------------------------------------------===//
63285163Sdim// WebAssembly Processors supported.
64285163Sdim//===----------------------------------------------------------------------===//
65285163Sdim
66285163Sdim// Minimal Viable Product.
67285163Sdimdef : ProcessorModel<"mvp", NoSchedModel, []>;
68285163Sdim
69296417Sdim// Generic processor: latest stable version.
70296417Sdimdef : ProcessorModel<"generic", NoSchedModel, []>;
71296417Sdim
72285163Sdim// Latest and greatest experimental version of WebAssembly. Bugs included!
73327952Sdimdef : ProcessorModel<"bleeding-edge", NoSchedModel,
74327952Sdim                      [FeatureSIMD128, FeatureAtomics]>;
75285163Sdim
76285163Sdim//===----------------------------------------------------------------------===//
77285163Sdim// Target Declaration
78285163Sdim//===----------------------------------------------------------------------===//
79285163Sdim
80341825Sdimdef WebAssemblyAsmParser : AsmParser {
81341825Sdim  // The physical register names are not in the binary format or asm text
82341825Sdim  let ShouldEmitMatchRegisterName = 0;
83341825Sdim}
84341825Sdim
85341825Sdimdef WebAssemblyAsmWriter : AsmWriter {
86341825Sdim  string AsmWriterClassName  = "InstPrinter";
87341825Sdim  int PassSubtarget = 0;
88341825Sdim  int Variant = 0;
89341825Sdim  bit isMCAsmWriter = 1;
90341825Sdim}
91341825Sdim
92285163Sdimdef WebAssembly : Target {
93285163Sdim  let InstructionSet = WebAssemblyInstrInfo;
94341825Sdim  let AssemblyParsers  = [WebAssemblyAsmParser];
95341825Sdim  let AssemblyWriters = [WebAssemblyAsmWriter];
96285163Sdim}
97