Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

  • 61acfe9
  • /
  • arch
  • /
  • unicore32
  • /
  • mm
  • /
  • proc-macros.S
Raw File Download
Permalinks

To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
Select below a type of object currently browsed in order to display its associated SWHID and permalink.

  • content
  • directory
content badge Iframe embedding
swh:1:cnt:51560d68c894d2bc5863cbd0ff99ab9ff637b4ee
directory badge Iframe embedding
swh:1:dir:af4444bdfa4d5c4400b704d72440960cce611069
Citations

This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
Select below a type of object currently browsed in order to generate citations for them.

  • content
  • directory
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
proc-macros.S
/*
 * linux/arch/unicore32/mm/proc-macros.S
 *
 * Code specific to PKUnity SoC and UniCore ISA
 *
 * Copyright (C) 2001-2010 GUAN Xue-tao
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * We need constants.h for:
 *  VMA_VM_MM
 *  VMA_VM_FLAGS
 *  VM_EXEC
 */
#include <generated/asm-offsets.h>
#include <asm/thread_info.h>
#include <asm/memory.h>

/*
 * the cache line sizes of the I and D cache are the same
 */
#define CACHE_LINESIZE	32

/*
 * This is the maximum size of an area which will be invalidated
 * using the single invalidate entry instructions.  Anything larger
 * than this, and we go for the whole cache.
 *
 * This value should be chosen such that we choose the cheapest
 * alternative.
 */
#ifdef CONFIG_CPU_UCV2
#define MAX_AREA_SIZE	0x800		/* 64 cache line */
#endif

/*
 * vma_vm_mm - get mm pointer from vma pointer (vma->vm_mm)
 */
	.macro	vma_vm_mm, rd, rn
	ldw	\rd, [\rn+], #VMA_VM_MM
	.endm

/*
 * vma_vm_flags - get vma->vm_flags
 */
	.macro	vma_vm_flags, rd, rn
	ldw	\rd, [\rn+], #VMA_VM_FLAGS
	.endm

	.macro	tsk_mm, rd, rn
	ldw	\rd, [\rn+], #TI_TASK
	ldw	\rd, [\rd+], #TSK_ACTIVE_MM
	.endm

/*
 * act_mm - get current->active_mm
 */
	.macro	act_mm, rd
	andn	\rd, sp, #8128
	andn	\rd, \rd, #63
	ldw	\rd, [\rd+], #TI_TASK
	ldw	\rd, [\rd+], #TSK_ACTIVE_MM
	.endm

/*
 * mmid - get context id from mm pointer (mm->context.id)
 */
	.macro	mmid, rd, rn
	ldw	\rd, [\rn+], #MM_CONTEXT_ID
	.endm

/*
 * mask_asid - mask the ASID from the context ID
 */
	.macro	asid, rd, rn
	and	\rd, \rn, #255
	.endm

	.macro	crval, clear, mmuset, ucset
	.word	\clear
	.word	\mmuset
	.endm

#ifndef CONFIG_CPU_DCACHE_LINE_DISABLE
/*
 * va2pa va, pa, tbl, msk, off, err
 *	This macro is used to translate virtual address to its physical address.
 *
 *	va: virtual address
 *	pa: physical address, result is stored in this register
 *	tbl, msk, off:	temp registers, will be destroyed
 *	err: jump to error label if the physical address not exist
 * NOTE: all regs must be different
 */
	.macro	va2pa, va, pa, tbl, msk, off, err=990f
	movc	\pa, p0.c2, #0
	mov	\off, \va >> #22		@ off <- index of 1st page table
	adr	\tbl, 910f			@ tbl <- table of 1st page table
900:						@ ---- handle 1, 2 page table
	add	\pa, \pa, #PAGE_OFFSET		@ pa <- virt addr of page table
	ldw	\pa, [\pa+], \off << #2		@ pa <- the content of pt
	cand.a	\pa, #4				@ test exist bit
	beq	\err				@ if not exist
	and	\off, \pa, #3			@ off <- the last 2 bits
	add	\tbl, \tbl, \off << #3		@ cmove table pointer
	ldw	\msk, [\tbl+], #0		@ get the mask
	ldw	pc, [\tbl+], #4
930:						@ ---- handle 2nd page table
	and	\pa, \pa, \msk			@ pa <- phys addr of 2nd pt
	mov	\off, \va << #10
	cntlo	\tbl, \msk			@ use tbl as temp reg
	mov	\off, \off >> \tbl
	mov	\off, \off >> #2		@ off <- index of 2nd pt
	adr	\tbl, 920f			@ tbl <- table of 2nd pt
	b	900b
910:						@ 1st level page table
	.word	0xfffff000, 930b		@ second level page table
	.word	0xfffffc00, 930b		@ second level large page table
	.word	0x00000000, \err		@ invalid
	.word	0xffc00000, 980f		@ super page

920:						@ 2nd level page table
	.word	0xfffff000, 980f		@ page
	.word	0xffffc000, 980f		@ middle page
	.word	0xffff0000, 980f		@ large page
	.word	0x00000000, \err		@ invalid
980:
	andn	\tbl, \va, \msk
	and	\pa, \pa, \msk
	or	\pa, \pa, \tbl
990:
	.endm
#endif

	.macro dcacheline_flush, addr, t1, t2
	mov	\t1, \addr << #20
	ldw	\t2, =_stext			@ _stext must ALIGN(4096)
	add	\t2, \t2, \t1 >> #20
	ldw	\t1, [\t2+], #0x0000
	ldw	\t1, [\t2+], #0x1000
	ldw	\t1, [\t2+], #0x2000
	ldw	\t1, [\t2+], #0x3000
	.endm

back to top

Software Heritage — Copyright (C) 2015–2025, The Software Heritage developers. License: GNU AGPLv3+.
The source code of Software Heritage itself is available on our development forge.
The source code files archived by Software Heritage are available under their own copyright and licenses.
Terms of use: Archive access, API— Contact— JavaScript license information— Web API