1: / 2: / 3: 4: / f47 -- analysis of data statements 5: 6: .globl cdata 7: .globl dodata 8: .globl onedata 9: .globl compare 10: 11: .globl code 12: .globl getcon 13: .globl error 14: .globl getsym 15: .globl consub 16: .globl size 17: .globl geti 18: .globl setln 19: .globl getln 20: .globl declimpl 21: .globl evalcon 22: .globl dattab 23: .globl contab 24: .globl efno 25: .globl perror 26: .globl qsort 27: .globl negflg 28: .globl repfact 29: .globl geti 30: .globl holround 31: 32: cdata: 33: mov r5,-(sp) 34: jsr r5,setln 35: mov $dattab,r4 36: mov $contab,r5 37: dloop: 38: jsr r5,getln 39: br 2f 40: br 1f 41: 2: 42: mov r4,-(sp) 43: mov $dattab,r1 44: mov r4,r2 45: mov $8.,r3 46: jsr pc,qsort 47: mov (sp)+,r4 48: mov (sp)+,r5 49: rts r5 50: 1: 51: cmp r0,$'d 52: bne dloop 53: mov $line+4,r1 54: / loop per specification-set 55: 1: 56: clr repfact 57: mov r1,r2 58: 2: 59: jsr r5,getsym 60: cmp r0,$40. / =| 61: bne 3f 62: 8: 63: jmp 8f 64: 9: 65: jmp 9f 66: 3: 67: cmp r0,$6 / / 68: bne 2b 69: mov r1,-(sp) 70: mov r2,r1 71: mov (sp)+,r2 72: / loop per specification 73: 2: 74: cmp r4,r5 75: blo 3f 76: jmp 7f 77: 3: 78: jsr r5,getsym 79: tst r0 80: bne 8b 81: bit $70,symtab(r3) / test classed 82: bne 3f 83: jsr r5,declimpl 84: 3: 85: mov symtab(r3),r0 86: mov r0,holquo / temp storage 87: incb holquo+1 / round size 88: bicb $1,holquo+1 89: bit $200,r0 / test parameter 90: bne 9b 91: bic $!70,r0 92: cmp r0,$10 / simple 93: beq 3f 94: cmp r0,$20 / array 95: bne 9b 96: 3: 97: bit $100,symtab(r3) / test common 98: beq 3f 99: cmp progt,$6 / test block data 100: bne 9b 101: mov symtab+4(r3),(r4)+ / common block 102: br 4f 103: 3: 104: cmp progt,$6 / test block data 105: beq 9b 106: clr (r4)+ 107: tst symtab+6(r3) / test allocated 108: bne 4f 109: mov nxtaloc,symtab+6(r3) 110: jsr r5,size 111: add r0,nxtaloc 112: 4: 113: clr (r4) / offset slot 114: cmpb (r1),$'( / test subscript 115: bne 3f 116: inc r1 117: jsr r5,consub 118: bic $70,holquo 119: bis $10,holquo / array -> scalar 120: mov r0,(r4) 121: 3: 122: movb symtab+1(r3),r0 / width of item 123: inc r0 124: bic $1,r0 125: mov r0,holround 126: add symtab+6(r3),(r4)+ 127: tst repfact 128: beq 3f 129: dec repfact 130: movb efno+1,r3 131: mov r3,(r4)+ 132: mov r5,(r4)+ 133: br 4f 134: 3: 135: mov r1,-(sp) 136: mov r2,r1 137: mov (sp)+,r2 138: 5: 139: jsr r5,getsym 140: cmp r0,$2 / constant 141: beq 3f 142: cmp r0,$10. / - 143: bne 8f 144: inc negflg 145: jsr r5,getsym 146: cmp r0,$2 / constant 147: bne 8f 148: 3: 149: cmpb (r1)+,$'* 150: bne 3f 151: cmp r3,$intcon 152: bne 8f 153: jsr r5,geti 154: dec r0 155: bmi 8f 156: mov r0,repfact 157: br 5b 158: 3: 159: dec r1 160: mov r1,-(sp) 161: mov r2,-(sp) 162: mov r3,efno 163: clrb r3 164: swab r3 165: mov r3,(r4)+ 166: sub r3,r5 167: mov r5,(r4)+ / ptr to const 168: mov r5,r3 169: mov $symbuf,r1 170: jsr r5,evalcon 171: clr negflg 172: mov (sp)+,r1 173: mov (sp)+,r2 / note r1 <=> r2 174: 4: 175: cmpb efno+1,holquo+1 / compare sizes 176: blt 9f / constant too small 177: beq 3f 178: bicb $!77,holquo 179: cmp holquo,$int2con+10 / simple int*2? 180: bne 4f 181: sub $2,-4(r4) / reduce const length 182: cmpb efno,$5 183: beq 3f / hollerith, OK 184: add $2,-2(r4) / get least sig. 185: br 3f 186: 4: 187: bit $20,holquo / test array 188: beq 9f 189: cmpb efno,$5 / test hollerith 190: bne 9f 191: 3: 192: cmpb (r1),$'/ 193: beq 3f 194: cmpb (r1)+,$', 195: bne 8f 196: tst repfact 197: bne 4f 198: cmpb (r2)+,$', 199: bne 8f 200: 4: 201: jmp 2b 202: 3: 203: cmpb (r2)+,$'/ 204: bne 8f 205: tstb (r2) 206: beq 1f 207: cmpb (r2),$', 208: bne 3f 209: inc r2 210: 3: 211: mov r2,r1 212: tst repfact 213: bne 8f 214: jmp 1b 215: 7: 216: jsr r5,error; 28. / data table overflow 217: br 2f 218: 8: 219: jsr r5,error; 21. / data syntax error 220: br 2f 221: 9: 222: jsr r5,error; 22. / data semantic error 223: 2: 224: mov $dattab,r4 / reset ptrs 225: mov $contab,r5 226: jsr r5,perror 227: 1: 228: jmp dloop 229: 230: dodata: 231: cmp progt,$6 232: beq 1f / block data 233: mov $dattab,r3 234: cmp r3,r4 235: bne 2f / is data 236: mov nxtaloc,r0 237: jsr r5,code 238: <.=.+%d.\n.text\n\0>; .even 239: r0 240: rts r5 241: 2: 242: jsr r5,onedata 243: sub nxtaloc,r1 244: neg r1 245: blt 9b 246: jsr r5,code 247: <.=.+%d.\n.text\n\0>; .even 248: r1 249: 1: 250: rts r5 251: 252: onedata: 253: clr r1 254: 2: 255: mov 2(r3),r0 256: sub r1,r0 257: bmi 9f 258: beq 3f 259: jsr r5,code 260: <.=.+%d.\n\0>; .even 261: r0 262: add r0,r1 263: 3: 264: mov 4(r3),r0 265: add r0,r1 266: asr r0 267: mov r0,-(sp) 268: mov 6(r3),r2 269: 3: 270: mov (r2)+,r0 271: jsr r5,code 272: <%o\n\0>; .even 273: r0 274: dec (sp) 275: bne 3b 276: tst (sp)+ 277: add $8.,r3 278: cmp r3,r4 279: bhis 1f 280: cmp (r3),-8(r3) / any more in this block 281: beq 2b 282: 1: 283: rts r5 284: 9: 285: clr line 286: jsr r5,error; 32. / overlapping data init 287: jsr r5,perror 288: rts r5 289: 290: / comparison routine for qsort 291: 292: compare: 293: cmp (r0),(r4) 294: bne 1f 295: cmp 2(r0),2(r4) 296: 1: 297: rts pc