一 c语言端
#include <stdint.h>
#include "../lib/internals.h"
// #include <svdpi.h>
// #include<veriuser.h>
#include <malloc.h>
// typedef struct { uint32_t v; svBitVecVal* o_excstatus} *fpadd_t_p;
typedef struct { uint32_t v; int o_excstatus;} *fpadd_t_p;
void fpadd_wrapper (
fpadd_t_p fpadd_arg,uint_fast32_t uiA, uint_fast32_t uiB, int valid) {
// if (!valid) {
// fpadd_arg->v = 0;
// fpadd_arg->o_excstatus = 1;
// }
int op = 0;
// fpadd_arg->v = (int)softfloat_mulAddF32(uiA, 0x3f800000, uiB, op).v;
fpadd_arg->v = softfloat_mulAddF32(uiA, 0x3f800000, uiB, op).v;
fpadd_arg->o_excstatus = 2;
}
说明:
(1)为了增强程序的健壮性,最好将函数返回值设置为void最终的返回值通过结构指针返回。
(2)具体的sv和c的数据对应,只要是字节长度,和范围与sv中对应即可,并且由于会将c文件编译为so文件,而不是采用DPI-C的方式,因此参数可以采用type