| // Copyright 2025 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| //go:build valgrind && linux | |
| #include "textflag.h" | |
| // See valgrind_amd64.s for notes about this assembly. | |
| // func valgrindClientRequest(uintptr, uintptr, uintptr, uintptr, uintptr, uintptr) (ret uintptr) | |
| TEXT runtime·valgrindClientRequest(SB), NOSPLIT, $0-56 | |
| // Load the address of the first of the (contiguous) arguments into x4. | |
| MOVD $args+0(FP), R4 | |
| // Zero x3, since some requests may not populate it. | |
| MOVD ZR, R3 | |
| // Emit the special preamble. | |
| ROR $3, R12; ROR $13, R12 | |
| ROR $51, R12; ROR $61, R12 | |
| // "Execute" the client request. | |
| ORR R10, R10 | |
| // Copy the result out of x3. | |
| MOVD R3, ret+48(FP) | |
| RET |