aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/core/kernels/decode_raw_op.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/core/kernels/decode_raw_op.cc')
-rw-r--r--tensorflow/core/kernels/decode_raw_op.cc22
1 files changed, 18 insertions, 4 deletions
diff --git a/tensorflow/core/kernels/decode_raw_op.cc b/tensorflow/core/kernels/decode_raw_op.cc
index da247161f9..9492a4e26d 100644
--- a/tensorflow/core/kernels/decode_raw_op.cc
+++ b/tensorflow/core/kernels/decode_raw_op.cc
@@ -70,10 +70,24 @@ class DecodeRawOp : public OpKernel {
auto out = output_tensor->flat_inner_dims<T>();
DCHECK_EQ(flat_in.size(), out.dimensions()[0]);
T* out_data = out.data();
- for (int64 i = 0; i < flat_in.size(); ++i) {
- const T* in_data = reinterpret_cast<const T*>(flat_in(i).data());
- memcpy(out_data, in_data, str_size);
- out_data += added_dim;
+ if (port::kLittleEndian == little_endian_ || sizeof(T) == 1) {
+ for (int64 i = 0; i < flat_in.size(); ++i) {
+ const T* in_data = reinterpret_cast<const T*>(flat_in(i).data());
+ memcpy(out_data, in_data, str_size);
+ out_data += added_dim;
+ }
+ } else {
+ for (int64 i = 0; i < flat_in.size(); ++i) {
+ const char* in_data_bytes =
+ reinterpret_cast<const char*>(flat_in(i).data());
+ char* out_data_bytes = reinterpret_cast<char*>(out_data);
+ const char* p = in_data_bytes;
+ char* q = out_data_bytes;
+ for (; p < in_data_bytes + str_size; p += sizeof(T), q += sizeof(T)) {
+ std::reverse_copy(p, p + sizeof(T), q);
+ }
+ out_data += added_dim;
+ }
}
}