// This file is generated from a similarly-named Perl script in the BoringSSL
// source tree. Do not edit by hand.

#include <openssl/asm_base.h>

#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_AARCH64) && defined(_WIN32)
#include <openssl/arm_arch.h>

.arch	armv8-a
.text

# int CRYPTO_rndr_multiple8(uint8_t *out, const size_t len)
.globl	CRYPTO_rndr_multiple8

.def CRYPTO_rndr_multiple8
   .type 32
.endef
.align	4
CRYPTO_rndr_multiple8:
	cbz	x1, Lrndr_multiple8_error  // len = 0 is not supported

Lrndr_multiple8_loop:
	mrs	x2, s3_3_c2_c4_0             // rndr instruction https://developer.arm.com/documentation/ddi0601/2024-09/Index-by-Encoding
	cbz	x2, Lrndr_multiple8_error   // Check if rndr failed

	str	x2, [x0], #8               // Copy 8 bytes to *out and increment pointer by 8
	sub	x1, x1, #8
	cbz	x1, Lrndr_multiple8_done       // If multiple of 8 this will be 0 eventually
	b	Lrndr_multiple8_loop

Lrndr_multiple8_done:
	mov	x0, #1                            // Return value success
	ret

Lrndr_multiple8_error:
	mov	x0, #0                            // Return value error
	ret

#endif  // !OPENSSL_NO_ASM && defined(OPENSSL_AARCH64) && defined(_WIN32)
