mirror of
https://github.com/golang/go
synced 2024-11-24 04:40:24 -07:00
reflect: implement float32 for regabi riscv64
This CL implement archFloat32FromReg and archFloat32ToReg need for riscv64 due to differences in the way float32 are represented in registers as compared to other platforms. Change-Id: I5eab27df242f84b387b0c8dc7f347c93b3fd9df0 Reviewed-on: https://go-review.googlesource.com/c/go/+/403134 Run-TryBot: mzh <mzh@golangcn.org> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: David Chase <drchase@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
7cf3268666
commit
93218ea1a7
@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build !ppc64 && !ppc64le
|
||||
//go:build !ppc64 && !ppc64le && !riscv64
|
||||
|
||||
package reflect
|
||||
|
||||
|
27
src/reflect/float32reg_riscv64.s
Normal file
27
src/reflect/float32reg_riscv64.s
Normal file
@ -0,0 +1,27 @@
|
||||
// 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
|
||||
|
8
src/reflect/stubs_riscv64.go
Normal file
8
src/reflect/stubs_riscv64.go
Normal file
@ -0,0 +1,8 @@
|
||||
// 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.
|
||||
|
||||
package reflect
|
||||
|
||||
func archFloat32FromReg(reg uint64) float32
|
||||
func archFloat32ToReg(val float32) uint64
|
Loading…
Reference in New Issue
Block a user