1f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===-- AMDGPUTargetStreamer.cpp - Mips Target Streamer Methods -----------===//
2f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//
3f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//                     The LLVM Compiler Infrastructure
4f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//
5f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source
6f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// License. See LICENSE.TXT for details.
7f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//
8f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===----------------------------------------------------------------------===//
9f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//
10f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// This file provides AMDGPU specific target streamer methods.
11f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//
12f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===----------------------------------------------------------------------===//
13f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
14f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "AMDGPUTargetStreamer.h"
15f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "SIDefines.h"
16f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "Utils/AMDGPUBaseInfo.h"
17f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/ADT/Twine.h"
18f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/MC/MCContext.h"
19f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/MC/MCELFStreamer.h"
20f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/MC/MCObjectFileInfo.h"
21f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/MC/MCSectionELF.h"
22f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/Support/ELF.h"
23f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar#include "llvm/Support/FormattedStream.h"
24f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
25f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarusing namespace llvm;
26f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
27f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetStreamer::AMDGPUTargetStreamer(MCStreamer &S)
28f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    : MCTargetStreamer(S) { }
29f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
30f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===----------------------------------------------------------------------===//
31f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// AMDGPUTargetAsmStreamer
32f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===----------------------------------------------------------------------===//
33f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
34f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetAsmStreamer::AMDGPUTargetAsmStreamer(MCStreamer &S,
35f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                                                 formatted_raw_ostream &OS)
36f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    : AMDGPUTargetStreamer(S), OS(OS) { }
37f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
38f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid
39f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetAsmStreamer::EmitDirectiveHSACodeObjectVersion(uint32_t Major,
40f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                                                           uint32_t Minor) {
41f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS << "\t.hsa_code_object_version " <<
42f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Twine(Major) << "," << Twine(Minor) << '\n';
43f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
44f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
45f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid
46f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetAsmStreamer::EmitDirectiveHSACodeObjectISA(uint32_t Major,
47f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                                                       uint32_t Minor,
48f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                                                       uint32_t Stepping,
49f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                                                       StringRef VendorName,
50f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                                                       StringRef ArchName) {
51f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS << "\t.hsa_code_object_isa " <<
52f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Twine(Major) << "," << Twine(Minor) << "," << Twine(Stepping) <<
53f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        ",\"" << VendorName << "\",\"" << ArchName << "\"\n";
54f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
55f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
56f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
57f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid
58f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetAsmStreamer::EmitAMDKernelCodeT(const amd_kernel_code_t &Header) {
59f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  uint64_t ComputePgmRsrc2 = (Header.compute_pgm_resource_registers >> 32);
60f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool EnableSGPRPrivateSegmentBuffer = (Header.code_properties &
61f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_ENABLE_SGPR_PRIVATE_SEGMENT_BUFFER);
62f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool EnableSGPRDispatchPtr = (Header.code_properties &
63f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_ENABLE_SGPR_DISPATCH_PTR);
64f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool EnableSGPRQueuePtr = (Header.code_properties &
65f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_ENABLE_SGPR_QUEUE_PTR);
66f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool EnableSGPRKernargSegmentPtr = (Header.code_properties &
67f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_ENABLE_SGPR_KERNARG_SEGMENT_PTR);
68f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool EnableSGPRDispatchID = (Header.code_properties &
69f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_ENABLE_SGPR_DISPATCH_ID);
70f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool EnableSGPRFlatScratchInit = (Header.code_properties &
71f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_ENABLE_SGPR_FLAT_SCRATCH_INIT);
72f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool EnableSGPRPrivateSegmentSize = (Header.code_properties &
73f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_ENABLE_SGPR_PRIVATE_SEGMENT_SIZE);
74f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool EnableSGPRGridWorkgroupCountX = (Header.code_properties &
75f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_ENABLE_SGPR_GRID_WORKGROUP_COUNT_X);
76f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool EnableSGPRGridWorkgroupCountY = (Header.code_properties &
77f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_ENABLE_SGPR_GRID_WORKGROUP_COUNT_Y);
78f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool EnableSGPRGridWorkgroupCountZ = (Header.code_properties &
79f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_ENABLE_SGPR_GRID_WORKGROUP_COUNT_Z);
80f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool EnableOrderedAppendGDS = (Header.code_properties &
81f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_ENABLE_ORDERED_APPEND_GDS);
82f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  uint32_t PrivateElementSize = (Header.code_properties &
83f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_PRIVATE_ELEMENT_SIZE) >>
84f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar          AMD_CODE_PROPERTY_PRIVATE_ELEMENT_SIZE_SHIFT;
85f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool IsPtr64 = (Header.code_properties & AMD_CODE_PROPERTY_IS_PTR64);
86f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool IsDynamicCallstack = (Header.code_properties &
87f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_IS_DYNAMIC_CALLSTACK);
88f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool IsDebugEnabled = (Header.code_properties &
89f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_IS_DEBUG_SUPPORTED);
90f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  bool IsXNackEnabled = (Header.code_properties &
91f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      AMD_CODE_PROPERTY_IS_XNACK_SUPPORTED);
92f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
93f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS << "\t.amd_kernel_code_t\n" <<
94f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tkernel_code_version_major = " <<
95f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.amd_kernel_code_version_major << '\n' <<
96f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tkernel_code_version_minor = " <<
97f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.amd_kernel_code_version_minor << '\n' <<
98f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tmachine_kind = " <<
99f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.amd_machine_kind << '\n' <<
100f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tmachine_version_major = " <<
101f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.amd_machine_version_major << '\n' <<
102f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tmachine_version_minor = " <<
103f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.amd_machine_version_minor << '\n' <<
104f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tmachine_version_stepping = " <<
105f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.amd_machine_version_stepping << '\n' <<
106f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tkernel_code_entry_byte_offset = " <<
107f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.kernel_code_entry_byte_offset << '\n' <<
108f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tkernel_code_prefetch_byte_size = " <<
109f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.kernel_code_prefetch_byte_size << '\n' <<
110f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tmax_scratch_backing_memory_byte_size = " <<
111f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.max_scratch_backing_memory_byte_size << '\n' <<
112f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc1_vgprs = " <<
113f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B848_VGPRS(Header.compute_pgm_resource_registers) << '\n' <<
114f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc1_sgprs = " <<
115f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B848_SGPRS(Header.compute_pgm_resource_registers) << '\n' <<
116f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc1_priority = " <<
117f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B848_PRIORITY(Header.compute_pgm_resource_registers) << '\n' <<
118f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc1_float_mode = " <<
119f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B848_FLOAT_MODE(Header.compute_pgm_resource_registers) << '\n' <<
120f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc1_priv = " <<
121f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B848_PRIV(Header.compute_pgm_resource_registers) << '\n' <<
122f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc1_dx10_clamp = " <<
123f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B848_DX10_CLAMP(Header.compute_pgm_resource_registers) << '\n' <<
124f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc1_debug_mode = " <<
125f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B848_DEBUG_MODE(Header.compute_pgm_resource_registers) << '\n' <<
126f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc1_ieee_mode = " <<
127f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B848_IEEE_MODE(Header.compute_pgm_resource_registers) << '\n' <<
128f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc2_scratch_en = " <<
129f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B84C_SCRATCH_EN(ComputePgmRsrc2) << '\n' <<
130f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc2_user_sgpr = " <<
131f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B84C_USER_SGPR(ComputePgmRsrc2) << '\n' <<
132f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc2_tgid_x_en = " <<
133f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B84C_TGID_X_EN(ComputePgmRsrc2) << '\n' <<
134f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc2_tgid_y_en = " <<
135f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B84C_TGID_Y_EN(ComputePgmRsrc2) << '\n' <<
136f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc2_tgid_z_en = " <<
137f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B84C_TGID_Z_EN(ComputePgmRsrc2) << '\n' <<
138f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc2_tg_size_en = " <<
139f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B84C_TG_SIZE_EN(ComputePgmRsrc2) << '\n' <<
140f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc2_tidig_comp_cnt = " <<
141f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B84C_TIDIG_COMP_CNT(ComputePgmRsrc2) << '\n' <<
142f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc2_excp_en_msb = " <<
143f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B84C_EXCP_EN_MSB(ComputePgmRsrc2) << '\n' <<
144f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc2_lds_size = " <<
145f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B84C_LDS_SIZE(ComputePgmRsrc2) << '\n' <<
146f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcompute_pgm_rsrc2_excp_en = " <<
147f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        G_00B84C_EXCP_EN(ComputePgmRsrc2) << '\n' <<
148f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
149f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tenable_sgpr_private_segment_buffer = " <<
150f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        EnableSGPRPrivateSegmentBuffer << '\n' <<
151f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tenable_sgpr_dispatch_ptr = " <<
152f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        EnableSGPRDispatchPtr << '\n' <<
153f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tenable_sgpr_queue_ptr = " <<
154f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        EnableSGPRQueuePtr << '\n' <<
155f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tenable_sgpr_kernarg_segment_ptr = " <<
156f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        EnableSGPRKernargSegmentPtr << '\n' <<
157f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tenable_sgpr_dispatch_id = " <<
158f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        EnableSGPRDispatchID << '\n' <<
159f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tenable_sgpr_flat_scratch_init = " <<
160f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        EnableSGPRFlatScratchInit << '\n' <<
161f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tenable_sgpr_private_segment_size = " <<
162f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        EnableSGPRPrivateSegmentSize << '\n' <<
163f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tenable_sgpr_grid_workgroup_count_x = " <<
164f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        EnableSGPRGridWorkgroupCountX << '\n' <<
165f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tenable_sgpr_grid_workgroup_count_y = " <<
166f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        EnableSGPRGridWorkgroupCountY << '\n' <<
167f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tenable_sgpr_grid_workgroup_count_z = " <<
168f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        EnableSGPRGridWorkgroupCountZ << '\n' <<
169f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tenable_ordered_append_gds = " <<
170f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        EnableOrderedAppendGDS << '\n' <<
171f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tprivate_element_size = " <<
172f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        PrivateElementSize << '\n' <<
173f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tis_ptr64 = " <<
174f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        IsPtr64 << '\n' <<
175f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tis_dynamic_callstack = " <<
176f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        IsDynamicCallstack << '\n' <<
177f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tis_debug_enabled = " <<
178f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        IsDebugEnabled << '\n' <<
179f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tis_xnack_enabled = " <<
180f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        IsXNackEnabled << '\n' <<
181f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tworkitem_private_segment_byte_size = " <<
182f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.workitem_private_segment_byte_size << '\n' <<
183f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tworkgroup_group_segment_byte_size = " <<
184f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.workgroup_group_segment_byte_size << '\n' <<
185f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tgds_segment_byte_size = " <<
186f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.gds_segment_byte_size << '\n' <<
187f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tkernarg_segment_byte_size = " <<
188f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.kernarg_segment_byte_size << '\n' <<
189f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tworkgroup_fbarrier_count = " <<
190f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.workgroup_fbarrier_count << '\n' <<
191f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\twavefront_sgpr_count = " <<
192f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.wavefront_sgpr_count << '\n' <<
193f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tworkitem_vgpr_count = " <<
194f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.workitem_vgpr_count << '\n' <<
195f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\treserved_vgpr_first = " <<
196f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.reserved_vgpr_first << '\n' <<
197f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\treserved_vgpr_count = " <<
198f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.reserved_vgpr_count << '\n' <<
199f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\treserved_sgpr_first = " <<
200f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.reserved_sgpr_first << '\n' <<
201f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\treserved_sgpr_count = " <<
202f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.reserved_sgpr_count << '\n' <<
203f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tdebug_wavefront_private_segment_offset_sgpr = " <<
204f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.debug_wavefront_private_segment_offset_sgpr << '\n' <<
205f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tdebug_private_segment_buffer_sgpr = " <<
206f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.debug_private_segment_buffer_sgpr << '\n' <<
207f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tkernarg_segment_alignment = " <<
208f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        (uint32_t)Header.kernarg_segment_alignment << '\n' <<
209f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tgroup_segment_alignment = " <<
210f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        (uint32_t)Header.group_segment_alignment << '\n' <<
211f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tprivate_segment_alignment = " <<
212f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        (uint32_t)Header.private_segment_alignment << '\n' <<
213f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\twavefront_size = " <<
214f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        (uint32_t)Header.wavefront_size << '\n' <<
215f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\tcall_convention = " <<
216f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.call_convention << '\n' <<
217f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t\truntime_loader_kernel_symbol = " <<
218f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar        Header.runtime_loader_kernel_symbol << '\n' <<
219f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    // TODO: control_directives
220f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    "\t.end_amd_kernel_code_t\n";
221f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
222f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
223f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
224f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid AMDGPUTargetAsmStreamer::EmitAMDGPUSymbolType(StringRef SymbolName,
225f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                                                   unsigned Type) {
226f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  switch (Type) {
227f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    default: llvm_unreachable("Invalid AMDGPU symbol type");
228f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    case ELF::STT_AMDGPU_HSA_KERNEL:
229f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      OS << "\t.amdgpu_hsa_kernel " << SymbolName << '\n' ;
230f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      break;
231f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  }
232f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
233f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
234f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid AMDGPUTargetAsmStreamer::EmitAMDGPUHsaModuleScopeGlobal(
235f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    StringRef GlobalName) {
236f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS << "\t.amdgpu_hsa_module_global " << GlobalName << '\n';
237f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
238f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
239f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid AMDGPUTargetAsmStreamer::EmitAMDGPUHsaProgramScopeGlobal(
240f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    StringRef GlobalName) {
241f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS << "\t.amdgpu_hsa_program_global " << GlobalName << '\n';
242f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
243f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
244f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===----------------------------------------------------------------------===//
245f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar// AMDGPUTargetELFStreamer
246f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar//===----------------------------------------------------------------------===//
247f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
248f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetELFStreamer::AMDGPUTargetELFStreamer(MCStreamer &S)
249f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    : AMDGPUTargetStreamer(S), Streamer(S) { }
250f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
251f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarMCELFStreamer &AMDGPUTargetELFStreamer::getStreamer() {
252f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  return static_cast<MCELFStreamer &>(Streamer);
253f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
254f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
255f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid
256f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetELFStreamer::EmitDirectiveHSACodeObjectVersion(uint32_t Major,
257f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                                                           uint32_t Minor) {
258f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  MCStreamer &OS = getStreamer();
259f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  MCSectionELF *Note = OS.getContext().getELFSection(".note", ELF::SHT_NOTE, 0);
260f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
261f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  unsigned NameSZ = 4;
262f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
263f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.PushSection();
264f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.SwitchSection(Note);
265f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(NameSZ, 4);                            // namesz
266f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(8, 4);                                 // descz
267f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(NT_AMDGPU_HSA_CODE_OBJECT_VERSION, 4); // type
268f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitBytes(StringRef("AMD", NameSZ));                // name
269f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(Major, 4);                             // desc
270f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(Minor, 4);
271f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitValueToAlignment(4);
272f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.PopSection();
273f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
274f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
275f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid
276f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetELFStreamer::EmitDirectiveHSACodeObjectISA(uint32_t Major,
277f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                                                       uint32_t Minor,
278f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                                                       uint32_t Stepping,
279f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                                                       StringRef VendorName,
280f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                                                       StringRef ArchName) {
281f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  MCStreamer &OS = getStreamer();
282f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  MCSectionELF *Note = OS.getContext().getELFSection(".note", ELF::SHT_NOTE, 0);
283f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
284f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  unsigned NameSZ = 4;
285f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  uint16_t VendorNameSize = VendorName.size() + 1;
286f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  uint16_t ArchNameSize = ArchName.size() + 1;
287f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  unsigned DescSZ = sizeof(VendorNameSize) + sizeof(ArchNameSize) +
288f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                    sizeof(Major) + sizeof(Minor) + sizeof(Stepping) +
289f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                    VendorNameSize + ArchNameSize;
290f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
291f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.PushSection();
292f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.SwitchSection(Note);
293f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(NameSZ, 4);                            // namesz
294f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(DescSZ, 4);                            // descsz
295f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(NT_AMDGPU_HSA_ISA, 4);                 // type
296f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitBytes(StringRef("AMD", 4));                     // name
297f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(VendorNameSize, 2);                    // desc
298f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(ArchNameSize, 2);
299f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(Major, 4);
300f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(Minor, 4);
301f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(Stepping, 4);
302f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitBytes(VendorName);
303f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(0, 1); // NULL terminate VendorName
304f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitBytes(ArchName);
305f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitIntValue(0, 1); // NULL terminte ArchName
306f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitValueToAlignment(4);
307f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.PopSection();
308f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
309f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
310f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid
311f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga NainarAMDGPUTargetELFStreamer::EmitAMDKernelCodeT(const amd_kernel_code_t &Header) {
312f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
313f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  MCStreamer &OS = getStreamer();
314f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.PushSection();
315f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.EmitBytes(StringRef((const char*)&Header, sizeof(Header)));
316f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  OS.PopSection();
317f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
318f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
319f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid AMDGPUTargetELFStreamer::EmitAMDGPUSymbolType(StringRef SymbolName,
320f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar                                                   unsigned Type) {
321f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  MCSymbolELF *Symbol = cast<MCSymbolELF>(
322f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      getStreamer().getContext().getOrCreateSymbol(SymbolName));
323f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  Symbol->setType(ELF::STT_AMDGPU_HSA_KERNEL);
324f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
325f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
326f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid AMDGPUTargetELFStreamer::EmitAMDGPUHsaModuleScopeGlobal(
327f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    StringRef GlobalName) {
328f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
329f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  MCSymbolELF *Symbol = cast<MCSymbolELF>(
330f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      getStreamer().getContext().getOrCreateSymbol(GlobalName));
331f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  Symbol->setType(ELF::STT_OBJECT);
332f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  Symbol->setBinding(ELF::STB_LOCAL);
333f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
334f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
335f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid AMDGPUTargetELFStreamer::EmitAMDGPUHsaProgramScopeGlobal(
336f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar    StringRef GlobalName) {
337f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
338f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  MCSymbolELF *Symbol = cast<MCSymbolELF>(
339f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar      getStreamer().getContext().getOrCreateSymbol(GlobalName));
340f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  Symbol->setType(ELF::STT_OBJECT);
341f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  Symbol->setBinding(ELF::STB_GLOBAL);
342f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
343