summaryrefslogtreecommitdiff
path: root/emulator/bits.h
blob: 8d4bdff15f951860e72d22489d1740f5c3d037f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once

#include <stdint.h>

static inline uint32_t sign_extend(uint32_t word, uint32_t size)
{
    const uint32_t mask = 1U << (size - 1);
    return (word ^ mask) - mask;
}

static inline uint64_t sign_extend_64(uint64_t word, uint32_t size)
{
    const uint64_t mask = 1ULL << (size - 1);
    return (word ^ mask) - mask;
}