Ejemplo n.º 1
0
 public void Visit(PredicateBarrier barrier)
 {
     if (Get <PredicateBarrier>().Kind != barrier.Kind)
     {
         Fail();
     }
 }
Ejemplo n.º 2
0
        /// <summary cref="IValueVisitor.Visit(PredicateBarrier)"/>
        public void Visit(PredicateBarrier barrier)
        {
            var targetRegister  = AllocatePrimitive(barrier);
            var sourcePredicate = LoadPrimitive(barrier.Predicate);

            switch (barrier.Kind)
            {
            case PredicateBarrierKind.And:
            case PredicateBarrierKind.Or:
                using (var command = BeginCommand(
                           PTXInstructions.GetPredicateBarrier(barrier.Kind)))
                {
                    command.AppendArgument(targetRegister);
                    command.AppendConstant(0);
                    command.AppendArgument(sourcePredicate);
                }
                break;

            case PredicateBarrierKind.PopCount:
                using (var command = BeginCommand(
                           PTXInstructions.GetPredicateBarrier(barrier.Kind)))
                {
                    command.AppendArgument(targetRegister);
                    command.AppendConstant(0);
                    command.AppendArgument(sourcePredicate);
                }
                break;

            default:
                throw new InvalidCodeGenerationException();
            }
        }
Ejemplo n.º 3
0
        /// <summary cref="IBackendCodeGenerator.GenerateCode(PredicateBarrier)"/>
        public void GenerateCode(PredicateBarrier barrier)
        {
            var sourcePredicate = Load(barrier.Predicate);
            var target          = Allocate(barrier);

            if (!CLInstructions.TryGetPredicateBarrier(
                    barrier.Kind,
                    out string operation))
            {
                throw new InvalidCodeGenerationException();
            }

            using var statement = BeginStatement(target);
            statement.AppendCast(BasicValueType.Int1);
            statement.AppendCommand(operation);
            statement.BeginArguments();
            statement.AppendCast(BasicValueType.Int32);
            statement.AppendArgument(sourcePredicate);
            statement.EndArguments();
        }
Ejemplo n.º 4
0
 /// <summary cref="IValueVisitor.Visit(PredicateBarrier)"/>
 public void Visit(PredicateBarrier barrier) =>
 CodeGenerator.GenerateCode(barrier);