diff options
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/arm/lcd-as-memframe.S | 68 |
1 files changed, 67 insertions, 1 deletions
diff --git a/firmware/target/arm/lcd-as-memframe.S b/firmware/target/arm/lcd-as-memframe.S index 2d0aff937f..a6f9145fab 100644 --- a/firmware/target/arm/lcd-as-memframe.S +++ b/firmware/target/arm/lcd-as-memframe.S | |||
@@ -170,6 +170,11 @@ lcd_write_yuv420_lines: | |||
170 | add lr, r9, r7, asr #8 @ lr = r = (Y >> 9) + rv | 170 | add lr, r9, r7, asr #8 @ lr = r = (Y >> 9) + rv |
171 | add r7, r10, r7, asr #7 @ r7 = g = (Y >> 8) + guv | 171 | add r7, r10, r7, asr #7 @ r7 = g = (Y >> 8) + guv |
172 | @ | 172 | @ |
173 | #if ARM_ARCH >= 6 | ||
174 | usat r1, #5, r1 @ clamp b | ||
175 | usat lr, #5, lr @ clamp r | ||
176 | usat r7, #6, r7 @ clamp g | ||
177 | #else | ||
173 | orr r12, r1, lr @ check if clamping is needed... | 178 | orr r12, r1, lr @ check if clamping is needed... |
174 | orr r12, r12, r7, asr #1 @ ...at all | 179 | orr r12, r12, r7, asr #1 @ ...at all |
175 | cmp r12, #31 @ | 180 | cmp r12, #31 @ |
@@ -184,6 +189,7 @@ lcd_write_yuv420_lines: | |||
184 | mvnhi r7, r7, asr #31 @ | 189 | mvnhi r7, r7, asr #31 @ |
185 | andhi r7, r7, #63 @ | 190 | andhi r7, r7, #63 @ |
186 | 15: @ no clamp @ | 191 | 15: @ no clamp @ |
192 | #endif | ||
187 | @ | 193 | @ |
188 | ldrb r12, [r4, r3] @ r12 = Y' = *(Y'_p + stride) | 194 | ldrb r12, [r4, r3] @ r12 = Y' = *(Y'_p + stride) |
189 | @ | 195 | @ |
@@ -206,6 +212,11 @@ lcd_write_yuv420_lines: | |||
206 | add lr, r9, r7, asr #8 @ lr = r = (Y >> 9) + rv | 212 | add lr, r9, r7, asr #8 @ lr = r = (Y >> 9) + rv |
207 | add r7, r10, r7, asr #7 @ r7 = g = (Y >> 8) + guv | 213 | add r7, r10, r7, asr #7 @ r7 = g = (Y >> 8) + guv |
208 | @ | 214 | @ |
215 | #if ARM_ARCH >= 6 | ||
216 | usat r1, #5, r1 @ clamp b | ||
217 | usat lr, #5, lr @ clamp r | ||
218 | usat r7, #6, r7 @ clamp g | ||
219 | #else | ||
209 | orr r12, r1, lr @ check if clamping is needed... | 220 | orr r12, r1, lr @ check if clamping is needed... |
210 | orr r12, r12, r7, asr #1 @ ...at all | 221 | orr r12, r12, r7, asr #1 @ ...at all |
211 | cmp r12, #31 @ | 222 | cmp r12, #31 @ |
@@ -220,6 +231,7 @@ lcd_write_yuv420_lines: | |||
220 | mvnhi r7, r7, asr #31 @ | 231 | mvnhi r7, r7, asr #31 @ |
221 | andhi r7, r7, #63 @ | 232 | andhi r7, r7, #63 @ |
222 | 15: @ no clamp @ | 233 | 15: @ no clamp @ |
234 | #endif | ||
223 | @ | 235 | @ |
224 | ldrb r12, [r4], #1 @ r12 = Y' = *(Y'_p++) | 236 | ldrb r12, [r4], #1 @ r12 = Y' = *(Y'_p++) |
225 | @ | 237 | @ |
@@ -245,6 +257,11 @@ lcd_write_yuv420_lines: | |||
245 | add lr, r9, r7, asr #8 @ lr = r = (Y >> 9) + rv | 257 | add lr, r9, r7, asr #8 @ lr = r = (Y >> 9) + rv |
246 | add r7, r10, r7, asr #7 @ r7 = g = (Y >> 8) + guv | 258 | add r7, r10, r7, asr #7 @ r7 = g = (Y >> 8) + guv |
247 | @ | 259 | @ |
260 | #if ARM_ARCH >= 6 | ||
261 | usat r1, #5, r1 @ clamp b | ||
262 | usat lr, #5, lr @ clamp r | ||
263 | usat r7, #6, r7 @ clamp g | ||
264 | #else | ||
248 | orr r12, r1, lr @ check if clamping is needed... | 265 | orr r12, r1, lr @ check if clamping is needed... |
249 | orr r12, r12, r7, asr #1 @ ...at all | 266 | orr r12, r12, r7, asr #1 @ ...at all |
250 | cmp r12, #31 @ | 267 | cmp r12, #31 @ |
@@ -259,6 +276,7 @@ lcd_write_yuv420_lines: | |||
259 | mvnhi r7, r7, asr #31 @ | 276 | mvnhi r7, r7, asr #31 @ |
260 | andhi r7, r7, #63 @ | 277 | andhi r7, r7, #63 @ |
261 | 15: @ no clamp @ | 278 | 15: @ no clamp @ |
279 | #endif | ||
262 | @ | 280 | @ |
263 | ldrb r12, [r4, r3] @ r12 = Y' = *(Y'_p + stride) | 281 | ldrb r12, [r4, r3] @ r12 = Y' = *(Y'_p + stride) |
264 | @ | 282 | @ |
@@ -281,6 +299,11 @@ lcd_write_yuv420_lines: | |||
281 | add lr, r9, r7, asr #8 @ lr = r = (Y >> 9) + rv | 299 | add lr, r9, r7, asr #8 @ lr = r = (Y >> 9) + rv |
282 | add r7, r10, r7, asr #7 @ r7 = g = (Y >> 8) + guv | 300 | add r7, r10, r7, asr #7 @ r7 = g = (Y >> 8) + guv |
283 | @ | 301 | @ |
302 | #if ARM_ARCH >= 6 | ||
303 | usat r1, #5, r1 @ clamp b | ||
304 | usat lr, #5, lr @ clamp r | ||
305 | usat r7, #6, r7 @ clamp g | ||
306 | #else | ||
284 | orr r12, r1, lr @ check if clamping is needed... | 307 | orr r12, r1, lr @ check if clamping is needed... |
285 | orr r12, r12, r7, asr #1 @ ...at all | 308 | orr r12, r12, r7, asr #1 @ ...at all |
286 | cmp r12, #31 @ | 309 | cmp r12, #31 @ |
@@ -295,6 +318,7 @@ lcd_write_yuv420_lines: | |||
295 | mvnhi r7, r7, asr #31 @ | 318 | mvnhi r7, r7, asr #31 @ |
296 | andhi r7, r7, #63 @ | 319 | andhi r7, r7, #63 @ |
297 | 15: @ no clamp @ | 320 | 15: @ no clamp @ |
321 | #endif | ||
298 | @ | 322 | @ |
299 | orr r12, r1, lr, lsl #11 @ r12 = b | (r << 11) | 323 | orr r12, r1, lr, lsl #11 @ r12 = b | (r << 11) |
300 | orr r12, r12, r7, lsl #5 @ r12 |= (g << 5) | 324 | orr r12, r12, r7, lsl #5 @ r12 |= (g << 5) |
@@ -425,6 +449,16 @@ lcd_write_yuv420_lines_odither: | |||
425 | add r11, r11, r12, lsl #1 @ r = r11 + delta*2 | 449 | add r11, r11, r12, lsl #1 @ r = r11 + delta*2 |
426 | add r7, r7, r12, lsr #1 @ g = r7 + delta/2 | 450 | add r7, r7, r12, lsr #1 @ g = r7 + delta/2 |
427 | @ | 451 | @ |
452 | #if ARM_ARCH >= 6 | ||
453 | usat r11, #5, r11, asr #11 @ clamp r | ||
454 | usat r7, #6, r7, asr #9 @ clamp g | ||
455 | usat r1, #5, r1, asr #10 @ clamp b | ||
456 | @ | ||
457 | ldrb r12, [r4, r3] @ r12 = Y' = *(Y'_p + stride) | ||
458 | @ | ||
459 | orr r1, r1, r11, lsl #11 @ r1 = b | (r << 11) | ||
460 | orr r1, r1, r7, lsl #5 @ r1 |= (g << 5) | ||
461 | #else | ||
428 | orr r12, r1, r11, asr #1 @ check if clamping is needed... | 462 | orr r12, r1, r11, asr #1 @ check if clamping is needed... |
429 | orr r12, r12, r7 @ ...at all | 463 | orr r12, r12, r7 @ ...at all |
430 | movs r12, r12, asr #15 @ | 464 | movs r12, r12, asr #15 @ |
@@ -444,6 +478,7 @@ lcd_write_yuv420_lines_odither: | |||
444 | and r7, r7, #0x7e00 @ r1 = pixel = (r & 0xf800) | | 478 | and r7, r7, #0x7e00 @ r1 = pixel = (r & 0xf800) | |
445 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | | 479 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | |
446 | orr r1, r11, r1, lsr #10 @ (b >> 10) | 480 | orr r1, r11, r1, lsr #10 @ (b >> 10) |
481 | #endif | ||
447 | @ | 482 | @ |
448 | #if LCD_WIDTH >= LCD_HEIGHT | 483 | #if LCD_WIDTH >= LCD_HEIGHT |
449 | strh r1, [r0] @ | 484 | strh r1, [r0] @ |
@@ -477,6 +512,16 @@ lcd_write_yuv420_lines_odither: | |||
477 | add r11, r11, r12, lsl #1 @ r = r11 + delta*2 | 512 | add r11, r11, r12, lsl #1 @ r = r11 + delta*2 |
478 | add r7, r7, r12, lsr #1 @ g = r7 + delta/2 | 513 | add r7, r7, r12, lsr #1 @ g = r7 + delta/2 |
479 | @ | 514 | @ |
515 | #if ARM_ARCH >= 6 | ||
516 | usat r11, #5, r11, asr #11 @ clamp r | ||
517 | usat r7, #6, r7, asr #9 @ clamp g | ||
518 | usat r1, #5, r1, asr #10 @ clamp b | ||
519 | @ | ||
520 | ldrb r12, [r4], #1 @ r12 = Y' = *(Y'_p++) | ||
521 | @ | ||
522 | orr r1, r1, r11, lsl #11 @ r1 = b | (r << 11) | ||
523 | orr r1, r1, r7, lsl #5 @ r1 |= (g << 5) | ||
524 | #else | ||
480 | orr r12, r1, r11, asr #1 @ check if clamping is needed... | 525 | orr r12, r1, r11, asr #1 @ check if clamping is needed... |
481 | orr r12, r12, r7 @ ...at all | 526 | orr r12, r12, r7 @ ...at all |
482 | movs r12, r12, asr #15 @ | 527 | movs r12, r12, asr #15 @ |
@@ -496,6 +541,7 @@ lcd_write_yuv420_lines_odither: | |||
496 | and r7, r7, #0x7e00 @ r1 = pixel = (r & 0xf800) | | 541 | and r7, r7, #0x7e00 @ r1 = pixel = (r & 0xf800) | |
497 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | | 542 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | |
498 | orr r1, r11, r1, lsr #10 @ (b >> 10) | 543 | orr r1, r11, r1, lsr #10 @ (b >> 10) |
544 | #endif | ||
499 | @ | 545 | @ |
500 | #if LCD_WIDTH >= LCD_HEIGHT | 546 | #if LCD_WIDTH >= LCD_HEIGHT |
501 | add r0, r0, #2*LCD_WIDTH @ | 547 | add r0, r0, #2*LCD_WIDTH @ |
@@ -534,6 +580,16 @@ lcd_write_yuv420_lines_odither: | |||
534 | add r11, r11, r12, lsl #1 @ r = r11 + delta*2 | 580 | add r11, r11, r12, lsl #1 @ r = r11 + delta*2 |
535 | add r7, r7, r12, lsr #1 @ g = r7 + delta/2 | 581 | add r7, r7, r12, lsr #1 @ g = r7 + delta/2 |
536 | @ | 582 | @ |
583 | #if ARM_ARCH >= 6 | ||
584 | usat r11, #5, r11, asr #11 @ clamp r | ||
585 | usat r7, #6, r7, asr #9 @ clamp g | ||
586 | usat r1, #5, r1, asr #10 @ clamp b | ||
587 | @ | ||
588 | ldrb r12, [r4, r3] @ r12 = Y' = *(Y'_p + stride) | ||
589 | @ | ||
590 | orr r1, r1, r11, lsl #11 @ r1 = b | (r << 11) | ||
591 | orr r1, r1, r7, lsl #5 @ r1 |= (g << 5) | ||
592 | #else | ||
537 | orr r12, r1, r11, asr #1 @ check if clamping is needed... | 593 | orr r12, r1, r11, asr #1 @ check if clamping is needed... |
538 | orr r12, r12, r7 @ ...at all | 594 | orr r12, r12, r7 @ ...at all |
539 | movs r12, r12, asr #15 @ | 595 | movs r12, r12, asr #15 @ |
@@ -547,12 +603,13 @@ lcd_write_yuv420_lines_odither: | |||
547 | mvnne r7, r12, lsr #15 @ | 603 | mvnne r7, r12, lsr #15 @ |
548 | 15: @ no clamp @ | 604 | 15: @ no clamp @ |
549 | @ | 605 | @ |
550 | ldrb r12, [r4, r3] @ r12 = Y' = *(Y'_p + stride) | 606 | ldrb r12, [r4, r3] @ r12 = Y' = *(Y'_p + stride) |
551 | @ | 607 | @ |
552 | and r11, r11, #0xf800 @ pack pixel | 608 | and r11, r11, #0xf800 @ pack pixel |
553 | and r7, r7, #0x7e00 @ r1 = pixel = (r & 0xf800) | | 609 | and r7, r7, #0x7e00 @ r1 = pixel = (r & 0xf800) | |
554 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | | 610 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | |
555 | orr r1, r11, r1, lsr #10 @ (b >> 10) | 611 | orr r1, r11, r1, lsr #10 @ (b >> 10) |
612 | #endif | ||
556 | @ | 613 | @ |
557 | #if LCD_WIDTH >= LCD_HEIGHT | 614 | #if LCD_WIDTH >= LCD_HEIGHT |
558 | strh r1, [r0, #2] | 615 | strh r1, [r0, #2] |
@@ -586,6 +643,14 @@ lcd_write_yuv420_lines_odither: | |||
586 | add r11, r11, r14, lsl #1 @ r = r11 + delta*2 | 643 | add r11, r11, r14, lsl #1 @ r = r11 + delta*2 |
587 | add r7, r7, r14, lsr #1 @ g = r7 + delta/2 | 644 | add r7, r7, r14, lsr #1 @ g = r7 + delta/2 |
588 | @ | 645 | @ |
646 | #if ARM_ARCH >= 6 | ||
647 | usat r11, #5, r11, asr #11 @ clamp r | ||
648 | usat r7, #6, r7, asr #9 @ clamp g | ||
649 | usat r1, #5, r1, asr #10 @ clamp b | ||
650 | @ | ||
651 | orr r1, r1, r11, lsl #11 @ r1 = b | (r << 11) | ||
652 | orr r1, r1, r7, lsl #5 @ r1 |= (g << 5) | ||
653 | #else | ||
589 | orr r12, r1, r11, asr #1 @ check if clamping is needed... | 654 | orr r12, r1, r11, asr #1 @ check if clamping is needed... |
590 | orr r12, r12, r7 @ ...at all | 655 | orr r12, r12, r7 @ ...at all |
591 | movs r12, r12, asr #15 @ | 656 | movs r12, r12, asr #15 @ |
@@ -603,6 +668,7 @@ lcd_write_yuv420_lines_odither: | |||
603 | and r7, r7, #0x7e00 @ r1 = pixel = (r & 0xf800) | | 668 | and r7, r7, #0x7e00 @ r1 = pixel = (r & 0xf800) | |
604 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | | 669 | orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | |
605 | orr r1, r11, r1, lsr #10 @ (b >> 10) | 670 | orr r1, r11, r1, lsr #10 @ (b >> 10) |
671 | #endif | ||
606 | @ | 672 | @ |
607 | #if LCD_WIDTH >= LCD_HEIGHT | 673 | #if LCD_WIDTH >= LCD_HEIGHT |
608 | add r0, r0, #2*LCD_WIDTH | 674 | add r0, r0, #2*LCD_WIDTH |