blob: ab13f3e50ae0d813c438fd2be29c3673948c9fe1 [file] [log] [blame]
#include <linux/linkage.h>
.text
.code 32
.fpu neon
ENTRY(neon_en_check)
mrc p15, 0, r1, c1, c0, 2
tst r1, #(0x3 << 20)
beq no_neon
fmrx r1, FPEXC
tst r1, #(1 << 30)
beq no_neon
mov r0, #1
b exit
no_neon:
mov r0, #0
exit:
mov pc, lr
ENDPROC(neon_en_check)
ENTRY(neon_enable)
/* Enable the the VFP */
mrc p15, 0, r1, c1, c0, 2
orr r1, r1, #(0x3 << 20)
mcr p15, 0, r1, c1, c0, 2
isb
fmrx r1, FPEXC
orr r1, r1, #(1 << 30)
fmxr FPEXC, r1
/* Move back to caller */
mov pc, lr
ENDPROC(neon_enable)
ENTRY(neon_disable)
/* Enable the the VFP */
fmrx r1, FPEXC
bic r1, r1, #(1 << 30)
fmxr FPEXC, r1
/* Move back to caller */
mov pc, lr
ENDPROC(neon_disable)