void armv7a::asr_c(bits* result, uint32_t* carry_out, const bits& x, uint32_t shift) { pseudo_assert(shift > 0, "asr_c assert error"); //pseudo_assert(shift < 32, "asr_c assert error 2"); if(shift >= 32) { /* if(x(x.n - 1) == 1) { result->val = mask(x.n - 1, 0); } else { result->val = 0; } result->n = x.n; return; */ shift = 32; } //code modified by ufoderek uint64_t extended_x = sign_extend64(x); result->val = get_field64(extended_x, shift + x.n - 1, shift); result->n = x.n; *carry_out = get_bit(extended_x, shift - 1); }
static void msr_event_update(struct perf_event *event) { u64 prev, now; s64 delta; /* Careful, an NMI might modify the previous event value. */ again: prev = local64_read(&event->hw.prev_count); now = msr_read_counter(event); if (local64_cmpxchg(&event->hw.prev_count, prev, now) != prev) goto again; delta = now - prev; if (unlikely(event->hw.event_base == MSR_SMI_COUNT)) delta = sign_extend64(delta, 31); local64_add(delta, &event->count); }
static void msr_event_update(struct perf_event *event) { u64 prev, now; s64 delta; /* Careful, an NMI might modify the previous event value: */ again: prev = local64_read(&event->hw.prev_count); now = msr_read_counter(event); if (local64_cmpxchg(&event->hw.prev_count, prev, now) != prev) goto again; delta = now - prev; if (unlikely(event->hw.event_base == MSR_SMI_COUNT)) { delta = sign_extend64(delta, 31); local64_add(delta, &event->count); } else if (unlikely(event->hw.event_base == MSR_IA32_THERM_STATUS)) { /* If valid, extract digital readout, otherwise set to -1: */ now = now & (1ULL << 31) ? (now >> 16) & 0x3f : -1; local64_set(&event->count, now); } else {
uint64_t armv7a::SInt(const bits& x) { return sign_extend64(x); }