#pragma once

#ifndef __x86_64__
#include "aum1_cm1.h"

struct InterruptLock {
    uint32_t old_primask;

    InterruptLock() : old_primask(__get_PRIMASK()) { __disable_irq(); }

    ~InterruptLock() {
        __set_PRIMASK(old_primask);
    }
};
#else  // __x86_64__
#include <mutex>

struct InterruptLock {
    static std::recursive_mutex m;
    InterruptLock() { m.lock(); }
    ~InterruptLock() { m.unlock(); }
};
#endif  // __x86_64__