arch/alpha/lib/ev6-memset.S
Source file repositories/reference/linux-study-clean/arch/alpha/lib/ev6-memset.S
File Facts
- System
- Linux kernel
- Corpus path
arch/alpha/lib/ev6-memset.S- Extension
.S- Size
- 16396 bytes
- Lines
- 606
- Domain
- Architecture Layer
- Bucket
- arch/alpha
- Inferred role
- Architecture Layer: exported/initcall integration point
- Status
- integration implementation candidate
Why This File Exists
CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
Dependency Surface
linux/export.h
Detected Declarations
export ___memsetexport __constant_c_memsetexport __memset16export memsetexport __memset
Annotated Snippet
#include <linux/export.h>
.set noat
.set noreorder
.text
.globl memset
.globl __memset
.globl ___memset
.globl __memset16
.globl __constant_c_memset
.ent ___memset
.align 5
___memset:
.frame $30,0,$26,0
.prologue 0
/*
* Serious stalling happens. The only way to mitigate this is to
* undertake a major re-write to interleave the constant materialization
* with other parts of the fall-through code. This is important, even
* though it makes maintenance tougher.
* Do this later.
*/
and $17,255,$1 # E : 00000000000000ch
insbl $17,1,$2 # U : 000000000000ch00
bis $16,$16,$0 # E : return value
ble $18,end_b # U : zero length requested?
addq $18,$16,$6 # E : max address to write to
bis $1,$2,$17 # E : 000000000000chch
insbl $1,2,$3 # U : 0000000000ch0000
insbl $1,3,$4 # U : 00000000ch000000
or $3,$4,$3 # E : 00000000chch0000
inswl $17,4,$5 # U : 0000chch00000000
xor $16,$6,$1 # E : will complete write be within one quadword?
inswl $17,6,$2 # U : chch000000000000
or $17,$3,$17 # E : 00000000chchchch
or $2,$5,$2 # E : chchchch00000000
bic $1,7,$1 # E : fit within a single quadword?
and $16,7,$3 # E : Target addr misalignment
or $17,$2,$17 # E : chchchchchchchch
beq $1,within_quad_b # U :
nop # E :
beq $3,aligned_b # U : target is 0mod8
/*
* Target address is misaligned, and won't fit within a quadword
*/
ldq_u $4,0($16) # L : Fetch first partial
bis $16,$16,$5 # E : Save the address
insql $17,$16,$2 # U : Insert new bytes
subq $3,8,$3 # E : Invert (for addressing uses)
addq $18,$3,$18 # E : $18 is new count ($3 is negative)
mskql $4,$16,$4 # U : clear relevant parts of the quad
subq $16,$3,$16 # E : $16 is new aligned destination
bis $2,$4,$1 # E : Final bytes
nop
stq_u $1,0($5) # L : Store result
nop
nop
.align 4
aligned_b:
/*
* We are now guaranteed to be quad aligned, with at least
Annotation
- Immediate include surface: `linux/export.h`.
- Detected declarations: `export ___memset`, `export __constant_c_memset`, `export __memset16`, `export memset`, `export __memset`.
- Atlas domain: Architecture Layer / arch/alpha.
- Implementation status: integration implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.