/*
 * SPDX-License-Identifier: BSD-2-Clause
 *
 * Copyright (c) 2019 Western Digital Corporation or its affiliates.
 *
 * Authors:
 *   Anup Patel <anup.patel@wdc.com>
 */

#ifdef __riscv_flen

#if __riscv_flen != 64
# error single-float only is not supported
#endif

#define get_f32(which) fmv.x.s a0, which; jr t0
#define put_f32(which) fmv.s.x which, a0; jr t0
#if __riscv_xlen == 64
# define get_f64(which) fmv.x.d a0, which; jr t0
# define put_f64(which) fmv.d.x which, a0; jr t0
#else
# define get_f64(which) fsd which, 0(a0); jr t0
# define put_f64(which) fld which, 0(a0); jr t0
#endif

	.text
	.option norvc
	.globl get_f32_reg
	get_f32_reg:
		get_f32(f0)
		get_f32(f1)
		get_f32(f2)
		get_f32(f3)
		get_f32(f4)
		get_f32(f5)
		get_f32(f6)
		get_f32(f7)
		get_f32(f8)
		get_f32(f9)
		get_f32(f10)
		get_f32(f11)
		get_f32(f12)
		get_f32(f13)
		get_f32(f14)
		get_f32(f15)
		get_f32(f16)
		get_f32(f17)
		get_f32(f18)
		get_f32(f19)
		get_f32(f20)
		get_f32(f21)
		get_f32(f22)
		get_f32(f23)
		get_f32(f24)
		get_f32(f25)
		get_f32(f26)
		get_f32(f27)
		get_f32(f28)
		get_f32(f29)
		get_f32(f30)
		get_f32(f31)

	.text
	.globl put_f32_reg
	put_f32_reg:
		put_f32(f0)
		put_f32(f1)
		put_f32(f2)
		put_f32(f3)
		put_f32(f4)
		put_f32(f5)
		put_f32(f6)
		put_f32(f7)
		put_f32(f8)
		put_f32(f9)
		put_f32(f10)
		put_f32(f11)
		put_f32(f12)
		put_f32(f13)
		put_f32(f14)
		put_f32(f15)
		put_f32(f16)
		put_f32(f17)
		put_f32(f18)
		put_f32(f19)
		put_f32(f20)
		put_f32(f21)
		put_f32(f22)
		put_f32(f23)
		put_f32(f24)
		put_f32(f25)
		put_f32(f26)
		put_f32(f27)
		put_f32(f28)
		put_f32(f29)
		put_f32(f30)
		put_f32(f31)

	.text
	.globl get_f64_reg
	get_f64_reg:
		get_f64(f0)
		get_f64(f1)
		get_f64(f2)
		get_f64(f3)
		get_f64(f4)
		get_f64(f5)
		get_f64(f6)
		get_f64(f7)
		get_f64(f8)
		get_f64(f9)
		get_f64(f10)
		get_f64(f11)
		get_f64(f12)
		get_f64(f13)
		get_f64(f14)
		get_f64(f15)
		get_f64(f16)
		get_f64(f17)
		get_f64(f18)
		get_f64(f19)
		get_f64(f20)
		get_f64(f21)
		get_f64(f22)
		get_f64(f23)
		get_f64(f24)
		get_f64(f25)
		get_f64(f26)
		get_f64(f27)
		get_f64(f28)
		get_f64(f29)
		get_f64(f30)
		get_f64(f31)

	.text
	.globl put_f64_reg
	put_f64_reg:
		put_f64(f0)
		put_f64(f1)
		put_f64(f2)
		put_f64(f3)
		put_f64(f4)
		put_f64(f5)
		put_f64(f6)
		put_f64(f7)
		put_f64(f8)
		put_f64(f9)
		put_f64(f10)
		put_f64(f11)
		put_f64(f12)
		put_f64(f13)
		put_f64(f14)
		put_f64(f15)
		put_f64(f16)
		put_f64(f17)
		put_f64(f18)
		put_f64(f19)
		put_f64(f20)
		put_f64(f21)
		put_f64(f22)
		put_f64(f23)
		put_f64(f24)
		put_f64(f25)
		put_f64(f26)
		put_f64(f27)
		put_f64(f28)
		put_f64(f29)
		put_f64(f30)
		put_f64(f31)

#endif