Skip to content

Commit 7eadf80

Browse files
committed
Add f64 instruction coverage
1 parent 6d5e58d commit 7eadf80

3 files changed

Lines changed: 337 additions & 4 deletions

File tree

‎ptx/README.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,9 @@ that feature.
278278
| `DIV_DISABLE_F32_CVT` | Sanitized f32/int conversion chains. |
279279
| `DIV_DISABLE_F32_COMPARE` | Sanitized `set.*.u32.f32` and `setp.*.f32` comparisons. |
280280
| `DIV_DISABLE_F32_SELP` | Sanitized `setp.*.f32` feeding `selp.f32`. |
281+
| `DIV_DISABLE_F64_ARITH` | Sanitized `add/sub/mul/fma/min/max.f64` arithmetic. |
282+
| `DIV_DISABLE_F64_COMPARE` | Sanitized `set.*.u32.f64` and `setp.*.f64` comparisons. |
283+
| `DIV_DISABLE_F64_SELP` | Sanitized `setp.*.f64` feeding `selp.f64`. |
281284
| `DIV_DISABLE_SIGNED_CMP` | Signed predicate comparisons. |
282285
| `DIV_DISABLE_SIGNED_DIVREM` | `div.s32` and `rem.s32`. |
283286
| `DIV_DISABLE_REG_DIVREM` | Register-divisor `div.u32` and `rem.u32` with sanitized divisors. |

