* C object code improver-- second part
* Copyright 1974 Bell Telephone Laboratories, Incorporated
for (p
=first
.forw
; p
!=0; p
= p
->forw
) {
printf("%d: %s\n", r
, regs
[r
]);
if ((r
= findrand(regs
[RT1
], flt
)) >= 0) {
if (r
== flt
+isreg(regs
[RT2
]) && p
->forw
->op
!=CBR
) {
savereg(r1
+flt
, regs
[r
+flt
]);
savereg(r
+flt
, regs
[RT2
]);
savereg(r1
+flt
, regs
[RT1
]);
setcon(regs
[RT1
], regs
[RT2
]);
if (p
->op
==DIV
&& (r
= isreg(regs
[RT2
])>=0))
if (p
->op
==CLR
&& flt
==0)
if ((r
= isreg(regs
[RT1
])) >= 0)
if (equstr(regs
[RT1
], ccloc
)) {
register struct node
*p
, *p1
;
for (p
=first
.forw
; p
!=0; p
= p
->forw
)
for (p
=first
.forw
; p
!=0; p
= p1
) {
if (p
->op
== CBR
&& p1
->op
==JBR
&& p
->ref
&& p1
->ref
&& abs(p
->refc
- p
->ref
->refc
) > abs(p1
->refc
- p1
->ref
->refc
)) {
p
->subop
= revbr
[p
->subop
];
register struct node
*p
, *p1
;
for (p
= &first
; (p1
= p
->forw
)!=0; p
= p1
) {
if (p
->op
==DEC
&& isreg(p
->code
)>=0
&& p1
->combop
==(CBR
|JNE
<<8)) {
if (p
->refc
< p1
->ref
->refc
)
if (p
->refc
- p1
->ref
->refc
> 50)
register char *cp1
, *cp2
;
register struct node
*p1
;
if (p1
->combop
!= p2
->combop
)
if (p1
->op
>0 && p1
->op
<MOV
)
while (p
&& p
->op
==LABEL
)
write(2, "Out of space\n", 14);
register char *p
, *s
, *sp
;
if (s
[0]=='(' && s
[1]=='r' && s
[2]<'5') {
while ((i
= findrand(s
, flt
)) >= 0)
if ((*s
=='(' && (*(s
+1)!='r' || *(s
+2)!='5')) || *s
++=='*') {
for (i
=flt
; i
<flt
+NREG
; i
++) {
for (i
= flt
; i
<NREG
+flt
; i
++) {
if (s
[0]=='r' && s
[1]>='0' && s
[1]<='4' && s
[2]==0)
register struct node
*p
, *lp
;
for (p
=first
.forw
; p
!=0; p
= p
->forw
) {
if (*p1
=='-' && *(p1
+1)=='('
|| *p1
=='*' && *(p1
+1)=='-' && *(p1
+2)=='('
while (*p1
&& *p1
++!='r');
if (*p1
>='0' && *p1
<='4')
static char rt1
[50], rt2
[50];
r1
= findrand(regs
[RT2
], flt
);
r
= findrand(regs
[RT1
], flt
);
for (p1
= rt1
; *p1
++ = *p2
++;);
for (p2
= regs
[RT2
]; *p1
++ = *p2
++;);
p
->code
= copy(rt1
, rt2
);
register struct node
*p1
, *p2
;
for (p1
= first
.forw
; p1
!=0; p1
= p1
->forw
) {
while (p2
&& p2
->op
!=TEXT
)
p1
->back
->forw
= p2
->forw
;
data
.forw
->back
= &first
;
for (p1
= first
.forw
; p1
!=0; p1
= p1
->forw
) {
if (p1
->op
==TEXT
||p1
->op
==DATA
||p1
->op
==BSS
) {
if (p1
->op
== seg
|| p1
->forw
&&p1
->forw
->op
==seg
) {
p1
->back
->forw
= p1
->forw
;
p1
->forw
->back
= p1
->back
;
register struct node
*p
, *p1
;
if (compare(p1
->subop
, ap1
, ap2
)) {
register char *cp1
, *cp2
;
if (*cp1
++ != '$' || *cp2
++ != '$')
while (*cp2
>= '0' && *cp2
<= '7') {
while (*cp1
>= '0' && *cp1
<= '7') {
register char *cl
, *cv
, *p
;
if (*p
=='*' || *p
=='(' || *p
=='-'&&*(p
+1)=='(')
if (*--p
== '+' || *p
==')' && *--p
!= '5')