mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-11-14 09:06:35 +00:00
128 lines
1.6 KiB
ArmAsm
Vendored
128 lines
1.6 KiB
ArmAsm
Vendored
/**
|
|
* @file cache.s
|
|
* @copyright libnx Authors
|
|
*/
|
|
|
|
.macro CODE_BEGIN name
|
|
.section .text.\name, "ax", %progbits
|
|
.global \name
|
|
.type \name, %function
|
|
.align 2
|
|
.cfi_startproc
|
|
\name:
|
|
.endm
|
|
|
|
.macro CODE_END
|
|
.cfi_endproc
|
|
.endm
|
|
|
|
CODE_BEGIN armDCacheFlush
|
|
add x1, x1, x0
|
|
mrs x8, CTR_EL0
|
|
lsr x8, x8, #16
|
|
and x8, x8, #0xf
|
|
mov x9, #4
|
|
lsl x9, x9, x8
|
|
sub x10, x9, #1
|
|
bic x8, x0, x10
|
|
mov x10, x1
|
|
|
|
mov w1, #1
|
|
mrs x0, tpidrro_el0
|
|
strb w1, [x0, #0x104]
|
|
|
|
armDCacheFlush_L0:
|
|
dc civac, x8
|
|
add x8, x8, x9
|
|
cmp x8, x10
|
|
bcc armDCacheFlush_L0
|
|
|
|
dsb sy
|
|
|
|
strb wzr, [x0, #0x104]
|
|
|
|
ret
|
|
CODE_END
|
|
|
|
CODE_BEGIN armDCacheClean
|
|
add x1, x1, x0
|
|
mrs x8, CTR_EL0
|
|
lsr x8, x8, #16
|
|
and x8, x8, #0xf
|
|
mov x9, #4
|
|
lsl x9, x9, x8
|
|
sub x10, x9, #1
|
|
bic x8, x0, x10
|
|
mov x10, x1
|
|
|
|
mov w1, #1
|
|
mrs x0, tpidrro_el0
|
|
strb w1, [x0, #0x104]
|
|
|
|
armDCacheClean_L0:
|
|
dc cvac, x8
|
|
add x8, x8, x9
|
|
cmp x8, x10
|
|
bcc armDCacheClean_L0
|
|
|
|
dsb sy
|
|
|
|
strb wzr, [x0, #0x104]
|
|
|
|
ret
|
|
CODE_END
|
|
|
|
CODE_BEGIN armICacheInvalidate
|
|
add x1, x1, x0
|
|
mrs x8, CTR_EL0
|
|
and x8, x8, #0xf
|
|
mov x9, #4
|
|
lsl x9, x9, x8
|
|
sub x10, x9, #1
|
|
bic x8, x0, x10
|
|
mov x10, x1
|
|
|
|
mov w1, #1
|
|
mrs x0, tpidrro_el0
|
|
strb w1, [x0, #0x104]
|
|
|
|
armICacheInvalidate_L0:
|
|
ic ivau, x8
|
|
add x8, x8, x9
|
|
cmp x8, x10
|
|
bcc armICacheInvalidate_L0
|
|
|
|
dsb sy
|
|
|
|
strb wzr, [x0, #0x104]
|
|
|
|
ret
|
|
CODE_END
|
|
|
|
CODE_BEGIN armDCacheZero
|
|
add x1, x1, x0
|
|
mrs x8, CTR_EL0
|
|
lsr x8, x8, #16
|
|
and x8, x8, #0xf
|
|
mov x9, #4
|
|
lsl x9, x9, x8
|
|
sub x10, x9, #1
|
|
bic x8, x0, x10
|
|
mov x10, x1
|
|
|
|
mov w1, #1
|
|
mrs x0, tpidrro_el0
|
|
strb w1, [x0, #0x104]
|
|
|
|
armDCacheZero_L0:
|
|
dc zva, x8
|
|
add x8, x8, x9
|
|
cmp x8, x10
|
|
bcc armDCacheZero_L0
|
|
|
|
dsb sy
|
|
|
|
strb wzr, [x0, #0x104]
|
|
|
|
ret
|
|
CODE_END
|