#ifndef _OR1K_ASM_H_
#define _OR1K_ASM_H_
#define __BIT(n) (1 << (n))
#define __BITS(hi,lo) ((~((~0)<<((hi)+1)))&((~0)<<(lo)))
#define _C_LABEL(x) x
#define _ASM_LABEL(x) x
#define __CONCAT(x,y) x ## y
#define __STRING(x) #x
#ifndef _ALIGN_TEXT
# define _ALIGN_TEXT .align 4
#endif
#ifndef _TEXT_SECTION
#define _TEXT_SECTION .text
#endif
#define _ASM_TYPE_FUNCTION @function
#define _ASM_TYPE_OBJECT @object
#define _ENTRY(x) \
_TEXT_SECTION; _ALIGN_TEXT; .globl x; .type x,_ASM_TYPE_FUNCTION; x:
#define _END(x) .size x,.-x
#ifdef GPROF
# define _PROF_PROLOGUE \
mov x9, x30; l.jal __mcount
#else
# define _PROF_PROLOGUE
#endif
#define ENTRY(y) _ENTRY(_C_LABEL(y)); _PROF_PROLOGUE
#define ENTRY_NP(y) _ENTRY(_C_LABEL(y))
#define END(y) _END(_C_LABEL(y))
#define END(y) _END(_C_LABEL(y))
#define ASENTRY(y) _ENTRY(_ASM_LABEL(y)); _PROF_PROLOGUE
#define ASENTRY_NP(y) _ENTRY(_ASM_LABEL(y))
#define ASEND(y) _END(_ASM_LABEL(y))
#define ASMSTR .asciz
#ifdef __PIC__
#define PLT(x) plt(x)
#define PIC_GOTSETUP(r) \
l.jal 999f ;\
l.nop ;\
999: l.movhi r,gotpchi(_GLOBAL_OFFSET_TABLE_+0) ;\
l.ori r,r,gotpclo(_GLOBAL_OFFSET_TABLE_+4) ;\
l.add r,r,r9
#else
#define PLT(x) x
#endif
#ifdef _NETBSD_REVISIONID
#define __RCSID(x) .pushsection ".ident","MS",@progbits,1; \
.asciz x; \
.ascii "$"; .ascii "NetBSD: "; .ascii __FILE__; \
.ascii " "; .ascii _NETBSD_REVISIONID; \
.asciz " $"; \
.popsection
#else
#define __RCSID(x) .pushsection ".ident","MS",@progbits,1; \
.asciz x; \
.popsection
#endif
#define RCSID(x) __RCSID(x)
#define WEAK_ALIAS(alias,sym) \
.weak alias; \
alias = sym
#define STRONG_ALIAS(alias,sym) \
.globl alias; \
alias = sym
#define WARN_REFERENCES(sym,msg) \
.pushsection .gnu.warning. ## sym; \
.ascii msg; \
.popsection
#endif