Snitch Runtime
Loading...
Searching...
No Matches
copift.h
1// Copyright 2023 ETH Zurich and University of Bologna.
2// Licensed under the Apache License, Version 2.0, see LICENSE for details.
3// SPDX-License-Identifier: Apache-2.0
4//
5// Author: Luca Colagrande <colluca@iis.ee.ethz.ch>
6
7#define FCMP_FUNCT5 0b10100
8#define FCVT_D_INT_FUNCT5 0b11010
9
10#define OP_FP_FMT_D 0b01
11
12#define FLT_FUNCT3 0b001
13
14#define FCVT_D_WU_RS2 0b00001
15
16#define FLT_D_SSR(rd, rs1, rs2) \
17 R_TYPE_ENCODE((FCMP_FUNCT5 << 2 | OP_FP_FMT_D), rs2, rs1, FLT_FUNCT3, rd, \
18 OP_CUSTOM1)
19
20#define FCVT_D_WU_SSR(rd, rs1) \
21 R_TYPE_ENCODE((FCVT_D_INT_FUNCT5 << 2 | OP_FP_FMT_D), FCVT_D_WU_RS2, rs1, \
22 0b000, rd, OP_CUSTOM1)
23
29inline void snrt_ssr_flt(double lval, double rval) {
30 register double reg_lval asm("fa0") = lval; // 10
31 register double reg_rval asm("fa1") = rval; // 11
32
33 // flt.d.copift ft2, lval, rval
34 asm volatile(".word %[insn]\n"
35 :
36 : [ insn ] "i"(FLT_D_SSR(2, 10, 11)), "f"(lval), "f"(rval));
37}
38
43inline double snrt_ssr_fcvt() {
44 register double reg_result asm("fa0"); // 10
45
46 // fcvt.d.wu fa0, ft0
47 asm volatile(".word %[insn]\n"
48 : "=f"(reg_result)
49 : [ insn ] "i"(FCVT_D_WU_SSR(10, 0)));
50
51 return reg_result;
52}