Initial commit
This commit is contained in:
184
graphics/scaler/scale2xARM.s
Normal file
184
graphics/scaler/scale2xARM.s
Normal file
@@ -0,0 +1,184 @@
|
||||
@ ScummVM - Graphic Adventure Engine
|
||||
@
|
||||
@ ScummVM is the legal property of its developers, whose names
|
||||
@ are too numerous to list here. Please refer to the COPYRIGHT
|
||||
@ file distributed with this source distribution.
|
||||
@
|
||||
@ This program is free software: you can redistribute it and/or modify
|
||||
@ it under the terms of the GNU General Public License as published by
|
||||
@ the Free Software Foundation, either version 3 of the License, or
|
||||
@ (at your option) any later version.
|
||||
@
|
||||
@ This program is distributed in the hope that it will be useful,
|
||||
@ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
@ GNU General Public License for more details.
|
||||
@
|
||||
@ You should have received a copy of the GNU General Public License
|
||||
@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
@
|
||||
@ @author Robin Watts (robin@wss.co.uk)
|
||||
|
||||
.text
|
||||
|
||||
.global scale2x_8_arm
|
||||
.global scale2x_16_arm
|
||||
.global scale2x_32_arm
|
||||
|
||||
@ r0 = dst0
|
||||
@ r1 = dst1
|
||||
@ r2 = src
|
||||
@ r3 = src_prev
|
||||
@ r4 = src_next
|
||||
@ r5 = len
|
||||
|
||||
|
||||
@ We hold: r10 B
|
||||
@ r8 r14 r7 D E F
|
||||
@ r12 H
|
||||
.align 2
|
||||
scale2x_8_arm:
|
||||
STMFD r13!,{r4-r5,r7-r8,r10-r11,r14}
|
||||
LDR r4, [r13,#4*7]
|
||||
LDR r5, [r13,#4*8]
|
||||
|
||||
LDRB r14,[r2], #1
|
||||
CMP r3, #0 @ Set NE
|
||||
@ Stall on Xscale
|
||||
MOV r8, r14
|
||||
B loop8
|
||||
same8:
|
||||
STRB r14,[r0], #1
|
||||
STRB r14,[r0], #1
|
||||
STRB r14,[r1], #1
|
||||
STRB r14,[r1], #1
|
||||
SUBS r5, r5, #1
|
||||
MOV r8, r14
|
||||
MOV r14,r7
|
||||
BLT end8
|
||||
loop8:
|
||||
LDRNEB r7, [r3], #1 @ As long as we aren't on the last pixel
|
||||
LDRB r10,[r2], #1
|
||||
LDRB r12,[r4], #1
|
||||
@ Stall on Xscale
|
||||
CMP r7, r8
|
||||
CMPNE r10,r12
|
||||
BEQ same8
|
||||
CMP r8, r10
|
||||
STREQB r8, [r0], #1
|
||||
STRNEB r14,[r0], #1
|
||||
CMP r10,r7
|
||||
STREQB r7, [r0], #1
|
||||
STRNEB r14,[r0], #1
|
||||
CMP r8, r12
|
||||
STREQB r8, [r1], #1
|
||||
STRNEB r14,[r1], #1
|
||||
CMP r12,r7
|
||||
STREQB r7, [r1], #1
|
||||
STRNEB r14,[r1], #1
|
||||
|
||||
SUBS r5, r5, #1
|
||||
MOV r8, r14
|
||||
MOV r14,r7
|
||||
BGE loop8
|
||||
end8:
|
||||
|
||||
LDMFD r13!,{r4-r5,r7-r8,r10-r11,PC}
|
||||
|
||||
.align 2
|
||||
scale2x_16_arm:
|
||||
STMFD r13!,{r4-r5,r7-r8,r10-r11,r14}
|
||||
LDR r4, [r13,#4*7]
|
||||
LDR r5, [r13,#4*8]
|
||||
|
||||
LDRH r14,[r3], #2
|
||||
CMP r3, #0 @ Set NE
|
||||
@ Stall on Xscale
|
||||
MOV r8, r14
|
||||
B loop16
|
||||
same16:
|
||||
STRH r14,[r0], #2
|
||||
STRH r14,[r0], #2
|
||||
STRH r14,[r1], #2
|
||||
STRH r14,[r1], #2
|
||||
SUBS r5, r5, #1
|
||||
MOV r8, r14
|
||||
MOV r14,r7
|
||||
BLT end16
|
||||
loop16:
|
||||
LDRNEH r7, [r3], #2 @ As long as we aren't on the last pixel
|
||||
LDRH r10,[r2], #2
|
||||
LDRH r12,[r4], #2
|
||||
@ Stall on Xscale
|
||||
CMP r7, r8
|
||||
CMPNE r10,r12
|
||||
BEQ same16
|
||||
CMP r8, r10
|
||||
STREQH r8, [r0], #2
|
||||
STRNEH r14,[r0], #2
|
||||
CMP r10,r7
|
||||
STREQH r7, [r0], #2
|
||||
STRNEH r14,[r0], #2
|
||||
CMP r8, r12
|
||||
STREQH r8, [r1], #2
|
||||
STRNEH r14,[r1], #2
|
||||
CMP r12,r7
|
||||
STREQH r7, [r1], #2
|
||||
STRNEH r14,[r1], #2
|
||||
|
||||
SUBS r5, r5, #1
|
||||
MOV r8, r14
|
||||
MOV r14,r7
|
||||
BGE loop16
|
||||
end16:
|
||||
|
||||
LDMFD r13!,{r4-r5,r7-r8,r10-r11,PC}
|
||||
|
||||
.align 2
|
||||
scale2x_32_arm:
|
||||
STMFD r13!,{r4-r5,r7-r8,r10-r11,r14}
|
||||
LDR r4, [r13,#4*7]
|
||||
LDR r5, [r13,#4*8]
|
||||
|
||||
LDR r14,[r3], #4
|
||||
CMP r3, #0 @ Set NE
|
||||
@ Stall on Xscale
|
||||
MOV r8, r14
|
||||
B loop32
|
||||
same32:
|
||||
STR r14,[r0], #4
|
||||
STR r14,[r0], #4
|
||||
STR r14,[r1], #4
|
||||
STR r14,[r1], #4
|
||||
SUBS r5, r5, #1
|
||||
MOV r8, r14
|
||||
MOV r14,r7
|
||||
BLT end32
|
||||
loop32:
|
||||
LDRNE r7, [r3], #4 @ As long as we aren't on the last pixel
|
||||
LDR r10,[r2], #4
|
||||
LDR r12,[r4], #4
|
||||
@ Stall on Xscale
|
||||
CMP r7, r8
|
||||
CMPNE r10,r12
|
||||
BEQ same32
|
||||
CMP r8, r10
|
||||
STREQ r8, [r0], #4
|
||||
STRNE r14,[r0], #4
|
||||
CMP r10,r7
|
||||
STREQ r7, [r0], #4
|
||||
STRNE r14,[r0], #4
|
||||
CMP r8, r12
|
||||
STREQ r8, [r1], #4
|
||||
STRNE r14,[r1], #4
|
||||
CMP r12,r7
|
||||
STREQ r7, [r1], #4
|
||||
STRNE r14,[r1], #4
|
||||
|
||||
SUBS r5, r5, #1
|
||||
MOV r8, r14
|
||||
MOV r14,r7
|
||||
BGE loop32
|
||||
end32:
|
||||
|
||||
LDMFD r13!,{r4-r5,r7-r8,r10-r11,PC}
|
||||
Reference in New Issue
Block a user