mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 20:29:48 +00:00
31 lines
1.0 KiB
Plaintext
31 lines
1.0 KiB
Plaintext
|
From: Chris Lattner [mailto:sabre@nondot.org]
|
||
|
Sent: Wednesday, December 06, 2000 6:41 PM
|
||
|
To: Vikram S. Adve
|
||
|
Subject: Additional idea with respect to encoding
|
||
|
|
||
|
Here's another idea with respect to keeping the common case instruction
|
||
|
size down (less than 32 bits ideally):
|
||
|
|
||
|
Instead of encoding an instruction to operate on two register numbers,
|
||
|
have it operate on two negative offsets based on the current register
|
||
|
number. Therefore, instead of using:
|
||
|
|
||
|
r57 = add r55, r56 (r57 is the implicit dest register, of course)
|
||
|
|
||
|
We could use:
|
||
|
|
||
|
r57 = add -2, -1
|
||
|
|
||
|
My guess is that most SSA references are to recent values (especially if
|
||
|
they correspond to expressions like (x+y*z+p*q/ ...), so the negative
|
||
|
numbers would tend to stay small, even at the end of the procedure (where
|
||
|
the implicit register destination number could be quite large). Of course
|
||
|
the negative sign is reduntant, so you would be storing small integers
|
||
|
almost all of the time, and 5-6 bits worth of register number would be
|
||
|
plenty for most cases...
|
||
|
|
||
|
What do you think?
|
||
|
|
||
|
-Chris
|
||
|
|