コード例 #1
0
        /// <summary cref="CompilerDeviceFunctions.MakeMemoryFence(InvocationContext, MemoryFenceIntrinsicKind)"/>
        protected override Value?MakeMemoryFence(InvocationContext context, MemoryFenceIntrinsicKind kind)
        {
            LLVMValueRef memoryFenceFunction;

            switch (kind)
            {
            case MemoryFenceIntrinsicKind.GroupLevel:
                memoryFenceFunction = BlockLevelFence.Value;
                break;

            case MemoryFenceIntrinsicKind.DeviceLevel:
                memoryFenceFunction = DeviceLevelFence.Value;
                break;

            case MemoryFenceIntrinsicKind.SystemLevel:
                memoryFenceFunction = SystemLevelFence.Value;
                break;

            default:
                throw context.CompilationContext.GetNotSupportedException(
                          ErrorMessages.NotSupportedMemoryFenceOperation, kind);
            }
            BuildCall(context.Builder, memoryFenceFunction);
            return(null);
        }
コード例 #2
0
 /// <summary>
 /// Handles general memory-fence operations.
 /// </summary>
 /// <param name="context">The current invocation context.</param>
 /// <param name="kind">The kind of the memory-fence intrinsic.</param>
 /// <returns>The resulting value.</returns>
 protected abstract Value?MakeMemoryFence(InvocationContext context, MemoryFenceIntrinsicKind kind);
コード例 #3
0
 public MemoryFenceIntrinsicAttribute(MemoryFenceIntrinsicKind intrinsicKind)
 {
     IntrinsicKind = intrinsicKind;
 }