Execute the kernel on the passed window.
184 const auto window_start_x =
static_cast<int>(
window.
x().
start());
185 const auto window_end_x =
static_cast<int>(
window.
x().
end());
186 const int window_step_x = 16;
198 Iterator
src(_src, win);
199 Iterator
dst(_dst, win);
204 switch(_src->info()->data_type())
208 switch(_dst->info()->data_type())
215 const auto src_ptr =
reinterpret_cast<const int8_t *
>(
src.ptr());
216 const auto dst_ptr =
reinterpret_cast<int16_t *
>(
dst.ptr());
217 int x = window_start_x;
219 for(; x <= (window_end_x - window_step_x); x += window_step_x)
221 const int8x16_t texels_s8 = vld1q_s8(src_ptr + x);
223 const int16x8x2_t texels =
226 vmovl_s8(vget_low_s8(texels_s8)),
227 vmovl_s8(vget_high_s8(texels_s8))
231 vst1q_s16(dst_ptr + x, texels.val[0]);
232 vst1q_s16(dst_ptr + x + 8, texels.val[1]);
236 for(; x < window_end_x; ++x)
238 *(dst_ptr + x) = static_cast<int16_t>(*(src_ptr + x));
249 const auto src_ptr =
reinterpret_cast<const int8_t *
>(
src.ptr());
250 const auto dst_ptr =
reinterpret_cast<int32_t *
>(
dst.ptr());
251 int x = window_start_x;
253 for(; x <= (window_end_x - window_step_x); x += window_step_x)
255 const int8x16_t texels_s8 = vld1q_s8(src_ptr + x);
257 const int16x8x2_t texels =
260 vmovl_s8(vget_low_s8(texels_s8)),
261 vmovl_s8(vget_high_s8(texels_s8))
265 vst1q_s32(dst_ptr + x, vmovl_s16(vget_low_s16(texels.val[0])));
266 vst1q_s32(dst_ptr + x + 4, vmovl_s16(vget_high_s16(texels.val[0])));
267 vst1q_s32(dst_ptr + x + 8, vmovl_s16(vget_low_s16(texels.val[1])));
268 vst1q_s32(dst_ptr + x + 12, vmovl_s16(vget_high_s16(texels.val[1])));
272 for(; x < window_end_x; ++x)
274 *(dst_ptr + x) = static_cast<int32_t>(*(src_ptr + x));
285 const auto src_ptr =
reinterpret_cast<const int8_t *
>(
src.ptr());
286 const auto dst_ptr =
reinterpret_cast<float *
>(
dst.ptr());
288 int x = window_start_x;
289 for(; x <= (window_end_x - window_step_x); x += window_step_x)
291 const int8x16_t texels_s8 = vld1q_s8(reinterpret_cast<int8_t *>(
src.ptr()));
293 const int16x8x2_t texels =
296 vmovl_s8(vget_low_s8(texels_s8)),
297 vmovl_s8(vget_high_s8(texels_s8))
300 vst1q_f32(dst_ptr + x, vcvtq_f32_s32(vmovl_s16(vget_low_s16(texels.val[0]))));
301 vst1q_f32(dst_ptr + x + 4, vcvtq_f32_s32(vmovl_s16(vget_high_s16(texels.val[0]))));
302 vst1q_f32(dst_ptr + x + 8, vcvtq_f32_s32(vmovl_s16(vget_low_s16(texels.val[1]))));
303 vst1q_f32(dst_ptr + x + 12, vcvtq_f32_s32(vmovl_s16(vget_high_s16(texels.val[1]))));
307 for(; x < window_end_x; ++x)
309 *(dst_ptr + x) = static_cast<float>(*(src_ptr + x));
319 uk->ukernel(_src, _dst,
info, _policy,
window);
331 switch(_dst->info()->data_type())
338 const auto src_ptr =
reinterpret_cast<const uint8_t *
>(
src.ptr());
339 const auto dst_ptr =
reinterpret_cast<int16_t *
>(
dst.ptr());
341 int x = window_start_x;
342 for(; x <= (window_end_x - window_step_x); x += window_step_x)
344 const uint8x16_t texels_u8 = vld1q_u8(src_ptr + x);
346 const int16x8x2_t texels =
349 vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(texels_u8))),
350 vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(texels_u8)))
354 vst1q_s16(dst_ptr + x, texels.val[0]);
355 vst1q_s16(dst_ptr + x + 8, texels.val[1]);
359 for(; x < window_end_x; ++x)
361 *(dst_ptr + x) = static_cast<int32_t>(*(src_ptr + x));
372 const auto src_ptr =
reinterpret_cast<const uint8_t *
>(
src.ptr());
373 const auto dst_ptr =
reinterpret_cast<int32_t *
>(
dst.ptr());
375 int x = window_start_x;
376 for(; x <= (window_end_x - window_step_x); x += window_step_x)
378 const uint8x16_t texels_u8 = vld1q_u8(src_ptr + x);
380 const int16x8x2_t texels =
383 vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(texels_u8))),
384 vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(texels_u8)))
388 vst1q_s32(dst_ptr + x, vmovl_s16(vget_low_s16(texels.val[0])));
389 vst1q_s32(dst_ptr + x + 4, vmovl_s16(vget_high_s16(texels.val[0])));
390 vst1q_s32(dst_ptr + x + 8, vmovl_s16(vget_low_s16(texels.val[1])));
391 vst1q_s32(dst_ptr + x + 12, vmovl_s16(vget_high_s16(texels.val[1])));
395 for(; x < window_end_x; ++x)
397 *(dst_ptr + x) = static_cast<uint32_t>(*(src_ptr + x));
408 const auto src_ptr =
reinterpret_cast<const uint8_t *
>(
src.ptr());
409 const auto dst_ptr =
reinterpret_cast<float *
>(
dst.ptr());
411 int x = window_start_x;
412 for(; x <= (window_end_x - window_step_x); x += window_step_x)
414 const uint8x16_t texels_u8 = vld1q_u8(src_ptr + x);
416 const int16x8x2_t texels =
419 vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(texels_u8))),
420 vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(texels_u8)))
423 vst1q_f32(dst_ptr + x, vcvtq_f32_s32(vmovl_s16(vget_low_s16(texels.val[0]))));
424 vst1q_f32(dst_ptr + x + 4, vcvtq_f32_s32(vmovl_s16(vget_high_s16(texels.val[0]))));
425 vst1q_f32(dst_ptr + x + 8, vcvtq_f32_s32(vmovl_s16(vget_low_s16(texels.val[1]))));
426 vst1q_f32(dst_ptr + x + 12, vcvtq_f32_s32(vmovl_s16(vget_high_s16(texels.val[1]))));
430 for(; x < window_end_x; ++x)
432 *(dst_ptr + x) = static_cast<uint32_t>(*(src_ptr + x));
442 uk->ukernel(_src, _dst,
info, _policy,
window);
450 const auto src_ptr =
reinterpret_cast<const uint8_t *
>(
src.ptr());
451 const auto dst_ptr =
reinterpret_cast<uint16_t *
>(
dst.ptr());
453 int x = window_start_x;
454 for(; x <= (window_end_x - window_step_x); x += window_step_x)
456 const uint8x16_t texels_u8 = vld1q_u8(src_ptr + x);
458 const uint16x8x2_t texels =
461 vmovl_u8(vget_low_u8(texels_u8)),
462 vmovl_u8(vget_high_u8(texels_u8))
466 vst1q_u16(dst_ptr + x, texels.val[0]);
467 vst1q_u16(dst_ptr + x + 8, texels.val[1]);
471 for(; x < window_end_x; ++x)
473 *(dst_ptr + x) = static_cast<uint16_t>(*(src_ptr + x));
486 switch(_dst->info()->data_type())
495 const auto src_ptr =
reinterpret_cast<const int16_t *
>(
src.ptr());
496 const auto dst_ptr =
reinterpret_cast<int8_t *
>(
dst.ptr());
498 int x = window_start_x;
499 for(; x <= (window_end_x - window_step_x); x += window_step_x)
501 const int16x8x2_t texels =
504 vld1q_s16(src_ptr + x),
505 vld1q_s16(src_ptr + x + 8)
509 vst1q_s8(dst_ptr + x, vcombine_s8(vqmovn_s16(texels.val[0]), vqmovn_s16(texels.val[1])));
513 for(; x < window_end_x; ++x)
515 *(dst_ptr + x) = utils::cast::saturate_cast<int8_t>(*(src_ptr + x));
524 const auto src_ptr =
reinterpret_cast<const int16_t *
>(
src.ptr());
525 const auto dst_ptr =
reinterpret_cast<int8_t *
>(
dst.ptr());
527 int x = window_start_x;
528 for(; x <= (window_end_x - window_step_x); x += window_step_x)
530 const int16x8x2_t texels =
533 vld1q_s16(src_ptr + x),
534 vld1q_s16(src_ptr + x + 8)
538 vst1q_s8(dst_ptr + x, vcombine_s8(vmovn_s16(texels.val[0]), vmovn_s16(texels.val[1])));
542 for(; x < window_end_x; ++x)
544 *(dst_ptr + x) = static_cast<int8_t>(*(src_ptr + x));
558 const auto src_ptr =
reinterpret_cast<const int16_t *
>(
src.ptr());
559 const auto dst_ptr =
reinterpret_cast<uint8_t *
>(
dst.ptr());
561 int x = window_start_x;
562 for(; x <= (window_end_x - window_step_x); x += window_step_x)
564 const int16x8x2_t texels =
567 vld1q_s16(src_ptr + x),
568 vld1q_s16(src_ptr + x + 8)
572 vst1q_u8(dst_ptr + x, vcombine_u8(vqmovun_s16(texels.val[0]), vqmovun_s16(texels.val[1])));
576 for(; x < window_end_x; ++x)
578 *(dst_ptr + x) = utils::cast::saturate_cast<uint8_t>(*(src_ptr + x));
587 const auto src_ptr =
reinterpret_cast<const int16_t *
>(
src.ptr());
588 const auto dst_ptr =
reinterpret_cast<uint8_t *
>(
dst.ptr());
590 int x = window_start_x;
591 for(; x <= (window_end_x - window_step_x); x += window_step_x)
593 const int16x8x2_t texels =
596 vld1q_s16(src_ptr + x),
597 vld1q_s16(src_ptr + x + 8)
601 vst1q_u8(dst_ptr + x, vcombine_u8(vmovn_u16(vreinterpretq_u16_s16(texels.val[0])),
602 vmovn_u16(vreinterpretq_u16_s16(texels.val[1]))));
606 for(; x < window_end_x; ++x)
608 *(dst_ptr + x) = static_cast<uint8_t>(*(src_ptr + x));
620 const auto src_ptr =
reinterpret_cast<const int16_t *
>(
src.ptr());
621 const auto dst_ptr =
reinterpret_cast<int32_t *
>(
dst.ptr());
623 int x = window_start_x;
624 for(; x <= (window_end_x - window_step_x); x += window_step_x)
626 const int16x8x2_t texels =
629 vld1q_s16(src_ptr + x),
630 vld1q_s16(src_ptr + x + 8)
634 const int32x4x4_t texels_s32 =
637 vmovl_s16(vget_low_s16(texels.val[0])),
638 vmovl_s16(vget_high_s16(texels.val[0])),
639 vmovl_s16(vget_low_s16(texels.val[1])),
640 vmovl_s16(vget_high_s16(texels.val[1]))
644 vst1q_s32(dst_ptr + x, texels_s32.val[0]);
645 vst1q_s32(dst_ptr + x + 4, texels_s32.val[1]);
646 vst1q_s32(dst_ptr + x + 8, texels_s32.val[2]);
647 vst1q_s32(dst_ptr + x + 12, texels_s32.val[3]);
651 for(; x < window_end_x; ++x)
653 *(dst_ptr + x) = static_cast<int32_t>(*(src_ptr + x));
667 switch(_dst->info()->data_type())
676 const auto src_ptr =
reinterpret_cast<const uint16_t *
>(
src.ptr());
677 const auto dst_ptr =
reinterpret_cast<uint8_t *
>(
dst.ptr());
679 int x = window_start_x;
680 for(; x <= (window_end_x - window_step_x); x += window_step_x)
682 const uint16x8x2_t texels =
685 vld1q_u16(src_ptr + x),
686 vld1q_u16(src_ptr + x + 8)
690 vst1q_u8(dst_ptr + x, vcombine_u8(vqmovn_u16(texels.val[0]), vqmovn_u16(texels.val[1])));
694 for(; x < window_end_x; ++x)
696 *(dst_ptr + x) = utils::cast::saturate_cast<uint8_t>(*(src_ptr + x));
705 const auto src_ptr =
reinterpret_cast<const uint16_t *
>(
src.ptr());
706 const auto dst_ptr =
reinterpret_cast<uint8_t *
>(
dst.ptr());
708 int x = window_start_x;
709 for(; x <= (window_end_x - window_step_x); x += window_step_x)
711 const uint16x8x2_t texels =
714 vld1q_u16(src_ptr + x),
715 vld1q_u16(src_ptr + x + 8)
719 vst1q_u8(dst_ptr + x, vcombine_u8(vmovn_u16(texels.val[0]), vmovn_u16(texels.val[1])));
723 for(; x < window_end_x; ++x)
725 *(dst_ptr + x) = static_cast<uint8_t>(*(src_ptr + x));
738 const auto src_ptr =
reinterpret_cast<const uint16_t *
>(
src.ptr());
739 const auto dst_ptr =
reinterpret_cast<uint32_t *
>(
dst.ptr());
741 int x = window_start_x;
742 for(; x <= (window_end_x - window_step_x); x += window_step_x)
744 const uint16x8x2_t texels =
747 vld1q_u16(src_ptr + x),
748 vld1q_u16(src_ptr + x + 8)
752 vst1q_u32(dst_ptr + x, vmovl_u16(vget_low_u16(texels.val[0])));
753 vst1q_u32(dst_ptr + x + 4, vmovl_u16(vget_high_u16(texels.val[0])));
754 vst1q_u32(dst_ptr + x + 8, vmovl_u16(vget_low_u16(texels.val[1])));
755 vst1q_u32(dst_ptr + x + 12, vmovl_u16(vget_high_u16(texels.val[1])));
758 for(; x < window_end_x; ++x)
760 *(dst_ptr + x) = static_cast<uint32_t>(*(src_ptr + x));
776 uk->ukernel(_src, _dst,
info, _policy,
window);
783 uk->ukernel(_src, _dst,
info, _policy,
window);
787 switch(_dst->info()->data_type())
793 uk->ukernel(_src, _dst,
info, _policy,
window);
800 uk->ukernel(_src, _dst,
info, _policy,
window);
808 const auto src_ptr =
reinterpret_cast<const float *
>(
src.ptr());
809 const auto dst_ptr =
reinterpret_cast<int32_t *
>(
dst.ptr());
811 int x = window_start_x;
812 for(; x <= (window_end_x - window_step_x); x += window_step_x)
814 const float32x4x4_t texels =
817 vld1q_f32(src_ptr + x),
818 vld1q_f32(src_ptr + x + 4),
819 vld1q_f32(src_ptr + x + 8),
820 vld1q_f32(src_ptr + x + 12),
824 vst1q_s32(dst_ptr + x, vcvtq_s32_f32(texels.val[0]));
825 vst1q_s32(dst_ptr + x + 4, vcvtq_s32_f32(texels.val[1]));
826 vst1q_s32(dst_ptr + x + 8, vcvtq_s32_f32(texels.val[2]));
827 vst1q_s32(dst_ptr + x + 12, vcvtq_s32_f32(texels.val[3]));
831 for(; x < window_end_x; ++x)
833 *(dst_ptr + x) = static_cast<int32_t>(*(src_ptr + x));
845 const auto src_ptr =
reinterpret_cast<const float *
>(
src.ptr());
846 const auto dst_ptr =
reinterpret_cast<uint8_t *
>(
dst.ptr());
848 int x = window_start_x;
849 for(; x <= (window_end_x - window_step_x); x += window_step_x)
851 const float32x4x4_t texels =
854 vld1q_f32(src_ptr + x),
855 vld1q_f32(src_ptr + x + 4),
856 vld1q_f32(src_ptr + x + 8),
857 vld1q_f32(src_ptr + x + 12),
861 vst1_u8(dst_ptr + x, vqmovn_u16(vcombine_u16(vqmovun_s32(vcvtq_s32_f32(texels.val[0])), vqmovun_s32(vcvtq_s32_f32(texels.val[1])))));
862 vst1_u8(dst_ptr + x + 8, vqmovn_u16(vcombine_u16(vqmovun_s32(vcvtq_s32_f32(texels.val[2])), vqmovun_s32(vcvtq_s32_f32(texels.val[3])))));
866 for(; x < window_end_x; ++x)
868 *(dst_ptr + x) = utils::cast::saturate_cast<uint8_t>(*(src_ptr + x));
879 const auto src_ptr =
reinterpret_cast<const float *
>(
src.ptr());
880 const auto dst_ptr =
reinterpret_cast<int8_t *
>(
dst.ptr());
882 int x = window_start_x;
883 for(; x <= (window_end_x - window_step_x); x += window_step_x)
885 const float32x4x4_t texels =
888 vld1q_f32(src_ptr + x),
889 vld1q_f32(src_ptr + x + 4),
890 vld1q_f32(src_ptr + x + 8),
891 vld1q_f32(src_ptr + x + 12),
895 vst1_s8(dst_ptr + x, vqmovn_s16(vcombine_s16(vqmovn_s32(vcvtq_s32_f32(texels.val[0])), vqmovn_s32(vcvtq_s32_f32(texels.val[1])))));
896 vst1_s8(dst_ptr + x + 8, vqmovn_s16(vcombine_s16(vqmovn_s32(vcvtq_s32_f32(texels.val[2])), vqmovn_s32(vcvtq_s32_f32(texels.val[3])))));
899 for(; x < window_end_x; ++x)
901 *(dst_ptr + x) = utils::cast::saturate_cast<int8_t>(*(src_ptr + x));
914 switch(_dst->info()->data_type())
920 uk->ukernel(_src, _dst,
info, _policy,
window);
928 const auto src_ptr =
reinterpret_cast<const int32_t *
>(
src.ptr());
929 const auto dst_ptr =
reinterpret_cast<float *
>(
dst.ptr());
931 int x = window_start_x;
932 for(; x <= (window_end_x - window_step_x); x += window_step_x)
934 const int32x4x4_t texels =
937 vld1q_s32(src_ptr + x),
938 vld1q_s32(src_ptr + x + 4),
939 vld1q_s32(src_ptr + x + 8),
940 vld1q_s32(src_ptr + x + 12),
944 vst1q_f32(dst_ptr + x, vcvtq_f32_s32(texels.val[0]));
945 vst1q_f32(dst_ptr + x + 4, vcvtq_f32_s32(texels.val[1]));
946 vst1q_f32(dst_ptr + x + 8, vcvtq_f32_s32(texels.val[2]));
947 vst1q_f32(dst_ptr + x + 12, vcvtq_f32_s32(texels.val[3]));
951 for(; x < window_end_x; ++x)
953 *(dst_ptr + x) = static_cast<float>(*(src_ptr + x));
966 const auto src_ptr =
reinterpret_cast<const int32_t *
>(
src.ptr());
967 const auto dst_ptr =
reinterpret_cast<int8_t *
>(
dst.ptr());
969 int x = window_start_x;
970 for(; x <= (window_end_x - window_step_x); x += window_step_x)
972 const int32x4x4_t texels =
975 vld1q_s32(src_ptr + x),
976 vld1q_s32(src_ptr + x + 4),
977 vld1q_s32(src_ptr + x + 8),
978 vld1q_s32(src_ptr + x + 12),
981 vst1_s8(dst_ptr + x, vqmovn_s16(vcombine_s16(vqmovn_s32(texels.val[0]), vqmovn_s32(texels.val[1]))));
982 vst1_s8(dst_ptr + x + 8, vqmovn_s16(vcombine_s16(vqmovn_s32(texels.val[2]), vqmovn_s32(texels.val[3]))));
986 for(; x < window_end_x; ++x)
988 *(dst_ptr + x) = utils::cast::saturate_cast<int8_t>(*(src_ptr + x));
997 const auto src_ptr =
reinterpret_cast<const int32_t *
>(
src.ptr());
998 const auto dst_ptr =
reinterpret_cast<int8_t *
>(
dst.ptr());
1000 int x = window_start_x;
1001 for(; x <= (window_end_x - window_step_x); x += window_step_x)
1003 const int32x4x4_t texels =
1006 vld1q_s32(src_ptr + x),
1007 vld1q_s32(src_ptr + x + 4),
1008 vld1q_s32(src_ptr + x + 8),
1009 vld1q_s32(src_ptr + x + 12)
1013 vst1_s8(dst_ptr + x, vmovn_s16(vcombine_s16(vmovn_s32(texels.val[0]), vmovn_s32(texels.val[1]))));
1014 vst1_s8(dst_ptr + x + 8, vmovn_s16(vcombine_s16(vmovn_s32(texels.val[2]), vmovn_s32(texels.val[3]))));
1018 for(; x < window_end_x; ++x)
1020 *(dst_ptr + x) = static_cast<int8_t>(*(src_ptr + x));
1035 const auto src_ptr =
reinterpret_cast<const int32_t *
>(
src.ptr());
1036 const auto dst_ptr =
reinterpret_cast<uint8_t *
>(
dst.ptr());
1038 int x = window_start_x;
1039 for(; x <= (window_end_x - window_step_x); x += window_step_x)
1041 const int32x4x4_t texels =
1044 vld1q_s32(src_ptr + x),
1045 vld1q_s32(src_ptr + x + 4),
1046 vld1q_s32(src_ptr + x + 8),
1047 vld1q_s32(src_ptr + x + 12)
1050 vst1_u8(dst_ptr + x, vqmovn_u16(vcombine_u16(vqmovun_s32(texels.val[0]), vqmovun_s32(texels.val[1]))));
1051 vst1_u8(dst_ptr + x + 8, vqmovn_u16(vcombine_u16(vqmovun_s32(texels.val[2]), vqmovun_s32(texels.val[3]))));
1055 for(; x < window_end_x; ++x)
1057 *(dst_ptr + x) = utils::cast::saturate_cast<uint8_t>(*(src_ptr + x));
1066 const auto src_ptr =
reinterpret_cast<const int32_t *
>(
src.ptr());
1067 const auto dst_ptr =
reinterpret_cast<uint8_t *
>(
dst.ptr());
1069 int x = window_start_x;
1070 for(; x <= (window_end_x - window_step_x); x += window_step_x)
1072 const int32x4x4_t texels =
1075 vld1q_s32(src_ptr + x),
1076 vld1q_s32(src_ptr + x + 4),
1077 vld1q_s32(src_ptr + x + 8),
1078 vld1q_s32(src_ptr + x + 12)
1082 vst1_u8(dst_ptr + x, vmovn_u16(vcombine_u16(vmovn_u32(vreinterpretq_u32_s32(texels.val[0])), vmovn_u32(vreinterpretq_u32_s32(texels.val[1])))));
1083 vst1_u8(dst_ptr + x + 8, vmovn_u16(vcombine_u16(vmovn_u32(vreinterpretq_u32_s32(texels.val[2])), vmovn_u32(vreinterpretq_u32_s32(texels.val[3])))));
1087 for(; x < window_end_x; ++x)
1089 *(dst_ptr + x) = static_cast<uint8_t>(*(src_ptr + x));
const Window & window() const
The maximum window the kernel can be executed on.
static const auto * get_implementation(const SelectorType &selector, KernelSelectionType selection_type=KernelSelectionType::Supported)
Micro-kernel selector.
#define ARM_COMPUTE_ERROR(msg)
Print the given message then throw an std::runtime_error.
1 channel, 1 U8 per channel
1 channel, 1 F32 per channel
#define ARM_COMPUTE_ERROR_ON(cond)
If the condition is true then an error message is printed and an exception thrown.
1 channel, 1 U16 per channel
SimpleTensor< float > src
1 channel, 1 F16 per channel
1 channel, 1 S32 per channel
16-bit brain floating-point number
static constexpr size_t DimX
Alias for dimension 0 also known as X dimension.
#define ARM_COMPUTE_UNUSED(...)
To avoid unused variables warnings.
1 channel, 1 U32 per channel
quantized, asymmetric fixed-point 8-bit number unsigned
void set(size_t dimension, const Dimension &dim)
Set the values of a given dimension.
#define ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL(k)
1 channel, 1 S16 per channel
ScaleKernelInfo info(interpolation_policy, default_border_mode, PixelValue(), sampling_policy, false)
#define ARM_COMPUTE_ERROR_ON_NULLPTR(...)
void execute_window_loop(const Window &w, L &&lambda_function, Ts &&... iterators)
Iterate through the passed window, automatically adjusting the iterators and calling the lambda_funct...
quantized, asymmetric fixed-point 8-bit number signed
static CPUInfo & get()
Access the KernelLibrary singleton.
constexpr int end() const
Return the end of the dimension.
constexpr int start() const
Return the start of the dimension.
#define ARM_COMPUTE_ERROR_ON_INVALID_SUBWINDOW(f, s)
cpuinfo::CpuIsaInfo get_isa() const
Gets the current cpu's ISA information.
constexpr const Dimension & x() const
Alias to access the first dimension of the window.