mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-22 12:33:33 +02:00
a01ce37a7f
This implements a new table-gen emitter to create tables for a wasm disassembler, and a dissassembler to use them. Comes with 2 tests, that tests a few instructions manually. Is also able to disassemble large .wasm files with objdump reasonably. Not working so well, to be addressed in followups: - objdump appears to be passing an incorrect starting point. - since the disassembler works an instruction at a time, and it is disassembling stack instruction, it has no idea of pseudo register assignments. These registers are required for the instruction printing code that follows. For now, all such registers appear in the output as $0. Patch by Wouter van Oortmerssen Differential Revision: https://reviews.llvm.org/D45848 llvm-svn: 332052
97 lines
3.6 KiB
TableGen
97 lines
3.6 KiB
TableGen
//- 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];
|
|
}
|