Linux Audio

Check our new training course

Loading...
v5.4
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * linux/arch/unicore32/include/asm/assembler.h
  4 *
  5 * Code specific to PKUnity SoC and UniCore ISA
  6 *
  7 * Copyright (C) 2001-2010 GUAN Xue-tao
 
 
 
 
  8 *
  9 *  Do not include any C declarations in this file - it is included by
 10 *  assembler source.
 11 */
 12#ifndef __ASSEMBLY__
 13#error "Only include this from assembly code"
 14#endif
 15
 16#include <asm/ptrace.h>
 17
 18/*
 19 * Little Endian independent macros for shifting bytes within registers.
 20 */
 21#define pull            >>
 22#define push            <<
 23#define get_byte_0      << #0
 24#define get_byte_1	>> #8
 25#define get_byte_2	>> #16
 26#define get_byte_3	>> #24
 27#define put_byte_0      << #0
 28#define put_byte_1	<< #8
 29#define put_byte_2	<< #16
 30#define put_byte_3	<< #24
 31
 32#define cadd		cmpadd
 33#define cand		cmpand
 34#define csub		cmpsub
 35#define cxor		cmpxor
 36
 37/*
 38 * Enable and disable interrupts
 39 */
 40	.macro disable_irq, temp
 41	mov	\temp, asr
 42	andn     \temp, \temp, #0xFF
 43	or	\temp, \temp, #PSR_I_BIT | PRIV_MODE
 44	mov.a	asr, \temp
 45	.endm
 46
 47	.macro enable_irq, temp
 48	mov	\temp, asr
 49	andn     \temp, \temp, #0xFF
 50	or	\temp, \temp, #PRIV_MODE
 51	mov.a	asr, \temp
 52	.endm
 53
 54#define USER(x...)				\
 559999:	x;					\
 56	.pushsection __ex_table, "a";		\
 57	.align	3;				\
 58	.long	9999b, 9001f;			\
 59	.popsection
 60
 61	.macro	notcond, cond, nexti = .+8
 62	.ifc	\cond, eq
 63		bne	\nexti
 64	.else;	.ifc	\cond, ne
 65		beq	\nexti
 66	.else;	.ifc	\cond, ea
 67		bub	\nexti
 68	.else;	.ifc	\cond, ub
 69		bea	\nexti
 70	.else;	.ifc	\cond, fs
 71		bns	\nexti
 72	.else;	.ifc	\cond, ns
 73		bfs	\nexti
 74	.else;	.ifc	\cond, fv
 75		bnv	\nexti
 76	.else;	.ifc	\cond, nv
 77		bfv	\nexti
 78	.else;	.ifc	\cond, ua
 79		beb	\nexti
 80	.else;	.ifc	\cond, eb
 81		bua	\nexti
 82	.else;	.ifc	\cond, eg
 83		bsl	\nexti
 84	.else;	.ifc	\cond, sl
 85		beg	\nexti
 86	.else;	.ifc	\cond, sg
 87		bel	\nexti
 88	.else;	.ifc	\cond, el
 89		bsg	\nexti
 90	.else;	.ifnc	\cond, al
 91		.error  "Unknown cond in notcond macro argument"
 92	.endif;	.endif;	.endif;	.endif;	.endif;	.endif;	.endif
 93	.endif;	.endif;	.endif;	.endif;	.endif;	.endif;	.endif
 94	.endif
 95	.endm
 96
 97	.macro	usracc, instr, reg, ptr, inc, cond, rept, abort
 98	.rept	\rept
 99	notcond	\cond, .+8
