-SparcV8 backend skeleton
-------------------------
-
-This directory houses a 32-bit SPARC V8 backend employing a expander-based
-instruction selector. It is not yet functionally complete. Watch
-this space for more news coming soon!
-
-Current expected test failures
-------------------------------
-
-SingleSource/Benchmarks:
-fldry heapsort objinst Oscar Queens chomp misr pi whetstone
-
-SingleSource/UnitTests:
-C++Catch SimpleC++Test 2002-05-02-ArgumentTest 2002-05-02-ManyArguments
-2002-05-03-NotTest 2002-05-19-DivTest 2002-10-12-StructureArgs
-2002-10-12-StructureArgsSimple 2003-05-07-VarArgs 2003-05-26-Shorts
-2003-05-31-CastToBool 2003-05-31-LongShifts 2003-07-09-LoadShorts
-2003-07-09-SignedArgs 2003-08-05-CastFPToUint 2003-08-11-VaListArg
-StructModifyTest
-
To-do
-----
-* support calling functions with more than 6 args
-* support 64-bit integer (long, ulong) arguments to functions
- - use libc procedures instead of open-coding for:
- __div64 __mul64 __rem64 __udiv64 __umul64 __urem64
-* support setcc on longs
-* support basic binary operations on longs
-* support casting <=32-bit integers, bools to long
-* support casting 64-bit integers to FP types
-
-$Date$
+* 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].
+* 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