162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci#include <linux/cpumask.h> 362306a36Sopenharmony_ci#include <linux/debugfs.h> 462306a36Sopenharmony_ci#include <linux/fs.h> 562306a36Sopenharmony_ci#include <linux/init.h> 662306a36Sopenharmony_ci#include <linux/percpu.h> 762306a36Sopenharmony_ci#include <linux/types.h> 862306a36Sopenharmony_ci#include <asm/debug.h> 962306a36Sopenharmony_ci#include <asm/fpu_emulator.h> 1062306a36Sopenharmony_ci#include <asm/local.h> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciDEFINE_PER_CPU(struct mips_fpu_emulator_stats, fpuemustats); 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistatic int fpuemu_stat_get(void *data, u64 *val) 1562306a36Sopenharmony_ci{ 1662306a36Sopenharmony_ci int cpu; 1762306a36Sopenharmony_ci unsigned long sum = 0; 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci for_each_online_cpu(cpu) { 2062306a36Sopenharmony_ci struct mips_fpu_emulator_stats *ps; 2162306a36Sopenharmony_ci local_t *pv; 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci ps = &per_cpu(fpuemustats, cpu); 2462306a36Sopenharmony_ci pv = (void *)ps + (unsigned long)data; 2562306a36Sopenharmony_ci sum += local_read(pv); 2662306a36Sopenharmony_ci } 2762306a36Sopenharmony_ci *val = sum; 2862306a36Sopenharmony_ci return 0; 2962306a36Sopenharmony_ci} 3062306a36Sopenharmony_ciDEFINE_SIMPLE_ATTRIBUTE(fops_fpuemu_stat, fpuemu_stat_get, NULL, "%llu\n"); 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci/* 3362306a36Sopenharmony_ci * Used to obtain names for a debugfs instruction counter, given field name 3462306a36Sopenharmony_ci * in fpuemustats structure. For example, for input "cmp_sueq_d", the output 3562306a36Sopenharmony_ci * would be "cmp.sueq.d". This is needed since dots are not allowed to be 3662306a36Sopenharmony_ci * used in structure field names, and are, on the other hand, desired to be 3762306a36Sopenharmony_ci * used in debugfs item names to be clearly associated to corresponding 3862306a36Sopenharmony_ci * MIPS FPU instructions. 3962306a36Sopenharmony_ci */ 4062306a36Sopenharmony_cistatic void adjust_instruction_counter_name(char *out_name, char *in_name) 4162306a36Sopenharmony_ci{ 4262306a36Sopenharmony_ci int i = 0; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci strcpy(out_name, in_name); 4562306a36Sopenharmony_ci while (in_name[i] != '\0') { 4662306a36Sopenharmony_ci if (out_name[i] == '_') 4762306a36Sopenharmony_ci out_name[i] = '.'; 4862306a36Sopenharmony_ci i++; 4962306a36Sopenharmony_ci } 5062306a36Sopenharmony_ci} 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cistatic int fpuemustats_clear_show(struct seq_file *s, void *unused) 5362306a36Sopenharmony_ci{ 5462306a36Sopenharmony_ci __this_cpu_write((fpuemustats).emulated, 0); 5562306a36Sopenharmony_ci __this_cpu_write((fpuemustats).loads, 0); 5662306a36Sopenharmony_ci __this_cpu_write((fpuemustats).stores, 0); 5762306a36Sopenharmony_ci __this_cpu_write((fpuemustats).branches, 0); 5862306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cp1ops, 0); 5962306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cp1xops, 0); 6062306a36Sopenharmony_ci __this_cpu_write((fpuemustats).errors, 0); 6162306a36Sopenharmony_ci __this_cpu_write((fpuemustats).ieee754_inexact, 0); 6262306a36Sopenharmony_ci __this_cpu_write((fpuemustats).ieee754_underflow, 0); 6362306a36Sopenharmony_ci __this_cpu_write((fpuemustats).ieee754_overflow, 0); 6462306a36Sopenharmony_ci __this_cpu_write((fpuemustats).ieee754_zerodiv, 0); 6562306a36Sopenharmony_ci __this_cpu_write((fpuemustats).ieee754_invalidop, 0); 6662306a36Sopenharmony_ci __this_cpu_write((fpuemustats).ds_emul, 0); 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci __this_cpu_write((fpuemustats).abs_s, 0); 6962306a36Sopenharmony_ci __this_cpu_write((fpuemustats).abs_d, 0); 7062306a36Sopenharmony_ci __this_cpu_write((fpuemustats).add_s, 0); 7162306a36Sopenharmony_ci __this_cpu_write((fpuemustats).add_d, 0); 7262306a36Sopenharmony_ci __this_cpu_write((fpuemustats).bc1eqz, 0); 7362306a36Sopenharmony_ci __this_cpu_write((fpuemustats).bc1nez, 0); 7462306a36Sopenharmony_ci __this_cpu_write((fpuemustats).ceil_w_s, 0); 7562306a36Sopenharmony_ci __this_cpu_write((fpuemustats).ceil_w_d, 0); 7662306a36Sopenharmony_ci __this_cpu_write((fpuemustats).ceil_l_s, 0); 7762306a36Sopenharmony_ci __this_cpu_write((fpuemustats).ceil_l_d, 0); 7862306a36Sopenharmony_ci __this_cpu_write((fpuemustats).class_s, 0); 7962306a36Sopenharmony_ci __this_cpu_write((fpuemustats).class_d, 0); 8062306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_af_s, 0); 8162306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_af_d, 0); 8262306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_eq_s, 0); 8362306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_eq_d, 0); 8462306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_le_s, 0); 8562306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_le_d, 0); 8662306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_lt_s, 0); 8762306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_lt_d, 0); 8862306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_ne_s, 0); 8962306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_ne_d, 0); 9062306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_or_s, 0); 9162306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_or_d, 0); 9262306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_ueq_s, 0); 9362306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_ueq_d, 0); 9462306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_ule_s, 0); 9562306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_ule_d, 0); 9662306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_ult_s, 0); 9762306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_ult_d, 0); 9862306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_un_s, 0); 9962306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_un_d, 0); 10062306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_une_s, 0); 10162306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_une_d, 0); 10262306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_saf_s, 0); 10362306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_saf_d, 0); 10462306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_seq_s, 0); 10562306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_seq_d, 0); 10662306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sle_s, 0); 10762306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sle_d, 0); 10862306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_slt_s, 0); 10962306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_slt_d, 0); 11062306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sne_s, 0); 11162306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sne_d, 0); 11262306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sor_s, 0); 11362306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sor_d, 0); 11462306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sueq_s, 0); 11562306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sueq_d, 0); 11662306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sule_s, 0); 11762306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sule_d, 0); 11862306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sult_s, 0); 11962306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sult_d, 0); 12062306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sun_s, 0); 12162306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sun_d, 0); 12262306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sune_s, 0); 12362306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cmp_sune_d, 0); 12462306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cvt_d_l, 0); 12562306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cvt_d_s, 0); 12662306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cvt_d_w, 0); 12762306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cvt_l_s, 0); 12862306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cvt_l_d, 0); 12962306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cvt_s_d, 0); 13062306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cvt_s_l, 0); 13162306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cvt_s_w, 0); 13262306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cvt_w_s, 0); 13362306a36Sopenharmony_ci __this_cpu_write((fpuemustats).cvt_w_d, 0); 13462306a36Sopenharmony_ci __this_cpu_write((fpuemustats).div_s, 0); 13562306a36Sopenharmony_ci __this_cpu_write((fpuemustats).div_d, 0); 13662306a36Sopenharmony_ci __this_cpu_write((fpuemustats).floor_w_s, 0); 13762306a36Sopenharmony_ci __this_cpu_write((fpuemustats).floor_w_d, 0); 13862306a36Sopenharmony_ci __this_cpu_write((fpuemustats).floor_l_s, 0); 13962306a36Sopenharmony_ci __this_cpu_write((fpuemustats).floor_l_d, 0); 14062306a36Sopenharmony_ci __this_cpu_write((fpuemustats).maddf_s, 0); 14162306a36Sopenharmony_ci __this_cpu_write((fpuemustats).maddf_d, 0); 14262306a36Sopenharmony_ci __this_cpu_write((fpuemustats).max_s, 0); 14362306a36Sopenharmony_ci __this_cpu_write((fpuemustats).max_d, 0); 14462306a36Sopenharmony_ci __this_cpu_write((fpuemustats).maxa_s, 0); 14562306a36Sopenharmony_ci __this_cpu_write((fpuemustats).maxa_d, 0); 14662306a36Sopenharmony_ci __this_cpu_write((fpuemustats).min_s, 0); 14762306a36Sopenharmony_ci __this_cpu_write((fpuemustats).min_d, 0); 14862306a36Sopenharmony_ci __this_cpu_write((fpuemustats).mina_s, 0); 14962306a36Sopenharmony_ci __this_cpu_write((fpuemustats).mina_d, 0); 15062306a36Sopenharmony_ci __this_cpu_write((fpuemustats).mov_s, 0); 15162306a36Sopenharmony_ci __this_cpu_write((fpuemustats).mov_d, 0); 15262306a36Sopenharmony_ci __this_cpu_write((fpuemustats).msubf_s, 0); 15362306a36Sopenharmony_ci __this_cpu_write((fpuemustats).msubf_d, 0); 15462306a36Sopenharmony_ci __this_cpu_write((fpuemustats).mul_s, 0); 15562306a36Sopenharmony_ci __this_cpu_write((fpuemustats).mul_d, 0); 15662306a36Sopenharmony_ci __this_cpu_write((fpuemustats).neg_s, 0); 15762306a36Sopenharmony_ci __this_cpu_write((fpuemustats).neg_d, 0); 15862306a36Sopenharmony_ci __this_cpu_write((fpuemustats).recip_s, 0); 15962306a36Sopenharmony_ci __this_cpu_write((fpuemustats).recip_d, 0); 16062306a36Sopenharmony_ci __this_cpu_write((fpuemustats).rint_s, 0); 16162306a36Sopenharmony_ci __this_cpu_write((fpuemustats).rint_d, 0); 16262306a36Sopenharmony_ci __this_cpu_write((fpuemustats).round_w_s, 0); 16362306a36Sopenharmony_ci __this_cpu_write((fpuemustats).round_w_d, 0); 16462306a36Sopenharmony_ci __this_cpu_write((fpuemustats).round_l_s, 0); 16562306a36Sopenharmony_ci __this_cpu_write((fpuemustats).round_l_d, 0); 16662306a36Sopenharmony_ci __this_cpu_write((fpuemustats).rsqrt_s, 0); 16762306a36Sopenharmony_ci __this_cpu_write((fpuemustats).rsqrt_d, 0); 16862306a36Sopenharmony_ci __this_cpu_write((fpuemustats).sel_s, 0); 16962306a36Sopenharmony_ci __this_cpu_write((fpuemustats).sel_d, 0); 17062306a36Sopenharmony_ci __this_cpu_write((fpuemustats).seleqz_s, 0); 17162306a36Sopenharmony_ci __this_cpu_write((fpuemustats).seleqz_d, 0); 17262306a36Sopenharmony_ci __this_cpu_write((fpuemustats).selnez_s, 0); 17362306a36Sopenharmony_ci __this_cpu_write((fpuemustats).selnez_d, 0); 17462306a36Sopenharmony_ci __this_cpu_write((fpuemustats).sqrt_s, 0); 17562306a36Sopenharmony_ci __this_cpu_write((fpuemustats).sqrt_d, 0); 17662306a36Sopenharmony_ci __this_cpu_write((fpuemustats).sub_s, 0); 17762306a36Sopenharmony_ci __this_cpu_write((fpuemustats).sub_d, 0); 17862306a36Sopenharmony_ci __this_cpu_write((fpuemustats).trunc_w_s, 0); 17962306a36Sopenharmony_ci __this_cpu_write((fpuemustats).trunc_w_d, 0); 18062306a36Sopenharmony_ci __this_cpu_write((fpuemustats).trunc_l_s, 0); 18162306a36Sopenharmony_ci __this_cpu_write((fpuemustats).trunc_l_d, 0); 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci return 0; 18462306a36Sopenharmony_ci} 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ciDEFINE_SHOW_ATTRIBUTE(fpuemustats_clear); 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_cistatic int __init debugfs_fpuemu(void) 18962306a36Sopenharmony_ci{ 19062306a36Sopenharmony_ci struct dentry *fpuemu_debugfs_base_dir; 19162306a36Sopenharmony_ci struct dentry *fpuemu_debugfs_inst_dir; 19262306a36Sopenharmony_ci char name[32]; 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci fpuemu_debugfs_base_dir = debugfs_create_dir("fpuemustats", 19562306a36Sopenharmony_ci mips_debugfs_dir); 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci debugfs_create_file("fpuemustats_clear", 0444, mips_debugfs_dir, NULL, 19862306a36Sopenharmony_ci &fpuemustats_clear_fops); 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci#define FPU_EMU_STAT_OFFSET(m) \ 20162306a36Sopenharmony_ci offsetof(struct mips_fpu_emulator_stats, m) 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_ci#define FPU_STAT_CREATE(m) \ 20462306a36Sopenharmony_cido { \ 20562306a36Sopenharmony_ci debugfs_create_file(#m, 0444, fpuemu_debugfs_base_dir, \ 20662306a36Sopenharmony_ci (void *)FPU_EMU_STAT_OFFSET(m), \ 20762306a36Sopenharmony_ci &fops_fpuemu_stat); \ 20862306a36Sopenharmony_ci} while (0) 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_ci FPU_STAT_CREATE(emulated); 21162306a36Sopenharmony_ci FPU_STAT_CREATE(loads); 21262306a36Sopenharmony_ci FPU_STAT_CREATE(stores); 21362306a36Sopenharmony_ci FPU_STAT_CREATE(branches); 21462306a36Sopenharmony_ci FPU_STAT_CREATE(cp1ops); 21562306a36Sopenharmony_ci FPU_STAT_CREATE(cp1xops); 21662306a36Sopenharmony_ci FPU_STAT_CREATE(errors); 21762306a36Sopenharmony_ci FPU_STAT_CREATE(ieee754_inexact); 21862306a36Sopenharmony_ci FPU_STAT_CREATE(ieee754_underflow); 21962306a36Sopenharmony_ci FPU_STAT_CREATE(ieee754_overflow); 22062306a36Sopenharmony_ci FPU_STAT_CREATE(ieee754_zerodiv); 22162306a36Sopenharmony_ci FPU_STAT_CREATE(ieee754_invalidop); 22262306a36Sopenharmony_ci FPU_STAT_CREATE(ds_emul); 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci fpuemu_debugfs_inst_dir = debugfs_create_dir("instructions", 22562306a36Sopenharmony_ci fpuemu_debugfs_base_dir); 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_ci#define FPU_STAT_CREATE_EX(m) \ 22862306a36Sopenharmony_cido { \ 22962306a36Sopenharmony_ci adjust_instruction_counter_name(name, #m); \ 23062306a36Sopenharmony_ci \ 23162306a36Sopenharmony_ci debugfs_create_file(name, 0444, fpuemu_debugfs_inst_dir, \ 23262306a36Sopenharmony_ci (void *)FPU_EMU_STAT_OFFSET(m), \ 23362306a36Sopenharmony_ci &fops_fpuemu_stat); \ 23462306a36Sopenharmony_ci} while (0) 23562306a36Sopenharmony_ci 23662306a36Sopenharmony_ci FPU_STAT_CREATE_EX(abs_s); 23762306a36Sopenharmony_ci FPU_STAT_CREATE_EX(abs_d); 23862306a36Sopenharmony_ci FPU_STAT_CREATE_EX(add_s); 23962306a36Sopenharmony_ci FPU_STAT_CREATE_EX(add_d); 24062306a36Sopenharmony_ci FPU_STAT_CREATE_EX(bc1eqz); 24162306a36Sopenharmony_ci FPU_STAT_CREATE_EX(bc1nez); 24262306a36Sopenharmony_ci FPU_STAT_CREATE_EX(ceil_w_s); 24362306a36Sopenharmony_ci FPU_STAT_CREATE_EX(ceil_w_d); 24462306a36Sopenharmony_ci FPU_STAT_CREATE_EX(ceil_l_s); 24562306a36Sopenharmony_ci FPU_STAT_CREATE_EX(ceil_l_d); 24662306a36Sopenharmony_ci FPU_STAT_CREATE_EX(class_s); 24762306a36Sopenharmony_ci FPU_STAT_CREATE_EX(class_d); 24862306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_af_s); 24962306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_af_d); 25062306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_eq_s); 25162306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_eq_d); 25262306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_le_s); 25362306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_le_d); 25462306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_lt_s); 25562306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_lt_d); 25662306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_ne_s); 25762306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_ne_d); 25862306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_or_s); 25962306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_or_d); 26062306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_ueq_s); 26162306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_ueq_d); 26262306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_ule_s); 26362306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_ule_d); 26462306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_ult_s); 26562306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_ult_d); 26662306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_un_s); 26762306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_un_d); 26862306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_une_s); 26962306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_une_d); 27062306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_saf_s); 27162306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_saf_d); 27262306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_seq_s); 27362306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_seq_d); 27462306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sle_s); 27562306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sle_d); 27662306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_slt_s); 27762306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_slt_d); 27862306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sne_s); 27962306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sne_d); 28062306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sor_s); 28162306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sor_d); 28262306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sueq_s); 28362306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sueq_d); 28462306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sule_s); 28562306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sule_d); 28662306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sult_s); 28762306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sult_d); 28862306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sun_s); 28962306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sun_d); 29062306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sune_s); 29162306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cmp_sune_d); 29262306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cvt_d_l); 29362306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cvt_d_s); 29462306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cvt_d_w); 29562306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cvt_l_s); 29662306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cvt_l_d); 29762306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cvt_s_d); 29862306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cvt_s_l); 29962306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cvt_s_w); 30062306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cvt_w_s); 30162306a36Sopenharmony_ci FPU_STAT_CREATE_EX(cvt_w_d); 30262306a36Sopenharmony_ci FPU_STAT_CREATE_EX(div_s); 30362306a36Sopenharmony_ci FPU_STAT_CREATE_EX(div_d); 30462306a36Sopenharmony_ci FPU_STAT_CREATE_EX(floor_w_s); 30562306a36Sopenharmony_ci FPU_STAT_CREATE_EX(floor_w_d); 30662306a36Sopenharmony_ci FPU_STAT_CREATE_EX(floor_l_s); 30762306a36Sopenharmony_ci FPU_STAT_CREATE_EX(floor_l_d); 30862306a36Sopenharmony_ci FPU_STAT_CREATE_EX(maddf_s); 30962306a36Sopenharmony_ci FPU_STAT_CREATE_EX(maddf_d); 31062306a36Sopenharmony_ci FPU_STAT_CREATE_EX(max_s); 31162306a36Sopenharmony_ci FPU_STAT_CREATE_EX(max_d); 31262306a36Sopenharmony_ci FPU_STAT_CREATE_EX(maxa_s); 31362306a36Sopenharmony_ci FPU_STAT_CREATE_EX(maxa_d); 31462306a36Sopenharmony_ci FPU_STAT_CREATE_EX(min_s); 31562306a36Sopenharmony_ci FPU_STAT_CREATE_EX(min_d); 31662306a36Sopenharmony_ci FPU_STAT_CREATE_EX(mina_s); 31762306a36Sopenharmony_ci FPU_STAT_CREATE_EX(mina_d); 31862306a36Sopenharmony_ci FPU_STAT_CREATE_EX(mov_s); 31962306a36Sopenharmony_ci FPU_STAT_CREATE_EX(mov_d); 32062306a36Sopenharmony_ci FPU_STAT_CREATE_EX(msubf_s); 32162306a36Sopenharmony_ci FPU_STAT_CREATE_EX(msubf_d); 32262306a36Sopenharmony_ci FPU_STAT_CREATE_EX(mul_s); 32362306a36Sopenharmony_ci FPU_STAT_CREATE_EX(mul_d); 32462306a36Sopenharmony_ci FPU_STAT_CREATE_EX(neg_s); 32562306a36Sopenharmony_ci FPU_STAT_CREATE_EX(neg_d); 32662306a36Sopenharmony_ci FPU_STAT_CREATE_EX(recip_s); 32762306a36Sopenharmony_ci FPU_STAT_CREATE_EX(recip_d); 32862306a36Sopenharmony_ci FPU_STAT_CREATE_EX(rint_s); 32962306a36Sopenharmony_ci FPU_STAT_CREATE_EX(rint_d); 33062306a36Sopenharmony_ci FPU_STAT_CREATE_EX(round_w_s); 33162306a36Sopenharmony_ci FPU_STAT_CREATE_EX(round_w_d); 33262306a36Sopenharmony_ci FPU_STAT_CREATE_EX(round_l_s); 33362306a36Sopenharmony_ci FPU_STAT_CREATE_EX(round_l_d); 33462306a36Sopenharmony_ci FPU_STAT_CREATE_EX(rsqrt_s); 33562306a36Sopenharmony_ci FPU_STAT_CREATE_EX(rsqrt_d); 33662306a36Sopenharmony_ci FPU_STAT_CREATE_EX(sel_s); 33762306a36Sopenharmony_ci FPU_STAT_CREATE_EX(sel_d); 33862306a36Sopenharmony_ci FPU_STAT_CREATE_EX(seleqz_s); 33962306a36Sopenharmony_ci FPU_STAT_CREATE_EX(seleqz_d); 34062306a36Sopenharmony_ci FPU_STAT_CREATE_EX(selnez_s); 34162306a36Sopenharmony_ci FPU_STAT_CREATE_EX(selnez_d); 34262306a36Sopenharmony_ci FPU_STAT_CREATE_EX(sqrt_s); 34362306a36Sopenharmony_ci FPU_STAT_CREATE_EX(sqrt_d); 34462306a36Sopenharmony_ci FPU_STAT_CREATE_EX(sub_s); 34562306a36Sopenharmony_ci FPU_STAT_CREATE_EX(sub_d); 34662306a36Sopenharmony_ci FPU_STAT_CREATE_EX(trunc_w_s); 34762306a36Sopenharmony_ci FPU_STAT_CREATE_EX(trunc_w_d); 34862306a36Sopenharmony_ci FPU_STAT_CREATE_EX(trunc_l_s); 34962306a36Sopenharmony_ci FPU_STAT_CREATE_EX(trunc_l_d); 35062306a36Sopenharmony_ci 35162306a36Sopenharmony_ci return 0; 35262306a36Sopenharmony_ci} 35362306a36Sopenharmony_ciarch_initcall(debugfs_fpuemu); 354