Grok  10.0.3
print.h
Go to the documentation of this file.
1 // Copyright 2022 Google LLC
2 // SPDX-License-Identifier: Apache-2.0
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 
16 #ifndef HWY_PRINT_H_
17 #define HWY_PRINT_H_
18 
19 // Helpers for printing vector lanes.
20 
21 #include <stddef.h>
22 #include <stdio.h>
23 
24 #include "hwy/base.h"
25 #include "hwy/highway_export.h"
26 
27 namespace hwy {
28 
29 namespace detail {
30 
31 // For implementing value comparisons etc. as type-erased functions to reduce
32 // template bloat.
33 struct TypeInfo {
34  size_t sizeof_t;
35  bool is_float;
36  bool is_signed;
37 };
38 
39 template <typename T>
41  TypeInfo info;
42  info.sizeof_t = sizeof(T);
43  info.is_float = IsFloat<T>();
44  info.is_signed = IsSigned<T>();
45  return info;
46 }
47 
48 HWY_DLLEXPORT void TypeName(const TypeInfo& info, size_t N, char* string100);
49 HWY_DLLEXPORT void ToString(const TypeInfo& info, const void* ptr,
50  char* string100);
51 
52 HWY_DLLEXPORT void PrintArray(const TypeInfo& info, const char* caption,
53  const void* array_void, size_t N,
54  size_t lane_u = 0, size_t max_lanes = 7);
55 
56 } // namespace detail
57 
58 template <typename T>
59 HWY_NOINLINE void PrintValue(T value) {
60  char str[100];
61  detail::ToString(hwy::detail::MakeTypeInfo<T>(), &value, str);
62  fprintf(stderr, "%s,", str);
63 }
64 
65 template <typename T>
66 HWY_NOINLINE void PrintArray(const T* value, size_t count) {
67  detail::PrintArray(hwy::detail::MakeTypeInfo<T>(), "", value, count, 0,
68  count);
69 }
70 
71 } // namespace hwy
72 
73 #endif // HWY_PRINT_H_
#define HWY_NOINLINE
Definition: base.h:63
#define HWY_INLINE
Definition: base.h:62
#define HWY_DLLEXPORT
Definition: highway_export.h:13
N
Definition: rvv-inl.h:1742
HWY_DLLEXPORT void TypeName(const TypeInfo &info, size_t N, char *string100)
HWY_DLLEXPORT void PrintArray(const TypeInfo &info, const char *caption, const void *array_void, size_t N, size_t lane_u=0, size_t max_lanes=7)
HWY_DLLEXPORT void ToString(const TypeInfo &info, const void *ptr, char *string100)
HWY_INLINE TypeInfo MakeTypeInfo()
Definition: print.h:40
Definition: aligned_allocator.h:27
HWY_NOINLINE void PrintArray(const T *value, size_t count)
Definition: print.h:66
HWY_NOINLINE void PrintValue(T value)
Definition: print.h:59
Definition: print.h:33
bool is_float
Definition: print.h:35
bool is_signed
Definition: print.h:36
size_t sizeof_t
Definition: print.h:34