Showing the changes to java/appl/java/low.s (1 of 18352 files). Show all
Unified · Split
| @@ -0,0 +1,140 @@ | |||
| 1 | #0 | ||
| 2 | # SetByte | ||
| 3 | addw 32(fp),36(fp),44(fp) | ||
| 4 | movb 40(fp),0(44(fp)) | ||
| 5 | ret | ||
| 6 | #3 | ||
| 7 | # SetInt | ||
| 8 | addw 32(fp),36(fp),44(fp) | ||
| 9 | movw 40(fp),0(44(fp)) | ||
| 10 | ret | ||
| 11 | #6 | ||
| 12 | # SetBig | ||
| 13 | addw 32(fp),36(fp),48(fp) | ||
| 14 | movl 40(fp),0(48(fp)) | ||
| 15 | ret | ||
| 16 | #9 | ||
| 17 | # SetReal | ||
| 18 | addw 32(fp),36(fp),48(fp) | ||
| 19 | movf 40(fp),0(48(fp)) | ||
| 20 | ret | ||
| 21 | #12 | ||
| 22 | # SetObj | ||
| 23 | addw 32(fp),36(fp),44(fp) | ||
| 24 | movp 40(fp),0(44(fp)) | ||
| 25 | ret | ||
| 26 | #15 | ||
| 27 | # GetByte | ||
| 28 | addw 32(fp),36(fp),40(fp) | ||
| 29 | movb 0(40(fp)),0(16(fp)) | ||
| 30 | ret | ||
| 31 | #18 | ||
| 32 | # GetInt | ||
| 33 | addw 32(fp),36(fp),40(fp) | ||
| 34 | movw 0(40(fp)),0(16(fp)) | ||
| 35 | ret | ||
| 36 | #21 | ||
| 37 | # GetBig | ||
| 38 | addw 32(fp),36(fp),40(fp) | ||
| 39 | movl 0(40(fp)),0(16(fp)) | ||
| 40 | ret | ||
| 41 | #24 | ||
| 42 | # GetReal | ||
| 43 | addw 32(fp),36(fp),40(fp) | ||
| 44 | movf 0(40(fp)),0(16(fp)) | ||
| 45 | ret | ||
| 46 | #27 | ||
| 47 | # GetObj | ||
| 48 | addw 32(fp),36(fp),40(fp) | ||
| 49 | movp 0(40(fp)),0(16(fp)) | ||
| 50 | ret | ||
| 51 | #30 | ||
| 52 | #CallMethod: frame size==80 map==0x00b840 | ||
| 53 | # params | ||
| 54 | # module ptr: 32(fp) ptr | ||
| 55 | # method idx: 36(fp) | ||
| 56 | # this ptr: 40(fp) ptr | ||
| 57 | # args: 44(fp) ptr | ||
| 58 | # ret-val: 48(fp) ptr | ||
| 59 | # local vars used: | ||
| 60 | # frame: 52(fp) not-marked | ||
| 61 | # frame-slot: 56(fp) | ||
| 62 | # loop index: 60(fp) | ||
| 63 | # tmp: 64(fp) -- used for array idexing & alignment ck | ||
| 64 | # pick-tmp: 68(fp) ptr | ||
| 65 | # array len: 72(fp) | ||
| 66 | # | ||
| 67 | mframe 32(fp),36(fp),52(fp) | ||
| 68 | addw 52(fp),$32,56(fp) #compute slot address for arg | ||
| 69 | beqw 0(mp),40(fp),$35 #if static then 'this' is nil | ||
| 70 | movp 40(fp),0(56(fp)) #move 'this' into frame | ||
| 71 | addw $4,56(fp) #next slot | ||
| 72 | #35 | ||
| 73 | # move args into frame | ||
| 74 | # for(idx:=0; idx <len args; idx++ ) | ||
| 75 | movw $0,60(fp) #initialize loop idx | ||
| 76 | lena 44(fp),72(fp) #length of array | ||
| 77 | #37 | ||
| 78 | blew 72(fp),60(fp),$60 #loop condition | ||
| 79 | indw 44(fp),64(fp),60(fp) #index the array | ||
| 80 | movp 0(64(fp)),68(fp) #grab the array element; its a ref pick-adt | ||
| 81 | case 0(68(fp)),4(mp) #switch off of the 'pick' id | ||
| 82 | #41 | ||
| 83 | movp 4(68(fp)),0(56(fp)) # object param | ||
| 84 | jmp $57 | ||
| 85 | #43 | ||
| 86 | movw 4(68(fp)),0(56(fp)) # word param (byte,short,char,boolean,int) | ||
| 87 | jmp $57 | ||
| 88 | #45 | ||
| 89 | andw 56(fp),$7,64(fp) # check for 8-byte alignment | ||
| 90 | beqw 64(fp),$0,$48 # branch if already aligned | ||
| 91 | addw $4,56(fp) # next slot is aligned | ||
| 92 | movl 8(68(fp)),0(56(fp)) # big param (long) | ||
| 93 | addw $8,56(fp) # next param slot | ||
| 94 | jmp $58 | ||
| 95 | #51 | ||
| 96 | andw 56(fp),$7,64(fp) # check for 8-byte alignment | ||
| 97 | beqw 64(fp),$0,$54 # branch if already aligned | ||
| 98 | addw $4,56(fp) # next slot is aligned | ||
| 99 | movf 8(68(fp)),0(56(fp)) # real param (float,double) | ||
| 100 | addw $8,56(fp) # next param slot | ||
| 101 | jmp $58 | ||
| 102 | #57 | ||
| 103 | addw $4,56(fp) # next slot | ||
| 104 | #58 | ||
| 105 | addw $1,60(fp) #inc loop index | ||
| 106 | jmp $37 #end-for | ||
| 107 | #60 | ||
| 108 | # setup return value if one exists | ||
| 109 | beqw 0(mp),48(fp),$65 #if nil then no functional return | ||
| 110 | case 0(48(fp)),60(mp) #switch off pick field of ret-value | ||
| 111 | #62 | ||
| 112 | lea 4(48(fp)),16(52(fp)) #4-byte aligned return addr | ||
| 113 | jmp $65 | ||
| 114 | lea 8(48(fp)),16(52(fp)) #8-byte aligned return addr | ||
| 115 | #65 | ||
| 116 | mcall 52(fp),36(fp),32(fp) | ||
| 117 | ret | ||
| 118 | # | ||
| 119 | # change the following with care | ||
| 120 | # | ||
| 121 | desc $0,92,"80" | ||
| 122 | desc $1,48,"00a0" | ||
| 123 | desc $2,40,"0080" | ||
| 124 | desc $3,48,"0080" | ||
| 125 | desc $4,80,"00b840" | ||
| 126 | var @mp,92 | ||
| 127 | word @mp+4,4,0,1,41,1,6,43,6,7,45,7,9,51,66 | ||
| 128 | word @mp+60,2,0,6,62,6,9,64,66 | ||
| 129 | module Low | ||
| 130 | link 3,0, 0x349a7796,"SetByte" | ||
| 131 | link 3,3, 0x2de68727,"SetInt" | ||
| 132 | link 3,6, 0xd7e9f417,"SetBig" | ||
| 133 | link 3,9 ,0xa51f3c84,"SetReal" | ||
| 134 | link 1,12,0x2ada273,"SetObj" | ||
| 135 | link 2,15,0x65a049aa,"GetByte" | ||
| 136 | link 2,18,0x7060ebba,"GetInt" | ||
| 137 | link 2,21,0x9f04ed0,"GetBig" | ||
| 138 | link 2,24,0x553990fb,"GetReal" | ||
| 139 | link 2,27,0x30af57fd,"GetObj" | ||
| 140 | link 4,30,0x2943aeae,"CallMethod" | ||