From 615d2bd107b0057027d633e8a8803d52be088af0 Mon Sep 17 00:00:00 2001 From: Christophe Favergeon <48906714+christophe0606@users.noreply.github.com> Date: Tue, 28 Jan 2025 08:47:14 +0100 Subject: [PATCH] Removed Cortex-A from comment (#9) * Removed Cortex-A from comment * Use CMSIS-DSP intrinsics rather than arm_acle for better portability (and to reenable the web build) * Fix ubuntu version in gh action --- .github/workflows/runtest.yaml | 2 +- ARM.CMSIS-CV.pdsc | 2 +- Documentation/Doxygen/src/mainpage.md | 2 +- Include/arm_cv.h | 2 +- Include/arm_cv_common.h | 2 +- Include/arm_cv_types.h | 2 +- Include/arm_cv_types_f16.h | 2 +- Include/cv/color_transforms.h | 2 +- Include/cv/feature_detection.h | 2 +- Include/cv/image_transforms.h | 2 +- Include/cv/linear_filters.h | 2 +- PrivateInclude/arm_image_resize_common.h | 2 +- PrivateInclude/arm_linear_filter_common.h | 2 +- PrivateInclude/arm_linear_filter_generator.h | 2 +- README.md | 2 +- .../ColorTransforms/arm_bgr_8U3C_to_gray8.c | 2 +- .../ColorTransforms/arm_bgr_8U3C_to_rgb24.c | 2 +- Source/ColorTransforms/arm_gray8_to_rgb24.c | 2 +- Source/ColorTransforms/arm_rgb24_to_gray8.c | 2 +- Source/ColorTransforms/arm_yuv420_to_gray8.c | 2 +- Source/ColorTransforms/arm_yuv420_to_rgb24.c | 2 +- Source/FeatureDetection/arm_cannysobel.c | 2 +- Source/ImageTransforms/arm_crop_gray8.c | 2 +- Source/ImageTransforms/arm_crop_rgb24.c | 2 +- .../arm_image_resize_bgr_8U3C_f32.c | 2 +- .../arm_image_resize_bgr_8U3C_to_rgb24_f32.c | 2 +- .../arm_image_resize_common_f32.c | 2 +- .../arm_image_resize_gray8_f32.c | 2 +- Source/LinearFilters/arm_gaussian.c | 8 +- Source/LinearFilters/arm_gaussian_5x5.c | 8 +- .../arm_gaussian_7x7_buffer_15.c | 9 +- .../arm_gaussian_7x7_buffer_31.c | 6 +- Source/LinearFilters/arm_sobel_horizontal.c | 2 +- Source/LinearFilters/arm_sobel_vertical.c | 2 +- Testing/board/test_config.h | 2 +- Testing/browser/GenericNodes.h | 2 +- Testing/browser/cg_status.h | 2 +- Testing/browser/stream/AppNodes.h | 2 +- Testing/browser/web/stream.js | 457 +++++++++++------- 39 files changed, 324 insertions(+), 232 deletions(-) diff --git a/.github/workflows/runtest.yaml b/.github/workflows/runtest.yaml index 9534b6e..cb5d9b5 100644 --- a/.github/workflows/runtest.yaml +++ b/.github/workflows/runtest.yaml @@ -12,7 +12,7 @@ permissions: jobs: CI_test_run: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Checkout diff --git a/ARM.CMSIS-CV.pdsc b/ARM.CMSIS-CV.pdsc index bb974ef..84cdafc 100644 --- a/ARM.CMSIS-CV.pdsc +++ b/ARM.CMSIS-CV.pdsc @@ -41,7 +41,7 @@ - CMSIS-CV Library for Cortex-M and Cortex-A + CMSIS-CV Library for Cortex-M diff --git a/Documentation/Doxygen/src/mainpage.md b/Documentation/Doxygen/src/mainpage.md index 749839b..fb2b002 100644 --- a/Documentation/Doxygen/src/mainpage.md +++ b/Documentation/Doxygen/src/mainpage.md @@ -2,7 +2,7 @@ ## Introduction -This user manual describes the CMSIS CV software library, a suite of common computer vision processing functions for use on Cortex-M and Cortex-A processor based devices. +This user manual describes the CMSIS CV software library, a suite of common computer vision processing functions for use on Cortex-M processor based devices. It is a work in progress that has just started. API is not yet stable and will evolve for a few releases. diff --git a/Include/arm_cv.h b/Include/arm_cv.h index 066967a..e07cd52 100644 --- a/Include/arm_cv.h +++ b/Include/arm_cv.h @@ -4,7 +4,7 @@ * Description: General header from CMSIS-CV * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. diff --git a/Include/arm_cv_common.h b/Include/arm_cv_common.h index 9fefb58..8b1e5db 100644 --- a/Include/arm_cv_common.h +++ b/Include/arm_cv_common.h @@ -4,7 +4,7 @@ * Description: Common declarations for CMSIS-CV * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. diff --git a/Include/arm_cv_types.h b/Include/arm_cv_types.h index 05d06e8..6ea6834 100644 --- a/Include/arm_cv_types.h +++ b/Include/arm_cv_types.h @@ -4,7 +4,7 @@ * Description: Datatypes CMSIS-CV * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. diff --git a/Include/arm_cv_types_f16.h b/Include/arm_cv_types_f16.h index a947ca5..621a475 100644 --- a/Include/arm_cv_types_f16.h +++ b/Include/arm_cv_types_f16.h @@ -4,7 +4,7 @@ * Description: float16 types for CMSIS-CV * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. diff --git a/Include/cv/color_transforms.h b/Include/cv/color_transforms.h index 315d525..cda90e2 100644 --- a/Include/cv/color_transforms.h +++ b/Include/cv/color_transforms.h @@ -4,7 +4,7 @@ * Description: Color transforms for CMSIS-CV * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. diff --git a/Include/cv/feature_detection.h b/Include/cv/feature_detection.h index 9c164d2..72c7d9b 100644 --- a/Include/cv/feature_detection.h +++ b/Include/cv/feature_detection.h @@ -4,7 +4,7 @@ * Description: Feature detection for CMSIS-CV * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. diff --git a/Include/cv/image_transforms.h b/Include/cv/image_transforms.h index 2807187..9266857 100644 --- a/Include/cv/image_transforms.h +++ b/Include/cv/image_transforms.h @@ -4,7 +4,7 @@ * Description: Image transformations for CMSIS-CV * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. diff --git a/Include/cv/linear_filters.h b/Include/cv/linear_filters.h index 4c23e8d..2ee02d4 100644 --- a/Include/cv/linear_filters.h +++ b/Include/cv/linear_filters.h @@ -4,7 +4,7 @@ * Description: Linear 2D filters for CMSIS-CV * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. diff --git a/PrivateInclude/arm_image_resize_common.h b/PrivateInclude/arm_image_resize_common.h index d9309b0..4c4617d 100644 --- a/PrivateInclude/arm_image_resize_common.h +++ b/PrivateInclude/arm_image_resize_common.h @@ -3,7 +3,7 @@ * Title: arm_image_resize_common.h * Description: Common declarations for CMSIS-CV image resize functions * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2024 Himax Technologies, Inc. or its affiliates. All rights reserved. diff --git a/PrivateInclude/arm_linear_filter_common.h b/PrivateInclude/arm_linear_filter_common.h index f866690..5ab85d6 100644 --- a/PrivateInclude/arm_linear_filter_common.h +++ b/PrivateInclude/arm_linear_filter_common.h @@ -3,7 +3,7 @@ * Title: arm_image_resize_common.h * Description: Common declarations for CMSIS-CV image resize functions * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2024 Himax Technologies, Inc. or its affiliates. All rights reserved. diff --git a/PrivateInclude/arm_linear_filter_generator.h b/PrivateInclude/arm_linear_filter_generator.h index 1b51cdb..8ff6c3b 100644 --- a/PrivateInclude/arm_linear_filter_generator.h +++ b/PrivateInclude/arm_linear_filter_generator.h @@ -4,7 +4,7 @@ * Description: common code used by different linear filter functions * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. diff --git a/README.md b/README.md index 783ea98..77805e6 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ CMSIS-CV is an optimized computer vision library for embedded systems. -It provides optimized compute kernels for Cortex-M and for Cortex-A. +It provides optimized compute kernels for Cortex-M. Different variants are available according to the core and most of the functions are using a vectorized version when the Helium or Neon extension is available. diff --git a/Source/ColorTransforms/arm_bgr_8U3C_to_gray8.c b/Source/ColorTransforms/arm_bgr_8U3C_to_gray8.c index 95cbb42..3fd912c 100644 --- a/Source/ColorTransforms/arm_bgr_8U3C_to_gray8.c +++ b/Source/ColorTransforms/arm_bgr_8U3C_to_gray8.c @@ -3,7 +3,7 @@ * Title: arm_bgr_8U3C_to_gray8 * Description: Convertion of planar BGR to gray8 * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2024 ARM Limited or its affiliates. All rights reserved. diff --git a/Source/ColorTransforms/arm_bgr_8U3C_to_rgb24.c b/Source/ColorTransforms/arm_bgr_8U3C_to_rgb24.c index 5549efd..1d5e266 100644 --- a/Source/ColorTransforms/arm_bgr_8U3C_to_rgb24.c +++ b/Source/ColorTransforms/arm_bgr_8U3C_to_rgb24.c @@ -3,7 +3,7 @@ * Title: arm_bgr_8U3C_to_rgb24 * Description: Convertion of planar BGR to RGB24 * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2024 ARM Limited or its affiliates. All rights reserved. diff --git a/Source/ColorTransforms/arm_gray8_to_rgb24.c b/Source/ColorTransforms/arm_gray8_to_rgb24.c index 2fb596b..019d5d6 100644 --- a/Source/ColorTransforms/arm_gray8_to_rgb24.c +++ b/Source/ColorTransforms/arm_gray8_to_rgb24.c @@ -3,7 +3,7 @@ * Title: arm_gray8_to_rgb24 * Description: Convertion of gray8 to rgb24 * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2024 ARM Limited or its affiliates. All rights reserved. diff --git a/Source/ColorTransforms/arm_rgb24_to_gray8.c b/Source/ColorTransforms/arm_rgb24_to_gray8.c index 059a506..e2cbc6e 100644 --- a/Source/ColorTransforms/arm_rgb24_to_gray8.c +++ b/Source/ColorTransforms/arm_rgb24_to_gray8.c @@ -3,7 +3,7 @@ * Title: arm_rbg24_to_gray8 * Description: Convertion of rgb24 to gray8 * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2024 ARM Limited or its affiliates. All rights reserved. diff --git a/Source/ColorTransforms/arm_yuv420_to_gray8.c b/Source/ColorTransforms/arm_yuv420_to_gray8.c index ae89f12..fd624d2 100644 --- a/Source/ColorTransforms/arm_yuv420_to_gray8.c +++ b/Source/ColorTransforms/arm_yuv420_to_gray8.c @@ -3,7 +3,7 @@ * Title: arm_yuv240_to_gray8 * Description: Convertion of yuv240 to gray8 * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2024 ARM Limited or its affiliates. All rights reserved. diff --git a/Source/ColorTransforms/arm_yuv420_to_rgb24.c b/Source/ColorTransforms/arm_yuv420_to_rgb24.c index 03c3503..4069f18 100644 --- a/Source/ColorTransforms/arm_yuv420_to_rgb24.c +++ b/Source/ColorTransforms/arm_yuv420_to_rgb24.c @@ -3,7 +3,7 @@ * Title: arm_yuv240_to_rgb24 * Description: Convertion of yuv240 to rgb24 * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2024 ARM Limited or its affiliates. All rights reserved. diff --git a/Source/FeatureDetection/arm_cannysobel.c b/Source/FeatureDetection/arm_cannysobel.c index bac2435..4adfbbf 100644 --- a/Source/FeatureDetection/arm_cannysobel.c +++ b/Source/FeatureDetection/arm_cannysobel.c @@ -5,7 +5,7 @@ * filter) * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. diff --git a/Source/ImageTransforms/arm_crop_gray8.c b/Source/ImageTransforms/arm_crop_gray8.c index c979193..26fe855 100644 --- a/Source/ImageTransforms/arm_crop_gray8.c +++ b/Source/ImageTransforms/arm_crop_gray8.c @@ -3,7 +3,7 @@ * Title: arm_crop_gray8 * Description: Cropping of grayscale image * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2024 ARM Limited or its affiliates. All rights reserved. diff --git a/Source/ImageTransforms/arm_crop_rgb24.c b/Source/ImageTransforms/arm_crop_rgb24.c index 7a93c76..e8b4b66 100644 --- a/Source/ImageTransforms/arm_crop_rgb24.c +++ b/Source/ImageTransforms/arm_crop_rgb24.c @@ -3,7 +3,7 @@ * Title: arm_crop_gray8 * Description: Cropping of grayscale image * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2024 ARM Limited or its affiliates. All rights reserved. diff --git a/Source/ImageTransforms/arm_image_resize_bgr_8U3C_f32.c b/Source/ImageTransforms/arm_image_resize_bgr_8U3C_f32.c index c585e3b..99fd24c 100644 --- a/Source/ImageTransforms/arm_image_resize_bgr_8U3C_f32.c +++ b/Source/ImageTransforms/arm_image_resize_bgr_8U3C_f32.c @@ -3,7 +3,7 @@ * Title: arm_image_resize_bgr_8U3C * Description: image resize of planar BGR * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2024 Himax Technologies, Inc. or its affiliates. All rights reserved. diff --git a/Source/ImageTransforms/arm_image_resize_bgr_8U3C_to_rgb24_f32.c b/Source/ImageTransforms/arm_image_resize_bgr_8U3C_to_rgb24_f32.c index 9c46194..81c122a 100644 --- a/Source/ImageTransforms/arm_image_resize_bgr_8U3C_to_rgb24_f32.c +++ b/Source/ImageTransforms/arm_image_resize_bgr_8U3C_to_rgb24_f32.c @@ -3,7 +3,7 @@ * Title: arm_image_resize_bgr_8U3C_to_rgb24_f32 * Description: image resize of planar BGR8U3C to RGB24 * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2024 Himax Technologies, Inc. or its affiliates. All rights reserved. diff --git a/Source/ImageTransforms/arm_image_resize_common_f32.c b/Source/ImageTransforms/arm_image_resize_common_f32.c index d45af61..ee214e5 100644 --- a/Source/ImageTransforms/arm_image_resize_common_f32.c +++ b/Source/ImageTransforms/arm_image_resize_common_f32.c @@ -3,7 +3,7 @@ * Title: arm_image_resize_common * Description: common code used by different resize functions * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2024 Himax Technologies, Inc. or its affiliates. All rights reserved. diff --git a/Source/ImageTransforms/arm_image_resize_gray8_f32.c b/Source/ImageTransforms/arm_image_resize_gray8_f32.c index e549695..aa2144c 100644 --- a/Source/ImageTransforms/arm_image_resize_gray8_f32.c +++ b/Source/ImageTransforms/arm_image_resize_gray8_f32.c @@ -3,7 +3,7 @@ * Title: arm_image_resize_gray8 * Description: image resize of gray8 * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2024 Himax Technologies, Inc. or its affiliates. All rights reserved. diff --git a/Source/LinearFilters/arm_gaussian.c b/Source/LinearFilters/arm_gaussian.c index d6144be..be0db84 100644 --- a/Source/LinearFilters/arm_gaussian.c +++ b/Source/LinearFilters/arm_gaussian.c @@ -5,7 +5,7 @@ * filter * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. @@ -27,7 +27,9 @@ #include "cv/linear_filters.h" #include "dsp/basic_math_functions.h" -#include "arm_acle.h" +#include "dsp/none.h" + + // The kernel applied by this filter is [1,2,1] // [2,4,2] // [1,2,1] @@ -37,7 +39,7 @@ // This macro is in fact two operation at once, // first the conversion from q6 to uint8/q0 // second the division per 16, necessary to have the sum of the coeficients in our gaussian equal to 1 -#define CONVERSION_GAUSSIAN_Q6TO_U8_AND_DIV_16(a) __ssat(((a) >> 10),16) +#define CONVERSION_GAUSSIAN_Q6TO_U8_AND_DIV_16(a) __SSAT(((a) >> 10),16) // Apply a kernel [1,2,1] in q3 so [0x08,0x10,0x08] to the input data // This macro will be applied two time on each pixel. diff --git a/Source/LinearFilters/arm_gaussian_5x5.c b/Source/LinearFilters/arm_gaussian_5x5.c index c29456a..6829890 100644 --- a/Source/LinearFilters/arm_gaussian_5x5.c +++ b/Source/LinearFilters/arm_gaussian_5x5.c @@ -5,7 +5,7 @@ * filter * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. @@ -27,7 +27,9 @@ #include "cv/linear_filters.h" #include "dsp/basic_math_functions.h" -#include "arm_acle.h" +#include "dsp/none.h" + + // The kernel applied by this filter is [1, 4, 6, 4, 1] /256 // [4,16,24,16, 4] // [6,24,36,24, 6] @@ -36,7 +38,7 @@ // it also can be seen as applying the kernel [1,4,6,4,1] one time on the line and one time on the column sum is 256 // Macro dividing the input value by 256, necessary to normalise the kernel of the gaussian -#define DIV_256(a) __ssat(((a) >> 8), 16) +#define DIV_256(a) __SSAT(((a) >> 8), 16) // Apply the kernel [1, 4, 6, 4, 1] to the input values #define VERTICAL_COMPUTE_SCALAR(data_0, data_1, data_2, data_3, data_4) \ diff --git a/Source/LinearFilters/arm_gaussian_7x7_buffer_15.c b/Source/LinearFilters/arm_gaussian_7x7_buffer_15.c index dfd2804..de969e1 100644 --- a/Source/LinearFilters/arm_gaussian_7x7_buffer_15.c +++ b/Source/LinearFilters/arm_gaussian_7x7_buffer_15.c @@ -5,7 +5,7 @@ * filter * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. @@ -27,7 +27,8 @@ #include "cv/linear_filters.h" #include "dsp/basic_math_functions.h" -#include "arm_acle.h" +#include "dsp/none.h" + // #define BUFFER_TYPE q15_t // The kernel applied by this filter is [ 4, 14, 28, 36, 28, 14, 4] /4096 // [14, 49, 98,126, 98, 49,14] @@ -41,7 +42,7 @@ // 256 // Macro dividing the input value by 256, necessary to normalise the kernel of the gaussian -#define DIV_256(a) __ssat(((a) >> 8),16) +#define DIV_256(a) __SSAT(((a) >> 8),16) // Apply the kernel [2, 7, 14, 18, 14, 7, 2] to the input values #define KERNEL_APPLICATION(data_0, data_1, data_2, data_3, data_4, data_5, data_6) \ @@ -52,7 +53,7 @@ // value of 64 * 255, the second application can lead to a max value of 64*64 ** 255 that can overflow int16 this shift // lead to a loss of precision in some cases #define VERTICAL_COMPUTE_SCALAR(data_0, data_1, data_2, data_3, data_4, data_5, data_6) \ - __ssat(KERNEL_APPLICATION(data_0, data_1, data_2, data_3, data_4, data_5, data_6) >> 4, 16) + __SSAT(KERNEL_APPLICATION(data_0, data_1, data_2, data_3, data_4, data_5, data_6) >> 4, 16) // The horizontal computation consist of applying the kernel and shifting by 8 on the left. the sum of the coeficient of // the kernel is 4096, so shift by 12, but we already shifted by 4 in the vertical part diff --git a/Source/LinearFilters/arm_gaussian_7x7_buffer_31.c b/Source/LinearFilters/arm_gaussian_7x7_buffer_31.c index 6bf2563..98ffd22 100644 --- a/Source/LinearFilters/arm_gaussian_7x7_buffer_31.c +++ b/Source/LinearFilters/arm_gaussian_7x7_buffer_31.c @@ -5,7 +5,7 @@ * filter * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. @@ -27,7 +27,7 @@ #include "cv/linear_filters.h" #include "dsp/basic_math_functions.h" -#include "arm_acle.h" +#include "dsp/none.h" // #define BUFFER_TYPE q15_t // The kernel applied by this filter is [ 4, 14, 28, 36, 28, 14, 4] /4096 @@ -42,7 +42,7 @@ // 256 // Macro dividing the input value by 256, necessary to normalise the kernel of the gaussian -#define DIV_256(a) __ssat(((a) >> 8), 32) +#define DIV_256(a) __SSAT(((a) >> 8), 32) // Apply the kernel [2, 7, 14, 18, 14, 7, 2] to the input values #define KERNEL_APPLICATION(data_0, data_1, data_2, data_3, data_4, data_5, data_6) \ diff --git a/Source/LinearFilters/arm_sobel_horizontal.c b/Source/LinearFilters/arm_sobel_horizontal.c index 5326d9e..9aa7fd4 100644 --- a/Source/LinearFilters/arm_sobel_horizontal.c +++ b/Source/LinearFilters/arm_sobel_horizontal.c @@ -4,7 +4,7 @@ * Description: Sobel filter on y axis filter CMSIS-CV * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. diff --git a/Source/LinearFilters/arm_sobel_vertical.c b/Source/LinearFilters/arm_sobel_vertical.c index b547f8d..a4281ef 100644 --- a/Source/LinearFilters/arm_sobel_vertical.c +++ b/Source/LinearFilters/arm_sobel_vertical.c @@ -4,7 +4,7 @@ * Description: Sobel filter on x axis filter CMSIS-CV * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- */ /* * Copyright (C) 2014 ARM Limited or its affiliates. All rights reserved. diff --git a/Testing/board/test_config.h b/Testing/board/test_config.h index 33db5b6..6239796 100644 --- a/Testing/board/test_config.h +++ b/Testing/board/test_config.h @@ -1,7 +1,7 @@ #ifndef TEST_CONFIG_H #define TEST_CONFIG_H -#define TESTGROUP3 +#define TESTGROUP0 #endif diff --git a/Testing/browser/GenericNodes.h b/Testing/browser/GenericNodes.h index 42c8a26..4e09947 100644 --- a/Testing/browser/GenericNodes.h +++ b/Testing/browser/GenericNodes.h @@ -4,7 +4,7 @@ * Description: C++ support templates for the compute graph with static scheduler * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- * * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. diff --git a/Testing/browser/cg_status.h b/Testing/browser/cg_status.h index f3070cf..7662138 100644 --- a/Testing/browser/cg_status.h +++ b/Testing/browser/cg_status.h @@ -4,7 +4,7 @@ * Description: Error code for the Compute Graph * * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- * * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. diff --git a/Testing/browser/stream/AppNodes.h b/Testing/browser/stream/AppNodes.h index c507b3e..c416941 100644 --- a/Testing/browser/stream/AppNodes.h +++ b/Testing/browser/stream/AppNodes.h @@ -3,7 +3,7 @@ * Title: AppNodes.h * Description: Application nodes for Example simple * - * Target Processor: Cortex-M and Cortex-A cores + * Target Processor: Cortex-M * -------------------------------------------------------------------- * * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. diff --git a/Testing/browser/web/stream.js b/Testing/browser/web/stream.js index 10f9ec3..11c5630 100644 --- a/Testing/browser/web/stream.js +++ b/Testing/browser/web/stream.js @@ -99786,91 +99786,91 @@ function asmFunc(imports) { $6_1 = $6_1 | 0; $7_1 = $7_1 | 0; $8_1 = $8_1 | 0; - var $11_1 = 0, $14_1 = 0, $18_1 = 0, $40_1 = 0, $72_1 = 0, $95_1 = 0, $106_1 = 0, $115_1 = 0, $131_1 = 0, $140_1 = 0, $157_1 = 0, $166_1 = 0, $194_1 = 0, $198_1 = 0, $220_1 = 0, $233_1 = 0, $242_1 = 0, $254_1 = 0, $283_1 = 0, $297_1 = 0, $312_1 = 0, $325_1 = 0, $337_1 = 0, $360_1 = 0, $377_1 = 0, $391_1 = 0, $406_1 = 0, $419_1 = 0, $437_1 = 0, $441_1 = 0, $463_1 = 0, $476_1 = 0, $485_1 = 0, $497_1 = 0, $519_1 = 0, $533_1 = 0, $540_1 = 0, $554_1 = 0, $562_1 = 0, $576_1 = 0, $589_1 = 0, $594_1 = 0; - $11_1 = global$0 - 48 | 0; - HEAP8[($11_1 + 47 | 0) >> 0] = $0_1; - HEAP16[($11_1 + 44 | 0) >> 1] = $1_1; - HEAP32[($11_1 + 40 | 0) >> 2] = $2_1; - HEAP32[($11_1 + 36 | 0) >> 2] = $3_1; - HEAP32[($11_1 + 32 | 0) >> 2] = $4_1; - HEAP32[($11_1 + 28 | 0) >> 2] = $5_1; - HEAP8[($11_1 + 27 | 0) >> 0] = $6_1; - HEAP8[($11_1 + 26 | 0) >> 0] = $7_1; - HEAP8[($11_1 + 25 | 0) >> 0] = $8_1; - $14_1 = (HEAPU8[($11_1 + 27 | 0) >> 0] | 0) + -1 | 0; + var $11_1 = 0, $14_1 = 0, $18_1 = 0, $40_1 = 0, $72_1 = 0, $95_1 = 0, $106_1 = 0, $115_1 = 0, $131_1 = 0, $140_1 = 0, $157_1 = 0, $166_1 = 0, $194_1 = 0, $198_1 = 0, $220_1 = 0, $233_1 = 0, $242_1 = 0, $254_1 = 0, $283_1 = 0, $297_1 = 0, $312_1 = 0, $360_1 = 0, $372_1 = 0, $395_1 = 0, $412_1 = 0, $426_1 = 0, $441_1 = 0, $489_1 = 0, $507_1 = 0, $511_1 = 0, $533_1 = 0, $546_1 = 0, $555_1 = 0, $567_1 = 0, $589_1 = 0, $603_1 = 0, $610_1 = 0, $624_1 = 0, $632_1 = 0, $646_1 = 0, $694_1 = 0, $699_1 = 0; + $11_1 = global$0 - 112 | 0; + HEAP8[($11_1 + 51 | 0) >> 0] = $0_1; + HEAP16[($11_1 + 48 | 0) >> 1] = $1_1; + HEAP32[($11_1 + 44 | 0) >> 2] = $2_1; + HEAP32[($11_1 + 40 | 0) >> 2] = $3_1; + HEAP32[($11_1 + 36 | 0) >> 2] = $4_1; + HEAP32[($11_1 + 32 | 0) >> 2] = $5_1; + HEAP8[($11_1 + 31 | 0) >> 0] = $6_1; + HEAP8[($11_1 + 30 | 0) >> 0] = $7_1; + HEAP8[($11_1 + 29 | 0) >> 0] = $8_1; + $14_1 = (HEAPU8[($11_1 + 31 | 0) >> 0] | 0) + -1 | 0; label$1 : { label$2 : { switch ($14_1 | 0) { case 0: - $18_1 = (HEAP8[($11_1 + 47 | 0) >> 0] | 0) + -1 | 0; + $18_1 = (HEAP8[($11_1 + 51 | 0) >> 0] | 0) + -1 | 0; label$6 : { label$7 : { switch ($18_1 | 0) { case 0: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; break label$6; case 1: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 0; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 0; break label$6; default: break label$7; }; } - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; } break label$1; case 1: - $40_1 = (HEAP8[($11_1 + 47 | 0) >> 0] | 0) + -1 | 0; + $40_1 = (HEAP8[($11_1 + 51 | 0) >> 0] | 0) + -1 | 0; label$10 : { label$11 : { switch ($40_1 | 0) { case 0: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; break label$10; case 1: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = (0 - ((HEAPU8[($11_1 + 25 | 0) >> 0] | 0) & 255 | 0) | 0) + 1 | 0; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = (0 - ((HEAPU8[($11_1 + 29 | 0) >> 0] | 0) & 255 | 0) | 0) + 1 | 0; break label$10; default: break label$11; }; } - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = ((HEAPU8[($11_1 + 25 | 0) >> 0] | 0) & 255 | 0) - 1 | 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = ((HEAPU8[($11_1 + 29 | 0) >> 0] | 0) & 255 | 0) - 1 | 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; } break label$1; case 2: - $72_1 = (HEAP8[($11_1 + 47 | 0) >> 0] | 0) + -1 | 0; + $72_1 = (HEAP8[($11_1 + 51 | 0) >> 0] | 0) + -1 | 0; label$14 : { label$15 : { switch ($72_1 | 0) { case 0: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; break label$14; case 1: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = -1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = -1; break label$14; default: break label$15; }; } - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = 1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = 1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; } break label$1; default: @@ -99878,11 +99878,11 @@ function asmFunc(imports) { }; } } - HEAP32[($11_1 + 20 | 0) >> 2] = 0; + HEAP32[($11_1 + 24 | 0) >> 2] = 0; label$18 : { label$19 : while (1) { $95_1 = 16; - if (!((HEAP32[($11_1 + 20 | 0) >> 2] | 0 | 0) < (((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $95_1 | 0) >> $95_1 | 0 | 0) & 1 | 0)) { + if (!((HEAP32[($11_1 + 24 | 0) >> 2] | 0 | 0) < (((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $95_1 | 0) >> $95_1 | 0 | 0) & 1 | 0)) { break label$18 } $106_1 = 16; @@ -99891,93 +99891,93 @@ function asmFunc(imports) { $140_1 = 16; $157_1 = 16; $166_1 = 16; - HEAP16[((HEAP32[($11_1 + 40 | 0) >> 2] | 0) + ((HEAP32[($11_1 + 20 | 0) >> 2] | 0) << 1 | 0) | 0) >> 1] = ((((HEAPU8[((HEAP32[($11_1 + 36 | 0) >> 2] | 0) + ((Math_imul((HEAPU8[($11_1 + 26 | 0) >> 0] | 0) & 255 | 0, ((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $106_1 | 0) >> $106_1 | 0) + (HEAP32[($11_1 + 20 | 0) >> 2] | 0) | 0) + Math_imul(HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] | 0, ((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $115_1 | 0) >> $115_1 | 0) | 0) | 0) >> 0] | 0) & 255 | 0) << 3 | 0) + (((HEAPU8[((HEAP32[($11_1 + 36 | 0) >> 2] | 0) + ((Math_imul((HEAPU8[($11_1 + 26 | 0) >> 0] | 0) & 255 | 0, ((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $131_1 | 0) >> $131_1 | 0) + (HEAP32[($11_1 + 20 | 0) >> 2] | 0) | 0) + Math_imul(HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] | 0, ((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $140_1 | 0) >> $140_1 | 0) | 0) | 0) >> 0] | 0) & 255 | 0) << 4 | 0) | 0) + (((HEAPU8[((HEAP32[($11_1 + 36 | 0) >> 2] | 0) + ((Math_imul((HEAPU8[($11_1 + 26 | 0) >> 0] | 0) & 255 | 0, ((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $157_1 | 0) >> $157_1 | 0) + (HEAP32[($11_1 + 20 | 0) >> 2] | 0) | 0) + Math_imul(HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] | 0, ((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $166_1 | 0) >> $166_1 | 0) | 0) | 0) >> 0] | 0) & 255 | 0) << 3 | 0) | 0; - HEAP32[($11_1 + 20 | 0) >> 2] = (HEAP32[($11_1 + 20 | 0) >> 2] | 0) + 1 | 0; + HEAP16[((HEAP32[($11_1 + 44 | 0) >> 2] | 0) + ((HEAP32[($11_1 + 24 | 0) >> 2] | 0) << 1 | 0) | 0) >> 1] = ((((HEAPU8[((HEAP32[($11_1 + 40 | 0) >> 2] | 0) + ((Math_imul((HEAPU8[($11_1 + 30 | 0) >> 0] | 0) & 255 | 0, ((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $106_1 | 0) >> $106_1 | 0) + (HEAP32[($11_1 + 24 | 0) >> 2] | 0) | 0) + Math_imul(HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] | 0, ((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $115_1 | 0) >> $115_1 | 0) | 0) | 0) >> 0] | 0) & 255 | 0) << 3 | 0) + (((HEAPU8[((HEAP32[($11_1 + 40 | 0) >> 2] | 0) + ((Math_imul((HEAPU8[($11_1 + 30 | 0) >> 0] | 0) & 255 | 0, ((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $131_1 | 0) >> $131_1 | 0) + (HEAP32[($11_1 + 24 | 0) >> 2] | 0) | 0) + Math_imul(HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] | 0, ((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $140_1 | 0) >> $140_1 | 0) | 0) | 0) >> 0] | 0) & 255 | 0) << 4 | 0) | 0) + (((HEAPU8[((HEAP32[($11_1 + 40 | 0) >> 2] | 0) + ((Math_imul((HEAPU8[($11_1 + 30 | 0) >> 0] | 0) & 255 | 0, ((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $157_1 | 0) >> $157_1 | 0) + (HEAP32[($11_1 + 24 | 0) >> 2] | 0) | 0) + Math_imul(HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] | 0, ((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $166_1 | 0) >> $166_1 | 0) | 0) | 0) >> 0] | 0) & 255 | 0) << 3 | 0) | 0; + HEAP32[($11_1 + 24 | 0) >> 2] = (HEAP32[($11_1 + 24 | 0) >> 2] | 0) + 1 | 0; continue label$19; }; } - HEAP32[($11_1 + 16 | 0) >> 2] = 0; + HEAP32[($11_1 + 20 | 0) >> 2] = 0; label$20 : { label$21 : while (1) { - if (!((HEAP32[($11_1 + 16 | 0) >> 2] | 0 | 0) < (1 | 0) & 1 | 0)) { + if (!((HEAP32[($11_1 + 20 | 0) >> 2] | 0 | 0) < (1 | 0) & 1 | 0)) { break label$20 } - $194_1 = (HEAPU8[($11_1 + 27 | 0) >> 0] | 0) + -1 | 0; + $194_1 = (HEAPU8[($11_1 + 31 | 0) >> 0] | 0) + -1 | 0; label$22 : { label$23 : { switch ($194_1 | 0) { case 0: - $198_1 = (HEAP32[($11_1 + 16 | 0) >> 2] | 0) + -1 | 0; + $198_1 = (HEAP32[($11_1 + 20 | 0) >> 2] | 0) + -1 | 0; label$27 : { label$28 : { switch ($198_1 | 0) { case 0: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; break label$27; case 1: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 0; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 0; break label$27; default: break label$28; }; } - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; } break label$22; case 1: - $220_1 = (HEAP32[($11_1 + 16 | 0) >> 2] | 0) + -1 | 0; + $220_1 = (HEAP32[($11_1 + 20 | 0) >> 2] | 0) + -1 | 0; label$31 : { label$32 : { switch ($220_1 | 0) { case 0: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; break label$31; case 1: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; $233_1 = 16; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = (0 - (((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $233_1 | 0) >> $233_1 | 0) | 0) + 1 | 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = (0 - (((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $233_1 | 0) >> $233_1 | 0) | 0) + 1 | 0; break label$31; default: break label$32; }; } $242_1 = 16; - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = (((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $242_1 | 0) >> $242_1 | 0) - 1 | 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = (((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $242_1 | 0) >> $242_1 | 0) - 1 | 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; } break label$22; case 2: - $254_1 = (HEAP32[($11_1 + 16 | 0) >> 2] | 0) + -1 | 0; + $254_1 = (HEAP32[($11_1 + 20 | 0) >> 2] | 0) + -1 | 0; label$35 : { label$36 : { switch ($254_1 | 0) { case 0: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; break label$35; case 1: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = -1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = -1; break label$35; default: break label$36; }; } - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = 1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = 1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; } break label$22; default: @@ -99988,152 +99988,239 @@ function asmFunc(imports) { $283_1 = 16; $297_1 = 16; $312_1 = 16; - $325_1 = 16; - HEAP8[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + (Math_imul((HEAPU8[($11_1 + 26 | 0) >> 0] | 0) & 255 | 0, ((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $325_1 | 0) >> $325_1 | 0) + (HEAP32[($11_1 + 16 | 0) >> 2] | 0) | 0) | 0) >> 0] = ((((((HEAPU16[((HEAP32[($11_1 + 40 | 0) >> 2] | 0) + (((HEAP32[($11_1 + 16 | 0) >> 2] | 0) + (HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $283_1 | 0) >> $283_1 | 0) << 3 | 0) + ((((HEAPU16[((HEAP32[($11_1 + 40 | 0) >> 2] | 0) + (((HEAP32[($11_1 + 16 | 0) >> 2] | 0) + (HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $297_1 | 0) >> $297_1 | 0) << 4 | 0) | 0) + ((((HEAPU16[((HEAP32[($11_1 + 40 | 0) >> 2] | 0) + (((HEAP32[($11_1 + 16 | 0) >> 2] | 0) + (HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $312_1 | 0) >> $312_1 | 0) << 3 | 0) | 0) >> 10 | 0; - HEAP32[($11_1 + 16 | 0) >> 2] = (HEAP32[($11_1 + 16 | 0) >> 2] | 0) + 1 | 0; + HEAP32[($11_1 + 104 | 0) >> 2] = ((((((HEAPU16[((HEAP32[($11_1 + 44 | 0) >> 2] | 0) + (((HEAP32[($11_1 + 20 | 0) >> 2] | 0) + (HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $283_1 | 0) >> $283_1 | 0) << 3 | 0) + ((((HEAPU16[((HEAP32[($11_1 + 44 | 0) >> 2] | 0) + (((HEAP32[($11_1 + 20 | 0) >> 2] | 0) + (HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $297_1 | 0) >> $297_1 | 0) << 4 | 0) | 0) + ((((HEAPU16[((HEAP32[($11_1 + 44 | 0) >> 2] | 0) + (((HEAP32[($11_1 + 20 | 0) >> 2] | 0) + (HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $312_1 | 0) >> $312_1 | 0) << 3 | 0) | 0) >> 10 | 0; + HEAP32[($11_1 + 100 | 0) >> 2] = 16; + label$39 : { + label$40 : { + if (!((HEAP32[($11_1 + 100 | 0) >> 2] | 0) >>> 0 >= 1 >>> 0 & 1 | 0)) { + break label$40 + } + if (!((HEAP32[($11_1 + 100 | 0) >> 2] | 0) >>> 0 <= 32 >>> 0 & 1 | 0)) { + break label$40 + } + HEAP32[($11_1 + 96 | 0) >> 2] = (1 << ((HEAP32[($11_1 + 100 | 0) >> 2] | 0) - 1 | 0) | 0) - 1 | 0; + HEAP32[($11_1 + 92 | 0) >> 2] = -1 - (HEAP32[($11_1 + 96 | 0) >> 2] | 0) | 0; + label$41 : { + if (!((HEAP32[($11_1 + 104 | 0) >> 2] | 0 | 0) > (HEAP32[($11_1 + 96 | 0) >> 2] | 0 | 0) & 1 | 0)) { + break label$41 + } + HEAP32[($11_1 + 108 | 0) >> 2] = HEAP32[($11_1 + 96 | 0) >> 2] | 0; + break label$39; + } + label$42 : { + if (!((HEAP32[($11_1 + 104 | 0) >> 2] | 0 | 0) < (HEAP32[($11_1 + 92 | 0) >> 2] | 0 | 0) & 1 | 0)) { + break label$42 + } + HEAP32[($11_1 + 108 | 0) >> 2] = HEAP32[($11_1 + 92 | 0) >> 2] | 0; + break label$39; + } + } + HEAP32[($11_1 + 108 | 0) >> 2] = HEAP32[($11_1 + 104 | 0) >> 2] | 0; + } + $360_1 = 16; + HEAP8[((HEAP32[($11_1 + 36 | 0) >> 2] | 0) + (Math_imul((HEAPU8[($11_1 + 30 | 0) >> 0] | 0) & 255 | 0, ((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $360_1 | 0) >> $360_1 | 0) + (HEAP32[($11_1 + 20 | 0) >> 2] | 0) | 0) | 0) >> 0] = HEAP32[($11_1 + 108 | 0) >> 2] | 0; + HEAP32[($11_1 + 20 | 0) >> 2] = (HEAP32[($11_1 + 20 | 0) >> 2] | 0) + 1 | 0; continue label$21; }; } - $337_1 = (HEAPU8[($11_1 + 27 | 0) >> 0] | 0) + -1 | 0; - label$39 : { - label$40 : { - switch ($337_1 | 0) { + $372_1 = (HEAPU8[($11_1 + 31 | 0) >> 0] | 0) + -1 | 0; + label$43 : { + label$44 : { + switch ($372_1 | 0) { case 0: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; - break label$39; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + break label$43; case 1: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; - break label$39; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + break label$43; case 2: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; - break label$39; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + break label$43; default: - break label$40; + break label$44; }; } } - HEAP32[($11_1 + 12 | 0) >> 2] = 1; - label$44 : { - label$45 : while (1) { - $360_1 = 16; - if (!((HEAP32[($11_1 + 12 | 0) >> 2] | 0 | 0) < ((((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $360_1 | 0) >> $360_1 | 0) - 1 | 0 | 0) & 1 | 0)) { - break label$44 + HEAP32[($11_1 + 16 | 0) >> 2] = 1; + label$48 : { + label$49 : while (1) { + $395_1 = 16; + if (!((HEAP32[($11_1 + 16 | 0) >> 2] | 0 | 0) < ((((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $395_1 | 0) >> $395_1 | 0) - 1 | 0 | 0) & 1 | 0)) { + break label$48 + } + $412_1 = 16; + $426_1 = 16; + $441_1 = 16; + HEAP32[($11_1 + 84 | 0) >> 2] = ((((((HEAPU16[((HEAP32[($11_1 + 44 | 0) >> 2] | 0) + (((HEAP32[($11_1 + 16 | 0) >> 2] | 0) + (HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $412_1 | 0) >> $412_1 | 0) << 3 | 0) + ((((HEAPU16[((HEAP32[($11_1 + 44 | 0) >> 2] | 0) + (((HEAP32[($11_1 + 16 | 0) >> 2] | 0) + (HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $426_1 | 0) >> $426_1 | 0) << 4 | 0) | 0) + ((((HEAPU16[((HEAP32[($11_1 + 44 | 0) >> 2] | 0) + (((HEAP32[($11_1 + 16 | 0) >> 2] | 0) + (HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $441_1 | 0) >> $441_1 | 0) << 3 | 0) | 0) >> 10 | 0; + HEAP32[($11_1 + 80 | 0) >> 2] = 16; + label$50 : { + label$51 : { + if (!((HEAP32[($11_1 + 80 | 0) >> 2] | 0) >>> 0 >= 1 >>> 0 & 1 | 0)) { + break label$51 + } + if (!((HEAP32[($11_1 + 80 | 0) >> 2] | 0) >>> 0 <= 32 >>> 0 & 1 | 0)) { + break label$51 + } + HEAP32[($11_1 + 76 | 0) >> 2] = (1 << ((HEAP32[($11_1 + 80 | 0) >> 2] | 0) - 1 | 0) | 0) - 1 | 0; + HEAP32[($11_1 + 72 | 0) >> 2] = -1 - (HEAP32[($11_1 + 76 | 0) >> 2] | 0) | 0; + label$52 : { + if (!((HEAP32[($11_1 + 84 | 0) >> 2] | 0 | 0) > (HEAP32[($11_1 + 76 | 0) >> 2] | 0 | 0) & 1 | 0)) { + break label$52 + } + HEAP32[($11_1 + 88 | 0) >> 2] = HEAP32[($11_1 + 76 | 0) >> 2] | 0; + break label$50; + } + label$53 : { + if (!((HEAP32[($11_1 + 84 | 0) >> 2] | 0 | 0) < (HEAP32[($11_1 + 72 | 0) >> 2] | 0 | 0) & 1 | 0)) { + break label$53 + } + HEAP32[($11_1 + 88 | 0) >> 2] = HEAP32[($11_1 + 72 | 0) >> 2] | 0; + break label$50; + } + } + HEAP32[($11_1 + 88 | 0) >> 2] = HEAP32[($11_1 + 84 | 0) >> 2] | 0; } - $377_1 = 16; - $391_1 = 16; - $406_1 = 16; - $419_1 = 16; - HEAP8[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + (Math_imul((HEAPU8[($11_1 + 26 | 0) >> 0] | 0) & 255 | 0, ((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $419_1 | 0) >> $419_1 | 0) + (HEAP32[($11_1 + 12 | 0) >> 2] | 0) | 0) | 0) >> 0] = ((((((HEAPU16[((HEAP32[($11_1 + 40 | 0) >> 2] | 0) + (((HEAP32[($11_1 + 12 | 0) >> 2] | 0) + (HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $377_1 | 0) >> $377_1 | 0) << 3 | 0) + ((((HEAPU16[((HEAP32[($11_1 + 40 | 0) >> 2] | 0) + (((HEAP32[($11_1 + 12 | 0) >> 2] | 0) + (HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $391_1 | 0) >> $391_1 | 0) << 4 | 0) | 0) + ((((HEAPU16[((HEAP32[($11_1 + 40 | 0) >> 2] | 0) + (((HEAP32[($11_1 + 12 | 0) >> 2] | 0) + (HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $406_1 | 0) >> $406_1 | 0) << 3 | 0) | 0) >> 10 | 0; - HEAP32[($11_1 + 12 | 0) >> 2] = (HEAP32[($11_1 + 12 | 0) >> 2] | 0) + 1 | 0; - continue label$45; + $489_1 = 16; + HEAP8[((HEAP32[($11_1 + 36 | 0) >> 2] | 0) + (Math_imul((HEAPU8[($11_1 + 30 | 0) >> 0] | 0) & 255 | 0, ((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $489_1 | 0) >> $489_1 | 0) + (HEAP32[($11_1 + 16 | 0) >> 2] | 0) | 0) | 0) >> 0] = HEAP32[($11_1 + 88 | 0) >> 2] | 0; + HEAP32[($11_1 + 16 | 0) >> 2] = (HEAP32[($11_1 + 16 | 0) >> 2] | 0) + 1 | 0; + continue label$49; }; } - HEAP32[($11_1 + 8 | 0) >> 2] = 2; - label$46 : { - label$47 : while (1) { - if (!((HEAP32[($11_1 + 8 | 0) >> 2] | 0 | 0) < (3 | 0) & 1 | 0)) { - break label$46 + HEAP32[($11_1 + 12 | 0) >> 2] = 2; + label$54 : { + label$55 : while (1) { + if (!((HEAP32[($11_1 + 12 | 0) >> 2] | 0 | 0) < (3 | 0) & 1 | 0)) { + break label$54 } - $437_1 = (HEAPU8[($11_1 + 27 | 0) >> 0] | 0) + -1 | 0; - label$48 : { - label$49 : { - switch ($437_1 | 0) { + $507_1 = (HEAPU8[($11_1 + 31 | 0) >> 0] | 0) + -1 | 0; + label$56 : { + label$57 : { + switch ($507_1 | 0) { case 0: - $441_1 = (HEAP32[($11_1 + 8 | 0) >> 2] | 0) + -1 | 0; - label$53 : { - label$54 : { - switch ($441_1 | 0) { + $511_1 = (HEAP32[($11_1 + 12 | 0) >> 2] | 0) + -1 | 0; + label$61 : { + label$62 : { + switch ($511_1 | 0) { case 0: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; - break label$53; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + break label$61; case 1: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 0; - break label$53; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 0; + break label$61; default: - break label$54; + break label$62; }; } - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; } - break label$48; + break label$56; case 1: - $463_1 = (HEAP32[($11_1 + 8 | 0) >> 2] | 0) + -1 | 0; - label$57 : { - label$58 : { - switch ($463_1 | 0) { + $533_1 = (HEAP32[($11_1 + 12 | 0) >> 2] | 0) + -1 | 0; + label$65 : { + label$66 : { + switch ($533_1 | 0) { case 0: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; - break label$57; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + break label$65; case 1: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - $476_1 = 16; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = (0 - (((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $476_1 | 0) >> $476_1 | 0) | 0) + 1 | 0; - break label$57; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + $546_1 = 16; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = (0 - (((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $546_1 | 0) >> $546_1 | 0) | 0) + 1 | 0; + break label$65; default: - break label$58; + break label$66; }; } - $485_1 = 16; - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = (((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $485_1 | 0) >> $485_1 | 0) - 1 | 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + $555_1 = 16; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = (((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $555_1 | 0) >> $555_1 | 0) - 1 | 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; } - break label$48; + break label$56; case 2: - $497_1 = (HEAP32[($11_1 + 8 | 0) >> 2] | 0) + -1 | 0; - label$61 : { - label$62 : { - switch ($497_1 | 0) { + $567_1 = (HEAP32[($11_1 + 12 | 0) >> 2] | 0) + -1 | 0; + label$69 : { + label$70 : { + switch ($567_1 | 0) { case 0: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; - break label$61; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + break label$69; case 1: - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = -1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = -1; - break label$61; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = -1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = -1; + break label$69; default: - break label$62; + break label$70; }; } - HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] = 1; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; - HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; + HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] = 1; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] = 0; + HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] = 1; } - break label$48; + break label$56; default: - break label$49; + break label$57; }; } } - $519_1 = 16; - $533_1 = 16; - $540_1 = 16; - $554_1 = 16; - $562_1 = 16; - $576_1 = 16; $589_1 = 16; - $594_1 = 16; - HEAP8[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + (((Math_imul((HEAPU8[($11_1 + 26 | 0) >> 0] | 0) & 255 | 0, ((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $589_1 | 0) >> $589_1 | 0) + (((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $594_1 | 0) >> $594_1 | 0) | 0) - 3 | 0) + (HEAP32[($11_1 + 8 | 0) >> 2] | 0) | 0) | 0) >> 0] = ((((((HEAPU16[((HEAP32[($11_1 + 40 | 0) >> 2] | 0) + (((((((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $519_1 | 0) >> $519_1 | 0) - 3 | 0) + (HEAP32[($11_1 + 8 | 0) >> 2] | 0) | 0) + (HEAP32[(HEAP32[($11_1 + 28 | 0) >> 2] | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $533_1 | 0) >> $533_1 | 0) << 3 | 0) + ((((HEAPU16[((HEAP32[($11_1 + 40 | 0) >> 2] | 0) + (((((((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $540_1 | 0) >> $540_1 | 0) - 3 | 0) + (HEAP32[($11_1 + 8 | 0) >> 2] | 0) | 0) + (HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 4 | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $554_1 | 0) >> $554_1 | 0) << 4 | 0) | 0) + ((((HEAPU16[((HEAP32[($11_1 + 40 | 0) >> 2] | 0) + (((((((HEAPU16[($11_1 + 44 | 0) >> 1] | 0) << $562_1 | 0) >> $562_1 | 0) - 3 | 0) + (HEAP32[($11_1 + 8 | 0) >> 2] | 0) | 0) + (HEAP32[((HEAP32[($11_1 + 28 | 0) >> 2] | 0) + 8 | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $576_1 | 0) >> $576_1 | 0) << 3 | 0) | 0) >> 10 | 0; - HEAP32[($11_1 + 8 | 0) >> 2] = (HEAP32[($11_1 + 8 | 0) >> 2] | 0) + 1 | 0; - continue label$47; + $603_1 = 16; + $610_1 = 16; + $624_1 = 16; + $632_1 = 16; + $646_1 = 16; + HEAP32[($11_1 + 64 | 0) >> 2] = ((((((HEAPU16[((HEAP32[($11_1 + 44 | 0) >> 2] | 0) + (((((((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $589_1 | 0) >> $589_1 | 0) - 3 | 0) + (HEAP32[($11_1 + 12 | 0) >> 2] | 0) | 0) + (HEAP32[(HEAP32[($11_1 + 32 | 0) >> 2] | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $603_1 | 0) >> $603_1 | 0) << 3 | 0) + ((((HEAPU16[((HEAP32[($11_1 + 44 | 0) >> 2] | 0) + (((((((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $610_1 | 0) >> $610_1 | 0) - 3 | 0) + (HEAP32[($11_1 + 12 | 0) >> 2] | 0) | 0) + (HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 4 | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $624_1 | 0) >> $624_1 | 0) << 4 | 0) | 0) + ((((HEAPU16[((HEAP32[($11_1 + 44 | 0) >> 2] | 0) + (((((((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $632_1 | 0) >> $632_1 | 0) - 3 | 0) + (HEAP32[($11_1 + 12 | 0) >> 2] | 0) | 0) + (HEAP32[((HEAP32[($11_1 + 32 | 0) >> 2] | 0) + 8 | 0) >> 2] | 0) | 0) << 1 | 0) | 0) >> 1] | 0) << $646_1 | 0) >> $646_1 | 0) << 3 | 0) | 0) >> 10 | 0; + HEAP32[($11_1 + 60 | 0) >> 2] = 16; + label$73 : { + label$74 : { + if (!((HEAP32[($11_1 + 60 | 0) >> 2] | 0) >>> 0 >= 1 >>> 0 & 1 | 0)) { + break label$74 + } + if (!((HEAP32[($11_1 + 60 | 0) >> 2] | 0) >>> 0 <= 32 >>> 0 & 1 | 0)) { + break label$74 + } + HEAP32[($11_1 + 56 | 0) >> 2] = (1 << ((HEAP32[($11_1 + 60 | 0) >> 2] | 0) - 1 | 0) | 0) - 1 | 0; + HEAP32[($11_1 + 52 | 0) >> 2] = -1 - (HEAP32[($11_1 + 56 | 0) >> 2] | 0) | 0; + label$75 : { + if (!((HEAP32[($11_1 + 64 | 0) >> 2] | 0 | 0) > (HEAP32[($11_1 + 56 | 0) >> 2] | 0 | 0) & 1 | 0)) { + break label$75 + } + HEAP32[($11_1 + 68 | 0) >> 2] = HEAP32[($11_1 + 56 | 0) >> 2] | 0; + break label$73; + } + label$76 : { + if (!((HEAP32[($11_1 + 64 | 0) >> 2] | 0 | 0) < (HEAP32[($11_1 + 52 | 0) >> 2] | 0 | 0) & 1 | 0)) { + break label$76 + } + HEAP32[($11_1 + 68 | 0) >> 2] = HEAP32[($11_1 + 52 | 0) >> 2] | 0; + break label$73; + } + } + HEAP32[($11_1 + 68 | 0) >> 2] = HEAP32[($11_1 + 64 | 0) >> 2] | 0; + } + $694_1 = 16; + $699_1 = 16; + HEAP8[((HEAP32[($11_1 + 36 | 0) >> 2] | 0) + (((Math_imul((HEAPU8[($11_1 + 30 | 0) >> 0] | 0) & 255 | 0, ((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $694_1 | 0) >> $694_1 | 0) + (((HEAPU16[($11_1 + 48 | 0) >> 1] | 0) << $699_1 | 0) >> $699_1 | 0) | 0) - 3 | 0) + (HEAP32[($11_1 + 12 | 0) >> 2] | 0) | 0) | 0) >> 0] = HEAP32[($11_1 + 68 | 0) >> 2] | 0; + HEAP32[($11_1 + 12 | 0) >> 2] = (HEAP32[($11_1 + 12 | 0) >> 2] | 0) + 1 | 0; + continue label$55; }; } return;