 VARIANT: ptx-op
     .and .or .xor .cas .exch .add .inc .dec .min .max
     .popc ;
+UNION: ?ptx-op POSTPONE: f ptx-op ;
 
 SINGLETONS: .lo .hi ;
 INSTANCE: .lo ptx-mul-mode


VARIANT: ptx-prmt-mode
    .f4e .b4e .rc8 .ecl .ecr .rc16 ;
UNION: ?ptx-prmt-mode ptx-prmt-mode POSTPONE: f ;

ROLE: ptx-float-ftz
    { ftz? boolean } ;


TUPLE: ptx-set-instruction < ptx-3op-instruction
    { cmp-op ptx-cmp-op }
    { bool-op ?ptx-op }
    { c ?string }
    { ftz? boolean } ;

VARIANT: ptx-cache-op
    .ca .cg .cs .lu .cv
    .wb .wt ;
UNION: ?ptx-cache-op POSTPONE: f ptx-cache-op ;

TUPLE: ptx-ldst-instruction < ptx-2op-instruction
    { volatile? boolean }
