示例#1
0
            public void RunStructFldScenario(VectorBinaryOpTest__EqualsUInt64 testClass)
            {
                var result = Vector256.Equals(_fld1, _fld2);

                Unsafe.Write(testClass._dataTable.outArrayPtr, result);
                testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
            }
示例#2
0
        public void RunClassFldScenario()
        {
            TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario));

            var result = Vector256.Equals(_fld1, _fld2);

            Unsafe.Write(_dataTable.outArrayPtr, result);
            ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
        }
示例#3
0
        public void RunStructLclFldScenario()
        {
            TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario));

            var test   = TestStruct.Create();
            var result = Vector256.Equals(test._fld1, test._fld2);

            Unsafe.Write(_dataTable.outArrayPtr, result);
            ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
        }
示例#4
0
        public void RunClassLclFldScenario()
        {
            TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario));

            var test   = new VectorBinaryOpTest__EqualsInt16();
            var result = Vector256.Equals(test._fld1, test._fld2);

            Unsafe.Write(_dataTable.outArrayPtr, result);
            ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
        }
示例#5
0
        public void RunLclVarScenario_UnsafeRead()
        {
            TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_UnsafeRead));

            var op1    = Unsafe.Read <Vector256 <Int16> >(_dataTable.inArray1Ptr);
            var op2    = Unsafe.Read <Vector256 <Int16> >(_dataTable.inArray2Ptr);
            var result = Vector256.Equals(op1, op2);

            Unsafe.Write(_dataTable.outArrayPtr, result);
            ValidateResult(op1, op2, _dataTable.outArrayPtr);
        }
示例#6
0
        public void RunBasicScenario_UnsafeRead()
        {
            TestLibrary.TestFramework.BeginScenario(nameof(RunBasicScenario_UnsafeRead));

            var result = Vector256.Equals(
                Unsafe.Read <Vector256 <Byte> >(_dataTable.inArray1Ptr),
                Unsafe.Read <Vector256 <Byte> >(_dataTable.inArray2Ptr)
                );

            Unsafe.Write(_dataTable.outArrayPtr, result);
            ValidateResult(_dataTable.inArray1Ptr, _dataTable.inArray2Ptr, _dataTable.outArrayPtr);
        }
        private static unsafe void ReplacePlusWithSpaceCore(Span <char> buffer, IntPtr state)
        {
            fixed(char *ptr = &MemoryMarshal.GetReference(buffer))
            {
                var input  = (ushort *)state.ToPointer();
                var output = (ushort *)ptr;

                var i = (nint)0;
                var n = (nint)(uint)buffer.Length;

                if (Vector256.IsHardwareAccelerated && n >= Vector256 <ushort> .Count)
                {
                    var vecPlus  = Vector256.Create((ushort)'+');
                    var vecSpace = Vector256.Create((ushort)' ');

                    do
                    {
                        var vec  = Vector256.Load(input + i);
                        var mask = Vector256.Equals(vec, vecPlus);
                        var res  = Vector256.ConditionalSelect(mask, vecSpace, vec);
                        res.Store(output + i);
                        i += Vector256 <ushort> .Count;
                    } while (i <= n - Vector256 <ushort> .Count);
                }

                if (Vector128.IsHardwareAccelerated && n - i >= Vector128 <ushort> .Count)
                {
                    var vecPlus  = Vector128.Create((ushort)'+');
                    var vecSpace = Vector128.Create((ushort)' ');

                    do
                    {
                        var vec  = Vector128.Load(input + i);
                        var mask = Vector128.Equals(vec, vecPlus);
                        var res  = Vector128.ConditionalSelect(mask, vecSpace, vec);
                        res.Store(output + i);
                        i += Vector128 <ushort> .Count;
                    } while (i <= n - Vector128 <ushort> .Count);
                }

                for (; i < n; ++i)
                {
                    if (input[i] != '+')
                    {
                        output[i] = input[i];
                    }
                    else
                    {
                        output[i] = ' ';
                    }
                }
            }
        }