diff options
Diffstat (limited to 'config/linux/parisc.s')
-rw-r--r-- | config/linux/parisc.s | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/config/linux/parisc.s b/config/linux/parisc.s new file mode 100644 index 0000000..88d9366 --- /dev/null +++ b/config/linux/parisc.s @@ -0,0 +1,68 @@ +; coexpression code for HP PA-RISC architecture for Icon 8.10 +; +; n.b. two of the three coexpression tests work, but coexpression +; *transmission*, a rarely used feature, does not + + .CODE + .IMPORT syserr + .EXPORT coswitch +coswitch + .PROC + .CALLINFO + .ENTRY + ; store old registers + STW %sp,0(%arg0) + ; not used: 4(%arg0) + STW %rp,8(%arg0) + STW %r3,12(%arg0) + STW %r4,16(%arg0) + STW %r5,20(%arg0) + STW %r6,24(%arg0) + STW %r7,28(%arg0) + STW %r8,32(%arg0) + STW %r9,36(%arg0) + STW %r10,40(%arg0) + STW %r11,44(%arg0) + STW %r12,48(%arg0) + STW %r13,52(%arg0) + STW %r14,56(%arg0) + STW %r15,60(%arg0) + STW %r16,64(%arg0) + STW %r17,68(%arg0) + STW %r18,72(%arg0) + + COMIB,=,N 0,%arg2,L$isfirst + + ; this is not a first-time call; reload old context + LDW 0(%arg1),%sp + LDW 8(%arg1),%rp + LDW 12(%arg1),%r3 + LDW 16(%arg1),%r4 + LDW 20(%arg1),%r5 + LDW 24(%arg1),%r6 + LDW 28(%arg1),%r7 + LDW 32(%arg1),%r8 + LDW 36(%arg1),%r9 + LDW 40(%arg1),%r10 + LDW 44(%arg1),%r11 + LDW 48(%arg1),%r12 + LDW 52(%arg1),%r13 + LDW 56(%arg1),%r14 + LDW 60(%arg1),%r15 + LDW 64(%arg1),%r16 + LDW 68(%arg1),%r17 + LDW 72(%arg1),%r18 + BV,N (%rp) ; return + +L$isfirst + LDW 0(%arg1),%sp + LDI 0,%arg0 + LDI 0,%arg1 + .CALL ARGW0=GR,ARGW1=GR + BL,N new_context,%rp ; call new_context(0,0) + SUBI 1,%r0,%rp + BV,N (%rp) ; abort w/ illegal jump + .EXIT + .PROCEND + .IMPORT new_context,CODE + .END |