#ifndef _MACHINE_ASM_H_
#define _MACHINE_ASM_H_
r0 .reg %r0
r1 .reg %r1
r2 .reg %r2
r3 .reg %r3
r4 .reg %r4
r5 .reg %r5
r6 .reg %r6
r7 .reg %r7
r8 .reg %r8
r9 .reg %r9
r10 .reg %r10
r11 .reg %r11
r12 .reg %r12
r13 .reg %r13
r14 .reg %r14
r15 .reg %r15
r16 .reg %r16
r17 .reg %r17
r18 .reg %r18
r19 .reg %r19
r20 .reg %r20
r21 .reg %r21
r22 .reg %r22
r23 .reg %r23
r24 .reg %r24
r25 .reg %r25
r26 .reg %r26
r27 .reg %r27
r28 .reg %r28
r29 .reg %r29
r30 .reg %r30
r31 .reg %r31
sr0 .reg %sr0
sr1 .reg %sr1
sr2 .reg %sr2
sr3 .reg %sr3
sr4 .reg %sr4
sr5 .reg %sr5
sr6 .reg %sr6
sr7 .reg %sr7
fr0 .reg %fr0
fr1 .reg %fr1
fr2 .reg %fr2
fr3 .reg %fr3
fr4 .reg %fr4
fr5 .reg %fr5
fr6 .reg %fr6
fr7 .reg %fr7
fr8 .reg %fr8
fr9 .reg %fr9
fr10 .reg %fr10
fr11 .reg %fr11
fr12 .reg %fr12
fr13 .reg %fr13
fr14 .reg %fr14
fr15 .reg %fr15
fr16 .reg %fr16
fr17 .reg %fr17
fr18 .reg %fr18
fr19 .reg %fr19
fr20 .reg %fr20
fr21 .reg %fr21
fr22 .reg %fr22
fr23 .reg %fr23
fr24 .reg %fr24
fr25 .reg %fr25
fr26 .reg %fr26
fr27 .reg %fr27
fr28 .reg %fr28
fr29 .reg %fr29
fr30 .reg %fr30
fr31 .reg %fr31
cr0 .reg %cr0
cr8 .reg %cr8
cr9 .reg %cr9
cr10 .reg %cr10
cr11 .reg %cr11
cr12 .reg %cr12
cr13 .reg %cr13
cr14 .reg %cr14
cr15 .reg %cr15
cr16 .reg %cr16
cr17 .reg %cr17
cr18 .reg %cr18
cr19 .reg %cr19
cr20 .reg %cr20
cr21 .reg %cr21
cr22 .reg %cr22
cr23 .reg %cr23
cr24 .reg %cr24
cr25 .reg %cr25
cr26 .reg %cr26
cr27 .reg %cr27
cr28 .reg %cr28
cr29 .reg %cr29
cr30 .reg %cr30
cr31 .reg %cr31
rctr .reg %cr0
pidr1 .reg %cr8
pidr2 .reg %cr9
ccr .reg %cr10
sar .reg %cr11
pidr3 .reg %cr12
pidr4 .reg %cr13
iva .reg %cr14
eiem .reg %cr15
itmr .reg %cr16
pcsq .reg %cr17
pcoq .reg %cr18
iir .reg %cr19
isr .reg %cr20
ior .reg %cr21
ipsw .reg %cr22
eirr .reg %cr23
tr0 .reg %cr24
vtop .reg %cr25
tr1 .reg %cr25
tr2 .reg %cr26
tr3 .reg %cr27
tr4 .reg %cr28
tr5 .reg %cr29
tr6 .reg %cr30
tr7 .reg %cr31
rp .reg %r2
arg3 .reg %r23
arg2 .reg %r24
arg1 .reg %r25
arg0 .reg %r26
dp .reg %r27
ret0 .reg %r28
ret1 .reg %r29
sl .reg %r29
sp .reg %r30
t1 .reg %r22
t2 .reg %r21
t3 .reg %r20
t4 .reg %r19
ts1 .reg %sr2
sret .reg %sr1 ; return value
sarg .reg %sr1 ; argument
farg0 .reg %fr5
farg1 .reg %fr6
farg2 .reg %fr7
farg3 .reg %fr8
fret .reg %fr4
tf1 .reg %fr11
tf2 .reg %fr10
tf3 .reg %fr9
tf4 .reg %fr8
#ifdef __STDC__
#define __CONCAT(a,b) a ## b
#else
#define __CONCAT(a,b) ab
#endif
#if defined(PROF) || defined(GPROF)
#define _PROF_PROLOGUE !\
1: !\
stw rp, HPPA_FRAME_CRP(sr0,sp) !\
stw arg0, HPPA_FRAME_ARG(0)(sr0,sp) !\
stw arg1, HPPA_FRAME_ARG(1)(sr0,sp) !\
stw arg2, HPPA_FRAME_ARG(2)(sr0,sp) !\
stw arg3, HPPA_FRAME_ARG(3)(sr0,sp) !\
ldo HPPA_FRAME_SIZE(sp), sp !\
copy rp, arg0 !\
bl 2f, arg1 !\
depi 0, 31, 2, arg1 !\
2: !\
bl _mcount, rp !\
ldo 1b - 2b(arg1), arg1 !\
ldo -HPPA_FRAME_SIZE(sp), sp !\
ldw HPPA_FRAME_ARG(3)(sr0,sp), arg3 !\
ldw HPPA_FRAME_ARG(2)(sr0,sp), arg2 !\
ldw HPPA_FRAME_ARG(1)(sr0,sp), arg1 !\
ldw HPPA_FRAME_ARG(0)(sr0,sp), arg0 !\
ldw HPPA_FRAME_CRP(sr0,sp) ,rp
#else
#define _PROF_PROLOGUE
#endif
#define LEAF_ENTRY(x) ! .text ! .align 4 !\
.export x, entry ! .label x ! .proc !\
.callinfo frame=0,no_calls,save_rp !\
.entry ! _PROF_PROLOGUE
#define ENTRY(x,n) ! .text ! .align 4 !\
.export x, entry ! .label x ! .proc !\
.callinfo frame=n,calls, save_rp, save_sp !\
.entry ! _PROF_PROLOGUE
#define ALTENTRY(x) ! .export x, entry ! .label x
#define EXIT(x) ! .exit ! .procend ! .size x, .-x
#define BSS(n,s) ! .data ! .label n ! .comm s
#define STRONG_ALIAS(alias,sym) ! .global alias ! .set alias, sym
#define WEAK_ALIAS(alias,sym) ! .weak alias ! .set alias, sym
#endif