|  | 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 | 
|  |  |