summaryrefslogtreecommitdiff
path: root/emu/AIX/asm-power.s
diff options
context:
space:
mode:
authorYaroslav Kolomiiets <yarikos@gmail.com>2017-02-27 17:23:28 +0200
committerYaroslav Kolomiiets <yarikos@gmail.com>2017-02-27 17:23:28 +0200
commit7ef44d652ae9e5e1f5b3465d73684e4a54de73c0 (patch)
tree2c76cd7d21332631439d1dc60d87cb66fd47db34 /emu/AIX/asm-power.s
parentfd29964f362afd85503d5f005122cedf030c6aa1 (diff)
add AIX/power port
Diffstat (limited to 'emu/AIX/asm-power.s')
-rw-r--r--emu/AIX/asm-power.s108
1 files changed, 108 insertions, 0 deletions
diff --git a/emu/AIX/asm-power.s b/emu/AIX/asm-power.s
new file mode 100644
index 00000000..024c058b
--- /dev/null
+++ b/emu/AIX/asm-power.s
@@ -0,0 +1,108 @@
+.set r0,0; .set SP,1; .set RTOC,2; .set r3,3; .set r4,4
+.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
+.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
+.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
+.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
+.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
+.set r30,30; .set r31,31
+.set fp0,0; .set fp1,1; .set fp2,2; .set fp3,3; .set fp4,4
+.set fp5,5; .set fp6,6; .set fp7,7; .set fp8,8; .set fp9,9
+.set fp10,10; .set fp11,11; .set fp12,12; .set fp13,13; .set fp14,14
+.set fp15,15; .set fp16,16; .set fp17,17; .set fp18,18; .set fp19,19
+.set fp20,20; .set fp21,21; .set fp22,22; .set fp23,23; .set fp24,24
+.set fp25,25; .set fp26,26; .set fp27,27; .set fp28,28; .set fp29,29
+.set fp30,30; .set fp31,31
+.set v0,0; .set v1,1; .set v2,2; .set v3,3; .set v4,4
+.set v5,5; .set v6,6; .set v7,7; .set v8,8; .set v9,9
+.set v10,10; .set v11,11; .set v12,12; .set v13,13; .set v14,14
+.set v15,15; .set v16,16; .set v17,17; .set v18,18; .set v19,19
+.set v20,20; .set v21,21; .set v22,22; .set v23,23; .set v24,24
+.set v25,25; .set v26,26; .set v27,27; .set v28,28; .set v29,29
+.set v30,30; .set v31,31
+.set LR,8; .set CTR,9; .set TID,17; .set DSISR,18; .set DAR,19; .set TO_RTCU,20
+
+.machine "ppc"
+
+ .align 2
+ .globl .FPsave
+.FPsave:
+ stfd fp14,0*8(r3)
+ stfd fp15,1*8(r3)
+ stfd fp16,2*8(r3)
+ stfd fp17,3*8(r3)
+ stfd fp18,4*8(r3)
+ stfd fp19,5*8(r3)
+ stfd fp20,6*8(r3)
+ stfd fp21,7*8(r3)
+ stfd fp22,8*8(r3)
+ stfd fp23,9*8(r3)
+ stfd fp24,10*8(r3)
+ stfd fp25,11*8(r3)
+ stfd fp26,12*8(r3)
+ stfd fp27,13*8(r3)
+ stfd fp28,14*8(r3)
+ stfd fp29,15*8(r3)
+ stfd fp30,16*8(r3)
+ stfd fp31,17*8(r3)
+ blr
+
+ .align 2
+ .globl .FPrestore
+.FPrestore:
+ lfd fp14,0*8(r3)
+ lfd fp15,1*8(r3)
+ lfd fp16,2*8(r3)
+ lfd fp17,3*8(r3)
+ lfd fp18,4*8(r3)
+ lfd fp19,5*8(r3)
+ lfd fp20,6*8(r3)
+ lfd fp21,7*8(r3)
+ lfd fp22,8*8(r3)
+ lfd fp23,9*8(r3)
+ lfd fp24,10*8(r3)
+ lfd fp25,11*8(r3)
+ lfd fp26,12*8(r3)
+ lfd fp27,13*8(r3)
+ lfd fp28,14*8(r3)
+ lfd fp29,15*8(r3)
+ lfd fp30,16*8(r3)
+ lfd fp31,17*8(r3)
+ blr
+
+ .align 2
+ .globl ._tas
+._tas:
+ sync
+ mr r4, r3
+ addi r5,0,0x1
+_tas_1:
+ lwarx r3, 0, r4
+ cmpwi r3, 0
+ bne- _tas_2
+ stwcx. r5, 0, r4
+ bne- _tas_1
+_tas_2:
+ sync
+ blr
+
+ .align 2
+ .globl .executeonnewstack
+.executeonnewstack:
+ mr SP,r3 # change stacks
+ stwu LR,-16(SP) # save lr to aid the traceback
+ li r0,0
+ stw r0,20(SP)
+ mr r3,r5
+ mtctr r4
+ bctrl # tramp(arg)
+ br
+
+ .align 2
+ .globl .unlockandexit
+.unlockandexit:
+ li r0,0x0
+ stw r0,0(r3) # unlock
+ li r0,1 # sys exit; 234 is exit group
+ li r3,0 # exit status
+ sc
+ br