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
...
@@ -33,8 +33,12 @@ const register_init, align=3
.quad 0x249214109d5d1c88
.quad 0x249214109d5d1c88
endconst
endconst
const error_message
const error_message_fpscr
.asciz "failed to preserve register"
.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
endconst
@ max number of args used by any asm function.
@ max number of args used by any asm function.
...
@@ -79,39 +83,42 @@ function checkasm_checked_call_\variant, export=1
...
@@ -79,39 +83,42 @@ function checkasm_checked_call_\variant, export=1
push {r0, r1}
push {r0, r1}
movrel r12, register_init
movrel r12, register_init
mov r3, #0
.ifc \variant, vfp
.ifc \variant, vfp
.macro check_reg_vfp, dreg, inc=8
.macro check_reg_vfp, dreg, offset
ldrd r0, r1, [r12], #\inc
vldr d0, [r12, #8 * (\offset)]
vmov r2, lr, \dreg
veor d0, d0, \dreg
eor r0, r0, r2
vmov r2, r3, d0
eor r1, r1, lr
orrs r2, r2, r3
orr r3, r3, r0
bne 4f
orr r3, r3, r1
.endm
.endm
.irp n, 8, 9, 10, 11, 12, 13, 14
.irp n, 8, 9, 10, 11, 12, 13, 14, 15
check_reg_vfp d\n
@ keep track of the checked double/SIMD register
mov r1, #\n
check_reg_vfp d\n, \n-8
.endr
.endr
check_reg_vfp d15, -56
.purgem check_reg_vfp
.purgem check_reg_vfp
fmrx r0, FPSCR
fmrx r0, FPSCR
ldr r
1
, [sp, #8]
ldr r
3
, [sp, #8]
eor r0, r0, r
1
eor r0, r0, r
3
@ Ignore changes in the topmost 5 bits
@ Ignore changes in the topmost 5 bits
lsl
r0, r0, #5
lsl
s
r0, r0, #5
orr r3, r3, r0
bne 3f
.endif
.endif
@ keep track of the checked GPR
mov r1, #4
.macro check_reg reg1, reg2=
.macro check_reg reg1, reg2=
ldrd r0, r1, [r12], #8
ldrd r2, r3, [r12], #8
eor r0, r0, \reg1
eors r2, r2, \reg1
orrs r3, r3, r0
bne 2f
add r1, r1, #1
.ifnb \reg2
.ifnb \reg2
eor
r1, r1
, \reg2
eor
s r3, r3
, \reg2
orrs r3, r3, r1
bne 2f
.endif
.endif
add r1, r1, #1
.endm
.endm
check_reg r4, r5
check_reg r4, r5
check_reg r6, r7
check_reg r6, r7
...
@@ -124,9 +131,16 @@ function checkasm_checked_call_\variant, export=1
...
@@ -124,9 +131,16 @@ function checkasm_checked_call_\variant, export=1
check_reg r10, r11
check_reg r10, r11
.purgem check_reg
.purgem check_reg
beq 0f
b 0f
4:
movrel r0, error_message
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)
blx X(checkasm_fail_func)
0:
0:
pop {r0, r1}
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