lib/crypto/arm/curve25519-core.S

Source file repositories/reference/linux-study-clean/lib/crypto/arm/curve25519-core.S

File Facts

System
Linux kernel
Corpus path
lib/crypto/arm/curve25519-core.S
Extension
.S
Size
46959 bytes
Lines
2063
Domain
Kernel Services
Bucket
lib
Inferred role
Kernel Services: lib
Status
atlas-only

Why This File Exists

Shared kernel service surface used by multiple subsystems, including helpers, cryptography, virtualization support, and async I/O infrastructure.

Dependency Surface

Detected Declarations

Annotated Snippet

#include <linux/linkage.h>

.text
.arch armv7-a
.fpu neon
.align 4

ENTRY(curve25519_neon)
	push		{r4-r11, lr}
	mov		ip, sp
	sub		r3, sp, #704
	and		r3, r3, #0xfffffff0
	mov		sp, r3
	movw		r4, #0
	movw		r5, #254
	vmov.i32	q0, #1
	vshr.u64	q1, q0, #7
	vshr.u64	q0, q0, #8
	vmov.i32	d4, #19
	vmov.i32	d5, #38
	add		r6, sp, #480
	vst1.8		{d2-d3}, [r6, : 128]!
	vst1.8		{d0-d1}, [r6, : 128]!
	vst1.8		{d4-d5}, [r6, : 128]
	add		r6, r3, #0
	vmov.i32	q2, #0
	vst1.8		{d4-d5}, [r6, : 128]!
	vst1.8		{d4-d5}, [r6, : 128]!
	vst1.8		d4, [r6, : 64]
	add		r6, r3, #0
	movw		r7, #960
	sub		r7, r7, #2
	neg		r7, r7
	sub		r7, r7, r7, LSL #7
	str		r7, [r6]
	add		r6, sp, #672
	vld1.8		{d4-d5}, [r1]!
	vld1.8		{d6-d7}, [r1]
	vst1.8		{d4-d5}, [r6, : 128]!
	vst1.8		{d6-d7}, [r6, : 128]
	sub		r1, r6, #16
	ldrb		r6, [r1]
	and		r6, r6, #248
	strb		r6, [r1]
	ldrb		r6, [r1, #31]
	and		r6, r6, #127
	orr		r6, r6, #64
	strb		r6, [r1, #31]
	vmov.i64	q2, #0xffffffff
	vshr.u64	q3, q2, #7
	vshr.u64	q2, q2, #6
	vld1.8		{d8}, [r2]
	vld1.8		{d10}, [r2]
	add		r2, r2, #6
	vld1.8		{d12}, [r2]
	vld1.8		{d14}, [r2]
	add		r2, r2, #6
	vld1.8		{d16}, [r2]
	add		r2, r2, #4
	vld1.8		{d18}, [r2]
	vld1.8		{d20}, [r2]
	add		r2, r2, #6
	vld1.8		{d22}, [r2]
	add		r2, r2, #2
	vld1.8		{d24}, [r2]
	vld1.8		{d26}, [r2]
	vshr.u64	q5, q5, #26
	vshr.u64	q6, q6, #3
	vshr.u64	q7, q7, #29
	vshr.u64	q8, q8, #6

Annotation

Implementation Notes