// Copyright (c) 2026 Petr Balvín (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