| // Copyright 2022 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. | 
 |  | 
 | #include "textflag.h" | 
 |  | 
 | // riscv64 allows 32-bit floats to live in the bottom | 
 | // part of the register, it expects them to be NaN-boxed. | 
 | // These functions are needed to ensure correct conversions | 
 | // on riscv64. | 
 |  | 
 | // Convert float32->uint64 | 
 | TEXT ·archFloat32ToReg(SB),NOSPLIT,$0-16 | 
 | 	MOVF	val+0(FP), F1 | 
 | 	MOVD	F1, ret+8(FP) | 
 | 	RET | 
 |  | 
 | // Convert uint64->float32 | 
 | TEXT ·archFloat32FromReg(SB),NOSPLIT,$0-12 | 
 | 	// Normally a float64->float32 conversion | 
 | 	// would need rounding, but riscv64 store valid | 
 | 	// float32 in the lower 32 bits, thus we only need to | 
 | 	// unboxed the NaN-box by store a float32. | 
 | 	MOVD	reg+0(FP), F1 | 
 | 	MOVF	F1, ret+8(FP) | 
 | 	RET | 
 |  |