public void Visit(PredicateBarrier barrier) { if (Get <PredicateBarrier>().Kind != barrier.Kind) { Fail(); } }
/// <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(); } }
/// <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(); }
/// <summary cref="IValueVisitor.Visit(PredicateBarrier)"/> public void Visit(PredicateBarrier barrier) => CodeGenerator.GenerateCode(barrier);