Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!linus!cca!decvax!harpo!floyd!vax135!ukc!edcaad!edee!edai!ok
From: ok@edai.UUCP
Newsgroups: net.unix-wizards,net.lang.c
Subject: Some questions about the C -Optimiser
Message-ID: <2083@edai.UUCP>
Date: Thu, 2-Jun-83 16:58:26 EDT
Article-I.D.: edai.2083
Posted: Thu Jun 2 16:58:26 1983
Date-Received: Mon, 6-Jun-83 21:47:30 EDT
Lines: 63
/* Some questions about "optimised" C code.
*/
struct {unsigned a:24; unsigned b:8} x;
main()
{
int s, t; /*
*/ t = x.a; /* 1.
opt&un extzv $0,$24,_x,-8(fp)
*/ x.a = t; /* 2.
opt&un insv -8(fp),$0,$24,_x
*/ t = x.b; /* 3.
un extzv $24,$8,_x,-8(fp)
opt movzbl 3+_x,-8(fp)
*/ x.b = t; /* 4.
opt&un insv -8(fp),$24,$8,_x
why not movb -8(fp),_x+3 ??
*/ t = s&0xffffff; /* 5.
un bicl3 $-16777216,-4(fp),r0
un movl r0,-8(fp)
opt extzv $0,$24,-4(fp),-8(fp)
why not bicl3 $-16777216,-4(fp),-8(fp) ??
*/ t = s>>24; /* 6.
opt&un ashl $-24,-4(fp),r0
opt&un movl r0,-8(fp)
why not ashl $-24,-4(fp),-8(fp) ??
*/ } /*
The questions are
1: The use of byte addressing in (3) is a significant improvement,
about 3 micro-seconds as compared with 5 on a VAX 750. Why is
is not used in (4)?
2: bicl3 $(-1<, is a significant improvement over
extzv $0,$N,, in speed (4 usec vs 5). Why is it not
used in (5)?
3: The C compiler has a very strong tendency to generate
,r0
movl r0,
even when doesn't appear in the calculation. How come the
peep-hole -Optimiser misses the opportunity of eliminating the
movl?
4: This is just a guess, because I don't know how -O works, but the
improvements referred to in q1 and q2 involve replacing one
instruction by one instruction, so should be fairly easy to add
to the -Optimiser. How may it be done? q3's cure is probably
very much harder. If these changes aren't improvements on the
11/780, perhaps there could be a #define for selecting the machine?
This isn't a frivolous problem constructed to "beat the optimiser".
We have a program which does these operations an awful lot, and a 10-20%
speedup obtained by making a few minor (and universally beneficial on
750s) tweaks to the compiler seems like a good bargain.
*/