#8632 closed patch
WinCE Port: ARM version of PocketPCHalf
Reported by: | SF/robinwatts | Owned by: | SF/knakos |
---|---|---|---|
Priority: | normal | Component: | Port: WinCE |
Version: | Keywords: | ||
Cc: | Game: |
Description
This patch offers an ARM assembly version of the PocketPCHalf scaler. This scaler is used for "The Curse of Monkey Island" to take a 640x480 screen (in either 565 or 555 format) down to 320x240 by averaging groups of 4 pixels together.
The ARM version is almost exactly the same as the C version, except it gets the rounding of pixel components correct.
Ticket imported from: #1696852. Ticket imported from: patches/737.
Attachments (2)
Change History (9)
by , 18 years ago
comment:1 by , 18 years ago
Very good. Rounding should look good as well. Why not try unrolling it a couple of times for extra speed? Do you pass any special optinos to 'as' in your makefile?
comment:2 by , 18 years ago
Owner: | set to |
---|
comment:3 by , 18 years ago
The inner 'per destination pixel' core is 19 cycles, so unrolling can at best approach 19 cycles per pixel.
On XScales, the branch prediction stuff should mean that branches cost just a single cycle, so the inner loop works out is 21 cycles. Unrolling once would get that down to 20, at the cost of more complex logic. Doesn't seem like enough of a win to justify the additional complexity and code size to me, but I'll do it if you want.
For non XScales, we lose the branch prediction stuff, which means we have to figure on branches costing 5 cycles or so. Even so, we should be within 26% or so of optimal with this code (assuming we are operating entirely within the D-cache). I'll have a play with an unrolled version with this in mind to see if savings can be made.
No special options passed to as.
by , 18 years ago
New PocketPCHalf implementation (unrolled), plus C changes to call it
comment:4 by , 18 years ago
Here is a new version, with unrolled middle loop. Should be 19.5 cycles per pixel on XScale, 20.5 on non XScale.
File Added: diff
comment:5 by , 18 years ago
Status: | new → closed |
---|
comment:6 by , 18 years ago
Excellent work Robin. Committed in the trunk in rev. 26442.
* Be aware that currently the curse of monkey island has a memory leak which leads to a crash soon in the wince version. This will be taken care of shortly by the dev. team.
comment:7 by , 6 years ago
Component: | → Port: WinCE |
---|
New ARM PocketPCHalf implementation, plus C changes to call it