annotate gcc/brig/brigfrontend/brig-queue-inst-handler.cc @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* brig-queue-inst-handler.cc -- brig user mode queue related instruction
kono
parents:
diff changeset
2 handling
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
3 Copyright (C) 2016-2018 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
4 Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
kono
parents:
diff changeset
5 for General Processor Tech.
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 This file is part of GCC.
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 GCC is free software; you can redistribute it and/or modify it under
kono
parents:
diff changeset
10 the terms of the GNU General Public License as published by the Free
kono
parents:
diff changeset
11 Software Foundation; either version 3, or (at your option) any later
kono
parents:
diff changeset
12 version.
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
kono
parents:
diff changeset
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
kono
parents:
diff changeset
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
kono
parents:
diff changeset
17 for more details.
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
20 along with GCC; see the file COPYING3. If not see
kono
parents:
diff changeset
21 <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 #include <sstream>
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25 #include "brig-code-entry-handler.h"
kono
parents:
diff changeset
26 #include "brig-util.h"
kono
parents:
diff changeset
27 #include "convert.h"
kono
parents:
diff changeset
28 #include "tree-pretty-print.h"
kono
parents:
diff changeset
29 #include "errors.h"
kono
parents:
diff changeset
30 #include "diagnostic-core.h"
kono
parents:
diff changeset
31 #include "brig-builtins.h"
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 brig_queue_inst_handler::brig_queue_inst_handler (brig_to_generic &parent)
kono
parents:
diff changeset
34 : brig_code_entry_handler (parent)
kono
parents:
diff changeset
35 {
kono
parents:
diff changeset
36 }
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 size_t
kono
parents:
diff changeset
39 brig_queue_inst_handler::operator () (const BrigBase *base)
kono
parents:
diff changeset
40 {
kono
parents:
diff changeset
41 const BrigInstBase &inst_base = *(const BrigInstBase *) base;
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 tree_stl_vec operands = build_operands (inst_base);
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 if (inst_base.opcode == BRIG_OPCODE_LDQUEUEWRITEINDEX
kono
parents:
diff changeset
46 || inst_base.opcode == BRIG_OPCODE_LDQUEUEREADINDEX)
kono
parents:
diff changeset
47 {
kono
parents:
diff changeset
48 tree builtin
kono
parents:
diff changeset
49 = inst_base.opcode == BRIG_OPCODE_LDQUEUEWRITEINDEX
kono
parents:
diff changeset
50 ? builtin_decl_explicit (BUILT_IN_HSAIL_LDQUEUEWRITEINDEX)
kono
parents:
diff changeset
51 : builtin_decl_explicit (BUILT_IN_HSAIL_LDQUEUEREADINDEX);
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 tree expr
kono
parents:
diff changeset
54 = call_builtin (builtin, 1, uint64_type_node,
kono
parents:
diff changeset
55 uint64_type_node, operands[1]);
kono
parents:
diff changeset
56 build_output_assignment (inst_base, operands[0], expr);
kono
parents:
diff changeset
57 }
kono
parents:
diff changeset
58 else if (inst_base.opcode == BRIG_OPCODE_STQUEUEWRITEINDEX
kono
parents:
diff changeset
59 || inst_base.opcode == BRIG_OPCODE_STQUEUEREADINDEX)
kono
parents:
diff changeset
60 {
kono
parents:
diff changeset
61 tree builtin
kono
parents:
diff changeset
62 = inst_base.opcode == BRIG_OPCODE_STQUEUEWRITEINDEX
kono
parents:
diff changeset
63 ? builtin_decl_explicit (BUILT_IN_HSAIL_STQUEUEWRITEINDEX)
kono
parents:
diff changeset
64 : builtin_decl_explicit (BUILT_IN_HSAIL_STQUEUEREADINDEX);
kono
parents:
diff changeset
65
kono
parents:
diff changeset
66 call_builtin (builtin, 2, void_type_node,
kono
parents:
diff changeset
67 uint64_type_node, operands[0], uint64_type_node,
kono
parents:
diff changeset
68 operands[1]);
kono
parents:
diff changeset
69 }
kono
parents:
diff changeset
70 else if (inst_base.opcode == BRIG_OPCODE_ADDQUEUEWRITEINDEX)
kono
parents:
diff changeset
71 {
kono
parents:
diff changeset
72 tree builtin = builtin_decl_explicit (BUILT_IN_HSAIL_ADDQUEUEWRITEINDEX);
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74 tree expr = call_builtin (builtin, 2,
kono
parents:
diff changeset
75 uint64_type_node, uint64_type_node, operands[1],
kono
parents:
diff changeset
76 uint64_type_node, operands[2]);
kono
parents:
diff changeset
77 build_output_assignment (inst_base, operands[0], expr);
kono
parents:
diff changeset
78 }
kono
parents:
diff changeset
79 else if (inst_base.opcode == BRIG_OPCODE_CASQUEUEWRITEINDEX)
kono
parents:
diff changeset
80 {
kono
parents:
diff changeset
81 tree builtin = builtin_decl_explicit (BUILT_IN_HSAIL_CASQUEUEWRITEINDEX);
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83 tree expr
kono
parents:
diff changeset
84 = call_builtin (builtin, 3, uint64_type_node,
kono
parents:
diff changeset
85 uint64_type_node, operands[1], uint64_type_node,
kono
parents:
diff changeset
86 operands[2], uint64_type_node, operands[3]);
kono
parents:
diff changeset
87 build_output_assignment (inst_base, operands[0], expr);
kono
parents:
diff changeset
88 }
kono
parents:
diff changeset
89 else
kono
parents:
diff changeset
90 gcc_unreachable ();
kono
parents:
diff changeset
91
kono
parents:
diff changeset
92 return base->byteCount;
kono
parents:
diff changeset
93 }