From ab20565a8298094a938ca11e13d64bed6443f90f Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Sat, 11 Feb 2017 00:02:23 +0000 Subject: [PATCH] [WebAssembly] Remove old experimental disassemler code. Remove support for disassembling an old experimental wasm binary format, which is no longer in use anywhere. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294809 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../Disassembler/WebAssemblyDisassembler.cpp | 86 +------------------ 1 file changed, 2 insertions(+), 84 deletions(-) diff --git a/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp b/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp index d5444b2a1d2..b5f53114d3e 100644 --- a/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp +++ b/lib/Target/WebAssembly/Disassembler/WebAssemblyDisassembler.cpp @@ -63,90 +63,8 @@ extern "C" void LLVMInitializeWebAssemblyDisassembler() { MCDisassembler::DecodeStatus WebAssemblyDisassembler::getInstruction( MCInst &MI, uint64_t &Size, ArrayRef Bytes, uint64_t /*Address*/, raw_ostream &OS, raw_ostream &CS) const { - Size = 0; - uint64_t Pos = 0; - // Read the opcode. - if (Pos + sizeof(uint64_t) > Bytes.size()) - return MCDisassembler::Fail; - uint64_t Opcode = support::endian::read64le(Bytes.data() + Pos); - Pos += sizeof(uint64_t); + // TODO: Implement disassembly. - if (Opcode >= WebAssembly::INSTRUCTION_LIST_END) - return MCDisassembler::Fail; - - MI.setOpcode(Opcode); - const MCInstrDesc &Desc = MCII->get(Opcode); - unsigned NumFixedOperands = Desc.NumOperands; - - // If it's variadic, read the number of extra operands. - unsigned NumExtraOperands = 0; - if (Desc.isVariadic()) { - if (Pos + sizeof(uint64_t) > Bytes.size()) - return MCDisassembler::Fail; - NumExtraOperands = support::endian::read64le(Bytes.data() + Pos); - Pos += sizeof(uint64_t); - } - - // Read the fixed operands. These are described by the MCInstrDesc. - for (unsigned i = 0; i < NumFixedOperands; ++i) { - const MCOperandInfo &Info = Desc.OpInfo[i]; - switch (Info.OperandType) { - case MCOI::OPERAND_IMMEDIATE: - case WebAssembly::OPERAND_LOCAL: - case WebAssembly::OPERAND_GLOBAL: - case WebAssembly::OPERAND_P2ALIGN: - case WebAssembly::OPERAND_BASIC_BLOCK: { - if (Pos + sizeof(uint64_t) > Bytes.size()) - return MCDisassembler::Fail; - uint64_t Imm = support::endian::read64le(Bytes.data() + Pos); - Pos += sizeof(uint64_t); - MI.addOperand(MCOperand::createImm(Imm)); - break; - } - case MCOI::OPERAND_REGISTER: { - if (Pos + sizeof(uint64_t) > Bytes.size()) - return MCDisassembler::Fail; - uint64_t Reg = support::endian::read64le(Bytes.data() + Pos); - Pos += sizeof(uint64_t); - MI.addOperand(MCOperand::createReg(Reg)); - break; - } - case WebAssembly::OPERAND_F32IMM: - case WebAssembly::OPERAND_F64IMM: { - // TODO: MC converts all floating point immediate operands to double. - // This is fine for numeric values, but may cause NaNs to change bits. - if (Pos + sizeof(uint64_t) > Bytes.size()) - return MCDisassembler::Fail; - uint64_t Bits = support::endian::read64le(Bytes.data() + Pos); - Pos += sizeof(uint64_t); - double Imm; - memcpy(&Imm, &Bits, sizeof(Imm)); - MI.addOperand(MCOperand::createFPImm(Imm)); - break; - } - default: - llvm_unreachable("unimplemented operand kind"); - } - } - - // Read the extra operands. - assert(NumExtraOperands == 0 || Desc.isVariadic()); - for (unsigned i = 0; i < NumExtraOperands; ++i) { - if (Pos + sizeof(uint64_t) > Bytes.size()) - return MCDisassembler::Fail; - if (Desc.TSFlags & WebAssemblyII::VariableOpIsImmediate) { - // Decode extra immediate operands. - uint64_t Imm = support::endian::read64le(Bytes.data() + Pos); - MI.addOperand(MCOperand::createImm(Imm)); - } else { - // Decode extra register operands. - uint64_t Reg = support::endian::read64le(Bytes.data() + Pos); - MI.addOperand(MCOperand::createReg(Reg)); - } - Pos += sizeof(uint64_t); - } - - Size = Pos; - return MCDisassembler::Success; + return MCDisassembler::Fail; } -- 2.50.1