1
0
mirror of https://github.com/PDP-10/its.git synced 2026-04-17 16:53:08 +00:00
Files
PDP-10.its/src/c/pdp20.gt
2018-10-25 18:31:55 +02:00

234 lines
4.2 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"