#ifndef _ASM_SCORE_IRQFLAGS_H
#define _ASM_SCORE_IRQFLAGS_H

#ifndef __ASSEMBLY__

#include <linux/types.h>

static inline unsigned long arch_local_save_flags(void)
{
	unsigned long flags;

	asm volatile(
		"	mfcr	r8, cr0		\n"
		"	nop			\n"
		"	nop			\n"
		"	mv	%0, r8		\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		"	ldi	r9, 0x1		\n"
		"	and	%0, %0, r9	\n"
		: "=r" (flags)
		:
		: "r8", "r9");
	return flags;
}

static inline unsigned long arch_local_irq_save(void)
{
	unsigned long flags

	asm volatile(
		"	mfcr	r8, cr0		\n"
		"	li	r9, 0xfffffffe	\n"
		"	nop			\n"
		"	mv	%0, r8		\n"
		"	and	r8, r8, r9	\n"
		"	mtcr	r8, cr0		\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		: "=r" (flags)
		:
		: "r8", "r9", "memory");

	return flags;
}

static inline void arch_local_irq_restore(unsigned long flags)
{
	asm volatile(
		"	mfcr	r8, cr0		\n"
		"	ldi	r9, 0x1		\n"
		"	and	%0, %0, r9	\n"
		"	or	r8, r8, %0	\n"
		"	mtcr	r8, cr0		\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		:
		: "r"(flags)
		: "r8", "r9", "memory");
}

static inline void arch_local_irq_enable(void)
{
	asm volatile(
		"	mfcr	r8,cr0		\n"
		"	nop			\n"
		"	nop			\n"
		"	ori	r8,0x1		\n"
		"	mtcr	r8,cr0		\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		:
		:
		: "r8", "memory");
}

static inline void arch_local_irq_disable(void)
{
	asm volatile(
		"	mfcr	r8,cr0		\n"
		"	nop			\n"
		"	nop			\n"
		"	srli	r8,r8,1		\n"
		"	slli	r8,r8,1		\n"
		"	mtcr	r8,cr0		\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		"	nop			\n"
		:
		:
		: "r8", "memory");
}

static inline bool arch_irqs_disabled_flags(unsigned long flags)
{
	return !(flags & 1);
}

static inline bool arch_irqs_disabled(void)
{
	return arch_irqs_disabled_flags(arch_local_save_flags());
}

#endif /* __ASSEMBLY__ */

#endif /* _ASM_SCORE_IRQFLAGS_H */
