|
|
1.1 root 1: / floating point for 11/40 or 11/70 for norgen use on either machine
2: / uses the appropriate floating point unit
3:
4: .globl fad,fsb,fmp,fdv,int,float
5:
6: .text
7: fad: mov (sp)+,ret
8: mov sp,-(sp)
9: sub sp,(sp)
10: tst (sp)+
11: bne 1f
12: 75006 /fadd sp on 11/35/40
13: jmp *ret
14: 1: ldfps $1100
15: movf 4(sp),fr0
16: addf (sp)+,fr0
17: movf fr0,(sp)
18: jmp *ret
19:
20: fsb: mov (sp)+,ret
21: mov sp,-(sp)
22: sub sp,(sp)
23: tst (sp)+
24: bne 1f
25: 75016 /fsub sp on 11/35/40
26: jmp *ret
27: 1: ldfps $1100
28: movf 4(sp),fr0
29: subf (sp)+,fr0
30: movf fr0,(sp)
31: jmp *ret
32:
33: fmp: mov (sp)+,ret
34: mov sp,-(sp)
35: sub sp,(sp)
36: tst (sp)+
37: bne 1f
38: 75026 /fmul sp on 11/35/40
39: jmp *ret
40: 1: ldfps $1100
41: movf 4(sp),fr0
42: mulf (sp)+,fr0
43: movf fr0,(sp)
44: jmp *ret
45:
46: fdv: mov (sp)+,ret
47: mov sp,-(sp)
48: sub sp,(sp)
49: tst (sp)+
50: bne 1f
51: 75036 /fdiv sp on 11/35/40
52: jmp *ret
53: 1: ldfps $1100
54: movf 4(sp),fr0
55: divf (sp)+,fr0
56: movf fr0,(sp)
57: jmp *ret
58:
59: int: mov r0,-(sp)
60: mov r1,-(sp)
61: mov r2,-(sp)
62: clr -(sp) /sign of number
63: mov 12.(sp),r1/ low part
64: mov 10.(sp),r0/ hi part
65: bpl 1f/ ok, positive
66: mov $100000,(sp)/ set sign -
67: bic (sp),r0/ set number pos
68: 1: mov r0,r2/ extract exponent
69: bic $100177,r2
70: bic r2,r0
71: ash $-7,r2/ make it integer
72: bis $200,r0/ set hidden bit
73: sub $200,r2/ subtr off excess 200
74: ble 2f/ exponent 0, treat as zero number
75: sub $24.,r2/ set for shift
76: ashc r2,r0/ left or right
77: 4: tst (sp)+/ sign
78: bpl 3f
79: neg r0
80: neg r1
81: sbc r0
82: 3: mov r0,8.(sp)/ hi part
83: mov r1,10.(sp)/ low part
84: mov (sp)+,r2
85: mov (sp)+,r1
86: mov (sp)+,r0
87: rts pc
88:
89: 2: clr r0/ exponent was 0, set number to 0
90: clr r1
91: br 4b
92:
93: float: mov 4(sp),-(sp)
94: mov 4(sp),-(sp)
95: bmi negflt
96: clr -(sp)
97: mov $[200+24.]*200,-(sp)
98: 1: bit $377*200,4(sp)
99: beq 2f
100: asr 4(sp)
101: ror 6(sp)
102: add $200,(sp)
103: br 1b
104: 2: bis (sp),4(sp)
105: jsr pc,fsb
106: mov (sp)+,4(sp)
107: mov (sp)+,4(sp)
108: rts pc
109:
110: negflt: neg (sp)
111: neg 2(sp)
112: sbc (sp)
113: bmi 3f/ overflow on sign flip
114: jsr pc,float
115: bis $100000,(sp)
116: mov (sp)+,4(sp)
117: mov (sp)+,4(sp)
118: rts pc
119:
120: 3: cmp (sp)+,(sp)+/ toss
121: mov $[200+32.]*200+100000,2(sp)/
122: clr 4(sp)
123: rts pc
124:
125: .data
126: ret:0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.