1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**************************************************************************
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2010 Luca Barbieri
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a copy of this software and associated documentation files (the
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish,
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sublicense, and/or sell copies of the Software, and to
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions:
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * portions of the Software.
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "sm4.h"
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// TODO: we should fix this to output the same syntax as fxc, if sm4_dump_short_syntax is set
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbool sm4_dump_short_syntax = true;
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstd::ostream& operator <<(std::ostream& out, const sm4_op& op)
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	if(op.neg)
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << '-';
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	if(op.abs)
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << '|';
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	if(op.file == SM4_FILE_IMMEDIATE32)
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	{
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << "l(";
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		for(unsigned i = 0; i < op.comps; ++i)
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		{
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			if(i)
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				out << ", ";
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			out << op.imm_values[i].f32;
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		}
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << ")";
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	}
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	else if(op.file == SM4_FILE_IMMEDIATE64)
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	{
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << "d(";
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		for(unsigned i = 0; i < op.comps; ++i)
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		{
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			if(i)
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				out << ", ";
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			out << op.imm_values[i].f64;
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		}
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << ")";
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		return out;
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	}
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	else
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	{
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		bool naked = false;
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		if(sm4_dump_short_syntax)
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		{
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			switch(op.file)
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			{
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			case SM4_FILE_TEMP:
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			case SM4_FILE_INPUT:
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			case SM4_FILE_OUTPUT:
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			case SM4_FILE_CONSTANT_BUFFER:
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			case SM4_FILE_INDEXABLE_TEMP:
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			case SM4_FILE_UNORDERED_ACCESS_VIEW:
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			case SM4_FILE_THREAD_GROUP_SHARED_MEMORY:
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				naked = true;
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				break;
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			default:
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				naked = false;
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				break;
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			}
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		}
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << (sm4_dump_short_syntax ? sm4_shortfile_names : sm4_file_names)[op.file];
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		if(op.indices[0].reg.get())
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			naked = false;
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		for(unsigned i = 0; i < op.num_indices; ++i)
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		{
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			if(!naked || i)
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				out << '[';
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			if(op.indices[i].reg.get())
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			{
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				out << *op.indices[i].reg;
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				if(op.indices[i].disp)
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org					out << '+' << op.indices[i].disp;
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			}
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			else
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				out << op.indices[i].disp;
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			if(!naked || i)
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				out << ']';
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		}
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		if(op.comps)
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		{
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			switch(op.mode)
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			{
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			case SM4_OPERAND_MODE_MASK:
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				out << (sm4_dump_short_syntax ? '.' : '!');
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				for(unsigned i = 0; i < op.comps; ++i)
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				{
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org					if(op.mask & (1 << i))
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org						out << "xyzw"[i];
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				}
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				break;
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			case SM4_OPERAND_MODE_SWIZZLE:
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				out << '.';
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				for(unsigned i = 0; i < op.comps; ++i)
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org					out << "xyzw"[op.swizzle[i]];
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				break;
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			case SM4_OPERAND_MODE_SCALAR:
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				out << (sm4_dump_short_syntax ? '.' : ':');
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				out << "xyzw"[op.swizzle[0]];
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				break;
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			}
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		}
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	}
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	if(op.abs)
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << '|';
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	return out;
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstd::ostream& operator <<(std::ostream& out, const sm4_dcl& dcl)
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	out << sm4_opcode_names[dcl.opcode];
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	switch(dcl.opcode)
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	{
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	case SM4_OPCODE_DCL_GLOBAL_FLAGS:
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		if(dcl.dcl_global_flags.allow_refactoring)
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			out << " refactoringAllowed";
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		if(dcl.dcl_global_flags.early_depth_stencil)
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			out << " forceEarlyDepthStencil";
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		if(dcl.dcl_global_flags.fp64)
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			out << " enableDoublePrecisionFloatOps";
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		if(dcl.dcl_global_flags.enable_raw_and_structured_in_non_cs)
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			out << " enableRawAndStructuredBuffers";
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		break;
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	case SM4_OPCODE_DCL_INPUT_PS:
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	case SM4_OPCODE_DCL_INPUT_PS_SIV:
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	case SM4_OPCODE_DCL_INPUT_PS_SGV:
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << ' ' << sm4_interpolation_names[dcl.dcl_input_ps.interpolation];
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		break;
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	case SM4_OPCODE_DCL_TEMPS:
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << ' ' << dcl.num;
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		break;
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	default:
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		break;
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	}
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	if(dcl.op.get())
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << ' ' << *dcl.op;
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	switch(dcl.opcode)
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	{
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	case SM4_OPCODE_DCL_CONSTANT_BUFFER:
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << ", " << (dcl.dcl_constant_buffer.dynamic ? "dynamicIndexed" : "immediateIndexed");
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		break;
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	case SM4_OPCODE_DCL_INPUT_SIV:
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	case SM4_OPCODE_DCL_INPUT_SGV:
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	case SM4_OPCODE_DCL_OUTPUT_SIV:
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	case SM4_OPCODE_DCL_OUTPUT_SGV:
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	case SM4_OPCODE_DCL_INPUT_PS_SIV:
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	case SM4_OPCODE_DCL_INPUT_PS_SGV:
172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << ", " << sm4_sv_names[dcl.num];
173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		break;
174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	}
175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	return out;
177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstd::ostream& operator <<(std::ostream& out, const sm4_insn& insn)
180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	out << sm4_opcode_names[insn.opcode];
182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	if(insn.insn.sat)
183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << "_sat";
184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	for(unsigned i = 0; i < insn.num_ops; ++i)
185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	{
186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		if(i)
187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			out << ',';
188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << ' ' << *insn.ops[i];
189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	}
190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	return out;
191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstd::ostream& operator <<(std::ostream& out, const sm4_program& program)
194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	out << "pvghdc"[program.version.type] << "s_" << program.version.major << "_" << program.version.minor << "\n";
196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	for(unsigned i = 0; i < program.dcls.size(); ++i)
197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << *program.dcls[i] << "\n";
198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	for(unsigned i = 0; i < program.insns.size(); ++i)
200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		out << *program.insns[i] << "\n";
201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	return out;
202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid sm4_op::dump()
205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	std::cout << *this;
207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid sm4_insn::dump()
210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	std::cout << *this;
212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid sm4_dcl::dump()
215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	std::cout << *this;
217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid sm4_program::dump()
220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	std::cout << *this;
222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
223