blob: 5f8c78ed16834a5eb8979dd00a6532c42b09a068 [file] [log] [blame]
Dan Gohman10e730a2015-06-29 23:51:55 +00001//===-- WebAssemblyMCAsmInfo.cpp - WebAssembly asm properties -------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9///
10/// \file
11/// \brief This file contains the declarations of the WebAssemblyMCAsmInfo
12/// properties.
13///
14//===----------------------------------------------------------------------===//
15
16#include "WebAssemblyMCAsmInfo.h"
17#include "llvm/ADT/Triple.h"
Dan Gohman10e730a2015-06-29 23:51:55 +000018using namespace llvm;
19
20#define DEBUG_TYPE "wasm-mc-asm-info"
21
Dan Gohman18eafb62017-02-22 01:23:18 +000022WebAssemblyMCAsmInfoELF::~WebAssemblyMCAsmInfoELF() {}
Dan Gohman10e730a2015-06-29 23:51:55 +000023
Dan Gohman18eafb62017-02-22 01:23:18 +000024WebAssemblyMCAsmInfoELF::WebAssemblyMCAsmInfoELF(const Triple &T) {
Benjamin Kramer54c781a2017-04-17 19:08:41 +000025 CodePointerSize = CalleeSaveStackSlotSize = T.isArch64Bit() ? 8 : 4;
Dan Gohman10e730a2015-06-29 23:51:55 +000026
27 // TODO: What should MaxInstLength be?
28
Dan Gohman10e730a2015-06-29 23:51:55 +000029 UseDataRegionDirectives = true;
30
JF Bastienb9ec4c62016-01-07 23:18:29 +000031 // Use .skip instead of .zero because .zero is confusing when used with two
32 // arguments (it doesn't actually zero things out).
33 ZeroDirective = "\t.skip\t";
34
Dan Gohman10e730a2015-06-29 23:51:55 +000035 Data8bitsDirective = "\t.int8\t";
36 Data16bitsDirective = "\t.int16\t";
37 Data32bitsDirective = "\t.int32\t";
38 Data64bitsDirective = "\t.int64\t";
39
40 AlignmentIsInBytes = false;
41 COMMDirectiveAlignmentIsInBytes = false;
42 LCOMMDirectiveAlignmentType = LCOMM::Log2Alignment;
43
Dan Gohman10e730a2015-06-29 23:51:55 +000044 SupportsDebugInformation = true;
45
46 // For now, WebAssembly does not support exceptions.
47 ExceptionsType = ExceptionHandling::None;
48
Dan Gohman10e730a2015-06-29 23:51:55 +000049 // TODO: UseIntegratedAssembler?
Dan Gohman2f301f32016-01-15 23:59:13 +000050
51 // WebAssembly's stack is never executable.
52 UsesNonexecutableStackSection = false;
Dan Gohman10e730a2015-06-29 23:51:55 +000053}
Dan Gohman18eafb62017-02-22 01:23:18 +000054
55WebAssemblyMCAsmInfo::~WebAssemblyMCAsmInfo() {}
56
57WebAssemblyMCAsmInfo::WebAssemblyMCAsmInfo(const Triple &T) {
Benjamin Kramer54c781a2017-04-17 19:08:41 +000058 CodePointerSize = CalleeSaveStackSlotSize = T.isArch64Bit() ? 8 : 4;
Dan Gohman18eafb62017-02-22 01:23:18 +000059
60 // TODO: What should MaxInstLength be?
61
62 UseDataRegionDirectives = true;
63
64 // Use .skip instead of .zero because .zero is confusing when used with two
65 // arguments (it doesn't actually zero things out).
66 ZeroDirective = "\t.skip\t";
67
68 Data8bitsDirective = "\t.int8\t";
69 Data16bitsDirective = "\t.int16\t";
70 Data32bitsDirective = "\t.int32\t";
71 Data64bitsDirective = "\t.int64\t";
72
73 AlignmentIsInBytes = false;
74 COMMDirectiveAlignmentIsInBytes = false;
75 LCOMMDirectiveAlignmentType = LCOMM::Log2Alignment;
76
77 SupportsDebugInformation = true;
78
79 // For now, WebAssembly does not support exceptions.
80 ExceptionsType = ExceptionHandling::None;
81
82 // TODO: UseIntegratedAssembler?
83}