Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
71a04721
Commit
71a04721
authored
Jul 14, 2016
by
Janne Grunau
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
checkasm: arm: report the first clobbered register in checkasm_checked_call
parent
a8fce24b
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
39 additions
and
25 deletions
+39
-25
checkasm.S
tests/checkasm/arm/checkasm.S
+39
-25
No files found.
tests/checkasm/arm/checkasm.S
View file @
71a04721
...
...
@@ -33,8 +33,12 @@ const register_init, align=3
.quad 0x249214109d5d1c88
endconst
const error_message
.asciz "failed to preserve register"
const error_message_fpscr
.asciz "failed to preserve register FPSCR"
const error_message_gpr
.asciz "failed to preserve register r%d"
const error_message_vfp
.asciz "failed to preserve register d%d"
endconst
@ max number of args used by any asm function.
...
...
@@ -79,39 +83,42 @@ function checkasm_checked_call_\variant, export=1
push {r0, r1}
movrel r12, register_init
mov r3, #0
.ifc \variant, vfp
.macro check_reg_vfp, dreg, inc=8
ldrd r0, r1, [r12], #\inc
vmov r2, lr, \dreg
eor r0, r0, r2
eor r1, r1, lr
orr r3, r3, r0
orr r3, r3, r1
.macro check_reg_vfp, dreg, offset
vldr d0, [r12, #8 * (\offset)]
veor d0, d0, \dreg
vmov r2, r3, d0
orrs r2, r2, r3
bne 4f
.endm
.irp n, 8, 9, 10, 11, 12, 13, 14
check_reg_vfp d\n
.irp n, 8, 9, 10, 11, 12, 13, 14, 15
@ keep track of the checked double/SIMD register
mov r1, #\n
check_reg_vfp d\n, \n-8
.endr
check_reg_vfp d15, -56
.purgem check_reg_vfp
fmrx r0, FPSCR
ldr r
1
, [sp, #8]
eor r0, r0, r
1
ldr r
3
, [sp, #8]
eor r0, r0, r
3
@ Ignore changes in the topmost 5 bits
lsl
r0, r0, #5
orr r3, r3, r0
lsl
s
r0, r0, #5
bne 3f
.endif
@ keep track of the checked GPR
mov r1, #4
.macro check_reg reg1, reg2=
ldrd r0, r1, [r12], #8
eor r0, r0, \reg1
orrs r3, r3, r0
ldrd r2, r3, [r12], #8
eors r2, r2, \reg1
bne 2f
add r1, r1, #1
.ifnb \reg2
eor
r1, r1
, \reg2
orrs r3, r3, r1
eor
s r3, r3
, \reg2
bne 2f
.endif
add r1, r1, #1
.endm
check_reg r4, r5
check_reg r6, r7
...
...
@@ -124,9 +131,16 @@ function checkasm_checked_call_\variant, export=1
check_reg r10, r11
.purgem check_reg
beq 0f
movrel r0, error_message
b 0f
4:
movrel r0, error_message_vfp
b 1f
3:
movrel r0, error_message_fpscr
b 1f
2:
movrel r0, error_message_gpr
1:
blx X(checkasm_fail_func)
0:
pop {r0, r1}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment