My apologies for posting so much code here. Please let me know if this frowned upon.
I wanted to start a new thread that is related to my previous "How can I profile basic functions for the RP2040?" thread.
This time, I am drawing tiles instead of sprites. In my other topic, Adam was able to drastically help me speed up my sprite drawing routine. I went from 14 sprites per scanline to 24.
I also have a tile drawing routine that is almost identical to the sprite drawing. So I assumed putting the same logic there should speed that up as well. But it actually had the opposite effect!
The difference between sprites and tiles is that the sprites can move freely while the tiles are fixed on 16 pixel boundaries. Also, tiles do not check for color 0 so they should be even faster.
Below you will see three different versions along with their assembled code.
I would love to know why the sprite trick for optimizing didn't work for this tile code.
The odd part is that "Optimized 2" is ALMOST as fast as the original but still larger.
Thanks for any feedback!
Original Code
Optimized version 1
Optimized version 2
Original DIS
Optimized 1 DIS
Optimized 2 DIS
I wanted to start a new thread that is related to my previous "How can I profile basic functions for the RP2040?" thread.
This time, I am drawing tiles instead of sprites. In my other topic, Adam was able to drastically help me speed up my sprite drawing routine. I went from 14 sprites per scanline to 24.
I also have a tile drawing routine that is almost identical to the sprite drawing. So I assumed putting the same logic there should speed that up as well. But it actually had the opposite effect!
The difference between sprites and tiles is that the sprites can move freely while the tiles are fixed on 16 pixel boundaries. Also, tiles do not check for color 0 so they should be even faster.
Below you will see three different versions along with their assembled code.
I would love to know why the sprite trick for optimizing didn't work for this tile code.
The odd part is that "Optimized 2" is ALMOST as fast as the original but still larger.
Thanks for any feedback!
Original Code
Code:
void__no_inline_not_in_flash_func(drawMap)(uint16_t screenWidth, uint16_t screenHeight, uint16_t raster_y, uint16_t pixels[screenWidth]) { if (raster_y >= screenHeight) return; int map_row_offset = (raster_y / TILE_HEIGHT) * 20; int line_offset = raster_y % TILE_HEIGHT; for (int x = 0; x < 20; x++) { uint8_t tile_number = map[map_row_offset + x]; uint8_t tile_palette = map_tile_palettes[map_row_offset + x]; uint32_t line = tiles[tile_number][line_offset]; uint8_t c0 = ((line & 0b11000000000000000000000000000000) >> 30); uint8_t c1 = ((line & 0b00110000000000000000000000000000) >> 28); uint8_t c2 = ((line & 0b00001100000000000000000000000000) >> 26); uint8_t c3 = ((line & 0b00000011000000000000000000000000) >> 24); uint8_t c4 = ((line & 0b00000000110000000000000000000000) >> 22); uint8_t c5 = ((line & 0b00000000001100000000000000000000) >> 20); uint8_t c6 = ((line & 0b00000000000011000000000000000000) >> 18); uint8_t c7 = ((line & 0b00000000000000110000000000000000) >> 16); uint8_t c8 = ((line & 0b00000000000000001100000000000000) >> 14); uint8_t c9 = ((line & 0b00000000000000000011000000000000) >> 12); uint8_t ca = ((line & 0b00000000000000000000110000000000) >> 10); uint8_t cb = ((line & 0b00000000000000000000001100000000) >> 8); uint8_t cc = ((line & 0b00000000000000000000000011000000) >> 6); uint8_t cd = ((line & 0b00000000000000000000000000110000) >> 4); uint8_t ce = ((line & 0b00000000000000000000000000001100) >> 2); uint8_t cf = ((line & 0b00000000000000000000000000000011) >> 0); pixels[x * TILE_WIDTH] = tile_palettes[tile_palette].color[c0]; pixels[x * TILE_WIDTH + 1] = tile_palettes[tile_palette].color[c1]; pixels[x * TILE_WIDTH + 2] = tile_palettes[tile_palette].color[c2]; pixels[x * TILE_WIDTH + 3] = tile_palettes[tile_palette].color[c3]; pixels[x * TILE_WIDTH + 4] = tile_palettes[tile_palette].color[c4]; pixels[x * TILE_WIDTH + 5] = tile_palettes[tile_palette].color[c5]; pixels[x * TILE_WIDTH + 6] = tile_palettes[tile_palette].color[c6]; pixels[x * TILE_WIDTH + 7] = tile_palettes[tile_palette].color[c7]; pixels[x * TILE_WIDTH + 8] = tile_palettes[tile_palette].color[c8]; pixels[x * TILE_WIDTH + 9] = tile_palettes[tile_palette].color[c9]; pixels[x * TILE_WIDTH + 10] = tile_palettes[tile_palette].color[ca]; pixels[x * TILE_WIDTH + 11] = tile_palettes[tile_palette].color[cb]; pixels[x * TILE_WIDTH + 12] = tile_palettes[tile_palette].color[cc]; pixels[x * TILE_WIDTH + 13] = tile_palettes[tile_palette].color[cd]; pixels[x * TILE_WIDTH + 14] = tile_palettes[tile_palette].color[ce]; pixels[x * TILE_WIDTH + 15] = tile_palettes[tile_palette].color[cf]; }}
Optimized version 1
Code:
void__no_inline_not_in_flash_func(drawMapOptimized1)(uint16_t screenWidth, uint16_t screenHeight, uint16_t raster_y, uint16_t pixels[screenWidth]) { if (raster_y >= screenHeight) return; int map_row_offset = (raster_y / TILE_HEIGHT) * 20; int line_offset = raster_y % TILE_HEIGHT; for (int x = 0; x < 20; x++) { uint8_t tile_number = map[map_row_offset + x]; uint16_t map_tile_palette_idx = map_tile_palettes[map_row_offset + x]; uint32_t line = tiles[tile_number][line_offset]; // Pre-calculate the highest pixel address (rightmost) in pixels. // Can just decrement this pointer rather than recalculating for each of the 16 pixels. uint16_t *pixel = &pixels[x * TILE_WIDTH + 15]; // Pre-calculate the palette which is appropriate for this sprite. TilePalette *palette = &tile_palettes[map_tile_palette_idx]; // Perform the color extraction from line and the pixel update for each pixel at the same time to // reduce register pressure. This saves extra memory reads/writes to recover pixel color values from the // stack. // I updated them in reverse order to simplify the calculation down to right shift by 2-bits and masking off // the lower 2-bits (same operation for each pixel). // Note, there is no color 0 checking here since a tile will draw color 0. uint8_t cf = line & 0b11; *pixel = palette->color[cf]; line >>= 2; pixel--; uint8_t ce = line & 0b11; *pixel = palette->color[ce]; line >>= 2; pixel--; uint8_t cd = line & 0b11; *pixel = palette->color[cd]; line >>= 2; pixel--; uint8_t cc = line & 0b11; *pixel = palette->color[cc]; line >>= 2; pixel--; uint8_t cb = line & 0b11; *pixel = palette->color[cb]; line >>= 2; pixel--; uint8_t ca = line & 0b11; *pixel = palette->color[ca]; line >>= 2; pixel--; uint8_t c9 = line & 0b11; *pixel = palette->color[c9]; line >>= 2; pixel--; uint8_t c8 = line & 0b11; *pixel = palette->color[c8]; line >>= 2; pixel--; uint8_t c7 = line & 0b11; *pixel = palette->color[c7]; line >>= 2; pixel--; uint8_t c6 = line & 0b11; *pixel = palette->color[c6]; line >>= 2; pixel--; uint8_t c5 = line & 0b11; *pixel = palette->color[c5]; line >>= 2; pixel--; uint8_t c4 = line & 0b11; *pixel = palette->color[c4]; line >>= 2; pixel--; uint8_t c3 = line & 0b11; *pixel = palette->color[c3]; line >>= 2; pixel--; uint8_t c2 = line & 0b11; *pixel = palette->color[c2]; line >>= 2; pixel--; uint8_t c1 = line & 0b11; *pixel = palette->color[c1]; line >>= 2; pixel--; uint8_t c0 = line & 0b11; *pixel = palette->color[c0]; }}
Optimized version 2
Code:
void__no_inline_not_in_flash_func(drawMapOptimized2)(uint16_t screenWidth, uint16_t screenHeight, uint16_t raster_y, uint16_t pixels[screenWidth]) { if (raster_y >= screenHeight) return; int map_row_offset = (raster_y / TILE_HEIGHT) * 20; int line_offset = raster_y % TILE_HEIGHT; for (int x = 0; x < 20; x++) { uint8_t tile_number = map[map_row_offset + x]; uint8_t tile_palette = map_tile_palettes[map_row_offset + x]; uint32_t line = tiles[tile_number][line_offset]; uint8_t c0 = ((line & 0b11000000000000000000000000000000) >> 30); uint8_t c1 = ((line & 0b00110000000000000000000000000000) >> 28); uint8_t c2 = ((line & 0b00001100000000000000000000000000) >> 26); uint8_t c3 = ((line & 0b00000011000000000000000000000000) >> 24); uint8_t c4 = ((line & 0b00000000110000000000000000000000) >> 22); uint8_t c5 = ((line & 0b00000000001100000000000000000000) >> 20); uint8_t c6 = ((line & 0b00000000000011000000000000000000) >> 18); uint8_t c7 = ((line & 0b00000000000000110000000000000000) >> 16); uint8_t c8 = ((line & 0b00000000000000001100000000000000) >> 14); uint8_t c9 = ((line & 0b00000000000000000011000000000000) >> 12); uint8_t ca = ((line & 0b00000000000000000000110000000000) >> 10); uint8_t cb = ((line & 0b00000000000000000000001100000000) >> 8); uint8_t cc = ((line & 0b00000000000000000000000011000000) >> 6); uint8_t cd = ((line & 0b00000000000000000000000000110000) >> 4); uint8_t ce = ((line & 0b00000000000000000000000000001100) >> 2); uint8_t cf = ((line & 0b00000000000000000000000000000011) >> 0); uint16_t *pixel = &pixels[x * TILE_WIDTH + 15]; *pixel = tile_palettes[tile_palette].color[cf]; pixel--; *pixel = tile_palettes[tile_palette].color[ce]; pixel--; *pixel = tile_palettes[tile_palette].color[cd]; pixel--; *pixel = tile_palettes[tile_palette].color[cc]; pixel--; *pixel = tile_palettes[tile_palette].color[cb]; pixel--; *pixel = tile_palettes[tile_palette].color[ca]; pixel--; *pixel = tile_palettes[tile_palette].color[c9]; pixel--; *pixel = tile_palettes[tile_palette].color[c8]; pixel--; *pixel = tile_palettes[tile_palette].color[c7]; pixel--; *pixel = tile_palettes[tile_palette].color[c6]; pixel--; *pixel = tile_palettes[tile_palette].color[c5]; pixel--; *pixel = tile_palettes[tile_palette].color[c4]; pixel--; *pixel = tile_palettes[tile_palette].color[c3]; pixel--; *pixel = tile_palettes[tile_palette].color[c2]; pixel--; *pixel = tile_palettes[tile_palette].color[c1]; pixel--; *pixel = tile_palettes[tile_palette].color[c0]; }}
Original DIS
Code:
10000c00 <drawMap>:10000c00:b5f0 push{r4, r5, r6, r7, lr}10000c02:46de movlr, fp10000c04:4657 movr7, sl10000c06:464e movr6, r910000c08:4645 movr5, r810000c0a:b5e0 push{r5, r6, r7, lr}10000c0c:b08d subsp, #52@ 0x3410000c0e:469a movsl, r310000c10:428a cmpr2, r110000c12:d300 bcc.n10000c16 <drawMap+0x16>10000c14:e0b9 b.n10000d8a <drawMap+0x18a>10000c16:0911 lsrsr1, r2, #410000c18:008b lslsr3, r1, #210000c1a:185b addsr3, r3, r110000c1c:009b lslsr3, r3, #210000c1e:930b strr3, [sp, #44]@ 0x2c10000c20:230f movsr3, #1510000c22:4013 andsr3, r210000c24:930a strr3, [sp, #40]@ 0x2810000c26:2300 movsr3, #010000c28:4651 movr1, sl10000c2a:469a movsl, r310000c2c:e0a9 b.n10000d82 <drawMap+0x182>10000c2e:9b0b ldrr3, [sp, #44]@ 0x2c10000c30:4453 addr3, sl10000c32:4a59 ldrr2, [pc, #356]@ (10000d98 <drawMap+0x198>)10000c34:5cd2 ldrbr2, [r2, r3]10000c36:4859 ldrr0, [pc, #356]@ (10000d9c <drawMap+0x19c>)10000c38:5cc3 ldrbr3, [r0, r3]10000c3a:4859 ldrr0, [pc, #356]@ (10000da0 <drawMap+0x1a0>)10000c3c:0112 lslsr2, r2, #410000c3e:9c0a ldrr4, [sp, #40]@ 0x2810000c40:46a4 movip, r410000c42:4462 addr2, ip10000c44:0092 lslsr2, r2, #210000c46:5812 ldrr2, [r2, r0]10000c48:0f90 lsrsr0, r2, #3010000c4a:4681 movr9, r010000c4c:0f14 lsrsr4, r2, #2810000c4e:2003 movsr0, #310000c50:4004 andsr4, r010000c52:46a0 movr8, r410000c54:0e94 lsrsr4, r2, #2610000c56:4004 andsr4, r010000c58:46a4 movip, r410000c5a:0e17 lsrsr7, r2, #2410000c5c:4007 andsr7, r010000c5e:0d96 lsrsr6, r2, #2210000c60:4006 andsr6, r010000c62:9600 strr6, [sp, #0]10000c64:0d15 lsrsr5, r2, #2010000c66:4005 andsr5, r010000c68:0c94 lsrsr4, r2, #1810000c6a:4004 andsr4, r010000c6c:9401 strr4, [sp, #4]10000c6e:0c14 lsrsr4, r2, #1610000c70:4004 andsr4, r010000c72:9402 strr4, [sp, #8]10000c74:0b94 lsrsr4, r2, #1410000c76:4004 andsr4, r010000c78:9403 strr4, [sp, #12]10000c7a:0b14 lsrsr4, r2, #1210000c7c:4004 andsr4, r010000c7e:9404 strr4, [sp, #16]10000c80:0a94 lsrsr4, r2, #1010000c82:4004 andsr4, r010000c84:9405 strr4, [sp, #20]10000c86:0a14 lsrsr4, r2, #810000c88:4004 andsr4, r010000c8a:9406 strr4, [sp, #24]10000c8c:0994 lsrsr4, r2, #610000c8e:4004 andsr4, r010000c90:9407 strr4, [sp, #28]10000c92:0914 lsrsr4, r2, #410000c94:4004 andsr4, r010000c96:9408 strr4, [sp, #32]10000c98:0894 lsrsr4, r2, #210000c9a:4004 andsr4, r010000c9c:46a3 movfp, r410000c9e:4002 andsr2, r010000ca0:9209 strr2, [sp, #36]@ 0x2410000ca2:4650 movr0, sl10000ca4:0140 lslsr0, r0, #510000ca6:4a3f ldrr2, [pc, #252]@ (10000da4 <drawMap+0x1a4>)10000ca8:009b lslsr3, r3, #210000caa:4499 addr9, r310000cac:464c movr4, r910000cae:0064 lslsr4, r4, #110000cb0:5aa4 ldrhr4, [r4, r2]10000cb2:520c strhr4, [r1, r0]10000cb4:1c84 addsr4, r0, #210000cb6:46a1 movr9, r410000cb8:4498 addr8, r310000cba:4644 movr4, r810000cbc:0064 lslsr4, r4, #110000cbe:5aa4 ldrhr4, [r4, r2]10000cc0:46a0 movr8, r410000cc2:464c movr4, r910000cc4:4646 movr6, r810000cc6:530e strhr6, [r1, r4]10000cc8:1d06 addsr6, r0, #410000cca:46b0 movr8, r610000ccc:449c addip, r310000cce:4666 movr6, ip10000cd0:0076 lslsr6, r6, #110000cd2:5ab6 ldrhr6, [r6, r2]10000cd4:46b4 movip, r610000cd6:4646 movr6, r810000cd8:4664 movr4, ip10000cda:538c strhr4, [r1, r6]10000cdc:1d86 addsr6, r0, #610000cde:19df addsr7, r3, r710000ce0:007f lslsr7, r7, #110000ce2:5abf ldrhr7, [r7, r2]10000ce4:538f strhr7, [r1, r6]10000ce6:0007 movsr7, r010000ce8:3708 addsr7, #810000cea:9e00 ldrr6, [sp, #0]10000cec:199e addsr6, r3, r610000cee:0076 lslsr6, r6, #110000cf0:5ab6 ldrhr6, [r6, r2]10000cf2:53ce strhr6, [r1, r7]10000cf4:0006 movsr6, r010000cf6:360a addsr6, #1010000cf8:195d addsr5, r3, r510000cfa:006d lslsr5, r5, #110000cfc:5aad ldrhr5, [r5, r2]10000cfe:538d strhr5, [r1, r6]10000d00:3602 addsr6, #210000d02:9c01 ldrr4, [sp, #4]10000d04:191c addsr4, r3, r410000d06:0064 lslsr4, r4, #110000d08:5aa4 ldrhr4, [r4, r2]10000d0a:538c strhr4, [r1, r6]10000d0c:3602 addsr6, #210000d0e:9d02 ldrr5, [sp, #8]10000d10:195d addsr5, r3, r510000d12:006d lslsr5, r5, #110000d14:5aad ldrhr5, [r5, r2]10000d16:538d strhr5, [r1, r6]10000d18:3602 addsr6, #210000d1a:9d03 ldrr5, [sp, #12]10000d1c:195d addsr5, r3, r510000d1e:006d lslsr5, r5, #110000d20:5aad ldrhr5, [r5, r2]10000d22:538d strhr5, [r1, r6]10000d24:3602 addsr6, #210000d26:9d04 ldrr5, [sp, #16]10000d28:195d addsr5, r3, r510000d2a:006d lslsr5, r5, #110000d2c:5aad ldrhr5, [r5, r2]10000d2e:538d strhr5, [r1, r6]10000d30:3602 addsr6, #210000d32:9d05 ldrr5, [sp, #20]10000d34:195d addsr5, r3, r510000d36:006d lslsr5, r5, #110000d38:5aad ldrhr5, [r5, r2]10000d3a:538d strhr5, [r1, r6]10000d3c:3602 addsr6, #210000d3e:9d06 ldrr5, [sp, #24]10000d40:195d addsr5, r3, r510000d42:006d lslsr5, r5, #110000d44:5aad ldrhr5, [r5, r2]10000d46:538d strhr5, [r1, r6]10000d48:0005 movsr5, r010000d4a:3518 addsr5, #2410000d4c:9c07 ldrr4, [sp, #28]10000d4e:191c addsr4, r3, r410000d50:0064 lslsr4, r4, #110000d52:5aa4 ldrhr4, [r4, r2]10000d54:534c strhr4, [r1, r5]10000d56:3502 addsr5, #210000d58:9c08 ldrr4, [sp, #32]10000d5a:191c addsr4, r3, r410000d5c:0064 lslsr4, r4, #110000d5e:5aa4 ldrhr4, [r4, r2]10000d60:534c strhr4, [r1, r5]10000d62:3502 addsr5, #210000d64:465e movr6, fp10000d66:199c addsr4, r3, r610000d68:0064 lslsr4, r4, #110000d6a:5aa4 ldrhr4, [r4, r2]10000d6c:534c strhr4, [r1, r5]10000d6e:301e addsr0, #3010000d70:9c09 ldrr4, [sp, #36]@ 0x2410000d72:46a4 movip, r410000d74:4463 addr3, ip10000d76:005b lslsr3, r3, #110000d78:5a9b ldrhr3, [r3, r2]10000d7a:520b strhr3, [r1, r0]10000d7c:2301 movsr3, #110000d7e:469c movip, r310000d80:44e2 addsl, ip10000d82:4653 movr3, sl10000d84:2b13 cmpr3, #1910000d86:dc00 bgt.n10000d8a <drawMap+0x18a>10000d88:e751 b.n10000c2e <drawMap+0x2e>10000d8a:b00d addsp, #52@ 0x3410000d8c:bcf0 pop{r4, r5, r6, r7}10000d8e:46bb movfp, r710000d90:46b2 movsl, r610000d92:46a9 movr9, r510000d94:46a0 movr8, r410000d96:bdf0 pop{r4, r5, r6, r7, pc}10000d98:20000604 .word0x2000060410000d9c:200004d8 .word0x200004d810000da0:200007f0 .word0x200007f010000da4:20000730 .word0x20000730
Optimized 1 DIS
Code:
10000c00 <drawMap>:10000c00:b5f0 push{r4, r5, r6, r7, lr}10000c02:46de movlr, fp10000c04:4657 movr7, sl10000c06:464e movr6, r910000c08:4645 movr5, r810000c0a:b5e0 push{r5, r6, r7, lr}10000c0c:469a movsl, r310000c0e:428a cmpr2, r110000c10:d300 bcc.n10000c14 <drawMap+0x14>10000c12:e0f3 b.n10000dfc <drawMap+0x1fc>10000c14:0911 lsrsr1, r2, #410000c16:008b lslsr3, r1, #210000c18:185b addsr3, r3, r110000c1a:009b lslsr3, r3, #210000c1c:469b movfp, r310000c1e:210f movsr1, #1510000c20:4011 andsr1, r210000c22:468c movip, r110000c24:2700 movsr7, #010000c26:e0e6 b.n10000df6 <drawMap+0x1f6>10000c28:465b movr3, fp10000c2a:18f8 addsr0, r7, r310000c2c:4976 ldrr1, [pc, #472]@ (10000e08 <drawMap+0x208>)10000c2e:5c09 ldrbr1, [r1, r0]10000c30:4c76 ldrr4, [pc, #472]@ (10000e0c <drawMap+0x20c>)10000c32:5c20 ldrbr0, [r4, r0]10000c34:4c76 ldrr4, [pc, #472]@ (10000e10 <drawMap+0x210>)10000c36:0109 lslsr1, r1, #410000c38:4461 addr1, ip10000c3a:0089 lslsr1, r1, #210000c3c:590e ldrr6, [r1, r4]10000c3e:0179 lslsr1, r7, #510000c40:311e addsr1, #3010000c42:4451 addr1, sl10000c44:2503 movsr5, #310000c46:0034 movsr4, r610000c48:402c andsr4, r510000c4a:46a0 movr8, r410000c4c:4c71 ldrr4, [pc, #452]@ (10000e14 <drawMap+0x214>)10000c4e:0080 lslsr0, r0, #210000c50:4480 addr8, r010000c52:4643 movr3, r810000c54:005b lslsr3, r3, #110000c56:5b1b ldrhr3, [r3, r4]10000c58:800b strhr3, [r1, #0]10000c5a:08b3 lsrsr3, r6, #210000c5c:402b andsr3, r510000c5e:4698 movr8, r310000c60:4480 addr8, r010000c62:4643 movr3, r810000c64:005b lslsr3, r3, #110000c66:5b1b ldrhr3, [r3, r4]10000c68:4699 movr9, r310000c6a:1e8b subsr3, r1, #210000c6c:464a movr2, r910000c6e:801a strhr2, [r3, #0]10000c70:0933 lsrsr3, r6, #410000c72:402b andsr3, r510000c74:4698 movr8, r310000c76:4480 addr8, r010000c78:4643 movr3, r810000c7a:005b lslsr3, r3, #110000c7c:5b1b ldrhr3, [r3, r4]10000c7e:4699 movr9, r310000c80:1f0b subsr3, r1, #410000c82:464a movr2, r910000c84:801a strhr2, [r3, #0]10000c86:09b3 lsrsr3, r6, #610000c88:402b andsr3, r510000c8a:4698 movr8, r310000c8c:4480 addr8, r010000c8e:4643 movr3, r810000c90:005b lslsr3, r3, #110000c92:5b1b ldrhr3, [r3, r4]10000c94:4699 movr9, r310000c96:1f8b subsr3, r1, #610000c98:464a movr2, r910000c9a:801a strhr2, [r3, #0]10000c9c:0a33 lsrsr3, r6, #810000c9e:402b andsr3, r510000ca0:4698 movr8, r310000ca2:4480 addr8, r010000ca4:4643 movr3, r810000ca6:005b lslsr3, r3, #110000ca8:5b1b ldrhr3, [r3, r4]10000caa:4699 movr9, r310000cac:2308 movsr3, #810000cae:425b negsr3, r310000cb0:4698 movr8, r310000cb2:4488 addr8, r110000cb4:4643 movr3, r810000cb6:464a movr2, r910000cb8:801a strhr2, [r3, #0]10000cba:0ab3 lsrsr3, r6, #1010000cbc:402b andsr3, r510000cbe:4698 movr8, r310000cc0:4480 addr8, r010000cc2:4643 movr3, r810000cc4:005b lslsr3, r3, #110000cc6:5b1b ldrhr3, [r3, r4]10000cc8:4699 movr9, r310000cca:230a movsr3, #1010000ccc:425b negsr3, r310000cce:4698 movr8, r310000cd0:4488 addr8, r110000cd2:4643 movr3, r810000cd4:464a movr2, r910000cd6:801a strhr2, [r3, #0]10000cd8:0b33 lsrsr3, r6, #1210000cda:402b andsr3, r510000cdc:4698 movr8, r310000cde:4480 addr8, r010000ce0:4643 movr3, r810000ce2:005b lslsr3, r3, #110000ce4:5b1b ldrhr3, [r3, r4]10000ce6:4699 movr9, r310000ce8:230c movsr3, #1210000cea:425b negsr3, r310000cec:4698 movr8, r310000cee:4488 addr8, r110000cf0:4643 movr3, r810000cf2:464a movr2, r910000cf4:801a strhr2, [r3, #0]10000cf6:0bb3 lsrsr3, r6, #1410000cf8:402b andsr3, r510000cfa:4698 movr8, r310000cfc:4480 addr8, r010000cfe:4643 movr3, r810000d00:005b lslsr3, r3, #110000d02:5b1b ldrhr3, [r3, r4]10000d04:4699 movr9, r310000d06:230e movsr3, #1410000d08:425b negsr3, r310000d0a:4698 movr8, r310000d0c:4488 addr8, r110000d0e:4643 movr3, r810000d10:464a movr2, r910000d12:801a strhr2, [r3, #0]10000d14:0c33 lsrsr3, r6, #1610000d16:402b andsr3, r510000d18:4698 movr8, r310000d1a:4480 addr8, r010000d1c:4643 movr3, r810000d1e:005b lslsr3, r3, #110000d20:5b1b ldrhr3, [r3, r4]10000d22:4699 movr9, r310000d24:2310 movsr3, #1610000d26:425b negsr3, r310000d28:4698 movr8, r310000d2a:4488 addr8, r110000d2c:4643 movr3, r810000d2e:464a movr2, r910000d30:801a strhr2, [r3, #0]10000d32:0cb3 lsrsr3, r6, #1810000d34:402b andsr3, r510000d36:4698 movr8, r310000d38:4480 addr8, r010000d3a:4643 movr3, r810000d3c:005b lslsr3, r3, #110000d3e:5b1b ldrhr3, [r3, r4]10000d40:4699 movr9, r310000d42:2312 movsr3, #1810000d44:425b negsr3, r310000d46:4698 movr8, r310000d48:4488 addr8, r110000d4a:4643 movr3, r810000d4c:464a movr2, r910000d4e:801a strhr2, [r3, #0]10000d50:0d33 lsrsr3, r6, #2010000d52:402b andsr3, r510000d54:4698 movr8, r310000d56:4480 addr8, r010000d58:4643 movr3, r810000d5a:005b lslsr3, r3, #110000d5c:5b1b ldrhr3, [r3, r4]10000d5e:4699 movr9, r310000d60:2314 movsr3, #2010000d62:425b negsr3, r310000d64:4698 movr8, r310000d66:4488 addr8, r110000d68:4643 movr3, r810000d6a:464a movr2, r910000d6c:801a strhr2, [r3, #0]10000d6e:0db3 lsrsr3, r6, #2210000d70:402b andsr3, r510000d72:4698 movr8, r310000d74:4480 addr8, r010000d76:4643 movr3, r810000d78:005b lslsr3, r3, #110000d7a:5b1b ldrhr3, [r3, r4]10000d7c:4699 movr9, r310000d7e:2316 movsr3, #2210000d80:425b negsr3, r310000d82:4698 movr8, r310000d84:4488 addr8, r110000d86:4643 movr3, r810000d88:464a movr2, r910000d8a:801a strhr2, [r3, #0]10000d8c:0e33 lsrsr3, r6, #2410000d8e:402b andsr3, r510000d90:4698 movr8, r310000d92:4480 addr8, r010000d94:4643 movr3, r810000d96:005b lslsr3, r3, #110000d98:5b1b ldrhr3, [r3, r4]10000d9a:4699 movr9, r310000d9c:2318 movsr3, #2410000d9e:425b negsr3, r310000da0:4698 movr8, r310000da2:4488 addr8, r110000da4:4643 movr3, r810000da6:464a movr2, r910000da8:801a strhr2, [r3, #0]10000daa:0eb3 lsrsr3, r6, #2610000dac:402b andsr3, r510000dae:4698 movr8, r310000db0:4480 addr8, r010000db2:4643 movr3, r810000db4:005b lslsr3, r3, #110000db6:5b1b ldrhr3, [r3, r4]10000db8:4699 movr9, r310000dba:231a movsr3, #2610000dbc:425b negsr3, r310000dbe:4698 movr8, r310000dc0:4488 addr8, r110000dc2:4643 movr3, r810000dc4:464a movr2, r910000dc6:801a strhr2, [r3, #0]10000dc8:0f33 lsrsr3, r6, #2810000dca:402b andsr3, r510000dcc:4698 movr8, r310000dce:4480 addr8, r010000dd0:4643 movr3, r810000dd2:005b lslsr3, r3, #110000dd4:5b1b ldrhr3, [r3, r4]10000dd6:4699 movr9, r310000dd8:231c movsr3, #2810000dda:425b negsr3, r310000ddc:4698 movr8, r310000dde:4488 addr8, r110000de0:4643 movr3, r810000de2:464a movr2, r910000de4:801a strhr2, [r3, #0]10000de6:0fb6 lsrsr6, r6, #3010000de8:4035 andsr5, r610000dea:1940 addsr0, r0, r510000dec:0040 lslsr0, r0, #110000dee:5b00 ldrhr0, [r0, r4]10000df0:391e subsr1, #3010000df2:8008 strhr0, [r1, #0]10000df4:3701 addsr7, #110000df6:2f13 cmpr7, #1910000df8:dc00 bgt.n10000dfc <drawMap+0x1fc>10000dfa:e715 b.n10000c28 <drawMap+0x28>10000dfc:bcf0 pop{r4, r5, r6, r7}10000dfe:46bb movfp, r710000e00:46b2 movsl, r610000e02:46a9 movr9, r510000e04:46a0 movr8, r410000e06:bdf0 pop{r4, r5, r6, r7, pc}10000e08:20000604 .word0x2000060410000e0c:200004d8 .word0x200004d810000e10:200007f0 .word0x200007f010000e14:20000730 .word0x20000730
Optimized 2 DIS
Code:
10000c00 <drawMap>:10000c00:b5f0 push{r4, r5, r6, r7, lr}10000c02:46de movlr, fp10000c04:4657 movr7, sl10000c06:464e movr6, r910000c08:4645 movr5, r810000c0a:b5e0 push{r5, r6, r7, lr}10000c0c:b08d subsp, #52@ 0x3410000c0e:9309 strr3, [sp, #36]@ 0x2410000c10:428a cmpr2, r110000c12:d300 bcc.n10000c16 <drawMap+0x16>10000c14:e0ba b.n10000d8c <drawMap+0x18c>10000c16:0911 lsrsr1, r2, #410000c18:008b lslsr3, r1, #210000c1a:185b addsr3, r3, r110000c1c:009b lslsr3, r3, #210000c1e:930b strr3, [sp, #44]@ 0x2c10000c20:230f movsr3, #1510000c22:4013 andsr3, r210000c24:930a strr3, [sp, #40]@ 0x2810000c26:2300 movsr3, #010000c28:469c movip, r310000c2a:e0ab b.n10000d84 <drawMap+0x184>10000c2c:9a0b ldrr2, [sp, #44]@ 0x2c10000c2e:4462 addr2, ip10000c30:4b5a ldrr3, [pc, #360]@ (10000d9c <drawMap+0x19c>)10000c32:5c9b ldrbr3, [r3, r2]10000c34:495a ldrr1, [pc, #360]@ (10000da0 <drawMap+0x1a0>)10000c36:5c8a ldrbr2, [r1, r2]10000c38:495a ldrr1, [pc, #360]@ (10000da4 <drawMap+0x1a4>)10000c3a:011b lslsr3, r3, #410000c3c:980a ldrr0, [sp, #40]@ 0x2810000c3e:4680 movr8, r010000c40:4443 addr3, r810000c42:009b lslsr3, r3, #210000c44:5859 ldrr1, [r3, r1]10000c46:0f8b lsrsr3, r1, #3010000c48:9300 strr3, [sp, #0]10000c4a:0f08 lsrsr0, r1, #2810000c4c:2303 movsr3, #310000c4e:4018 andsr0, r310000c50:9001 strr0, [sp, #4]10000c52:0e88 lsrsr0, r1, #2610000c54:4018 andsr0, r310000c56:9002 strr0, [sp, #8]10000c58:0e08 lsrsr0, r1, #2410000c5a:0005 movsr5, r010000c5c:401d andsr5, r310000c5e:9503 strr5, [sp, #12]10000c60:0d88 lsrsr0, r1, #2210000c62:0006 movsr6, r010000c64:401e andsr6, r310000c66:9604 strr6, [sp, #16]10000c68:0d08 lsrsr0, r1, #2010000c6a:0007 movsr7, r010000c6c:401f andsr7, r310000c6e:9705 strr7, [sp, #20]10000c70:0c88 lsrsr0, r1, #1810000c72:4018 andsr0, r310000c74:9006 strr0, [sp, #24]10000c76:0c0c lsrsr4, r1, #1610000c78:401c andsr4, r310000c7a:9407 strr4, [sp, #28]10000c7c:0b8d lsrsr5, r1, #1410000c7e:401d andsr5, r310000c80:0b0e lsrsr6, r1, #1210000c82:401e andsr6, r310000c84:0a8f lsrsr7, r1, #1010000c86:401f andsr7, r310000c88:0a08 lsrsr0, r1, #810000c8a:4018 andsr0, r310000c8c:9008 strr0, [sp, #32]10000c8e:0988 lsrsr0, r1, #610000c90:4018 andsr0, r310000c92:4681 movr9, r010000c94:0908 lsrsr0, r1, #410000c96:4018 andsr0, r310000c98:4682 movsl, r010000c9a:0888 lsrsr0, r1, #210000c9c:4018 andsr0, r310000c9e:4683 movfp, r010000ca0:4019 andsr1, r310000ca2:4663 movr3, ip10000ca4:015b lslsr3, r3, #510000ca6:331e addsr3, #3010000ca8:9809 ldrr0, [sp, #36]@ 0x2410000caa:4680 movr8, r010000cac:4443 addr3, r810000cae:483e ldrr0, [pc, #248]@ (10000da8 <drawMap+0x1a8>)10000cb0:0092 lslsr2, r2, #210000cb2:1851 addsr1, r2, r110000cb4:0049 lslsr1, r1, #110000cb6:5a09 ldrhr1, [r1, r0]10000cb8:8019 strhr1, [r3, #0]10000cba:4659 movr1, fp10000cbc:1851 addsr1, r2, r110000cbe:0049 lslsr1, r1, #110000cc0:5a09 ldrhr1, [r1, r0]10000cc2:468b movfp, r110000cc4:1e99 subsr1, r3, #210000cc6:465c movr4, fp10000cc8:800c strhr4, [r1, #0]10000cca:4654 movr4, sl10000ccc:1911 addsr1, r2, r410000cce:0049 lslsr1, r1, #110000cd0:5a0c ldrhr4, [r1, r0]10000cd2:1f19 subsr1, r3, #410000cd4:800c strhr4, [r1, #0]10000cd6:464c movr4, r910000cd8:1911 addsr1, r2, r410000cda:0049 lslsr1, r1, #110000cdc:5a0c ldrhr4, [r1, r0]10000cde:1f99 subsr1, r3, #610000ce0:800c strhr4, [r1, #0]10000ce2:9c08 ldrr4, [sp, #32]10000ce4:1911 addsr1, r2, r410000ce6:0049 lslsr1, r1, #110000ce8:5a0c ldrhr4, [r1, r0]10000cea:0019 movsr1, r310000cec:3908 subsr1, #810000cee:800c strhr4, [r1, #0]10000cf0:19d7 addsr7, r2, r710000cf2:007f lslsr7, r7, #110000cf4:5a3f ldrhr7, [r7, r0]10000cf6:3902 subsr1, #210000cf8:800f strhr7, [r1, #0]10000cfa:1996 addsr6, r2, r610000cfc:0076 lslsr6, r6, #110000cfe:5a36 ldrhr6, [r6, r0]10000d00:3902 subsr1, #210000d02:800e strhr6, [r1, #0]10000d04:1955 addsr5, r2, r510000d06:006d lslsr5, r5, #110000d08:5a2d ldrhr5, [r5, r0]10000d0a:3902 subsr1, #210000d0c:800d strhr5, [r1, #0]10000d0e:9907 ldrr1, [sp, #28]10000d10:1854 addsr4, r2, r110000d12:0064 lslsr4, r4, #110000d14:5a24 ldrhr4, [r4, r0]10000d16:0019 movsr1, r310000d18:3910 subsr1, #1610000d1a:800c strhr4, [r1, #0]10000d1c:9906 ldrr1, [sp, #24]10000d1e:1851 addsr1, r2, r110000d20:0049 lslsr1, r1, #110000d22:5a0c ldrhr4, [r1, r0]10000d24:0019 movsr1, r310000d26:3912 subsr1, #1810000d28:800c strhr4, [r1, #0]10000d2a:9f05 ldrr7, [sp, #20]10000d2c:19d1 addsr1, r2, r710000d2e:0049 lslsr1, r1, #110000d30:5a0c ldrhr4, [r1, r0]10000d32:0019 movsr1, r310000d34:3914 subsr1, #2010000d36:800c strhr4, [r1, #0]10000d38:9e04 ldrr6, [sp, #16]10000d3a:1991 addsr1, r2, r610000d3c:0049 lslsr1, r1, #110000d3e:5a0c ldrhr4, [r1, r0]10000d40:0019 movsr1, r310000d42:3916 subsr1, #2210000d44:800c strhr4, [r1, #0]10000d46:9d03 ldrr5, [sp, #12]10000d48:1951 addsr1, r2, r510000d4a:0049 lslsr1, r1, #110000d4c:5a0c ldrhr4, [r1, r0]10000d4e:0019 movsr1, r310000d50:3918 subsr1, #2410000d52:800c strhr4, [r1, #0]10000d54:9c02 ldrr4, [sp, #8]10000d56:1911 addsr1, r2, r410000d58:0049 lslsr1, r1, #110000d5a:5a0c ldrhr4, [r1, r0]10000d5c:0019 movsr1, r310000d5e:391a subsr1, #2610000d60:800c strhr4, [r1, #0]10000d62:9901 ldrr1, [sp, #4]10000d64:1851 addsr1, r2, r110000d66:0049 lslsr1, r1, #110000d68:5a0c ldrhr4, [r1, r0]10000d6a:0019 movsr1, r310000d6c:391c subsr1, #2810000d6e:800c strhr4, [r1, #0]10000d70:9900 ldrr1, [sp, #0]10000d72:4688 movr8, r110000d74:4442 addr2, r810000d76:0052 lslsr2, r2, #110000d78:5a12 ldrhr2, [r2, r0]10000d7a:3b1e subsr3, #3010000d7c:801a strhr2, [r3, #0]10000d7e:2301 movsr3, #110000d80:4698 movr8, r310000d82:44c4 addip, r810000d84:4663 movr3, ip10000d86:2b13 cmpr3, #1910000d88:dc00 bgt.n10000d8c <drawMap+0x18c>10000d8a:e74f b.n10000c2c <drawMap+0x2c>10000d8c:b00d addsp, #52@ 0x3410000d8e:bcf0 pop{r4, r5, r6, r7}10000d90:46bb movfp, r710000d92:46b2 movsl, r610000d94:46a9 movr9, r510000d96:46a0 movr8, r410000d98:bdf0 pop{r4, r5, r6, r7, pc}10000d9a:46c0 nop@ (mov r8, r8)10000d9c:20000604 .word0x2000060410000da0:200004d8 .word0x200004d810000da4:200007f0 .word0x200007f010000da8:20000730 .word0x20000730
Statistics: Posted by cbmeeks — Fri Jul 26, 2024 2:16 pm