ARC: add asm-compat macros
Add asm-compat macroses to be able to co create assembler code which works and can be build for both ARCv2 and ARCv3 ISAs Signed-off-by: Vineet Gupta <vgupta@synopsys.com> Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> Signed-off-by: Evgeniy Paltsev <PaltsevEvgeniy@gmail.com>
This commit is contained in:
parent
359f3494a3
commit
3d56fff7a4
3 changed files with 261 additions and 0 deletions
101
include/arch/arc/asm-compat/asm-macro-32-bit-gnu.h
Normal file
101
include/arch/arc/asm-compat/asm-macro-32-bit-gnu.h
Normal file
|
@ -0,0 +1,101 @@
|
|||
/* SPDX-License-Identifier: Apache-2.0 */
|
||||
/*
|
||||
* Copyright (C) 2021 Synopsys, Inc. (www.synopsys.com)
|
||||
*
|
||||
* Author: Vineet Gupta <vgupta@synopsys.com>
|
||||
*
|
||||
* ALU/Memory instructions pseudo-mnemonics for ARCv2 and ARC32 ISA
|
||||
*/
|
||||
|
||||
.irp cc,,.hi,.nz
|
||||
.macro MOVR\cc d, s
|
||||
mov\cc \d, \s
|
||||
.endm
|
||||
.endr
|
||||
|
||||
.irp aa,,.ab,.as,.aw
|
||||
.macro LDR\aa d, s, off=0
|
||||
ld\aa \d, [\s, \off]
|
||||
.endm
|
||||
.endr
|
||||
|
||||
.irp aa,,.ab,.as,.aw
|
||||
.macro STR\aa d, s, off=0
|
||||
; workaround assembler barfing for ST r, [@symb, 0]
|
||||
.if \off == 0
|
||||
st\aa \d, [\s]
|
||||
.else
|
||||
st\aa \d, [\s, \off]
|
||||
.endif
|
||||
.endm
|
||||
.endr
|
||||
|
||||
.macro PUSHR r
|
||||
push \r
|
||||
.endm
|
||||
|
||||
.macro POPR r
|
||||
pop \r
|
||||
.endm
|
||||
|
||||
.macro LRR d, aux
|
||||
lr \d, \aux
|
||||
.endm
|
||||
|
||||
.macro SRR d, aux
|
||||
sr \d, \aux
|
||||
.endm
|
||||
|
||||
.irp cc,,.nz
|
||||
.macro ADDR\cc d, s, v
|
||||
add\cc \d, \s, \v
|
||||
.endm
|
||||
.endr
|
||||
|
||||
.irp cc,,.nz
|
||||
.macro ADD2R\cc d, s, v
|
||||
add2\cc \d, \s, \v
|
||||
.endm
|
||||
.endr
|
||||
|
||||
.macro ADD3R d, s, v
|
||||
add3 \d, \s, \v
|
||||
.endm
|
||||
|
||||
.macro SUBR d, s, v
|
||||
sub \d, \s, \v
|
||||
.endm
|
||||
|
||||
.macro BMSKNR d, s, v
|
||||
bmskn \d, \s, \v
|
||||
.endm
|
||||
|
||||
.macro LSRR d, s, v
|
||||
lsr \d, \s, \v
|
||||
.endm
|
||||
|
||||
.macro ASLR d, s, v
|
||||
asl \d, \s, \v
|
||||
.endm
|
||||
|
||||
.macro ANDR d, s, v
|
||||
and \d, \s, \v
|
||||
.endm
|
||||
|
||||
.macro ORR, d, s, v
|
||||
or \d, \s, \v
|
||||
.endm
|
||||
|
||||
.irp cc,ne,eq
|
||||
.macro BRR\cc d, s, lbl
|
||||
br\cc \d, \s, \lbl
|
||||
.endm
|
||||
.endr
|
||||
|
||||
.macro BREQR d, s, lbl
|
||||
breq \d, \s, \lbl
|
||||
.endm
|
||||
|
||||
.macro CMPR op1, op2
|
||||
cmp \op1, \op2
|
||||
.endm
|
113
include/arch/arc/asm-compat/asm-macro-64-bit-gnu.h
Normal file
113
include/arch/arc/asm-compat/asm-macro-64-bit-gnu.h
Normal file
|
@ -0,0 +1,113 @@
|
|||
/* SPDX-License-Identifier: Apache-2.0 */
|
||||
/*
|
||||
* Copyright (C) 2021 Synopsys, Inc. (www.synopsys.com)
|
||||
*
|
||||
* Author: Vineet Gupta <vgupta@synopsys.com>
|
||||
*
|
||||
* pseudo-mnemonics for ALU/Memory instructions for ARC64 ISA
|
||||
*/
|
||||
|
||||
.irp cc,,.hi,.nz
|
||||
.macro MOVR\cc d, s
|
||||
movl\cc \d, \s
|
||||
.endm
|
||||
.endr
|
||||
|
||||
.irp aa,,.ab,.as,.aw
|
||||
.macro LDR\aa d, s, off=0
|
||||
ldl\aa \d, [\s, \off]
|
||||
.endm
|
||||
.endr
|
||||
|
||||
.irp aa,.ab,.as,.aw
|
||||
.macro STR\aa d, s, off=0
|
||||
; workaround assembler barfing for ST r, [@symb, 0]
|
||||
.if \off == 0
|
||||
stl\aa \d, [\s]
|
||||
.else
|
||||
stl\aa \d, [\s, \off]
|
||||
.endif
|
||||
.endm
|
||||
.endr
|
||||
|
||||
.macro STR d, s, off=0
|
||||
.if \off == 0
|
||||
stl \d, [\s]
|
||||
.else
|
||||
.if \off > 256
|
||||
STR.as \d, \s, \off / 8
|
||||
.else
|
||||
stl \d, [\s, \off]
|
||||
.endif
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro PUSHR r
|
||||
pushl \r
|
||||
.endm
|
||||
|
||||
.macro POPR r
|
||||
popl \r
|
||||
.endm
|
||||
|
||||
.macro LRR d, aux
|
||||
lrl \d, \aux
|
||||
.endm
|
||||
|
||||
.macro SRR d, aux
|
||||
srl \d, \aux
|
||||
.endm
|
||||
|
||||
.irp cc,,.nz
|
||||
.macro ADDR\cc d, s, v
|
||||
addl\cc \d, \s, \v
|
||||
.endm
|
||||
.endr
|
||||
|
||||
.irp cc,,.nz
|
||||
.macro ADD2R\cc d, s, v
|
||||
add2l\cc \d, \s, \v
|
||||
.endm
|
||||
.endr
|
||||
|
||||
.macro ADD3R d, s, v
|
||||
add3l \d, \s, \v
|
||||
.endm
|
||||
|
||||
.macro SUBR d, s, v
|
||||
subl \d, \s, \v
|
||||
.endm
|
||||
|
||||
.macro BMSKNR d, s, v
|
||||
bmsknl \d, \s, \v
|
||||
.endm
|
||||
|
||||
.macro LSRR d, s, v
|
||||
lsrl \d, \s, \v
|
||||
.endm
|
||||
|
||||
.macro ASLR d, s, v
|
||||
asll \d, \s, \v
|
||||
.endm
|
||||
|
||||
.macro ANDR d, s, v
|
||||
andl \d, \s, \v
|
||||
.endm
|
||||
|
||||
.macro ORR, d, s, v
|
||||
orl \d, \s, \v
|
||||
.endm
|
||||
|
||||
.irp cc,ne,eq
|
||||
.macro BRR\cc d, s, lbl
|
||||
br\cc\()l \d, \s, \lbl
|
||||
.endm
|
||||
.endr
|
||||
|
||||
.macro BREQR d, s, lbl
|
||||
breql \d, \s, \lbl
|
||||
.endm
|
||||
|
||||
.macro CMPR op1, op2
|
||||
cmpl \op1, \op2
|
||||
.endm
|
47
include/arch/arc/asm-compat/assembler.h
Normal file
47
include/arch/arc/asm-compat/assembler.h
Normal file
|
@ -0,0 +1,47 @@
|
|||
/* SPDX-License-Identifier: Apache-2.0 */
|
||||
/*
|
||||
* Copyright (C) 2021 Synopsys, Inc. (www.synopsys.com)
|
||||
*
|
||||
* Author: Vineet Gupta <vgupta@synopsys.com>
|
||||
*
|
||||
* Top level include file provding ISA pseudo-mnemonics for use in assemmler
|
||||
* and inline assembly.
|
||||
*
|
||||
* - Helps code reuse across ARC64/ARC32/ARCv2
|
||||
* e.g. "LDR" maps to 'LD' on 32-bit ISA, 'LDL' on 64-bit ARCv2/ARC64
|
||||
*
|
||||
* - Provides emulation with multiple instructions if the case be
|
||||
* e.g. "DBNZ" implemented using 'SUB' and 'BRNE'
|
||||
*
|
||||
* - Looks more complex than it really is: mainly because Kconfig defines
|
||||
* are not "honored" in inline assembly. So each varaint is unconditional
|
||||
* code in a standalone file with Kconfig based #ifdef'ry here. During the
|
||||
* build process, the "C" preprocessor runs through this file, leaving
|
||||
* just the final variant include in code fed to compiler/assembler.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARC_ASM_H
|
||||
#define __ASM_ARC_ASM_H 1
|
||||
|
||||
#ifdef _ASMLANGUAGE
|
||||
|
||||
#if defined(CONFIG_ISA_ARCV3) && defined(CONFIG_64BIT)
|
||||
#define ARC_PTR .xword
|
||||
#define ARC_REGSZ 8
|
||||
#define ARC_REGSHIFT 3
|
||||
#include "asm-macro-64-bit-gnu.h"
|
||||
#else
|
||||
#define ARC_PTR .word
|
||||
#define ARC_REGSZ 4
|
||||
#define ARC_REGSHIFT 2
|
||||
#include "asm-macro-32-bit-mwdt.h"
|
||||
|
||||
#endif
|
||||
|
||||
#else /* !_ASMLANGUAGE */
|
||||
|
||||
#error "asm-compat macroses used not in assembler code!"
|
||||
|
||||
#endif /* _ASMLANGUAGE */
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue