From 2598a9e3128e01b8aa7da14e39fcdab868030c86 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Thu, 8 Oct 2015 17:14:07 +0200 Subject: 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 --- sys/src/cmd/cc/sub.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'sys/src') diff --git a/sys/src/cmd/cc/sub.c b/sys/src/cmd/cc/sub.c index d0bbeb89c..0133b2bea 100644 --- a/sys/src/cmd/cc/sub.c +++ b/sys/src/cmd/cc/sub.c @@ -961,6 +961,10 @@ loop: case OSTRING: case OLSTRING: case ONAME: + case OREGPAIR: + case OEXREG: + case OREGISTER: + case OINDREG: return 0; } return 1; -- cgit v1.2.3