|  |  | 
|  | To-do | 
|  | ----- | 
|  |  | 
|  | * Keep the address of the constant pool in a register instead of forming its | 
|  | address all of the time. | 
|  | * We can fold small constant offsets into the %hi/%lo references to constant | 
|  | pool addresses as well. | 
|  | * When in V9 mode, register allocate %icc[0-3]. | 
|  | * Add support for isel'ing UMUL_LOHI instead of marking it as Expand. | 
|  | * Emit the 'Branch on Integer Register with Prediction' instructions.  It's | 
|  | not clear how to write a pattern for this though: | 
|  |  | 
|  | float %t1(int %a, int* %p) { | 
|  | %C = seteq int %a, 0 | 
|  | br bool %C, label %T, label %F | 
|  | T: | 
|  | store int 123, int* %p | 
|  | br label %F | 
|  | F: | 
|  | ret float undef | 
|  | } | 
|  |  | 
|  | codegens to this: | 
|  |  | 
|  | t1: | 
|  | save -96, %o6, %o6 | 
|  | 1)      subcc %i0, 0, %l0 | 
|  | 1)      bne .LBBt1_2    ! F | 
|  | nop | 
|  | .LBBt1_1:       ! T | 
|  | or %g0, 123, %l0 | 
|  | st %l0, [%i1] | 
|  | .LBBt1_2:       ! F | 
|  | restore %g0, %g0, %g0 | 
|  | retl | 
|  | nop | 
|  |  | 
|  | 1) should be replaced with a brz in V9 mode. | 
|  |  | 
|  | * Same as above, but emit conditional move on register zero (p192) in V9 | 
|  | mode.  Testcase: | 
|  |  | 
|  | int %t1(int %a, int %b) { | 
|  | %C = seteq int %a, 0 | 
|  | %D = select bool %C, int %a, int %b | 
|  | ret int %D | 
|  | } | 
|  |  | 
|  | * Emit MULX/[SU]DIVX instructions in V9 mode instead of fiddling | 
|  | with the Y register, if they are faster. | 
|  |  | 
|  | * Codegen bswap(load)/store(bswap) -> load/store ASI | 
|  |  | 
|  | * Implement frame pointer elimination, e.g. eliminate save/restore for | 
|  | leaf fns. | 
|  | * Fill delay slots | 
|  |  | 
|  | * Implement JIT support |