@@ -53,7 +53,8 @@ static int ComputeNumElementsPerRow(int one_element_size_bytes, int indent_chars
5353}
5454
5555template <typename T, typename Enable = std::enable_if<std::is_integral<T>::value>>
56- void PrintIntegralArray (void * data, size_t num_elements, int indent_chars, std::ostream& os) {
56+ void PrintIntegralArray (void * data, size_t num_elements, int indent_chars, std::ostream& os,
57+ const std::string& eol) {
5758 int one_element_size_bytes = (sizeof (T) / 4 ) + (2 /* "0x" */ ) + (2 /* ", " */ );
5859 if (std::is_signed<T>::value) {
5960 one_element_size_bytes += 1 ; // sign character
@@ -97,17 +98,18 @@ void PrintIntegralArray(void* data, size_t num_elements, int indent_chars, std::
9798 os << " , " ;
9899 }
99100 if ((i % elements_per_row) == elements_per_row - 1 ) {
100- os << " \n " ;
101+ os << eol ;
101102 }
102103 }
103104
104105 if ((num_elements % elements_per_row) != 0 ) {
105- os << " \n " ;
106+ os << eol ;
106107 }
107108}
108109
109110template <typename T, typename Enable = std::enable_if<std::is_floating_point<T>::value>>
110- void PrintFloatingPointArray (void * data, size_t num_elements, int indent_chars, std::ostream& os) {
111+ void PrintFloatingPointArray (void * data, size_t num_elements, int indent_chars, std::ostream& os,
112+ const std::string& eol) {
111113 // Floats and doubles are printed as hex but casted.
112114 int one_element_size_bytes = (sizeof (T) / 4 ) + (2 /* "0x" */ ) + (2 /* ", " */ ) + 1 /* sign */ +
113115 1 /* decimal point */ + 1 /* exponent sign */ ;
@@ -149,16 +151,17 @@ void PrintFloatingPointArray(void* data, size_t num_elements, int indent_chars,
149151 os << " , " ;
150152 }
151153 if ((i % elements_per_row) == elements_per_row - 1 ) {
152- os << " \n " ;
154+ os << eol ;
153155 }
154156 }
155157
156158 if ((num_elements % elements_per_row) != 0 ) {
157- os << " \n " ;
159+ os << eol ;
158160 }
159161}
160162
161- void NDArrayDataToC (::tvm::runtime::NDArray arr, int indent_chars, std::ostream& os) {
163+ void NDArrayDataToC (::tvm::runtime::NDArray arr, int indent_chars, std::ostream& os,
164+ const std::string& eol) {
162165 auto arr_type = arr.DataType ();
163166 CHECK_EQ (arr_type.lanes (), 1 ) << " CodegenParams: only support generating 1-lane parameters; saw "
164167 << arr_type.lanes ();
@@ -180,13 +183,13 @@ void NDArrayDataToC(::tvm::runtime::NDArray arr, int indent_chars, std::ostream&
180183 << " CodegenParams: only support generating 8-, 16-, 32-, or 64-bit integer params; saw "
181184 << arr_type.bits () << " -bit array" ;
182185 if (arr_type.bits () == 8 ) {
183- PrintIntegralArray<int8_t >(arr->data , num_elements, indent_chars, os);
186+ PrintIntegralArray<int8_t >(arr->data , num_elements, indent_chars, os, eol );
184187 } else if (arr_type.bits () == 16 ) {
185- PrintIntegralArray<int16_t >(arr->data , num_elements, indent_chars, os);
188+ PrintIntegralArray<int16_t >(arr->data , num_elements, indent_chars, os, eol );
186189 } else if (arr_type.bits () == 32 ) {
187- PrintIntegralArray<int32_t >(arr->data , num_elements, indent_chars, os);
190+ PrintIntegralArray<int32_t >(arr->data , num_elements, indent_chars, os, eol );
188191 } else if (arr_type.bits () == 64 ) {
189- PrintIntegralArray<int64_t >(arr->data , num_elements, indent_chars, os);
192+ PrintIntegralArray<int64_t >(arr->data , num_elements, indent_chars, os, eol );
190193 } else {
191194 CHECK (false ) << " should not get here" ;
192195 }
@@ -199,13 +202,13 @@ void NDArrayDataToC(::tvm::runtime::NDArray arr, int indent_chars, std::ostream&
199202 << arr_type.bits () << " -bit array" ;
200203
201204 if (arr_type.bits () == 8 ) {
202- PrintIntegralArray<uint8_t >(arr->data , num_elements, indent_chars, os);
205+ PrintIntegralArray<uint8_t >(arr->data , num_elements, indent_chars, os, eol );
203206 } else if (arr_type.bits () == 16 ) {
204- PrintIntegralArray<uint16_t >(arr->data , num_elements, indent_chars, os);
207+ PrintIntegralArray<uint16_t >(arr->data , num_elements, indent_chars, os, eol );
205208 } else if (arr_type.bits () == 32 ) {
206- PrintIntegralArray<uint32_t >(arr->data , num_elements, indent_chars, os);
209+ PrintIntegralArray<uint32_t >(arr->data , num_elements, indent_chars, os, eol );
207210 } else if (arr_type.bits () == 64 ) {
208- PrintIntegralArray<uint64_t >(arr->data , num_elements, indent_chars, os);
211+ PrintIntegralArray<uint64_t >(arr->data , num_elements, indent_chars, os, eol );
209212 } else {
210213 CHECK (false ) << " should not get here" ;
211214 }
@@ -216,11 +219,11 @@ void NDArrayDataToC(::tvm::runtime::NDArray arr, int indent_chars, std::ostream&
216219 os.setf (std::ios::left, std::ios::adjustfield);
217220 if (arr_type.bits () == 16 ) {
218221 // NOTE: print types not widely supported by C as uint16_t.
219- PrintIntegralArray<uint16_t >(arr->data , num_elements, indent_chars, os);
222+ PrintIntegralArray<uint16_t >(arr->data , num_elements, indent_chars, os, eol );
220223 } else if (arr_type.bits () == 32 ) {
221- PrintFloatingPointArray<float >(arr->data , num_elements, indent_chars, os);
224+ PrintFloatingPointArray<float >(arr->data , num_elements, indent_chars, os, eol );
222225 } else if (arr_type.bits () == 64 ) {
223- PrintFloatingPointArray<double >(arr->data , num_elements, indent_chars, os);
226+ PrintFloatingPointArray<double >(arr->data , num_elements, indent_chars, os, eol );
224227 } else {
225228 CHECK (false ) << " CodegenParams: only support 32- or 64-bit floating point; saw "
226229 << arr_type.bits () << " -bit array" ;
@@ -233,7 +236,7 @@ void NDArrayDataToC(::tvm::runtime::NDArray arr, int indent_chars, std::ostream&
233236 CHECK (arr_type.bits () == 16 )
234237 << " CodegenParams: only support generating 16-bit bfloat params; saw " << arr_type.bits ()
235238 << " -bit array" ;
236- PrintIntegralArray<uint16_t >(arr->data , num_elements, indent_chars, os);
239+ PrintIntegralArray<uint16_t >(arr->data , num_elements, indent_chars, os, eol );
237240 break ;
238241 }
239242
0 commit comments