ref: 2598a9e3128e01b8aa7da14e39fcdab868030c86
parent: 285d96be4d642def1221e184f63bb9b75df75071
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Thu Oct 8 13:14:07 EDT 2015
cc: restore side(), but do not consider OINDEX as side effect free from charles forsuth: because the previous version thought OINDEX might have a side effect, it stopped it building a tower of them. probably the best thing is to limit that anyway, since each one consumes 2-3 registers, so towering them can keep even more active, and the x86 hasn't got that many. the quick hack is to return that case to the earlier state by treating OINDEX as a side-effect in side(). it's not a bad thing to do in the OSTRUCT case, for similar reasons: it's better to collapse the indexed pointer into a direct register, instead of repeating the indexing operation through the copying of the value. OINDEX isn't a machine-independent operation, so it doesn't affect the uses in ../cc
--- a/sys/src/cmd/cc/sub.c
+++ b/sys/src/cmd/cc/sub.c
@@ -961,6 +961,10 @@
case OSTRING:
case OLSTRING:
case ONAME:
+ case OREGPAIR:
+ case OEXREG:
+ case OREGISTER:
+ case OINDREG:
return 0;
}
return 1;