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