1009999 :
101	.if	\inc == 1
102	\instr\()b.u \reg, [\ptr], #\inc
103	.elseif	\inc == 4
104	\instr\()w.u \reg, [\ptr], #\inc
105	.else
106	.error	"Unsupported inc macro argument"
107	.endif
108
109	.pushsection __ex_table, "a"
110	.align	3
111	.long	9999b, \abort
112	.popsection
113	.endr
114	.endm
115
116	.macro	strusr, reg, ptr, inc, cond = al, rept = 1, abort = 9001f
117	usracc	st, \reg, \ptr, \inc, \cond, \rept, \abort
118	.endm
119
120	.macro	ldrusr, reg, ptr, inc, cond = al, rept = 1, abort = 9001f
121	usracc	ld, \reg, \ptr, \inc, \cond, \rept, \abort
122	.endm
123
124	.macro	nop8
125	.rept	8
126		nop
127	.endr
128	.endm
v4.6
 
  1/*
  2 * linux/arch/unicore32/include/asm/assembler.h
  3 *
  4 * Code specific to PKUnity SoC and UniCore ISA
  5 *
  6 * Copyright (C) 2001-2010 GUAN Xue-tao
  7 *
  8 * This program is free software; you can redistribute it and/or modify
  9 * it under the terms of the GNU General Public License version 2 as
 10 * published by the Free Software Foundation.
 11 *
 12 *  Do not include any C declarations in this file - it is included by
 13 *  assembler source.
 14 */
 15#ifndef __ASSEMBLY__
 16#error "Only include this from assembly code"
 17#endif
 18
 19#include <asm/ptrace.h>
 20
 21/*
 22 * Little Endian independent macros for shifting bytes within registers.
 23 */
 24#define pull            >>
 25#define push            <<
 26#define get_byte_0      << #0
 27#define get_byte_1	>> #8
 28#define get_byte_2	>> #16
 29#define get_byte_3	>> #24
 30#define put_byte_0      << #0
 31#define put_byte_1	<< #8
 32#define put_byte_2	<< #16
 33#define put_byte_3	<< #24
 34
 35#define cadd		cmpadd
 36#define cand		cmpand
 37#define csub		cmpsub
 38#define cxor		cmpxor
 39
 40/*
 41 * Enable and disable interrupts
 42 */
 43	.macro disable_irq, temp
 44	mov	\temp, asr
 45	andn     \temp, \temp, #0xFF
 46	or	\temp, \temp, #PSR_I_BIT | PRIV_MODE
 47	mov.a	asr, \temp
 48	.endm
 49
 50	.macro enable_irq, temp
 51	mov	\temp, asr
 52	andn     \temp, \temp, #0xFF
 53	or	\temp, \temp, #PRIV_MODE
 54	mov.a	asr, \temp
 55	.endm
 56
 57#define USER(x...)				\
 589999:	x;					\
 59	.pushsection __ex_table, "a";		\
 60	.align	3;				\
 61	.long	9999b, 9001f;			\
 62	.popsection
 63
 64	.macro	notcond, cond, nexti = .+8
 65	.ifc	\cond, eq
 66		bne	\nexti
 67	.else;	.ifc	\cond, ne
 68		beq	\nexti
 69	.else;	.ifc	\cond, ea
 70		bub	\nexti
 71	.else;	.ifc	\cond, ub
 72		bea	\nexti
 73	.else;	.ifc	\cond, fs
 74		bns	\nexti
 75	.else;	.ifc	\cond, ns
 76		bfs	\nexti
 77	.else;	.ifc	\cond, fv
 78		bnv	\nexti
 79	.else;	.ifc	\cond, nv
 80		bfv	\nexti
 81	.else;	.ifc	\cond, ua
 82		beb	\nexti
 83	.else;	.ifc	\cond, eb
 84		bua	\nexti
 85	.else;	.ifc	\cond, eg
 86		bsl	\nexti
 87	.else;	.ifc	\cond, sl
 88		beg	\nexti
 89	.else;	.ifc	\cond, sg
 90		bel	\nexti
 91	.else;	.ifc	\cond, el
 92		bsg	\nexti
 93	.else;	.ifnc	\cond, al
 94		.error  "Unknown cond in notcond macro argument"
 95	.endif;	.endif;	.endif;	.endif;	.endif;	.endif;	.endif
 96	.endif;	.endif;	.endif;	.endif;	.endif;	.endif;	.endif
 97	.endif
 98	.endm
 99
100	.macro	usracc, instr, reg, ptr, inc, cond, rept, abort
101	.rept	\rept
102	notcond	\cond, .+8
1039999 :
104	.if	\inc == 1
105	\instr\()b.u \reg, [\ptr], #\inc
106	.elseif	\inc == 4
107	\instr\()w.u \reg, [\ptr], #\inc
108	.else
109	.error	"Unsupported inc macro argument"
110	.endif
111
112	.pushsection __ex_table, "a"
113	.align	3
114	.long	9999b, \abort
115	.popsection
116	.endr
117	.endm
118
119	.macro	strusr, reg, ptr, inc, cond = al, rept = 1, abort = 9001f
120	usracc	st, \reg, \ptr, \inc, \cond, \rept, \abort
121	.endm
122
123	.macro	ldrusr, reg, ptr, inc, cond = al, rept = 1, abort = 9001f
124	usracc	ld, \reg, \ptr, \inc, \cond, \rept, \abort
125	.endm
126
127	.macro	nop8
128	.rept	8
129		nop
130	.endr
131	.endm