From 96abdd46da156c5cbc39f0e6db7ffe68f17751da Mon Sep 17 00:00:00 2001 From: pszmel Date: Thu, 8 Jul 2021 15:16:39 +0200 Subject: [PATCH 01/13] update docs --- docs/ops/arithmetic/Sign_1.md | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/docs/ops/arithmetic/Sign_1.md b/docs/ops/arithmetic/Sign_1.md index 8a42258e0da2e2..1aa87097e62136 100644 --- a/docs/ops/arithmetic/Sign_1.md +++ b/docs/ops/arithmetic/Sign_1.md @@ -2,35 +2,32 @@ **Versioned name**: *Sign-1* -**Category**: Arithmetic unary operation +**Category**: Arithmetic unary operation -**Short description**: *Sign* performs element-wise sign operation with given tensor. +**Short description**: *Sign* performs element-wise sign operation on a given input tensor. -**Attributes**: +**Detailed description**: *Sign* performs element-wise sign operation on a given input tensor, based on the following mathematical formula: - No attributes available. +\f[ +a_{i} = sign(a_{i}) +\f] + +**Attributes**: *Sign* operation has no attributes. **Inputs** -* **1**: An tensor of type T. **Required.** +* **1**: A tensor of type *T* and arbitrary shape. **Required.** **Outputs** -* **1**: The result of element-wise sign operation. A tensor of type T with mapped elements of the input tensor to -1 (if it is negative), 0 (if it is zero), or 1 (if it is positive). +* **1**: The result of element-wise *Sign* operation. A tensor of type *T* with mapped elements of the input tensor to -1 (if it is negative), 0 (if it is zero), or 1 (if it is positive). **Types** * *T*: any numeric type. -*Sign* does the following with the input tensor *a*: - -\f[ -a_{i} = sign(a_{i}) -\f] - -**Examples** -*Example 1* +**Example** ```xml @@ -47,4 +44,4 @@ a_{i} = sign(a_{i}) -``` \ No newline at end of file +``` From fefb7040b9a4495c6263bd22aa6128a46c324b77 Mon Sep 17 00:00:00 2001 From: pszmel Date: Thu, 8 Jul 2021 15:18:14 +0200 Subject: [PATCH 02/13] add sign to intActivationTypes --- .../cpu/shared_tests_instances/single_layer_tests/activation.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/inference-engine/tests/functional/plugin/cpu/shared_tests_instances/single_layer_tests/activation.cpp b/inference-engine/tests/functional/plugin/cpu/shared_tests_instances/single_layer_tests/activation.cpp index 11a2c41a68e52c..2223105d2c0a9a 100644 --- a/inference-engine/tests/functional/plugin/cpu/shared_tests_instances/single_layer_tests/activation.cpp +++ b/inference-engine/tests/functional/plugin/cpu/shared_tests_instances/single_layer_tests/activation.cpp @@ -68,6 +68,7 @@ const std::map>> intActivationTy {Negative, {}}, {Ceiling, {}}, {Cos, {}}, + {Sign, {}}, {Sqrt, {}}, {Tanh, {}}, }; From ad0d5c4cbfa31041b7241f5b69ccd009283a98f1 Mon Sep 17 00:00:00 2001 From: pszmel Date: Thu, 8 Jul 2021 15:19:09 +0200 Subject: [PATCH 03/13] add RTTI macro --- ngraph/core/include/ngraph/op/sign.hpp | 4 ++-- ngraph/core/src/op/sign.cpp | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ngraph/core/include/ngraph/op/sign.hpp b/ngraph/core/include/ngraph/op/sign.hpp index 8a984ee7294f40..a3f4b35c8de1e7 100644 --- a/ngraph/core/include/ngraph/op/sign.hpp +++ b/ngraph/core/include/ngraph/op/sign.hpp @@ -17,8 +17,8 @@ namespace ngraph class NGRAPH_API Sign : public util::UnaryElementwiseArithmetic { public: - static constexpr NodeTypeInfo type_info{"Sign", 0}; - const NodeTypeInfo& get_type_info() const override { return type_info; } + NGRAPH_RTTI_DECLARATION; + Sign() = default; /// \brief Constructs an elementwise sign operation. /// diff --git a/ngraph/core/src/op/sign.cpp b/ngraph/core/src/op/sign.cpp index 9d0e3e27332d9f..8ae6131a2f52f6 100644 --- a/ngraph/core/src/op/sign.cpp +++ b/ngraph/core/src/op/sign.cpp @@ -12,7 +12,9 @@ using namespace ngraph; #include "ngraph/runtime/host_tensor.hpp" #include "ngraph/runtime/reference/sign.hpp" -constexpr NodeTypeInfo op::Sign::type_info; +#include "ngraph/validation_util.hpp" + +NGRAPH_RTTI_DEFINITION(op::v0::Sign, "Sign", 0, util::UnaryElementwiseArithmetic); op::Sign::Sign(const Output& arg) : UnaryElementwiseArithmetic(arg) @@ -66,6 +68,7 @@ namespace signop bool op::Sign::evaluate(const HostTensorVector& outputs, const HostTensorVector& inputs) const { NGRAPH_OP_SCOPE(v0_Sign_evaluate); + NGRAPH_CHECK(validate_host_tensor_vector(outputs, 1) && validate_host_tensor_vector(inputs, 1)); return signop::evaluate_sign(inputs[0], outputs[0], shape_size(get_output_shape(0))); } From e855ea7734321371cb55c40ddd687cfdd7c550f1 Mon Sep 17 00:00:00 2001 From: pszmel Date: Thu, 8 Jul 2021 15:19:54 +0200 Subject: [PATCH 04/13] update backend test --- ngraph/test/backend/sign.in.cpp | 44 +++++++-------------------------- 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/ngraph/test/backend/sign.in.cpp b/ngraph/test/backend/sign.in.cpp index ae4559b4b4a272..f2626d9f05d0b6 100644 --- a/ngraph/test/backend/sign.in.cpp +++ b/ngraph/test/backend/sign.in.cpp @@ -2,53 +2,27 @@ // SPDX-License-Identifier: Apache-2.0 // -#include -#include -#include -#include -#include -#include - -// clang-format off -#ifdef ${BACKEND_NAME}_FLOAT_TOLERANCE_BITS -#define DEFAULT_FLOAT_TOLERANCE_BITS ${BACKEND_NAME}_FLOAT_TOLERANCE_BITS -#endif - -#ifdef ${BACKEND_NAME}_DOUBLE_TOLERANCE_BITS -#define DEFAULT_DOUBLE_TOLERANCE_BITS ${BACKEND_NAME}_DOUBLE_TOLERANCE_BITS -#endif -// clang-format on - #include "gtest/gtest.h" -#include "runtime/backend.hpp" -#include "ngraph/runtime/tensor.hpp" #include "ngraph/ngraph.hpp" -#include "util/all_close.hpp" -#include "util/all_close_f.hpp" -#include "util/ndarray.hpp" +#include "util/engine/test_engines.hpp" +#include "util/test_case.hpp" #include "util/test_control.hpp" -#include "util/test_tools.hpp" using namespace std; using namespace ngraph; static string s_manifest = "${MANIFEST}"; +using TestEngine = test::ENGINE_CLASS_NAME(${BACKEND_NAME}); NGRAPH_TEST(${BACKEND_NAME}, sign) { - Shape shape{2, 3}; + Shape shape{6}; auto A = make_shared(element::f32, shape); auto f = make_shared(make_shared(A), ParameterVector{A}); - auto backend = runtime::Backend::create("${BACKEND_NAME}"); - - // Create some tensors for input/output - auto a = backend->create_tensor(element::f32, shape); - copy_data(a, vector{1, -2, 0, -4.8f, 4.8f, -0.0f}); - auto result = backend->create_tensor(element::f32, shape); - - auto handle = backend->compile(f); - handle->call_with_validate({result}, {a}); - EXPECT_TRUE(test::all_close_f( - (vector{1, -1, 0, -1, 1, 0}), read_vector(result), MIN_FLOAT_TOLERANCE_BITS)); + auto test_case = test::TestCase(f); + test_case.add_input({1, -2, 0, -4.8f, 4.8f, -0.0f}); + test_case.add_expected_output(shape, + {1, -1, 0, -1, 1, 0}); + test_case.run(); } From 1c5bba110ff7bc10914c39117cb1664e39de45d3 Mon Sep 17 00:00:00 2001 From: pszmel Date: Thu, 8 Jul 2021 15:21:09 +0200 Subject: [PATCH 05/13] add type prp test --- ngraph/test/type_prop/sign.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 ngraph/test/type_prop/sign.cpp diff --git a/ngraph/test/type_prop/sign.cpp b/ngraph/test/type_prop/sign.cpp new file mode 100644 index 00000000000000..a31160547da160 --- /dev/null +++ b/ngraph/test/type_prop/sign.cpp @@ -0,0 +1,9 @@ +// Copyright (C) 2021 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 +// + +#include "unary_ops.hpp" + +using Type = ::testing::Types; + +INSTANTIATE_TYPED_TEST_SUITE_P(type_prop_sign, UnaryOperator, Type); From c672b1d474a5437c18cb6fca0fc7503f08d33af1 Mon Sep 17 00:00:00 2001 From: pszmel Date: Thu, 8 Jul 2021 15:22:28 +0200 Subject: [PATCH 06/13] add visitor test --- ngraph/test/visitors/op/sign.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 ngraph/test/visitors/op/sign.cpp diff --git a/ngraph/test/visitors/op/sign.cpp b/ngraph/test/visitors/op/sign.cpp new file mode 100644 index 00000000000000..557b7dc1669ec2 --- /dev/null +++ b/ngraph/test/visitors/op/sign.cpp @@ -0,0 +1,11 @@ +// Copyright (C) 2018-2021 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 +// + +#include "unary_ops.hpp" +using Type = ::testing::Types>; + +INSTANTIATE_TYPED_TEST_SUITE_P(visitor_without_attribute, + UnaryOperatorVisitor, + Type, + UnaryOperatorTypeName); From 77efc490a11ced86ae1cee1ed9c0e0336b80ff0a Mon Sep 17 00:00:00 2001 From: pszmel Date: Thu, 8 Jul 2021 15:22:58 +0200 Subject: [PATCH 07/13] add visitor and type_prop test to CMakeList --- ngraph/test/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ngraph/test/CMakeLists.txt b/ngraph/test/CMakeLists.txt index fa02cc517325ba..ab0563299002f8 100644 --- a/ngraph/test/CMakeLists.txt +++ b/ngraph/test/CMakeLists.txt @@ -202,6 +202,7 @@ set(SRC type_prop/selu.cpp type_prop/shape_of.cpp type_prop/shuffle_channels.cpp + type_prop/sign.cpp type_prop/sin.cpp type_prop/softmax.cpp type_prop/softplus.cpp @@ -287,6 +288,7 @@ set(SRC visitors/op/round.cpp visitors/op/selu.cpp visitors/op/shuffle_channels.cpp + visitors/op/sign.cpp visitors/op/softmax.cpp visitors/op/softplus.cpp visitors/op/space_to_batch.cpp @@ -668,4 +670,3 @@ if (NGRAPH_PDPD_FRONTEND_ENABLE AND PDPD_PYTHON_OK) add_dependencies(unit-test pdpd_test_models) add_dependencies(unit-test paddlepaddle_ngraph_frontend) endif() - From c378e30b5e0d4a1806a31d4c0c80b76fb00675c7 Mon Sep 17 00:00:00 2001 From: pszmel Date: Thu, 8 Jul 2021 15:23:58 +0200 Subject: [PATCH 08/13] add sign to constants.py --- .../functional_test_utils/layer_tests_summary/utils/constants.py | 1 + 1 file changed, 1 insertion(+) diff --git a/inference-engine/tests/ie_test_utils/functional_test_utils/layer_tests_summary/utils/constants.py b/inference-engine/tests/ie_test_utils/functional_test_utils/layer_tests_summary/utils/constants.py index 7693826baf2d10..fe0b9413916f2c 100644 --- a/inference-engine/tests/ie_test_utils/functional_test_utils/layer_tests_summary/utils/constants.py +++ b/inference-engine/tests/ie_test_utils/functional_test_utils/layer_tests_summary/utils/constants.py @@ -86,6 +86,7 @@ 'ShapeOf-1', 'ShapeOf-3', 'Sigmoid-1', + 'Sign-1', 'Sin-1', 'SoftPlus-4', 'Softmax-1', From e63d273c0317b3415a251e9605fa1f62f1990bf6 Mon Sep 17 00:00:00 2001 From: pszmel Date: Tue, 13 Jul 2021 14:26:05 +0200 Subject: [PATCH 09/13] delete backend tests and create new reference tests --- .../tests/functional/op_reference/sign.cpp | 75 +++++++++++++++++++ ngraph/test/backend/sign.in.cpp | 28 ------- 2 files changed, 75 insertions(+), 28 deletions(-) create mode 100644 docs/template_plugin/tests/functional/op_reference/sign.cpp delete mode 100644 ngraph/test/backend/sign.in.cpp diff --git a/docs/template_plugin/tests/functional/op_reference/sign.cpp b/docs/template_plugin/tests/functional/op_reference/sign.cpp new file mode 100644 index 00000000000000..79c6983f82b3a1 --- /dev/null +++ b/docs/template_plugin/tests/functional/op_reference/sign.cpp @@ -0,0 +1,75 @@ +// Copyright (C) 2018-2021 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 +// + +#include + +#include +#include +#include +#include +#include + +#include "base_reference_test.hpp" + +using namespace ngraph; +using namespace InferenceEngine; + +struct SignParams { + template + SignParams(const ngraph::PartialShape& shape, const ngraph::element::Type& iType, const ngraph::element::Type& oType, const std::vector& iValues, + const std::vector& oValues, size_t iSize = 0, size_t oSize = 0) + : pshape(shape), inType(iType), outType(oType), inputData(CreateBlob(iType, iValues, iSize)), refData(CreateBlob(oType, oValues, oSize)) {} + ngraph::PartialShape pshape; + ngraph::element::Type inType; + ngraph::element::Type outType; + InferenceEngine::Blob::Ptr inputData; + InferenceEngine::Blob::Ptr refData; +}; + +class ReferenceSignLayerTest : public testing::TestWithParam, public CommonReferenceTest { +public: + void SetUp() override { + auto params = GetParam(); + function = CreateFunction(params.pshape, params.inType); + inputData = {params.inputData}; + refOutData = {params.refData}; + } + static std::string getTestCaseName(const testing::TestParamInfo& obj) { + auto param = obj.param; + std::ostringstream result; + result << "shape=" << param.pshape << "_"; + result << "iType=" << param.inType << "_"; + result << "oType=" << param.outType; + return result.str(); + } + +private: + static std::shared_ptr CreateFunction(const PartialShape& input_shape, const element::Type& input_type) { + const auto in = std::make_shared(input_type, input_shape); + const auto sign = std::make_shared(in); + return std::make_shared(NodeVector {sign}, ParameterVector {in}); + } +}; + +TEST_P(ReferenceSignLayerTest, CompareWithHardcodedRefs) { + Exec(); +} + +INSTANTIATE_TEST_SUITE_P( + smoke_Sign_With_Hardcoded_Refs, ReferenceSignLayerTest, + ::testing::Values( + // destination boolean + SignParams(ngraph::PartialShape {6}, ngraph::element::f32, ngraph::element::f32, + std::vector {1, -2, 0, -4.8f, 4.8f, -0.0f}, + std::vector {1, -1, 0, -1, 1, 0}), + SignParams(ngraph::PartialShape {6}, ngraph::element::i16, ngraph::element::i16, + std::vector {1, -2, 0, -4, 4, -0}, + std::vector {1, -1, 0, -1, 1, 0}), + SignParams(ngraph::PartialShape {6}, ngraph::element::i32, ngraph::element::i32, + std::vector {1, -2, 0, -4, 4, -0}, + std::vector {1, -1, 0, -1, 1, 0}), + SignParams(ngraph::PartialShape {6}, ngraph::element::i64, ngraph::element::i64, + std::vector {1, -2, 0, -4, 4, -0}, + std::vector {1, -1, 0, -1, 1, 0})), + ReferenceSignLayerTest::getTestCaseName); diff --git a/ngraph/test/backend/sign.in.cpp b/ngraph/test/backend/sign.in.cpp deleted file mode 100644 index f2626d9f05d0b6..00000000000000 --- a/ngraph/test/backend/sign.in.cpp +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2018-2021 Intel Corporation -// SPDX-License-Identifier: Apache-2.0 -// - -#include "gtest/gtest.h" -#include "ngraph/ngraph.hpp" -#include "util/engine/test_engines.hpp" -#include "util/test_case.hpp" -#include "util/test_control.hpp" - -using namespace std; -using namespace ngraph; - -static string s_manifest = "${MANIFEST}"; -using TestEngine = test::ENGINE_CLASS_NAME(${BACKEND_NAME}); - -NGRAPH_TEST(${BACKEND_NAME}, sign) -{ - Shape shape{6}; - auto A = make_shared(element::f32, shape); - auto f = make_shared(make_shared(A), ParameterVector{A}); - - auto test_case = test::TestCase(f); - test_case.add_input({1, -2, 0, -4.8f, 4.8f, -0.0f}); - test_case.add_expected_output(shape, - {1, -1, 0, -1, 1, 0}); - test_case.run(); -} From 57e64f2ae976b2038d46fde7f0e79f8672e7fa8b Mon Sep 17 00:00:00 2001 From: pszmel Date: Tue, 13 Jul 2021 14:26:50 +0200 Subject: [PATCH 10/13] style fix --- ngraph/test/frontend/shared/include/op_fuzzy.hpp | 3 ++- ngraph/test/frontend/shared/src/op_fuzzy.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ngraph/test/frontend/shared/include/op_fuzzy.hpp b/ngraph/test/frontend/shared/include/op_fuzzy.hpp index 0d11df6c8b51b0..20ee6330292538 100644 --- a/ngraph/test/frontend/shared/include/op_fuzzy.hpp +++ b/ngraph/test/frontend/shared/include/op_fuzzy.hpp @@ -31,5 +31,6 @@ class FrontEndFuzzyOpTest : public ::testing::TestWithParam void doLoadFromFile(); - void runConvertedModel(const std::shared_ptr function, const std::string& model_file); + void runConvertedModel(const std::shared_ptr function, + const std::string& model_file); }; diff --git a/ngraph/test/frontend/shared/src/op_fuzzy.cpp b/ngraph/test/frontend/shared/src/op_fuzzy.cpp index 526207d25a66ce..d7fa7ca8784a81 100644 --- a/ngraph/test/frontend/shared/src/op_fuzzy.cpp +++ b/ngraph/test/frontend/shared/src/op_fuzzy.cpp @@ -4,10 +4,10 @@ #include +#include "op_fuzzy.hpp" #include "util/engine/test_engines.hpp" #include "util/test_case.hpp" #include "util/test_control.hpp" -#include "op_fuzzy.hpp" #include "utils.hpp" using namespace ngraph; From 15aab0c3cda74ee6df4190fd38c4af378e95d65c Mon Sep 17 00:00:00 2001 From: pszmel Date: Tue, 13 Jul 2021 14:48:02 +0200 Subject: [PATCH 11/13] remoove sign backend test from CMakeList --- ngraph/test/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/ngraph/test/CMakeLists.txt b/ngraph/test/CMakeLists.txt index d719657ee13714..4ec3443f0c6f22 100644 --- a/ngraph/test/CMakeLists.txt +++ b/ngraph/test/CMakeLists.txt @@ -487,7 +487,6 @@ set(MULTI_TEST_SRC backend/shape_of.in.cpp backend/shuffle_channels.in.cpp backend/sigmoid.in.cpp - backend/sign.in.cpp backend/sin.in.cpp backend/sinh.in.cpp backend/softmax.in.cpp From 974d36efd57d76e80fbb09caf648c35f90b1c121 Mon Sep 17 00:00:00 2001 From: pszmel Date: Thu, 15 Jul 2021 14:22:08 +0200 Subject: [PATCH 12/13] create reference test for all supported types --- .../tests/functional/op_reference/sign.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/template_plugin/tests/functional/op_reference/sign.cpp b/docs/template_plugin/tests/functional/op_reference/sign.cpp index 79c6983f82b3a1..a5ff9b11978a90 100644 --- a/docs/template_plugin/tests/functional/op_reference/sign.cpp +++ b/docs/template_plugin/tests/functional/op_reference/sign.cpp @@ -18,8 +18,8 @@ using namespace InferenceEngine; struct SignParams { template SignParams(const ngraph::PartialShape& shape, const ngraph::element::Type& iType, const ngraph::element::Type& oType, const std::vector& iValues, - const std::vector& oValues, size_t iSize = 0, size_t oSize = 0) - : pshape(shape), inType(iType), outType(oType), inputData(CreateBlob(iType, iValues, iSize)), refData(CreateBlob(oType, oValues, oSize)) {} + const std::vector& oValues) + : pshape(shape), inType(iType), outType(oType), inputData(CreateBlob(iType, iValues)), refData(CreateBlob(oType, oValues)) {} ngraph::PartialShape pshape; ngraph::element::Type inType; ngraph::element::Type outType; @@ -59,13 +59,18 @@ TEST_P(ReferenceSignLayerTest, CompareWithHardcodedRefs) { INSTANTIATE_TEST_SUITE_P( smoke_Sign_With_Hardcoded_Refs, ReferenceSignLayerTest, ::testing::Values( - // destination boolean SignParams(ngraph::PartialShape {6}, ngraph::element::f32, ngraph::element::f32, std::vector {1, -2, 0, -4.8f, 4.8f, -0.0f}, std::vector {1, -1, 0, -1, 1, 0}), - SignParams(ngraph::PartialShape {6}, ngraph::element::i16, ngraph::element::i16, - std::vector {1, -2, 0, -4, 4, -0}, - std::vector {1, -1, 0, -1, 1, 0}), + SignParams(ngraph::PartialShape {6}, ngraph::element::f16, ngraph::element::f16, + std::vector {1, -2, 0, -4.8f, 4.8f, -0.0f}, + std::vector {1, -1, 0, -1, 1, 0}), + SignParams(ngraph::PartialShape {6}, ngraph::element::u64, ngraph::element::u64, + std::vector {1, 2, 0, 4, 4, 0}, + std::vector {1, 1, 0, 1, 1, 0}), + SignParams(ngraph::PartialShape {6}, ngraph::element::u32, ngraph::element::u32, + std::vector {1, 2, 0, 4, 4, 0}, + std::vector {1, 1, 0, 1, 1, 0}), SignParams(ngraph::PartialShape {6}, ngraph::element::i32, ngraph::element::i32, std::vector {1, -2, 0, -4, 4, -0}, std::vector {1, -1, 0, -1, 1, 0}), From 723ad2efb01de7d93f3c9937137f8c00cdda051b Mon Sep 17 00:00:00 2001 From: pszmel Date: Fri, 16 Jul 2021 10:51:28 +0200 Subject: [PATCH 13/13] remove boolean type from evaluate method --- ngraph/core/src/op/sign.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/ngraph/core/src/op/sign.cpp b/ngraph/core/src/op/sign.cpp index 8ae6131a2f52f6..3147cf9ba715c3 100644 --- a/ngraph/core/src/op/sign.cpp +++ b/ngraph/core/src/op/sign.cpp @@ -52,7 +52,6 @@ namespace signop switch (arg0->get_element_type()) { - NGRAPH_TYPE_CASE(evaluate_sign, boolean, arg0, out, count); NGRAPH_TYPE_CASE(evaluate_sign, i32, arg0, out, count); NGRAPH_TYPE_CASE(evaluate_sign, i64, arg0, out, count); NGRAPH_TYPE_CASE(evaluate_sign, u32, arg0, out, count);