14#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYMCTARGETDESC_H
15#define LLVM_LIB_TARGET_WEBASSEMBLY_MCTARGETDESC_WEBASSEMBLYMCTARGETDESC_H
17#include "../WebAssemblySubtarget.h"
28class MCObjectTargetWriter;
35std::unique_ptr<MCObjectTargetWriter>
38namespace WebAssembly {
83namespace WebAssemblyII {
121#define GET_REGINFO_ENUM
122#include "WebAssemblyGenRegisterInfo.inc"
126#define GET_INSTRINFO_ENUM
127#define GET_INSTRINFO_MC_HELPER_DECLS
128#include "WebAssemblyGenInstrInfo.inc"
131namespace WebAssembly {
134static const unsigned Nop = 0x01;
135static const unsigned End = 0x0b;
140#define WASM_LOAD_STORE(NAME) \
141 case WebAssembly::NAME##_A32: \
142 case WebAssembly::NAME##_A64: \
143 case WebAssembly::NAME##_A32_S: \
144 case WebAssembly::NAME##_A64_S:
264#undef WASM_LOAD_STORE
277 case WebAssembly::ARGUMENT_i32:
278 case WebAssembly::ARGUMENT_i32_S:
279 case WebAssembly::ARGUMENT_i64:
280 case WebAssembly::ARGUMENT_i64_S:
281 case WebAssembly::ARGUMENT_f32:
282 case WebAssembly::ARGUMENT_f32_S:
283 case WebAssembly::ARGUMENT_f64:
284 case WebAssembly::ARGUMENT_f64_S:
285 case WebAssembly::ARGUMENT_v16i8:
286 case WebAssembly::ARGUMENT_v16i8_S:
287 case WebAssembly::ARGUMENT_v8i16:
288 case WebAssembly::ARGUMENT_v8i16_S:
289 case WebAssembly::ARGUMENT_v4i32:
290 case WebAssembly::ARGUMENT_v4i32_S:
291 case WebAssembly::ARGUMENT_v2i64:
292 case WebAssembly::ARGUMENT_v2i64_S:
293 case WebAssembly::ARGUMENT_v4f32:
294 case WebAssembly::ARGUMENT_v4f32_S:
295 case WebAssembly::ARGUMENT_v2f64:
296 case WebAssembly::ARGUMENT_v2f64_S:
297 case WebAssembly::ARGUMENT_funcref:
298 case WebAssembly::ARGUMENT_funcref_S:
299 case WebAssembly::ARGUMENT_externref:
300 case WebAssembly::ARGUMENT_externref_S:
309 case WebAssembly::COPY_I32:
310 case WebAssembly::COPY_I32_S:
311 case WebAssembly::COPY_I64:
312 case WebAssembly::COPY_I64_S:
313 case WebAssembly::COPY_F32:
314 case WebAssembly::COPY_F32_S:
315 case WebAssembly::COPY_F64:
316 case WebAssembly::COPY_F64_S:
317 case WebAssembly::COPY_V128:
318 case WebAssembly::COPY_V128_S:
319 case WebAssembly::COPY_FUNCREF:
320 case WebAssembly::COPY_FUNCREF_S:
321 case WebAssembly::COPY_EXTERNREF:
322 case WebAssembly::COPY_EXTERNREF_S:
331 case WebAssembly::TEE_I32:
332 case WebAssembly::TEE_I32_S:
333 case WebAssembly::TEE_I64:
334 case WebAssembly::TEE_I64_S:
335 case WebAssembly::TEE_F32:
336 case WebAssembly::TEE_F32_S:
337 case WebAssembly::TEE_F64:
338 case WebAssembly::TEE_F64_S:
339 case WebAssembly::TEE_V128:
340 case WebAssembly::TEE_V128_S:
341 case WebAssembly::TEE_FUNCREF:
342 case WebAssembly::TEE_FUNCREF_S:
343 case WebAssembly::TEE_EXTERNREF:
344 case WebAssembly::TEE_EXTERNREF_S:
353 case WebAssembly::CALL:
354 case WebAssembly::CALL_S:
355 case WebAssembly::RET_CALL:
356 case WebAssembly::RET_CALL_S:
365 case WebAssembly::CALL_INDIRECT:
366 case WebAssembly::CALL_INDIRECT_S:
367 case WebAssembly::RET_CALL_INDIRECT:
368 case WebAssembly::RET_CALL_INDIRECT_S:
376 switch (
MI.getOpcode()) {
377 case WebAssembly::BR_TABLE_I32:
378 case WebAssembly::BR_TABLE_I32_S:
379 case WebAssembly::BR_TABLE_I64:
380 case WebAssembly::BR_TABLE_I64_S:
389 case WebAssembly::BLOCK:
390 case WebAssembly::BLOCK_S:
391 case WebAssembly::END_BLOCK:
392 case WebAssembly::END_BLOCK_S:
393 case WebAssembly::LOOP:
394 case WebAssembly::LOOP_S:
395 case WebAssembly::END_LOOP:
396 case WebAssembly::END_LOOP_S:
397 case WebAssembly::TRY:
398 case WebAssembly::TRY_S:
399 case WebAssembly::END_TRY:
400 case WebAssembly::END_TRY_S:
409 case WebAssembly::CATCH:
410 case WebAssembly::CATCH_S:
411 case WebAssembly::CATCH_ALL:
412 case WebAssembly::CATCH_ALL_S:
421 case WebAssembly::LOCAL_GET_I32:
422 case WebAssembly::LOCAL_GET_I32_S:
423 case WebAssembly::LOCAL_GET_I64:
424 case WebAssembly::LOCAL_GET_I64_S:
425 case WebAssembly::LOCAL_GET_F32:
426 case WebAssembly::LOCAL_GET_F32_S:
427 case WebAssembly::LOCAL_GET_F64:
428 case WebAssembly::LOCAL_GET_F64_S:
429 case WebAssembly::LOCAL_GET_V128:
430 case WebAssembly::LOCAL_GET_V128_S:
431 case WebAssembly::LOCAL_GET_FUNCREF:
432 case WebAssembly::LOCAL_GET_FUNCREF_S:
433 case WebAssembly::LOCAL_GET_EXTERNREF:
434 case WebAssembly::LOCAL_GET_EXTERNREF_S:
443 case WebAssembly::LOCAL_SET_I32:
444 case WebAssembly::LOCAL_SET_I32_S:
445 case WebAssembly::LOCAL_SET_I64:
446 case WebAssembly::LOCAL_SET_I64_S:
447 case WebAssembly::LOCAL_SET_F32:
448 case WebAssembly::LOCAL_SET_F32_S:
449 case WebAssembly::LOCAL_SET_F64:
450 case WebAssembly::LOCAL_SET_F64_S:
451 case WebAssembly::LOCAL_SET_V128:
452 case WebAssembly::LOCAL_SET_V128_S:
453 case WebAssembly::LOCAL_SET_FUNCREF:
454 case WebAssembly::LOCAL_SET_FUNCREF_S:
455 case WebAssembly::LOCAL_SET_EXTERNREF:
456 case WebAssembly::LOCAL_SET_EXTERNREF_S:
465 case WebAssembly::LOCAL_TEE_I32:
466 case WebAssembly::LOCAL_TEE_I32_S:
467 case WebAssembly::LOCAL_TEE_I64:
468 case WebAssembly::LOCAL_TEE_I64_S:
469 case WebAssembly::LOCAL_TEE_F32:
470 case WebAssembly::LOCAL_TEE_F32_S:
471 case WebAssembly::LOCAL_TEE_F64:
472 case WebAssembly::LOCAL_TEE_F64_S:
473 case WebAssembly::LOCAL_TEE_V128:
474 case WebAssembly::LOCAL_TEE_V128_S:
475 case WebAssembly::LOCAL_TEE_FUNCREF:
476 case WebAssembly::LOCAL_TEE_FUNCREF_S:
477 case WebAssembly::LOCAL_TEE_EXTERNREF:
478 case WebAssembly::LOCAL_TEE_EXTERNREF_S:
#define WASM_LOAD_STORE(NAME)
Representation of each machine instruction.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
TOF
Target Operand Flag enum.
bool isLocalTee(unsigned Opc)
bool isBrTable(const MachineInstr &MI)
bool isArgument(unsigned Opc)
bool isCallIndirect(unsigned Opc)
unsigned GetDefaultP2Align(unsigned Opc)
bool isMarker(unsigned Opc)
bool isCatch(unsigned Opc)
static const unsigned Nop
Instruction opcodes emitted via means other than CodeGen.
bool isCopy(unsigned Opc)
static const unsigned End
@ OPERAND_GLOBAL
Global index.
@ OPERAND_OFFSET64
64-bit unsigned memory offsets.
@ OPERAND_I32IMM
32-bit integer immediates.
@ OPERAND_P2ALIGN
p2align immediate for load and store address alignment.
@ OPERAND_TABLE
32-bit unsigned table number.
@ OPERAND_LOCAL
Local index.
@ OPERAND_VEC_I64IMM
64-bit vector lane immediate
@ OPERAND_VEC_I16IMM
16-bit vector lane immediate
@ OPERAND_TYPEINDEX
type signature immediate for call_indirect.
@ OPERAND_FUNCTION32
32-bit unsigned function indices.
@ OPERAND_F32IMM
32-bit floating-point immediates.
@ OPERAND_BASIC_BLOCK
Basic block label in a branch construct.
@ OPERAND_VEC_I32IMM
32-bit vector lane immediate
@ OPERAND_BRLIST
A list of branch targets for br_list.
@ OPERAND_F64IMM
64-bit floating-point immediates.
@ OPERAND_VEC_I8IMM
8-bit vector lane immediate
@ OPERAND_SIGNATURE
signature immediate for block/loop.
@ OPERAND_I64IMM
64-bit integer immediates.
@ OPERAND_OFFSET32
32-bit unsigned memory offsets.
unsigned GetDefaultP2AlignAny(unsigned Opc)
Return the default p2align value for a load or store with the given opcode.
bool isCallDirect(unsigned Opc)
bool isLocalSet(unsigned Opc)
bool isLocalGet(unsigned Opc)
This is an optimization pass for GlobalISel generic memory operations.
MCAsmBackend * createWebAssemblyAsmBackend(const Triple &TT)
MCCodeEmitter * createWebAssemblyMCCodeEmitter(const MCInstrInfo &MCII)
std::unique_ptr< MCObjectTargetWriter > createWebAssemblyWasmObjectWriter(bool Is64Bit, bool IsEmscripten)
This struct is a compact representation of a valid (non-zero power of two) alignment.