Files
gasm-sdk/verify/testdata/linkreg_riscv64.s
T

57 lines
1.4 KiB
ArmAsm
Raw Normal View History

// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
// SPDX-License-Identifier: BSD-3-Clause
#include "textflag.h"
// The link-regression kernel for riscv64, the amd64 one's sibling: stack
// discipline (add), an intra-file call (probe calling seven, the
// R_RISCV_CALL pair), an AUIPC+I-type pair against static data (word<>,
// R_RISCV_PCREL_ITYPE), a symbol-valued DATA field (entry holding
// seven's address, R_ADDR), NOPTR data outside the GC's type scan
// (counter) and the data section itself. The callee's result slot sits
// at the caller's SP+8, the riscv64 ABI0 frame convention.
// func add(a, b int64) int64
TEXT ·add(SB), NOSPLIT, $0-24
MOV a+0(FP), X10
MOV b+8(FP), X11
ADD X11, X10, X10
MOV X10, ret+16(FP)
RET
// func seven() int64
TEXT ·seven(SB), NOSPLIT, $0-8
MOV $7, X10
MOV X10, ret+0(FP)
RET
// func probe() int64 = seven() + word<>(SB)
TEXT ·probe(SB), NOSPLIT, $8-8
CALL ·seven(SB)
MOV 8(SP), X10
MOV word<>(SB), X11
ADD X11, X10, X10
MOV X10, ret+0(FP)
RET
// func entryAddr() uintptr
TEXT ·entryAddr(SB), NOSPLIT, $0-8
MOV entry(SB), X10
MOV X10, ret+0(FP)
RET
// func counterVal() int64
TEXT ·counterVal(SB), NOSPLIT, $0-8
MOV counter(SB), X10
MOV X10, ret+0(FP)
RET
GLOBL word<>(SB), RODATA, $8
DATA word<>+0(SB)/8, $0x0fedcba987654321
GLOBL entry(SB), RODATA, $8
DATA entry+0(SB)/8, $·seven(SB)
GLOBL counter(SB), NOPTR, $8
DATA counter+0(SB)/8, $1234