Exemplo n.º 1
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();
            }
        }