Files

41 lines
1.0 KiB
ArmAsm
Raw Permalink Normal View History

// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
// SPDX-License-Identifier: BSD-3-Clause
// Differential kernel for the riscv64 wide MOV immediates: the 64-bit
// constants the toolchain materialises through shifted 32-bit parts or loads
// from its pooled $i64 data symbols, and the frame-address immediates
// ($name+off(FP)) lowered to ADDI against the hardware stack pointer.
#include "textflag.h"
TEXT ·poolload(SB), NOSPLIT, $0-16
MOV arg+0(FP), X10
MOV $0x0101010101010101, X16
MUL X10, X16, X17
MOV $0x123456789, X18
ADD X18, X17, X17
MOV X17, ret+8(FP)
RET
TEXT ·shiftload(SB), NOSPLIT, $0-16
MOV arg+0(FP), X10
MOV $0x8000000000000000, X20
MOV $0x100000000, X21
ADD X21, X20, X20
MOV $0x000fffffffffffda, X22
XOR X22, X20, X20
ADD X20, X10, X10
MOV X10, ret+8(FP)
RET
TEXT ·frameaddr(SB), NOSPLIT, $32-16
MOV $ret+8(FP), X12
MOV $scratch+0(FP), X13
ADD X12, X13, X13
MOV $slot+16(SP), X14
SUB X14, X13, X13
MOV X13, ret+8(FP)
RET
GLOBL scratch<>(SB), NOPTR, $8