xenia/TODO.md

88 lines
1.7 KiB
Markdown
Raw Normal View History

2013-01-22 08:54:49 +00:00
## Instructions
```
stbu
lwzu
addx
addix
addic
addzex
subfx
subfex
subficx
mulli
mullwx
divwux
andix
orx
rlwinmx
rlwimix
2013-01-22 08:54:49 +00:00
rldiclx
extsbx
slwx
srawix
2013-01-22 21:15:02 +00:00
# can be no-op, or @llvm.prefetch
2013-01-22 08:54:49 +00:00
dcbt
dcbtst
2013-01-22 21:15:02 +00:00
twi # @llvm.debugtrap ?
2013-01-22 08:54:49 +00:00
```
2013-01-22 21:15:02 +00:00
Overflow bits can be set via the intrinsics:
`llvm.sadd.with.overflow`/etc
It'd be nice to avoid doing this unless absolutely required. The SDB could
walk functions to see if they ever read or branch on the SO bit of things.
`@llvm.expect.i32`/`.i64` could be used with the BH bits in branches to
indicate expected values.
2013-01-22 08:54:49 +00:00
## Codegen
2013-01-22 18:50:20 +00:00
### Calling convention
Experiment with fastcc? May need typedef fn ptrs to call into the JITted code.
### Function calling convention analysis
2013-01-22 21:15:02 +00:00
Track functions to see if they follow the standard calling convention.
This could use the hints from the EH data in the XEX. Looking specifically for
stack prolog/epilog and branches to LR.
2013-01-22 08:54:49 +00:00
Benefits:
- Optimized prolog/epilog generation.
- Local variables for stack storage (alloca/etc) instead of user memory.
- Better return detection and fast returns.
### Indirect branches (ctr/lr)
2013-01-22 08:54:49 +00:00
2013-01-22 18:50:20 +00:00
Return path:
- In SDB see if the function follows the 'return' semantic:
- mfspr LR / mtspr LR/CTR / bcctr -- at end?
- In codegen add a BB that is just return.
- If a block 'returns', branch to the return BB.
Tail calls:
- If in a call BB check next BB.
- If next is a return, optimize to a tail call.
2013-01-22 08:54:49 +00:00
Fast path:
- Every time LR would be stashed, add the value of LR (some NIA) to a lookup
table.
- When doing an indirect branch first lookup the address in the table.
- If not found, slow path, else jump.
Slow path:
- Call out and do an SDB lookup.
- If found, return, add to lookup table, and jump.
- If not found, need new function codegen!
```
## Debugging