Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*


  25 
  26 /* Main procedures for sparc FPU simulator. */
  27 
  28 #include <sys/fpu/fpu_simulator.h>
  29 #include <sys/fpu/globals.h>
  30 #include <sys/fpu/fpusystm.h>
  31 #include <sys/proc.h>
  32 #include <sys/signal.h>
  33 #include <sys/siginfo.h>
  34 #include <sys/thread.h>
  35 #include <sys/cpuvar.h>
  36 #include <sys/cmn_err.h>
  37 #include <sys/atomic.h>
  38 #include <sys/privregs.h>
  39 #include <sys/vis_simulator.h>
  40 
  41 #define FPUINFO_KSTAT(opcode)   {                                       \
  42         extern void __dtrace_probe___fpuinfo_##opcode(uint64_t *);      \
  43         uint64_t *stataddr = &fpuinfo.opcode.value.ui64;            \
  44         __dtrace_probe___fpuinfo_##opcode(stataddr);                    \
  45         atomic_add_64(&fpuinfo.opcode.value.ui64, 1);                       \
  46 }
  47 
  48 #define FPUINFO_KSTAT_PREC(prec, kstat_s, kstat_d, kstat_q)             \
  49         if (prec < 2) {                                                      \
  50                 FPUINFO_KSTAT(kstat_s);                                 \
  51         } else if (prec == 2) {                                         \
  52                 FPUINFO_KSTAT(kstat_d);                                 \
  53         } else {                                                        \
  54                 FPUINFO_KSTAT(kstat_q);                                 \
  55         }
  56 
  57 /*
  58  * FPU simulator global kstat data
  59  */
  60 struct fpuinfo_kstat fpuinfo = {
  61         { "fpu_sim_fmovs",              KSTAT_DATA_UINT64},
  62         { "fpu_sim_fmovd",              KSTAT_DATA_UINT64},
  63         { "fpu_sim_fmovq",              KSTAT_DATA_UINT64},
  64         { "fpu_sim_fnegs",              KSTAT_DATA_UINT64},
  65         { "fpu_sim_fnegd",              KSTAT_DATA_UINT64},


 774                 fpuinfo_kstat->ks_data = (void *)&fpuinfo;
 775                 kstat_install(fpuinfo_kstat);
 776         }
 777         ASSERT(visinfo_kstat == NULL);
 778         if ((visinfo_kstat = kstat_create("unix", 0, "vis_info", "misc",
 779             KSTAT_TYPE_NAMED, visinfo_ndata, KSTAT_FLAG_VIRTUAL)) == NULL) {
 780                 cmn_err(CE_WARN, "CPU%d: kstat_create for vis_info failed",
 781                     CPU->cpu_id);
 782         } else {
 783                 visinfo_kstat->ks_data = (void *)&visinfo;
 784                 kstat_install(visinfo_kstat);
 785         }
 786 }
 787 
 788 void
 789 fp_kstat_update(enum ftt_type ftt)
 790 {
 791         ASSERT((ftt == ftt_ieee) || (ftt == ftt_unfinished) ||
 792             (ftt == ftt_unimplemented));
 793         if (ftt == ftt_ieee)
 794                 atomic_add_64(&fpustat.fpu_ieee_traps.value.ui64, 1);
 795         else if (ftt == ftt_unfinished)
 796                 atomic_add_64(&fpustat.fpu_unfinished_traps.value.ui64, 1);
 797         else if (ftt == ftt_unimplemented)
 798                 atomic_add_64(&fpustat.fpu_unimplemented_traps.value.ui64, 1);
 799 }


  25 
  26 /* Main procedures for sparc FPU simulator. */
  27 
  28 #include <sys/fpu/fpu_simulator.h>
  29 #include <sys/fpu/globals.h>
  30 #include <sys/fpu/fpusystm.h>
  31 #include <sys/proc.h>
  32 #include <sys/signal.h>
  33 #include <sys/siginfo.h>
  34 #include <sys/thread.h>
  35 #include <sys/cpuvar.h>
  36 #include <sys/cmn_err.h>
  37 #include <sys/atomic.h>
  38 #include <sys/privregs.h>
  39 #include <sys/vis_simulator.h>
  40 
  41 #define FPUINFO_KSTAT(opcode)   {                                       \
  42         extern void __dtrace_probe___fpuinfo_##opcode(uint64_t *);      \
  43         uint64_t *stataddr = &fpuinfo.opcode.value.ui64;            \
  44         __dtrace_probe___fpuinfo_##opcode(stataddr);                    \
  45         atomic_inc_64(&fpuinfo.opcode.value.ui64);                  \
  46 }
  47 
  48 #define FPUINFO_KSTAT_PREC(prec, kstat_s, kstat_d, kstat_q)             \
  49         if (prec < 2) {                                                      \
  50                 FPUINFO_KSTAT(kstat_s);                                 \
  51         } else if (prec == 2) {                                         \
  52                 FPUINFO_KSTAT(kstat_d);                                 \
  53         } else {                                                        \
  54                 FPUINFO_KSTAT(kstat_q);                                 \
  55         }
  56 
  57 /*
  58  * FPU simulator global kstat data
  59  */
  60 struct fpuinfo_kstat fpuinfo = {
  61         { "fpu_sim_fmovs",              KSTAT_DATA_UINT64},
  62         { "fpu_sim_fmovd",              KSTAT_DATA_UINT64},
  63         { "fpu_sim_fmovq",              KSTAT_DATA_UINT64},
  64         { "fpu_sim_fnegs",              KSTAT_DATA_UINT64},
  65         { "fpu_sim_fnegd",              KSTAT_DATA_UINT64},


 774                 fpuinfo_kstat->ks_data = (void *)&fpuinfo;
 775                 kstat_install(fpuinfo_kstat);
 776         }
 777         ASSERT(visinfo_kstat == NULL);
 778         if ((visinfo_kstat = kstat_create("unix", 0, "vis_info", "misc",
 779             KSTAT_TYPE_NAMED, visinfo_ndata, KSTAT_FLAG_VIRTUAL)) == NULL) {
 780                 cmn_err(CE_WARN, "CPU%d: kstat_create for vis_info failed",
 781                     CPU->cpu_id);
 782         } else {
 783                 visinfo_kstat->ks_data = (void *)&visinfo;
 784                 kstat_install(visinfo_kstat);
 785         }
 786 }
 787 
 788 void
 789 fp_kstat_update(enum ftt_type ftt)
 790 {
 791         ASSERT((ftt == ftt_ieee) || (ftt == ftt_unfinished) ||
 792             (ftt == ftt_unimplemented));
 793         if (ftt == ftt_ieee)
 794                 atomic_inc_64(&fpustat.fpu_ieee_traps.value.ui64);
 795         else if (ftt == ftt_unfinished)
 796                 atomic_inc_64(&fpustat.fpu_unfinished_traps.value.ui64);
 797         else if (ftt == ftt_unimplemented)
 798                 atomic_inc_64(&fpustat.fpu_unimplemented_traps.value.ui64);
 799 }