‎ptx/crates/fuzzx-diff/src/main.rs‎

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,12 @@
132132
//! sanitized f32 compare generation
133133
//! DIV_DISABLE_F32_SELP default: false; set 1/true/yes/on to suppress
134134
//! sanitized setp.f32 + selp.f32 generation
135+
//! DIV_DISABLE_F64_ARITH default: false; set 1/true/yes/on to suppress
136+
//! sanitized f64 arithmetic generation
137+
//! DIV_DISABLE_F64_COMPARE default: false; set 1/true/yes/on to suppress
138+
//! sanitized f64 compare generation
139+
//! DIV_DISABLE_F64_SELP default: false; set 1/true/yes/on to suppress
140+
//! sanitized setp.f64 + selp.f64 generation
135141
//! DIV_DISABLE_SIGNED_CMP default: false; set 1/true/yes/on to suppress
136142
//! PTX setp.{lt,le,gt,ge}.s32 generation
137143
//! DIV_DISABLE_SIGNED_DIVREM default: false; set 1/true/yes/on to suppress
@@ -579,6 +585,12 @@ struct Args {
579585
#[arg(long)]
580586
disable_f32_selp: bool,
581587
#[arg(long)]
588+
disable_f64_arith: bool,
589+
#[arg(long)]
590+
disable_f64_compare: bool,
591+
#[arg(long)]
592+
disable_f64_selp: bool,
593+
#[arg(long)]
582594
disable_signed_cmp: bool,
583595
#[arg(long)]
584596
disable_signed_divrem: bool,
@@ -967,6 +979,9 @@ impl Args {
967979
set_bool!(self.disable_f32_cvt, "DIV_DISABLE_F32_CVT");
968980
set_bool!(self.disable_f32_compare, "DIV_DISABLE_F32_COMPARE");
969981
set_bool!(self.disable_f32_selp, "DIV_DISABLE_F32_SELP");
982+
set_bool!(self.disable_f64_arith, "DIV_DISABLE_F64_ARITH");
983+
set_bool!(self.disable_f64_compare, "DIV_DISABLE_F64_COMPARE");
984+
set_bool!(self.disable_f64_selp, "DIV_DISABLE_F64_SELP");
970985
set_bool!(self.disable_signed_cmp, "DIV_DISABLE_SIGNED_CMP");
971986
set_bool!(self.disable_signed_divrem, "DIV_DISABLE_SIGNED_DIVREM");
972987
set_bool!(self.disable_reg_divrem, "DIV_DISABLE_REG_DIVREM");
@@ -1359,6 +1374,9 @@ impl Config {
13591374
let disable_f32_cvt = env_bool("DIV_DISABLE_F32_CVT")?.unwrap_or(false);
13601375
let disable_f32_compare = env_bool("DIV_DISABLE_F32_COMPARE")?.unwrap_or(false);
13611376
let disable_f32_selp = env_bool("DIV_DISABLE_F32_SELP")?.unwrap_or(false);
1377+
let disable_f64_arith = env_bool("DIV_DISABLE_F64_ARITH")?.unwrap_or(false);
1378+
let disable_f64_compare = env_bool("DIV_DISABLE_F64_COMPARE")?.unwrap_or(false);
1379+
let disable_f64_selp = env_bool("DIV_DISABLE_F64_SELP")?.unwrap_or(false);
13621380
let disable_signed_cmp = env_bool("DIV_DISABLE_SIGNED_CMP")?.unwrap_or(false);
13631381
let disable_signed_divrem = env_bool("DIV_DISABLE_SIGNED_DIVREM")?.unwrap_or(false);
13641382
let disable_reg_divrem = env_bool("DIV_DISABLE_REG_DIVREM")?.unwrap_or(false);
@@ -1592,6 +1610,9 @@ impl Config {
15921610
emit_f32_cvt: !disable_f32_cvt && !disable_bitwise_binops,
15931611
emit_f32_compare: !disable_f32_compare && !disable_bitwise_binops,
15941612
emit_f32_selp: !disable_f32_selp && !disable_f32_compare && !disable_bitwise_binops,
1613+
emit_f64_arith: !disable_f64_arith && !disable_bitwise_binops,
1614+
emit_f64_compare: !disable_f64_compare && !disable_bitwise_binops,
1615+
emit_f64_selp: !disable_f64_selp && !disable_f64_compare && !disable_bitwise_binops,
15951616
emit_signed_cmp: !disable_signed_cmp,
15961617
emit_signed_divrem: !disable_signed_divrem,
15971618
emit_reg_divrem: !disable_reg_divrem && !disable_bitwise_binops && !disable_or,
@@ -1948,7 +1969,7 @@ fn main() -> Result<()> {
19481969

19491970
let total_workers = cfg.gpus.len() * cfg.workers_per_gpu;
19501971
eprintln!(
1951-
"fuzzx-diff: starting_seed=0x{:016x} out={} program_bytes={} max_iters={} control_flow={:?} blocks={}..{} insts_per_block={}..{} regs={} max_loop_iters={} max_immediate={} max_structured_depth={} emit_structured_loops={} emit_arbitrary_loops={} emit_lop3={} emit_predicated_lop3={} emit_minmax={} emit_selp={} emit_predicated_selp={} emit_sub={} emit_mul_lo={} emit_signed_lo_alu={} emit_sat_arith={} emit_packed_add={} emit_signed_packed_add={} emit_predicated_packed_add={} emit_packed_minmax={} emit_signed_packed_minmax={} emit_predicated_packed_minmax={} emit_scalar_16bit={} emit_signed_scalar_16bit={} emit_scalar_16bit_min={} emit_scalar_16bit_signed_unary={} emit_scalar_16bit_bitwise={} emit_scalar_16bit_shifts={} emit_scalar_16bit_compare={} emit_scalar_16bit_selp={} emit_predicated_scalar_16bit={} emit_mulhi={} emit_signed_mulhi={} emit_mad_hi={} emit_signed_mad_hi={} emit_bitwise_binops={} emit_or={} emit_xor={} emit_prmt={} emit_predicated_prmt={} emit_reg_prmt={} emit_predicated_reg_prmt={} emit_prmt_modes={} emit_not={} emit_clz={} emit_brev={} emit_cnot={} emit_popc={} emit_abs={} emit_special_regs={} emit_predicated_special_regs={} emit_global_loads={} emit_global_store_roundtrips={} emit_const_memory={} emit_local_memory={} emit_shared_memory={} emit_predicated_memory={} emit_vector_memory={} emit_f32_arith={} emit_f32_rounding={} emit_f32_unary={} emit_f32_cvt={} emit_f32_compare={} emit_f32_selp={} emit_signed_cmp={} emit_signed_divrem={} emit_reg_divrem={} emit_predicated_reg_divrem={} emit_predicated_divrem={} emit_funnel={} emit_reg_funnel={} emit_predicated_funnel={} emit_funnel_clamp={} emit_neg={} emit_shl={} emit_shr={} emit_signed_shr={} emit_reg_shifts={} emit_predicated_shifts={} emit_predicated_reg_shifts={} emit_bfind={} emit_signed_bfind={} emit_wide_bfind={} emit_signed_wide_bfind={} emit_predicated_bfind={} emit_predicated_wide_bfind={} emit_fns={} emit_reg_fns={} emit_predicated_fns={} emit_predicated_reg_fns={} emit_bfi={} emit_bfe={} emit_bmsk={} emit_bmsk_wrap={} emit_predicated_bitfield={} emit_reg_bitfield={} emit_predicated_reg_bitfield={} emit_wide_bfe={} emit_signed_wide_bfe={} emit_wide_bfi={} emit_predicated_wide_bitfield={} emit_reg_wide_bitfield={} emit_predicated_reg_wide_bitfield={} emit_mad24={} emit_mul24={} emit_predicated_24bit={} emit_subword_wide={} emit_signed_subword_wide={} emit_predicated_subword_wide={} emit_mul_wide={} emit_mad_wide={} emit_signed_mad_wide={} emit_predicated_mul_wide={} emit_predicated_mad_wide={} emit_wide_high_result={} emit_wide_int={} emit_wide_minmax={} emit_wide_mulhi={} emit_predicated_wide_int={} emit_wide_mad64={} emit_signed_wide_mad64={} emit_predicated_wide_mad64={} emit_wide_set={} emit_predicated_wide_set={} emit_wide_setp={} emit_wide_setp_bool={} emit_wide_selp={} emit_wide_unary={} emit_predicated_wide_unary={} emit_wide_shifts={} emit_wide_reg_shifts={} emit_predicated_wide_shifts={} emit_predicated_wide_reg_shifts={} emit_wide_divrem={} emit_signed_wide_divrem={} emit_reg_wide_divrem={} emit_predicated_reg_wide_divrem={} emit_predicated_wide_divrem={} emit_wide_addc={} emit_wide_subc={} emit_predicated_wide_carry={} emit_wide_carry_chain={} emit_predicated_wide_carry_chain={} emit_addc={} emit_subc={} emit_predicated_carry={} emit_carry_chain={} emit_predicated_carry_chain={} emit_i32_boundary_immediates={} emit_dp4a={} emit_dp2a={} emit_negated_predicates={} emit_predicated_alu={} emit_predicated_unary={} emit_cvt={} emit_predicated_cvt={} emit_narrow_cvt={} emit_signed_narrow_cvt={} emit_predicated_narrow_cvt={} emit_wide_cvt={} emit_signed_wide_cvt={} emit_predicated_wide_cvt={} emit_szext={} emit_signed_szext={} emit_predicated_szext={} emit_setp_bool={} emit_setp_dual={} emit_pred_logic={} emit_predicated_mad={} emit_predicated_mad_hi={} emit_mad_carry={} emit_signed_mad_carry={} emit_predicated_mad_carry={} emit_predicated_set={} emit_sad={} emit_slct={} emit_predicated_sad={} emit_predicated_slct={} emit_predicated_dp={} emit_predicated_video={} emit_set={} emit_s32_slct={} emit_video={} emit_vsub4={} gpus={:?} workers_per_gpu={} (total={})",
1972+
"fuzzx-diff: starting_seed=0x{:016x} out={} program_bytes={} max_iters={} control_flow={:?} blocks={}..{} insts_per_block={}..{} regs={} max_loop_iters={} max_immediate={} max_structured_depth={} emit_structured_loops={} emit_arbitrary_loops={} emit_lop3={} emit_predicated_lop3={} emit_minmax={} emit_selp={} emit_predicated_selp={} emit_sub={} emit_mul_lo={} emit_signed_lo_alu={} emit_sat_arith={} emit_packed_add={} emit_signed_packed_add={} emit_predicated_packed_add={} emit_packed_minmax={} emit_signed_packed_minmax={} emit_predicated_packed_minmax={} emit_scalar_16bit={} emit_signed_scalar_16bit={} emit_scalar_16bit_min={} emit_scalar_16bit_signed_unary={} emit_scalar_16bit_bitwise={} emit_scalar_16bit_shifts={} emit_scalar_16bit_compare={} emit_scalar_16bit_selp={} emit_predicated_scalar_16bit={} emit_mulhi={} emit_signed_mulhi={} emit_mad_hi={} emit_signed_mad_hi={} emit_bitwise_binops={} emit_or={} emit_xor={} emit_prmt={} emit_predicated_prmt={} emit_reg_prmt={} emit_predicated_reg_prmt={} emit_prmt_modes={} emit_not={} emit_clz={} emit_brev={} emit_cnot={} emit_popc={} emit_abs={} emit_special_regs={} emit_predicated_special_regs={} emit_global_loads={} emit_global_store_roundtrips={} emit_const_memory={} emit_local_memory={} emit_shared_memory={} emit_predicated_memory={} emit_vector_memory={} emit_f32_arith={} emit_f32_rounding={} emit_f32_unary={} emit_f32_cvt={} emit_f32_compare={} emit_f32_selp={} emit_f64_arith={} emit_f64_compare={} emit_f64_selp={} emit_signed_cmp={} emit_signed_divrem={} emit_reg_divrem={} emit_predicated_reg_divrem={} emit_predicated_divrem={} emit_funnel={} emit_reg_funnel={} emit_predicated_funnel={} emit_funnel_clamp={} emit_neg={} emit_shl={} emit_shr={} emit_signed_shr={} emit_reg_shifts={} emit_predicated_shifts={} emit_predicated_reg_shifts={} emit_bfind={} emit_signed_bfind={} emit_wide_bfind={} emit_signed_wide_bfind={} emit_predicated_bfind={} emit_predicated_wide_bfind={} emit_fns={} emit_reg_fns={} emit_predicated_fns={} emit_predicated_reg_fns={} emit_bfi={} emit_bfe={} emit_bmsk={} emit_bmsk_wrap={} emit_predicated_bitfield={} emit_reg_bitfield={} emit_predicated_reg_bitfield={} emit_wide_bfe={} emit_signed_wide_bfe={} emit_wide_bfi={} emit_predicated_wide_bitfield={} emit_reg_wide_bitfield={} emit_predicated_reg_wide_bitfield={} emit_mad24={} emit_mul24={} emit_predicated_24bit={} emit_subword_wide={} emit_signed_subword_wide={} emit_predicated_subword_wide={} emit_mul_wide={} emit_mad_wide={} emit_signed_mad_wide={} emit_predicated_mul_wide={} emit_predicated_mad_wide={} emit_wide_high_result={} emit_wide_int={} emit_wide_minmax={} emit_wide_mulhi={} emit_predicated_wide_int={} emit_wide_mad64={} emit_signed_wide_mad64={} emit_predicated_wide_mad64={} emit_wide_set={} emit_predicated_wide_set={} emit_wide_setp={} emit_wide_setp_bool={} emit_wide_selp={} emit_wide_unary={} emit_predicated_wide_unary={} emit_wide_shifts={} emit_wide_reg_shifts={} emit_predicated_wide_shifts={} emit_predicated_wide_reg_shifts={} emit_wide_divrem={} emit_signed_wide_divrem={} emit_reg_wide_divrem={} emit_predicated_reg_wide_divrem={} emit_predicated_wide_divrem={} emit_wide_addc={} emit_wide_subc={} emit_predicated_wide_carry={} emit_wide_carry_chain={} emit_predicated_wide_carry_chain={} emit_addc={} emit_subc={} emit_predicated_carry={} emit_carry_chain={} emit_predicated_carry_chain={} emit_i32_boundary_immediates={} emit_dp4a={} emit_dp2a={} emit_negated_predicates={} emit_predicated_alu={} emit_predicated_unary={} emit_cvt={} emit_predicated_cvt={} emit_narrow_cvt={} emit_signed_narrow_cvt={} emit_predicated_narrow_cvt={} emit_wide_cvt={} emit_signed_wide_cvt={} emit_predicated_wide_cvt={} emit_szext={} emit_signed_szext={} emit_predicated_szext={} emit_setp_bool={} emit_setp_dual={} emit_pred_logic={} emit_predicated_mad={} emit_predicated_mad_hi={} emit_mad_carry={} emit_signed_mad_carry={} emit_predicated_mad_carry={} emit_predicated_set={} emit_sad={} emit_slct={} emit_predicated_sad={} emit_predicated_slct={} emit_predicated_dp={} emit_predicated_video={} emit_set={} emit_s32_slct={} emit_video={} emit_vsub4={} gpus={:?} workers_per_gpu={} (total={})",
19521973
cfg.starting_seed,
19531974
cfg.out_dir.display(),
19541975
cfg.program_bytes,
@@ -2023,6 +2044,9 @@ fn main() -> Result<()> {
20232044
cfg.gen_config.emit_f32_cvt,
20242045
cfg.gen_config.emit_f32_compare,
20252046
cfg.gen_config.emit_f32_selp,
2047+
cfg.gen_config.emit_f64_arith,
2048+
cfg.gen_config.emit_f64_compare,
2049+
cfg.gen_config.emit_f64_selp,
20262050
cfg.gen_config.emit_signed_cmp,
20272051
cfg.gen_config.emit_signed_divrem,
20282052
cfg.gen_config.emit_reg_divrem,

0 commit comments

Comments
 (0)