README.txt revision 0d913eaaed3202231e8a332b12153c4b7a5f43c5
1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectTo-do 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project----- 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project* Enable LSR for V8. 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project* Keep the address of the constant pool in a register instead of forming its 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project address all of the time. 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project* We can fold small constant offsets into the %hi/%lo references to constant 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pool addresses as well. 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project* When in V9 mode, register allocate %icc[0-3]. 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project* Emit the 'Branch on Integer Register with Prediction' instructions. It's 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project not clear how to write a pattern for this though: 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectfloat %t1(int %a, int* %p) { 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project %C = seteq int %a, 0 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project br bool %C, label %T, label %F 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectT: 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project store int 123, int* %p 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project br label %F 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectF: 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret float undef 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectcodegens to this: 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectt1: 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project save -96, %o6, %o6 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project1) subcc %i0, 0, %l0 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project1) bne .LBBt1_2 ! F 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.LBBt1_1: ! T 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project or %g0, 123, %l0 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project st %l0, [%i1] 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.LBBt1_2: ! F 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project restore %g0, %g0, %g0 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project retl 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nop 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project1) should be replaced with a brz in V9 mode. 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project* Same as above, but emit conditional move on register zero (p192) in V9 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mode. Testcase: 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint %t1(int %a, int %b) { 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project %C = seteq int %a, 0 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project %D = select bool %C, int %a, int %b 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret int %D 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project* Emit MULX/[SU]DIVX instructions in V9 mode instead of fiddling 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project with the Y register, if they are faster. 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project* Codegen bswap(load)/store(bswap) -> load/store ASI 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project* Implement frame pointer elimination, e.g. eliminate save/restore for 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project leaf fns. 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project* Fill delay slots 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project