[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
*LDB, *DPB
- To: bug-lisp at MIT-MC
- Subject: *LDB, *DPB
- From: Guy.Steele at CMU-10A
- Date: Thu, 18 Sep 80 16:44:00 GMT
- Original-date: 18 September 1980 1244-EDT (Thursday)
From: JONL at MIT-MC (Jon L White)
Date: 18 September 1980 04:06-EDT
BTW I notice that the functions *ldb and *dpb take the byte
specifcation shifted left by 30 (octal). This causes (ldb x y)
to expand into (*ldb (lsh x 30) y). This seems pretty gratuitous
to me since it only takes one instruction to have *ldb and *dpb
do the lsh themselves. (*ldb contains an unnecessary move anyway!)
*LDB and *DPB take a pre-shifted argument so that when, for example,
"x" is a constant, the call becomes (*ldb <x>_30 y), and the executable
sequence then doesn't include the LSH; this in fact is the case worth
optimizing.
Well, actually I don't see why this matters. In the interpreter you
don't care, and the compiler is perfectly capable of figuring out
that there is a constant there and pre-shifting it--indeed, it can
optimize even better. I don't know exactly what code is produced
for *LDB, but for (*LDB 0304 X) one might imagine the code
(LDB TT (% 0 0 @ (SPECIAL X) 030400))
being generated. No shifts, and indeed 0304_30 doesn't exactly appear
either.