|
|
1.1 root 1: /
2: / floating point for 11/40 or 11/03 only
3: / modified from rhflibp.asm by DEPT 2242 BTL WH
4: / 06-JUN-78
5: /
6: / 11/70 floating point removed
7: /
8: / The test:
9: /
10: / mov sp,-(sp)
11: / sub sp,(sp)
12: / tst (sp)+
13: / bne 11/70
14: /
15: / does NOT WORK on the LSI-11 (PDP-11/03)
16: /
17: .globl fad,fsb,fmp,fdv,int,float,fltused
18:
19: .text
20: fltused: 1 / used to satisfy c compile reference when floating
21: / point is used
22: fad: mov (sp)+,ret
23: 075006 / fadd sp on 11/35/40/03
24: jmp *ret
25:
26: fsb: mov (sp)+,ret
27: 075016 / fsub sp on 11/35/40/03
28: jmp *ret
29:
30: fmp: mov (sp)+,ret
31: 075026 / fmul sp on 11/35/40/03
32: jmp *ret
33:
34: fdv: mov (sp)+,ret
35: 075036 / fdiv sp on 11/35/40/03
36: jmp *ret
37: /
38: /
39: /
40: /
41: int: mov r0,-(sp)
42: mov r1,-(sp)
43: mov r2,-(sp)
44: clr -(sp) /sign of number
45: mov 12.(sp),r1 / low part
46: mov 10.(sp),r0 / hi part
47: bpl 1f / ok, positive
48: mov $100000,(sp) / set sign -
49: bic (sp),r0 / set number pos
50: 1: mov r0,r2 / extract exponent
51: bic $100177,r2
52: bic r2,r0
53: ash $-7,r2 / make it integer
54: bis $200,r0 / set hidden bit
55: sub $200,r2 / subtr off excess 200
56: ble 2f / exponent 0, treat as zero number
57: sub $24.,r2 / set for shift
58: ashc r2,r0 / left or right
59: 4: tst (sp)+ / sign
60: bpl 3f
61: neg r0
62: neg r1
63: sbc r0
64: 3: mov r0,8.(sp) / hi part
65: mov r1,10.(sp) / low part
66: mov (sp)+,r2
67: mov (sp)+,r1
68: mov (sp)+,r0
69: rts pc
70:
71: 2: clr r0 / exponent was 0, set number to 0
72: clr r1
73: br 4b
74: /
75: /
76: /
77: /
78: float: mov 4(sp),-(sp)
79: mov 4(sp),-(sp)
80: bmi negflt
81: clr -(sp)
82: mov $[200+24.]*200,-(sp)
83: 1: bit $377*200,4(sp)
84: beq 2f
85: asr 4(sp)
86: ror 6(sp)
87: add $200,(sp)
88: br 1b
89: 2: bis (sp),4(sp)
90: jsr pc,fsb
91: mov (sp)+,4(sp)
92: mov (sp)+,4(sp)
93: rts pc
94:
95: negflt: neg (sp)
96: neg 2(sp)
97: sbc (sp)
98: bmi 3f / overflow on sign flip
99: jsr pc,float
100: bis $100000,(sp)
101: mov (sp)+,4(sp)
102: mov (sp)+,4(sp)
103: rts pc
104:
105: 3: cmp (sp)+,(sp)+ / toss
106: mov $[200+32.]*200+100000,2(sp) /
107: clr 4(sp)
108: rts pc
109:
110: .data
111: ret:0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.