mirror of
https://github.com/PDP-10/its.git
synced 2026-04-17 16:53:08 +00:00
234 lines
4.2 KiB
Plaintext
234 lines
4.2 KiB
Plaintext
typenames (char, int, float, double);
|
||
regnames (a, c, d, b);
|
||
memnames (reg, auto, ext, stat, param, label, intlit, floatlit,
|
||
stringlit, ia, ic, id, ib);
|
||
size 1 (char, int, float, double);
|
||
align 1(char, int, float, double);
|
||
class r (a, b, c, d);
|
||
saveareasize 1;
|
||
pointer p0 (1);
|
||
offsetrange p0 (,);
|
||
returnreg a (int, double, p0);
|
||
type char(r), int(r), float(r), double(r), p0(r);
|
||
|
||
.sw: a|c|d,,1[b];
|
||
.argi: .argd: .arg0: r,,1; M,,1;
|
||
|
||
+i: *i: &: ^: .OR: +p0:
|
||
+d: *d: r,r,1; r,M,1; M,r,2;
|
||
|
||
-i: -p0: -p0p0: -d: /d: r,r,1; r,M,1;
|
||
|
||
/i: a,r,1[b]; b,r,1[c]; c,r,1[d];
|
||
a,M,1[b]; b,M,1[c]; c,M,1[d];
|
||
|
||
%: a,r,b; b,r,c; c,r,d;
|
||
a,M,b; b,M,c; c,M,d;
|
||
|
||
<<: >>: r,r,1; r,intlit,1;
|
||
|
||
=+i: =*i: =&: =^: =OR:
|
||
=+d: =*d: M,r,1; M,r,2;
|
||
|
||
.BNOT: -ui: -ud: r,,1; M,,r;
|
||
|
||
&u0:
|
||
++ai: ++ac: --ai: --ac: M,,r;
|
||
|
||
++ap0: --ap0: M,b,a|c|d; M,d,b;
|
||
|
||
++bi: ++bc:
|
||
--bi: --bc: M,,r; M,,1;
|
||
|
||
++bp0: --bp0: M,r,2;
|
||
|
||
.ic: .ci: .ip0: .p0i: .df: .fd:
|
||
.cf: .cd: .if: .id: r,,1;
|
||
|
||
.fc: .dc: .fi: .di: a,,b;
|
||
|
||
==p0: !=p0: <p0: >p0: <=p0: >=p0:
|
||
==i: !=i: <i: >i: <=i: >=i:
|
||
==d: !=d: <d: >d: <=d: >=d: r,r,label; r,M,label;
|
||
|
||
==0p0: !=0p0: r,,label; M,,label;
|
||
|
||
|
||
|
||
|
||
macros
|
||
|
||
+i: *i: &: ^: .OR: +p0:
|
||
|
||
(r,r,): " #O #F,#S"
|
||
(M,,): " #O #S,#F"
|
||
(r,~intlit,): " #O #F,#S"
|
||
(r,intlit,): " #O%ifm(#'S,I #F\,#6, #F\,#S)"
|
||
|
||
-i: /i: %: -p0: sb:
|
||
|
||
(,r,): " #O #F,#S"
|
||
(,~intlit,): " #O #F,#S"
|
||
(,intlit,): " #O%ifm(#'S,I #F\,#6, #F\,#S)"
|
||
|
||
+d: *d:
|
||
|
||
(r,,): " #O #F,#S"
|
||
(M,,): " #O #S,#F"
|
||
|
||
-d: /d: -p0p0:
|
||
|
||
" #O #F,#S"
|
||
|
||
<<:
|
||
(,intlit,): " LSH #R,#6"
|
||
(,r,): " LSH #R,(#S)"
|
||
>>:
|
||
(,intlit,): " LSH #R,-#6"
|
||
(,r,): " MOVN #S,#S\n LSH #R,(#S)"
|
||
|
||
=+i: " ADDB #S,#F"
|
||
=*i: " IMULB #S,#F"
|
||
=&: " ANDB #S,#F"
|
||
=^: " XORB #S,#F"
|
||
=OR: " IORB #S,#F"
|
||
=+d: " FADRB #S,#F"
|
||
=*d: " FMPRB #S,#F"
|
||
|
||
&u0: " MOVEI #R,#F"
|
||
++ai: ++ac: " MOVE #R,#F\n AOS #F"
|
||
--ai: --ac: " MOVE #R,#F\n SOS #F"
|
||
++bi: ++bc:
|
||
(,,r): " MOVEI #R,1\n ADDB #R,#F"
|
||
(,,M): " AOS #F"
|
||
--bi: --bc:
|
||
(,,r): " SETO #R,\n ADDB #R,#F"
|
||
(,,M): " SOS #F"
|
||
++ap0: " MOVE #R,#F\n ADDM #S,#F"
|
||
--ap0: " MOVE #R,#F\n MOVN #S,#S\n ADDM #S,#F"
|
||
++bp0: " ADDB #S,#F"
|
||
--bp0: " MOVN #S,#S\n ADDB #S,#F"
|
||
.BNOT:
|
||
(r,,): " SETCA #R,"
|
||
(M,,): " SETCM #R,#F"
|
||
-ui: -ud: " MOVN #R,#F"
|
||
|
||
==p0: " CAMN #F,#S\n GO #R"
|
||
!=p0: " CAME #F,#S\n GO #R"
|
||
<p0: " CAMGE #F,#S\n GO #R"
|
||
>p0: " CAMLE #F,#S\n GO #R"
|
||
<=p0: " CAMG #F,#S\n GO #R"
|
||
>=p0: " CAML #F,#S\n GO #R"
|
||
|
||
==i: "%ifm(#'S,%if(#6,\tCAIN\t#F\,#6\n\tGO\t#R,\tJUMPE\t#F\,#R),\tCAMN\t#F\,#S\n\tGO\t#R)"
|
||
!=i: "%ifm(#'S,%if(#6,\tCAIE\t#F\,#6\n\tGO\t#R,\tJUMPN\t#F\,#R),\tCAME\t#F\,#S\n\tGO\t#R)"
|
||
<i: "%ifm(#'S,%if(#6,\tCAIGE\t#F\,#6\n\tGO\t#R,\tJUMPL\t#F\,#R),\tCAMGE\t#F\,#S\n\tGO\t#R)"
|
||
>i: "%ifm(#'S,%if(#6,\tCAILE\t#F\,#6\n\tGO\t#R,\tJUMPG\t#F\,#R),\tCAMLE\t#F\,#S\n\tGO\t#R)"
|
||
<=i: "%ifm(#'S,%if(#6,\tCAIG\t#F\,#6\n\tGO\t#R,\tJUMPLE\t#F\,#R),\tCAMG\t#F\,#S\n\tGO\t#R)"
|
||
>=i: "%ifm(#'S,%if(#6,\tCAIL\t#F\,#6\n\tGO\t#R,\tJUMPGE\t#F\,#R),\tCAML\t#F\,#S\n\tGO\t#R)"
|
||
|
||
==d: " FSBR #F,#S\n JUMPE #F,#R"
|
||
!=d: " FSBR #F,#S\n JUMPN #F,#R"
|
||
<d: " FSBR #F,#S\n JUMPL #F,#R"
|
||
>d: " FSBR #F,#S\n JUMPG #F,#R"
|
||
<=d: " FSBR #F,#S\n JUMPLE #F,#R"
|
||
>=d: " FSBR #F,#S\n JUMPGE #F,#R"
|
||
|
||
==0p0:
|
||
(M,,): " SKIPN #F\n GO #R"
|
||
(r,,): " JUMPE #F,#R"
|
||
!=0p0:
|
||
(M,,): " SKIPE #F\n GO #R"
|
||
(r,,): " JUMPN #F,#R"
|
||
|
||
.cc: .ii:
|
||
.ff: .dd:
|
||
.p0p0:
|
||
(r,,r): " MOVE #R,#F"
|
||
(r,,M): " MOVEM #F,#R"
|
||
(~intlit,,r): " MOVE #R,#F"
|
||
(intlit,,r): " %ifm(#'F,MOVEI\t#R\,#4,%ifm(#3,-#4,MOVNI\t#R\,-#4,MOVE\t#R\,#F))"
|
||
|
||
.if: .id:
|
||
.cf: .cd: " FSC #R,155"
|
||
.di: .dc:
|
||
.fi: .fc: " JSP 0,FIXIFY"""
|
||
.ic: .ci:
|
||
.ip0: .p0i:
|
||
.df: .fd: "\"
|
||
|
||
.argi:
|
||
.argd:
|
||
.arg0: " PPUSH #F"
|
||
|
||
in: c: " #0"
|
||
ad0: " #R"
|
||
|
||
al: "\"
|
||
ca: " CCALL #0,#F"
|
||
|
||
end:
|
||
".PDATA
|
||
CONSTANTS
|
||
END"
|
||
|
||
en: " ENTRY #0"
|
||
ex: " EXTERN #0"
|
||
eq: "#0:"
|
||
go: " GO #R"
|
||
hd:
|
||
|
||
" TITLE %pname()
|
||
RADIX 10.
|
||
.INSRT <C>NC
|
||
"
|
||
|
||
ln: "\n; LINE #0\n"
|
||
p:
|
||
|
||
"%setfno(#0)
|
||
\%A==#2
|
||
\%A,,[ASCIZ/%m(#1)/]
|
||
%i(#1): ADDI P,FS#0"
|
||
|
||
rt:
|
||
" SUBI P,FS#0+\%A+1
|
||
GO @<\%A+1>(P)"
|
||
ep:
|
||
" SUBI P,FS#0+\%A+1
|
||
GO @<\%A+1>(P)
|
||
FS#0==#1-1"
|
||
|
||
st: "I#0:"
|
||
z: " BLOCK #0"
|
||
|
||
f: d: " %ff(#0)"
|
||
nf: nd: " -%ff(#0)"
|
||
|
||
ts:
|
||
"%if(#0,%sb(68,#'F,#'F,-6,#0)
|
||
,) JUMPL #F,#R
|
||
CAILE #F,#5-#0
|
||
GO #R
|
||
GO @(#F)["
|
||
|
||
ets: " ]"
|
||
|
||
ls:
|
||
" MOVE B,[-#0,,["
|
||
|
||
els:
|
||
" ]]
|
||
CAMN #F,(B)
|
||
GO @#0(B)
|
||
AOBJN B,.-2
|
||
GO #R"
|
||
|
||
lc: " L#0"
|
||
l: "L#0:"
|
||
sc: " S#0"
|
||
pu: ".CODE"
|
||
pd: ".PDATA"
|
||
im: ".UDATA"
|
||
da: ".IDATA"
|
||
|