1*fbadb1c4SDavid du Colombier#!/bin/rc 2*fbadb1c4SDavid du Colombier {switch($objtype){ 3*fbadb1c4SDavid du Colombier case mips 4*fbadb1c4SDavid du Colombier echo TEXT $i'(SB)', 1, '$0' 5*fbadb1c4SDavid du Colombier echo MOVW R1, '0(FP)' 6*fbadb1c4SDavid du Colombier echo MOVW '$'$n, R1 7*fbadb1c4SDavid du Colombier echo SYSCALL 8*fbadb1c4SDavid du Colombier if(~ $i _SEEK || ~ $i nsec) { 9*fbadb1c4SDavid du Colombier echo 'MOVW $-1,R5 10*fbadb1c4SDavid du Colombier BNE R1,R5,4(PC) 11*fbadb1c4SDavid du Colombier MOVW a+0(FP),R5 12*fbadb1c4SDavid du Colombier MOVW R1,0(R5) 13*fbadb1c4SDavid du Colombier MOVW R1,4(R5)' 14*fbadb1c4SDavid du Colombier } 15*fbadb1c4SDavid du Colombier echo RET 16*fbadb1c4SDavid du Colombier case mips2 17*fbadb1c4SDavid du Colombier echo TEXT $i'(SB)', 1, '$0' 18*fbadb1c4SDavid du Colombier echo MOVW R1, '0(FP)' 19*fbadb1c4SDavid du Colombier echo MOVW '$'$n, R1 20*fbadb1c4SDavid du Colombier echo ADD '$4',R29 21*fbadb1c4SDavid du Colombier echo SYSCALL 22*fbadb1c4SDavid du Colombier echo ADD '$-4',R29 23*fbadb1c4SDavid du Colombier echo RET 24*fbadb1c4SDavid du Colombier case spim 25*fbadb1c4SDavid du Colombier echo TEXT $i'(SB)', 1, '$0' 26*fbadb1c4SDavid du Colombier echo MOVW R1, '0(FP)' 27*fbadb1c4SDavid du Colombier echo MOVW '$'$n, R1 28*fbadb1c4SDavid du Colombier echo ADD '$4',R29 29*fbadb1c4SDavid du Colombier echo SYSCALL 30*fbadb1c4SDavid du Colombier echo ADD '$-4',R29 31*fbadb1c4SDavid du Colombier if(~ $i _SEEK || ~ $i nsec) { # untested so far - geoff 32*fbadb1c4SDavid du Colombier echo 'MOVW $-1,R5 33*fbadb1c4SDavid du Colombier BNE R1,R5,4(PC) 34*fbadb1c4SDavid du Colombier MOVW a+0(FP),R5 35*fbadb1c4SDavid du Colombier MOVW R1,0(R5) 36*fbadb1c4SDavid du Colombier MOVW R1,4(R5)' 37*fbadb1c4SDavid du Colombier } 38*fbadb1c4SDavid du Colombier echo RET 39*fbadb1c4SDavid du Colombier case 386 40*fbadb1c4SDavid du Colombier echo TEXT $i'(SB)', 1, '$0' 41*fbadb1c4SDavid du Colombier echo MOVL '$'$n, AX 42*fbadb1c4SDavid du Colombier echo INT '$'64 43*fbadb1c4SDavid du Colombier if(~ $i _SEEK || ~ $i nsec) { 44*fbadb1c4SDavid du Colombier echo 'CMPL AX,$-1 45*fbadb1c4SDavid du Colombier JNE 4(PC) 46*fbadb1c4SDavid du Colombier MOVL a+0(FP),CX 47*fbadb1c4SDavid du Colombier MOVL AX,0(CX) 48*fbadb1c4SDavid du Colombier MOVL AX,4(CX)' 49*fbadb1c4SDavid du Colombier } 50*fbadb1c4SDavid du Colombier echo RET 51*fbadb1c4SDavid du Colombier case amd64 52*fbadb1c4SDavid du Colombier if(~ $i _SEEK) 53*fbadb1c4SDavid du Colombier echo TEXT __SEEK'(SB)', 1, '$0' 54*fbadb1c4SDavid du Colombier if not 55*fbadb1c4SDavid du Colombier echo TEXT $i'(SB)', 1, '$0' 56*fbadb1c4SDavid du Colombier # 57*fbadb1c4SDavid du Colombier # For architectures which pass the first argument 58*fbadb1c4SDavid du Colombier # in a register, if the system call takes no arguments 59*fbadb1c4SDavid du Colombier # there will be no 'a0+0(FP)' reserved on the stack. 60*fbadb1c4SDavid du Colombier # 61*fbadb1c4SDavid du Colombier if(! ~ $i nsec) 62*fbadb1c4SDavid du Colombier echo MOVQ RARG, 'a0+0(FP)' 63*fbadb1c4SDavid du Colombier echo MOVQ '$'$n, RARG 64*fbadb1c4SDavid du Colombier echo SYSCALL 65*fbadb1c4SDavid du Colombier echo RET 66*fbadb1c4SDavid du Colombier case sparc 67*fbadb1c4SDavid du Colombier echo TEXT $i'(SB)', 1, '$0' 68*fbadb1c4SDavid du Colombier echo MOVW R7, '0(FP)' 69*fbadb1c4SDavid du Colombier echo MOVW '$'$n, R7 70*fbadb1c4SDavid du Colombier echo TA R0 71*fbadb1c4SDavid du Colombier if(~ $i _SEEK || ~ $i nsec) { 72*fbadb1c4SDavid du Colombier echo 'CMP R7,$-1 73*fbadb1c4SDavid du Colombier BNE 4(PC) 74*fbadb1c4SDavid du Colombier MOVW a+0(FP),R8 75*fbadb1c4SDavid du Colombier MOVW R7,0(R8) 76*fbadb1c4SDavid du Colombier MOVW R7,4(R8)' 77*fbadb1c4SDavid du Colombier } 78*fbadb1c4SDavid du Colombier echo RETURN 79*fbadb1c4SDavid du Colombier case arm 80*fbadb1c4SDavid du Colombier echo TEXT $i'(SB)', 1, '$0' 81*fbadb1c4SDavid du Colombier echo MOVW R0, '0(FP)' 82*fbadb1c4SDavid du Colombier echo MOVW '$'$n, R0 83*fbadb1c4SDavid du Colombier echo SWI 0 84*fbadb1c4SDavid du Colombier if(~ $i _SEEK || ~ $i nsec) { 85*fbadb1c4SDavid du Colombier echo 'CMP $-1,R0 86*fbadb1c4SDavid du Colombier BNE 4(PC) 87*fbadb1c4SDavid du Colombier MOVW a+0(FP),R1 88*fbadb1c4SDavid du Colombier MOVW R0,0(R1) 89*fbadb1c4SDavid du Colombier MOVW R0,4(R1)' 90*fbadb1c4SDavid du Colombier } 91*fbadb1c4SDavid du Colombier echo RET 92*fbadb1c4SDavid du Colombier case power 93*fbadb1c4SDavid du Colombier echo TEXT $i'(SB)', 1, '$0' 94*fbadb1c4SDavid du Colombier echo MOVW R3, '0(FP)' 95*fbadb1c4SDavid du Colombier echo MOVW '$'$n, R3 96*fbadb1c4SDavid du Colombier echo SYSCALL 97*fbadb1c4SDavid du Colombier if(~ $i _SEEK || ~ $i nsec) { 98*fbadb1c4SDavid du Colombier echo 'CMP R3,$-1 99*fbadb1c4SDavid du Colombier BNE 4(PC) 100*fbadb1c4SDavid du Colombier MOVW a+0(FP),R8 101*fbadb1c4SDavid du Colombier MOVW R3,0(R8) 102*fbadb1c4SDavid du Colombier MOVW R3,4(R8)' 103*fbadb1c4SDavid du Colombier } 104*fbadb1c4SDavid du Colombier echo RETURN 105*fbadb1c4SDavid du Colombier case power64 106*fbadb1c4SDavid du Colombier if(~ $i _SEEK) 107*fbadb1c4SDavid du Colombier echo TEXT __SEEK'(SB)', 1, '$0' 108*fbadb1c4SDavid du Colombier if not 109*fbadb1c4SDavid du Colombier echo TEXT $i'(SB)', 1, '$0' 110*fbadb1c4SDavid du Colombier echo MOVD R3, '0(FP)' 111*fbadb1c4SDavid du Colombier echo MOVW '$'$n, R3 112*fbadb1c4SDavid du Colombier echo SYSCALL 113*fbadb1c4SDavid du Colombier echo RETURN 114*fbadb1c4SDavid du Colombier }} > $i.s 115*fbadb1c4SDavid du Colombier $AS $i.s 116