mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
[WebAssembly] Define OperandTypes for decoding immediate values.
llvm-svn: 257438
This commit is contained in:
parent
9a08bce090
commit
07131ec8af
@ -15,6 +15,7 @@
|
||||
#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYMCTARGETDESC_H
|
||||
#define LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYMCTARGETDESC_H
|
||||
|
||||
#include "llvm/MC/MCInstrDesc.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
|
||||
namespace llvm {
|
||||
@ -40,6 +41,26 @@ MCAsmBackend *createWebAssemblyAsmBackend(const Triple &TT);
|
||||
MCObjectWriter *createWebAssemblyELFObjectWriter(raw_pwrite_stream &OS,
|
||||
bool Is64Bit, uint8_t OSABI);
|
||||
|
||||
namespace WebAssembly {
|
||||
enum OperandType {
|
||||
/// Basic block label in a branch construct.
|
||||
OPERAND_BASIC_BLOCK = MCOI::OPERAND_FIRST_TARGET,
|
||||
/// Floating-point immediate.
|
||||
OPERAND_FPIMM
|
||||
};
|
||||
} // end namespace WebAssembly
|
||||
|
||||
namespace WebAssemblyII {
|
||||
enum {
|
||||
// For variadic instructions, this flag indicates whether an operand
|
||||
// in the variable_ops range is an immediate value.
|
||||
VariableOpIsImmediate = (1 << 0),
|
||||
// For immediate values in the variable_ops range, this flag indicates
|
||||
// whether the value represents a type.
|
||||
VariableOpImmediateIsType = (1 << 1),
|
||||
};
|
||||
} // end namespace WebAssemblyII
|
||||
|
||||
} // end namespace llvm
|
||||
|
||||
// Defines symbolic names for WebAssembly registers. This defines a mapping from
|
||||
@ -56,15 +77,4 @@ MCObjectWriter *createWebAssemblyELFObjectWriter(raw_pwrite_stream &OS,
|
||||
#define GET_SUBTARGETINFO_ENUM
|
||||
#include "WebAssemblyGenSubtargetInfo.inc"
|
||||
|
||||
namespace WebAssemblyII {
|
||||
enum {
|
||||
// For variadic instructions, this flag indicates whether an operand
|
||||
// in the variable_ops range is an immediate value.
|
||||
VariableOpIsImmediate = (1 << 0),
|
||||
// For immediate values in the variable_ops range, this flag indicates
|
||||
// whether the value represents a type.
|
||||
VariableOpImmediateIsType = (1 << 1),
|
||||
};
|
||||
} // end namespace WebAssemblyII
|
||||
|
||||
#endif
|
||||
|
@ -66,8 +66,18 @@ def WebAssemblywrapper : SDNode<"WebAssemblyISD::Wrapper",
|
||||
// WebAssembly-specific Operands.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
let OperandNamespace = "WebAssembly" in {
|
||||
|
||||
let OperandType = "OPERAND_BASIC_BLOCK" in
|
||||
def bb_op : Operand<OtherVT>;
|
||||
|
||||
let OperandType = "OPERAND_FPIMM" in {
|
||||
def f32imm_op : Operand<f32>;
|
||||
def f64imm_op : Operand<f64>;
|
||||
} // OperandType = "OPERAND_FPIMM"
|
||||
|
||||
} // OperandNamespace = "WebAssembly"
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// WebAssembly Instruction Format Definitions.
|
||||
//===----------------------------------------------------------------------===//
|
||||
@ -120,10 +130,10 @@ def CONST_I32 : I<(outs I32:$res), (ins i32imm:$imm),
|
||||
def CONST_I64 : I<(outs I64:$res), (ins i64imm:$imm),
|
||||
[(set I64:$res, imm:$imm)],
|
||||
"i64.const\t$res, $imm">;
|
||||
def CONST_F32 : I<(outs F32:$res), (ins f32imm:$imm),
|
||||
def CONST_F32 : I<(outs F32:$res), (ins f32imm_op:$imm),
|
||||
[(set F32:$res, fpimm:$imm)],
|
||||
"f32.const\t$res, $imm">;
|
||||
def CONST_F64 : I<(outs F64:$res), (ins f64imm:$imm),
|
||||
def CONST_F64 : I<(outs F64:$res), (ins f64imm_op:$imm),
|
||||
[(set F64:$res, fpimm:$imm)],
|
||||
"f64.const\t$res, $imm">;
|
||||
} // isMoveImm = 1
|
||||
|
Loading…
Reference in New Issue
Block a user